01 / 09 全部机制

回合

一个挖矿回合如何运作,从选择方块到瓜分奖池。

入门

可以把一个回合想象成在一块有 30 个方格的棋盘上玩一局快速的猜方格游戏。

  1. 新回合开始,一个短计时器随之启动。示例图中计时大约为 30 秒。
  2. 你从 30 个方格里挑选 1 到 30 个你认为可能中奖的方格,并在所选方格上投入一些 SOL。
  3. 你的选择会被封进一个上锁的盒子里。任何人,包括运营方在内,都无法偷看任何人投在了哪里。
  4. 计时结束时,会选出一个方格作为中奖方格。
  5. 如果你选的某个方格正好中奖,你就赢了。所有投在落败方格上的人,会失去他们投入的 SOL。
  6. 这些落败的 SOL 汇集成一个奖池,由所有赢家共同瓜分。
  7. 除此之外,赢家还能分到该回合新铸造出来的 ZINC 代币。

所以你实际上只是在猜哪个方格会被选出,并把 SOL 投在你给出的这个答案上。

进阶

下面看看一个回合在数字层面究竟是怎样运作的。

  1. 回合开放一段固定的存入时间窗口(示例约为 30 秒)。
  2. 你把 SOL“部署”到一个覆盖棋盘上 1 到 30 个方格的隐藏图案上。每一回合投入的金额都由你自己决定。
  3. 系统会先扣掉一笔小额的部署手续费,因此你的净投入会略少于你发送的金额。
  4. 你的方格图案在上链之前就已被加密,所以它会永久保持私密,而不仅仅是到回合结束为止。
  5. 时间窗口关闭后,会揭示一个随机数,并从 30 个方格中选出一个中奖方格。
  6. 所有落败方格的净 SOL 构成奖池。
  7. 这个奖池按各赢家在中奖方格上的投入比例分配。
  8. 赢家还会获得新铸造的 ZINC,其数量取决于整个回合部署了多少 SOL。

高级

在链上,回合由 deploy_round 指令和一个顺序排列的 Round 账户驱动。

  1. 你调用 deploy_round,传入 totalAmount(毛额 lamports,每回合由调用方自选)以及一份加密的方格掩码:maskEncryptionKey(X25519)、maskNoncemaskCiphertext,这是一段 64 字节的密文,编码了你对 30 个方格的布置。掩码明文永不公开,因此布置被永久隐藏。
  2. 系统扣除部署手续费(deploy_total_fee_bps);你的 Miner.total_amount 记录的是净投入。
  3. 存入在 close_after_slot 时关闭。只有在该 slot 之后随机数才被固定,因此在回合开放期间没有人能针对熵做出反应。
  4. 结算时揭示 round.rand,并由 winning_square = rand % 30 选出中奖方格(显示的方格序号 = square + 1)。
  5. 净奖池(round.total_deployed)按各赢家在中奖方格上的净投入比例支付,分母为 total_on_winning_tile
  6. 赢家还会按比例分得由发行曲线新铸造的 ZINC。

由于掩码被加密、rand 只在 close_after_slot 之后才采样,矿工和运营方都无法操纵结果。每一个数值都可以在链上公开验证。