Solidity 赌场游戏里的随机数到底是怎么运作的

Solidity 赌场游戏里的随机数到底是怎么运作的

e
editor
链上游戏没有天然的随机源,合约必须从外部引入随机性。这篇文章拆解三种随机数方案、庄家优势的算术位置,以及为什么短局结果与长期回报完全是两回事。

Solidity 赌场游戏是一组存放在区块链上的指令。链本身是确定性的:每个运行同一笔交易的节点都必须得到同一个结果。这个设计立刻制造出一种紧张关系。一次老虎机旋转或一张牌的发牌需要不可预测的输入,但确定性网络没有内建的意外来源。游戏合约因此必须从别处引入随机性,而它从哪里引入,决定了玩家实际在信任什么。

常见的做法有三种。第一种是承诺-揭示模式,玩家和运营方各自提交一个哈希值,之后双方揭示原始值,游戏把两者组合起来产生结果。第二种是外部随机数预言机或可验证随机函数服务,在链下签署一个随机数并交付给合约。第三种主要用于低注额或休闲游戏,从区块数据里推导伪随机结果,比如区块哈希或时间戳。每种做法有不同的失效方式,理解失效方式比知道合约导入了哪个库更有用。

方案随机性来自哪里玩家必须信任什么主要弱点
承诺-揭示玩家与运营方秘密值的组合双方没有串通,也没有扣下揭示运营方看到玩家数值后可以中止流程
外部预言机或 VRF链下服务签署的随机数预言机服务及其密钥管理预言机被攻破或回调延迟
区块数据推导区块哈希、时间戳或类似链上数据没有矿工或验证者操纵区块区块生产者可预测或可影响

这些方法本身没有一种能让游戏变得公平。它们让结果在事后可验证,或者能抵抗某一种特定类型的篡改,或者只是方便而已。公平与随机是两个不同的问题,公平要靠检查合约在下注前公布了什么、在结果出来后揭示了什么来回答。

智能合约能证明什么

Solidity 游戏可以公开把随机输入变成结果的逻辑。如果合约经过验证且源码可读,玩家就能检查赔付表、下注限制,以及把随机数映射到游戏结果的函数。这是一项真实的属性,与传统在线赌场提供的东西不同。在传统游戏里,玩家信任运营方的服务器和测试实验室的报告。在 Solidity 游戏里,玩家可以直接读代码。

代码无法证明的是偿付能力,代码无法移除的是庄家优势。一个合约可以完全随机、完全透明,同时仍然返还少于收取的金额,因为优势写进了赔付算术里。随机输入决定哪个结果出现,赔付表决定这个结果值多少。这是两个独立的层面,读合约的玩家应该像看第一层一样仔细看第二层。

可证明公平方案是其中一个子集。下注前公布、结束后揭示的哈希服务器种子,让玩家能够验证结果没有在自己的下注之后被改动。这验证的是单局完整性。它不验证游戏回报率是否有利、运营方是否付得起大额赢款、合约是否没有其他提款限制。随机抽取的完整性与赔付表的慷慨程度是相互独立的属性。

庄家优势在 Solidity 游戏里藏在哪里

每一款负期望游戏,无论链上还是链下,在算术层面都一样运作。合约接受下注,结算一个随机结果,按照一张期望赔付低于下注金额的表来支付。流入与流回之间的差额,在极大量局数上平均下来,就是庄家优势。玩家回报率,也就是 RTP,是从玩家一侧陈述的同一关系。同样的下注、同样的规则集,庄家优势与 RTP 加起来等于 100%。

假设一款游戏赢时支付 2 倍,随机输入以概率 p 给出赢的结果。每单位下注的期望回报是 2p。如果 p 小于 0.5,期望回报低于 1,差额就是优势。随机性的任何性质都改变不了这个算术。一个完全不可预测的随机源,配上返还少于下注的赔付表,仍然是负期望游戏。一个可预测或可操纵的随机源,配上同一张表,是一个负期望游戏,上面还叠加了额外风险。

这个区别在读 Solidity 代码时很重要。发现随机性弱点的玩家,并没有找到打败游戏的方法;他们找到的是提前知道结果的方法,这是另一回事,而且通常是被禁止的。发现赔付表返还少于下注的玩家,找到的是这个游戏普通的商业模式。第二个发现不是漏洞。

为什么短局看起来和长期平均值完全不像

RTP 和庄家优势是关于极大量局数的陈述。它们对一百次旋转或一千手牌里会发生什么只字不提。在短局里,实际回报可能远高于或远低于理论数字,因为游戏的方差在小样本中占据主导。高波动游戏很少赔付但赔付金额大,所以玩家可能长时间领先,然后在一个序列里全部还回去,反过来也一样。低波动游戏赔付频繁但金额小,所以余额更平稳地往下走。波动性不改变 RTP;它改变的是通往长期平均值的路径长什么样。

假设一款游戏的理论回报是 97%,玩家在一个时段里下注 1000 个单位。期望损失是 30 个单位。实际结果很可能是赢几百个单位或输几百个单位,因为短序列的标准差相对于期望损失来说很大。赢了的玩家并没有打败优势。他们经历了一次来自同一个分布的有利抽取,而这个分布的均值仍然是负的。输得很惨的玩家也没有遇到被操纵的游戏。他们经历的是同一个分布的另一条尾巴。

每小时决策次数会放大这一点。结算很快的游戏在同样时间段内让更多下注暴露在优势之下。总期望损失是优势、平均下注额和局数的乘积。加快游戏速度的玩家没有改变优势;他们在增加优势被施加的次数。那是关于时段长度和节奏的选择,不是改变结果的策略。

为什么加注系统只是重新分配结果

加注系统在赢或输之后改变下注金额。输后加倍是最著名的例子。加注系统的算术很直接:它不改变任何单局结果的概率,也不改变每单位下注的期望回报。它改变的是分布的形状。大多数时段以小赢结束,少数时段以非常大的亏损结束。组合策略的期望值与平注下注的期望值相同,再减去同样的庄家优势施加在更大的总下注金额上。

加注系统之所以感觉有效,是因为它们把频繁的小赢转换成罕见的大输。每次输后都加倍的玩家通常会追回之前的损失并以小幅领先结束,直到连输序列长到所需下注超过台面限制或玩家余额。到那一刻,累积损失已经很大。系统没有移除优势;它把优势集中到了一个尾部事件里。玩家用稳定、可预测的亏损率换来了一个均值同样为负、但形态像彩票的分布。

在 Solidity 游戏里,同样的逻辑成立。合约强制执行下注限制和赔付表。加注系统只是一串金额按规则变化的下注。合约不知道这个规则,也不在乎。随机源独立地产生结果,优势施加在每一注上。下注金额的任何排序都不会改变序列的期望值。

玩家能控制什么

在 Solidity 赌场游戏里,玩家控制范围内可变的东西,与任何负期望游戏里存在的选择集合相同。玩家选择玩哪款游戏,不同游戏带着不同的优势。玩家选择在一款游戏里下哪个注,同一张台上不同的注带着实质不同的优势。玩家选择游戏节奏,这决定每小时优势被施加多少次。玩家选择时段长度和停止规则。玩家选择相对于余额的下注金额,这决定余额能在连输序列里撑多久。

这些选择没有一个能把负期望游戏变成正期望游戏。它们改变的是亏损速度、时段方差,以及在某个时刻带着某个余额离开的概率。想理解 Solidity 游戏的玩家应该读赔付表,找出优势最低的注,把随机性当作一个已经解决的问题:它产生不可预测的结果,赔付表决定这个结果值多少。有意思的问题从来不是游戏是否随机,而是随机数落定时游戏付多少。

常见问题

Solidity 游戏可以既可证明公平又有庄家优势吗?
可以。可证明公平验证的是结果在下注之后没有被改动。它对赔付表只字不提。一款游戏可以在密码学上可验证,同时长期仍然返还少于收取的金额,因为优势写进了赔付算术里,而不是随机性里。

读智能合约能告诉我游戏的 RTP 吗?
如果合约经过验证且赔付表可读,可以。RTP 是赔付表及其赋予每个结果的概率的属性。能读合约的玩家可以计算某一下注的期望回报。读不了代码的玩家依赖的是运营方公布的数字,应当把那个数字当作一种主张,而不是经过验证的事实。

为什么有些 Solidity 游戏用外部预言机来获取随机性?
因为区块链本身没有原生的不可预测数据源。外部预言机或可验证随机函数服务在链下签署一个随机数并交付给合约。这解决了可预测性问题,但引入了一个信任假设:玩家必须信任预言机服务没有被攻破,且其密钥管理是健全的。权衡在于链上可验证性与链下信任之间。

理性游戏

博彩应被视为付费娱乐,而非赚钱或挽回损失的方式。美国读者可拨打 1-800-MY-RESET (1-800-697-3738)。

各地法定年龄为 18 岁或 21 岁,请遵守适用于你所在地的规定。

本文是关于这些机制如何运作的一般性说明,不构成法律建议,也不是对任何运营方的推荐。

本文最初由 Bit.Fan 发布。 欲了解更多博彩资讯,请访问 www.bit.fan.
800

免责声明:

本平台展示的市场信息、项目资料与第三方内容仅用于行业信息分享,不构成任何形式的投资建议或收益承诺。

加密资产交易具有较高风险,用户应充分评估自身风险承受能力并独立作出决策,相关盈亏及法律责任由用户自行承担。