回合
一个挖矿回合如何运作,从选择方块到瓜分奖池。
入门
可以把一个回合想象成在一块有 30 个方格的棋盘上玩一局快速的猜方格游戏。
- 新回合开始,一个短计时器随之启动。示例图中计时大约为 30 秒。
- 你从 30 个方格里挑选 1 到 30 个你认为可能中奖的方格,并在所选方格上投入一些 SOL。
- 你的选择会被封进一个上锁的盒子里。任何人,包括运营方在内,都无法偷看任何人投在了哪里。
- 计时结束时,会选出一个方格作为中奖方格。
- 如果你选的某个方格正好中奖,你就赢了。所有投在落败方格上的人,会失去他们投入的 SOL。
- 这些落败的 SOL 汇集成一个奖池,由所有赢家共同瓜分。
- 除此之外,赢家还能分到该回合新铸造出来的 ZINC 代币。
所以你实际上只是在猜哪个方格会被选出,并把 SOL 投在你给出的这个答案上。
进阶
下面看看一个回合在数字层面究竟是怎样运作的。
- 回合开放一段固定的存入时间窗口(示例约为 30 秒)。
- 你把 SOL“部署”到一个覆盖棋盘上 1 到 30 个方格的隐藏图案上。每一回合投入的金额都由你自己决定。
- 系统会先扣掉一笔小额的部署手续费,因此你的净投入会略少于你发送的金额。
- 你的方格图案在上链之前就已被加密,所以它会永久保持私密,而不仅仅是到回合结束为止。
- 时间窗口关闭后,会揭示一个随机数,并从 30 个方格中选出一个中奖方格。
- 所有落败方格的净 SOL 构成奖池。
- 这个奖池按各赢家在中奖方格上的投入比例分配。
- 赢家还会获得新铸造的 ZINC,其数量取决于整个回合部署了多少 SOL。
高级
在链上,回合由 deploy_round 指令和一个顺序排列的 Round 账户驱动。
- 你调用
deploy_round,传入totalAmount(毛额 lamports,每回合由调用方自选)以及一份加密的方格掩码:maskEncryptionKey(X25519)、maskNonce和maskCiphertext,这是一段 64 字节的密文,编码了你对 30 个方格的布置。掩码明文永不公开,因此布置被永久隐藏。 - 系统扣除部署手续费(
deploy_total_fee_bps);你的Miner.total_amount记录的是净投入。 - 存入在
close_after_slot时关闭。只有在该 slot 之后随机数才被固定,因此在回合开放期间没有人能针对熵做出反应。 - 结算时揭示
round.rand,并由winning_square = rand % 30选出中奖方格(显示的方格序号 = square + 1)。 - 净奖池(
round.total_deployed)按各赢家在中奖方格上的净投入比例支付,分母为total_on_winning_tile。 - 赢家还会按比例分得由发行曲线新铸造的 ZINC。
由于掩码被加密、rand 只在 close_after_slot 之后才采样,矿工和运营方都无法操纵结果。每一个数值都可以在链上公开验证。