Skip to main content
每一局 Crash 的崩盘点在下注截止前就已确定,之后无法更改。后端会在开放下注前,先把一个随机秘密值的 SHA-256 哈希发布到链上;本局开始时,程序再混入一个 Solana slot hash;结算时秘密值被揭示,任何人都可以自行重算崩盘点并加以核验。 本页给出每一局 Crash 背后的确切机制:承诺了什么、结果何时被固定、精确公式,以及这套机制诚实的边界所在。如果你还没读过公平可验证总览,建议先读它 —— 那里用通俗语言解释了承诺-揭示。

一局 Crash 在链上经历了什么?

每一局 Crash 都由三笔链上交易构成,顺序如下:
  1. 承诺 —— 在下注开放之前,后端生成一个随机的 32 字节秘密值,并把它的 SHA-256 哈希发布到链上(start_new_round 指令)。这就是承诺:从这一刻起,只有那个完全一致的秘密值才可能结算本局。承诺公开于该交易的 CrashRoundPrepared 事件中。
  2. 下注 —— 玩家开始下注。秘密值保持隐藏;承诺保证它无法被调包。
  3. 开局/捕获熵 —— 本局开始时(start_game 指令),程序从 Solana 的 SlotHashes sysvar 中读取最近的槽位哈希并存入本局。应用中把这个值称作本局的_区块哈希_。此时崩盘点已完全确定 —— 它是所存槽位哈希与所承诺秘密值的纯函数 —— 但不知道秘密值的人还无法计算出它。该值公开于 CrashGameStarted 事件中。
  4. 本局进行 —— 倍数攀升,玩家陆续兑现。
  5. 揭示 —— 后端提交秘密值(crash 指令)。程序在链上校验 sha256(secret) 是否等于承诺 —— 不吻合则该交易失败 —— 随后亲自计算崩盘点并完成本局。CrashRoundFinalized 事件会公布秘密值、槽位哈希与最终崩盘点。

崩盘点的精确公式是什么?

崩盘点正是按下面的方式推导的(这就是链上程序执行的算术 —— 整数运算,没有取整意外):
重新计算时需要留意的细节:
  • 拼接顺序是先 blockhash,后 secret。
  • X 取自 SHA-256 输出的前 4 字节,按大端读取。
  • 除法均为向下取整(整数)除法。
  • max(10000, …) 这个下限意味着倍数永远不低于 1.00x,而对 X 的封顶则避免了分母小到离谱。

示例演算

取 X = 0xABCD1234(2,882,343,476),当前优势为 1.5%(edge_bps = 150):

分布是什么样的

该公式把均匀分布的 X 映射为经典的 crash 曲线。一局至少达到倍数 m 的概率约为:
在当前 1.5% 的优势下:约 49.25% 的局能到达 2.00x,约 9.85% 能到达 10x —— 而约 1.5% 的局会在 1.00x 处瞬间崩盘(庄家优势正体现于此)。适用于每一局的优势值,是揭示时链上所配置的取值;当前取值列于费用与限制。

什么被保证了,什么没有

由程序强制执行:
  • 承诺上链之后,运营方无法更改本局的秘密值:任何哈希与承诺不符的秘密值都会让揭示交易失败。
  • 本局一旦开始(槽位哈希已存储),崩盘点即已固定。兑现得早、晚或人数多寡都不会改变任何事 —— 结果在倍数开始攀升之前就已确定。
  • 崩盘点由程序计算,而非由后端上报。错误的数值无法被写上链。
  • 验证所需的一切 —— 承诺、槽位哈希、秘密值、最终崩盘点 —— 都永久公布在链上事件中。
诚实的注意事项(这是承诺-揭示,不是 VRF):
  • 开局时机。 运营方在本局开始前就知道秘密值,而其后端决定何时提交开局交易。由于近期的槽位哈希是公开的,它原则上可以为候选槽位预先计算出可能的倍数,并通过控制开局时机来影响捕获到哪个槽位哈希。这套机制并不能阻止此事;但它让此事可被观察 —— 开局时机是公开的,任何系统性偏差都会体现在已公布崩盘点的统计中,而任何人都可以批量重新计算这些数据。
  • 取消。 本局开始后,运营方会比玩家更早知道结果,因此它可以取消一局对己不利的游戏而不予揭示。这里有两条硬性限制:取消会全额退还每一笔本金(程序没有任何没收路径),而且每一次取消都会发出公开事件 —— 取消频率就是链上的破绽。取消机制的存在是为了应对秘密值丢失(例如后端在承诺与揭示之间崩溃)的恢复路径,预期上几乎不会被使用。

如何验证一局 Crash?

应用中每一局结束后的详情都会显示已揭示的秘密值与区块哈希,并链接到全部三笔交易,以及一个替你重新计算倍数的公平性工具。完整的逐步流程 —— 包括一小段供你自行重算崩盘点的脚本 —— 见验证一局游戏。 关于这款游戏本身怎么玩(兑现、下注窗口、限制),见 Crash 游戏指南。