一个轮盘,一次旋转,所有人参与
轮盘没有选择的余地。你在下注窗口中下注,轮盘为整个桌子旋转一次,你的下注金额乘以指针下方格子上的数字——包括乘以零。没有颜色可选,也没有目标可设,这使得整个游戏只有一个问题:有多少个格子支付每个倍数?
引擎验证WheelDerivation在wheel/WheelEngine.kt中:SLOTS = 48;buildWheel()按最稀有优先原则放置中奖格子并均匀分布——1个×8格子、2个×3、7个×2、13个×1.5——并用25个×0填充剩余格子。格子为floor(u × 48),其中u是HMAC-SHA256(key = 该轮的链接,message = 公开盐)的前七个字节除以2⁵⁶。settle()支付stake × multiplier,向下取整到该币种的整数单位。一轮包括10秒的下注窗口(wheel.betting-seconds)、700毫秒的锁定和9秒的旋转(wheel.spin-seconds)。客户端显示与服务器在快照中发送的相同的48格布局。
格子在环周围的排列只是装饰性的。引擎会分散稀有赢利,使指针在绕行时会经过×2或×3,但旋转最终落在从全部48个格子中均匀选择的格子上,所以只有每个倍数的数量重要。×8位于第24个格子,与第一个格子相对;它可以位于任何地方,价格都不会改变。
每个格子的价格
48个等概率格子中,任何倍数的概率是其格子数除以48,轮盘的回报是所有倍数之和除以48。该和为25 × 0 + 13 × 1.5 + 7 × 2 + 2 × 3 + 1 × 8 = 47.5,47.5 ÷ 48就是整个价格。
| 支付 | 格子 | 概率 | 比例 | 回报率占比 |
|---|---|---|---|---|
| ×0 | 25 | 52.08% | 1.92次旋转 | 0.0点数 |
| ×1.5 | 13 | 27.08% | 3.69 | 40.6 points |
| ×2 | 7 | 14.58% | 6.86 | 29.2 points |
| ×3 | 2 | 4.17% | 24 | 12.5 points |
| ×8 | 1 | 2.08% | 48 | 16.7 points |
| Any win | 23 | 47.92% | 2.09 | 总共 98.96 点 |
概率 = 格子 ÷ 48。返回份额 = 格子 × 乘数 ÷ 48,以投注的百分点计;份额总和为 98.96%,庄家优势为 1.04%。单次旋转的波幅为 1.39 倍投注额(标准差)。
那个表格的两点值得并排考虑。价格很低:1.04% 与 limbo 和 crash 的 1.00% 在同一区间,远低于轮盘赌的 2.7%,仅为 色轮 6.67% 的六分之一。而转轮的亏损次数多于盈利次数:48 个格子中有 25 个不支付任何奖励,所以超过一半的旋转返回零。便宜和频繁亏损不存在矛盾;转轮便宜是因为当胜利降临时,几乎全额支付。
具有这些格子数量的公平转轮会对每次胜利支付略多——×1.516 而不是 ×1.5、×8.08 而不是 ×8,或用一个额外的支付格子代替零。引擎保持整数乘数并将差额作为优势,平均每次旋转投注额的半个点。
资金的回报来源
表格的最后一列解释了在转轮上进行一个游戏周期的感受。一次旋转平均返回的 98.96 点中,40.6 来自 13 个 ×1.5 的格子,29.2 来自 7 个 ×2 的格子,12.5 来自 2 个 ×3 的格子——16.7 来自 1 个 ×8 的格子。48 个格子中的单个格子承载了六分之一的回报。
移除该格子,转轮返回 82.3%。这是大多数短期游戏周期实际经历的转轮,因为 ×8 在其中不存在:平均每 48 次旋转降落一次,48 次旋转的游戏中有 36% 的概率根本不包含它。在 ×8 之间,玩家处于 17.7% 的劣势;×8 降临时,它支付的回报弥补了空隙期间的损失。在足够多的旋转中,两者平均为 1.04%,但这种平均需要数百轮,而在获得 ×8 之前离开的玩家要支付高昂的代价而得不到回报。
其余的回报更加稳定。×1.5 和 ×2 的格子合计在 48 次中出现 20 次,其 69.8 点以小额、频繁的方式到达。这就是为什么转轮游戏读起来像是缓慢的损失被一次大幅上升打断:频繁的胜利都不超过双倍,零的出现次数超过它们,而唯一可能扭转局面的乘数是轮盘上最稀有的东西。
亏损连续和等待 ×8
每次旋转都是从链中新鲜抽取的,所以连续出现的概率是一个简单的幂次。亏损旋转发生的概率为 25 ÷ 48,连续 k 次亏损的概率为 (25 ÷ 48)ᵏ。
| 事件 | 概率 | 大约 |
|---|---|---|
| 连续 3 个零 | 14.13% | 1 中 7 |
| 连续 5 个零 | 3.83% | 26中1 |
| 连续8个0 | 0.54% | 185中1 |
| 连续10个0 | 0.15% | 681中1 |
| 10次旋转内无×8 | 81.0% | 3.3分钟 |
| 33次旋转内无×8 | 49.9% | 中位数等待 |
| 48次旋转内无×8 | 36.4% | 平均等待 |
| 100次旋转内无×8 | 12.2% | 33分钟 |
| 150次旋转内无×8 | 4.3% | 49 分钟 |
N 次旋转中没有 ×8 = (47 ÷ 48)ᴺ。中位数等待时间为 33 次旋转,即首次有 50% 概率看到 ×8 的旋转次数 N;平均值为 48 次。×3 或更高(3 个老虎机位)的中位数等待时间为 11 次旋转。分钟数按每次旋转 19.7 秒计算。
×8 的中位数等待时间短于平均值,33 次旋转对比 48 次,因为分布是偏斜的:大多数间隔短于 48 次,少数间隔长得多,那些较长的间隔会拉高平均值。每八次开局中有一次会经历 100 次旋转、半小时都没有出现顶部老虎机。这都不是什么规律:一个 200 次旋转没有显示 ×8 的转轮在下一次旋转出现它的概率仍然是 1 ÷ 48。赌徒谬误是相信等待本身会得到补偿的错误观念;这种链条并不会记录这样的账户。
一小时的成本
转轮运行在服务器时钟上:下注 10 秒,短暂锁定,旋转 9 秒,然后下一个窗口打开——每轮约 19.7 秒,接近每小时 183 次旋转。每次旋转固定下注一单位会在桌上投入 183 单位,平均返回 181.1 单位,成本约为每小时 1.9 单位。相同的下注和节奏在轮盘赌双倍赔率上的成本约为 4.9 单位,在彩色转轮上约为 12.2 单位。
小时成本相对于小时波动很小。一次旋转的标准差为 1.39 个下注单位;183 次旋转的标准差约为 19 单位。一小时内的预期损失只占波动的十分之一,这就是为什么在转轮上玩一小时可能以高出 20 单位或低于 20 单位收尾,无论哪种情况,感觉都好像是在等 ×8。
结算时引擎将下注乘以落地乘数并将结果向下取整到硬币的整数单位。只有 ×1.5 能产生分数:奇数个原始单位的下注会因向下取整而损失 0.5 单位。在硬币的最小单位中,这是一个聪或 wei 级单位的舍入,而不是价格。
遊转轮,每次旋转都在公链上
48 个位置,5 个乘数,每 20 秒一次共享旋转——×8 每 48 次出现一次,每轮的链接在落地后公开转轮 →
自己验证一次旋转
就像 crash 和 Double 一样,转轮运行在哈希链而不是每个玩家的种子对上。在第一轮之前服务器发布链的承诺哈希和固定的公开盐;每轮之后它公开该轮的链接。用 SHA-256 哈希一个链接得到前一轮的链接,回溯到承诺,这就是在任何人下注前固定结果顺序的原因。
- 从历史条中其验证条目取出该轮公开的链接和盐。
- 使用链接作为密钥、盐作为消息计算 HMAC-SHA256。取摘要的前 7 个字节作为 56 位整数,除以 2⁵⁶ 得到 u。
- 位置 = floor(u × 48)。从下面的布局中读出乘数;它应该与该轮支付的数字相匹配,该链接的 SHA-256 应该等于前一轮的链接。
48 位置布局,从位置 0 顺时针:0, 1.5, 0, 2, 0, 1.5, 0, 0, 0, 1.5, 2, 0, 3, 1.5, 0, 0, 1.5, 2, 0, 0, 1.5, 0, 0, 0, 8, 2, 1.5, 1.5, 0, 0, 2, 1.5, 0, 0, 0, 1.5, 3, 2, 1.5, 0, 0, 0, 1.5, 0, 2, 0, 1.5, 0。由 buildWheel() 生成并与每个快照一起发送到客户端,因此你验证的布局就是屏幕上的布局。
对于吹毛求疵者:2⁵⁶ 除以 48 余 16,所以位置 0 到 15 各收到比位置 16 到 47 多一个的 2⁵⁶ 可能值。每个位置的过剩为 1.4 × 10⁻¹⁷,它不偏向任何特定的东西——这 16 个位置中有 6 个支付 ×1.5,2 个支付 ×2,1 个支付 ×3,7 个支付 0。哈希承诺证明了什么在链担保的内容(结果提前固定)和已发布的位置计数担保的内容(价格)之间划出了一条线。
常见问题
转轮游戏的赔率是多少?
在此引擎的 48 位转轮上:25 个位置支付 0(52.08%),13 个支付 ×1.5(27.08%),7 个支付 ×2(14.58%),2 个支付 ×3(4.17%),1 个支付 ×8(2.08%)。任何赢奖在 48 次中落地 23 次,占 47.92%。
转轮的庄家优势是多少?
1.04%。乘数在48个格子中的总和为47.5,所以一次旋转平均返还 47.5 ÷ 48 = 98.96% 的赌注。这与limbo和crash属于同一水平,远低于轮盘或转盘的返还率。
×8多久会出现一次?
平均每48次旋转出现一次,中位数为每33次旋转一次。在48次旋转中没有×8的概率是36%,在100次旋转中为12%。×8贡献了轮子总返还的六分之一;没有×8的轮子返还率为82.3%。
如果优势只有1%,为什么轮子超过一半的时间会亏损?
因为胜利基本上全额支付。48个格子中有25个格子支付零,但23个支付格子的乘数总和为47.5。低优势和低胜率是不同的属性:轮子具有低优势和低于二分之一的胜率。
一小时内有多少次轮子旋转?
约183次。一轮包括10秒的投注窗口、0.7秒的锁定和9秒的旋转,总共约19.7秒。每次旋转下注一个单位的平坦赌注平均每小时成本约1.9个单位,波动约19个单位。
我能验证一次轮子旋转吗?
可以。每一轮都会显示其链接;用该链接作为密钥对公共盐进行HMAC-SHA256运算,取前七个字节除以2⁵⁶,乘以48并向下取整,得出格子号。从已发布的48格子布局中读取乘数,并检查该链接的SHA-256是否等于前一轮的链接。
来源和参考
- Betkyo引擎源代码:wheel/WheelEngine.kt中的WheelDerivation(SLOTS = 48;buildWheel()分级 ×8 × 1, ×3 × 2, ×2 × 7, ×1.5 × 13,剩余25个格子 ×0;uniform() = 第一个七字节HMAC-SHA256 ÷ 2⁵⁶ 以链接为密钥、公共盐为参数;slotOf = floor(u × 48));WheelEngine.settle()(赌注×乘数向下取整到整数币单位)和轮次计时器(投注10秒,锁定700毫秒,旋转9秒);客户端wheelGame.tsx(BETTING_WINDOW_MS 10,000;从服务器快照获取布局)
- 为本文编写的精确计算:48格子布局从buildWheel()重现,返还47.5 ÷ 48及其按乘数的分解、每次旋转的标准偏差、(25 ÷ 48)ᵏ 连续亏损、(47 ÷ 48)ᴺ 等待×8的次数、以及2⁵⁶ mod 48 = 16余数
- Betkyo provably-fair验证器(GitHub,MIT):用于重现基于链的轮次的共享HMAC-SHA256辅助工具
本文中的游戏