概率与中奖计划
概率并不是“写死”的一个数:合约会根据游戏量来调整。玩家少的时候,奖池较小,中奖频繁但金额不大。项目变大后,奖池较大,但出现得更少。
中奖计划规则
1. 每周游戏量
合约每周记录一次这一周的旋转次数,但不低于 500(起步阶段和冷清的周)。我们把它记作 N。其余一切都取决于它。
2. 头奖的频率随游戏量变化
每次旋转的头奖概率为 1 / (0.8 × N)。也就是说,如果一周内的旋转次数与上周相同(且不低于 500),那么无论游戏量多大,头奖大约每周出现一次。游戏量较小时出现得更少:每周 100 次旋转、N = 500 时,至多每 4 周出现一次。变化的是金额:奖池从每次旋转中累积 30%,所以平均为 N × 0.3 枚代币。
3. 迷你头奖的频率高 10 倍
迷你头奖出现的频率是头奖的 10 倍,所以奖池来不及累积太多,发放的金额也更小。起步阶段这意味着:大约每 50–60 次旋转出现一次小额发放。
4. 奖池门槛
只有当奖池累积到平均水平的 25% 时,才会开启这个奖池的中奖概率。所以刚发放完之后,不可能赢到小额:头奖要等奖池重新增长。
5. 大额奖金
金色转盘的奖金概率为每次旋转 0.08%,与游戏量无关。没有小额奖金:100, 250, 500, 1,000, 2,500, 10,000。
6. “再来一次”
每次旋转 11.6%,始终如此。这是由奖金池承担的免费旋转,不会改变你的投注。
不同游戏量下会怎样
主转盘
金色 2.83%,“再来一次” 11.6%,空 85.6%。金色之内:头奖 8.83%,迷你头奖 88.3%,奖金 2.83%。
金色转盘
为了便于看清,极窄的扇区被略微加宽,其余的相应缩小。出现得越少,扇区越窄。
这一块里的数字,用与合约相同的公式(整数)计算,对应“奖池处于平均水平”的情形。这是计算值:实际每周会有波动。
中奖计划模拟
在电脑上运行合约代码:一名玩家完成一周内的所有旋转,随机数由伪随机数生成器提供。第一周和第一个头奖(其中包含初始的 10 000)不计入测量。
| 每周旋转次数 | 周数 | 头奖次数 | 平均头奖 | 迷你 | 平均迷你头奖 | 金色出现间隔 | 含金色的 10 次一组 |
|---|---|---|---|---|---|---|---|
| 500 | 40 | 39 | 198 | 328 | 7.9 | 52 | 21.1% |
| 5,000 | 12 | 10 | 1,906 | 101 | 77.2 | 375 | 3% |
| 50,000 | 3 | 5 | 8,361 | 23 | 797 | 920 | 1.2% |
- 每周 500 次旋转时,金色大约每 52 次旋转 出现一次,每 10 次旋转为一组,大约每五组中有一组至少出现一次。发放金额不大:迷你头奖平均 8,头奖约 198 枚代币。
- 游戏量增大后,金色更少见,但发放金额更大(表中每周 50 000 次时:头奖约 8,361)。
- 长期模拟中玩家的平均返还:含超级头奖时为 81.9%(不含时为 74.2%)。其余部分被销毁或归管理员(含广告);头奖的初始注入已计入对玩家的支付。
模拟通过命令 cargo test -p fairdrum --test engine_tests -- --nocapture 运行,并属于仓库检查的一部分。合约有史以来的第一笔发放包含 10 000 枚代币的初始注入,所以明显大于普通发放。
金色转盘的奖金
| 奖金,FAIRDRUM | 占奖金的比例 | 每次旋转的概率 |
|---|---|---|
| 100 | 61% | 2,049 分之 1 |
| 250 | 27% | 4,630 分之 1 |
| 500 | 7.5% | 16,667 分之 1 |
| 1,000 | 3.5% | 35,714 分之 1 |
| 2,500 | 0.8% | 156,250 分之 1 |
| 10,000 | 0.2% | 625,000 分之 1 |
| 奖金总计 | 100% | 1,250 分之 1 · 平均奖金 241 |
如果奖金池不足以支付奖金,则按池中现有的数额发放。奖金池从每次旋转中补充 35%。
合约公式
所有概率都是 232 的整数分数,不使用小数(文件 math.rs):
- N = max(上周的旋转次数, 500)。这里的一周是从合约启动时刻起算的七天,不一定与免费旋转每周开始的周四一致。
- 头奖概率 = 1 / (N × 0.8),若奖池 ≥ N × 0.3 × 0.25,否则为 0
- 迷你头奖概率 = 10 × 头奖概率,若迷你头奖奖池 ≥ (N / 10) × 0.13 × 0.25,否则为 0
- 奖金概率 = 0.08%;“再来一次”概率 = 11.6%
- 如果出现金色,它会按这些概率的比例分为头奖、迷你头奖和奖金
网站用同样的代码计算这些数字,并通过来自 Rust 的样例测试与合约核对。