Block-Sena 技术白皮书
安全透明

可审计,任何人都可以验证on-chain抽奖

在 Block-Sena 中,使用两相 commit-reveal 流,结合 一个 未来区块链prevrandao。这使得结果具有确定性 执行后,可以在区块链上进行审核,并且可以防止手动抓取抽奖号码。

6日30分 基础游戏有 6 个独特的选号和 6 个独特的号码抽奖
6至10 具有组合中奖名额的多选彩票(4/5/6 中奖)
多令牌 具有独立结算和可审计的每代币支付carry-over

概述

Block-Sena 是一种 on-chain 彩票,包括购票、一轮锁定、抽奖额和奖金 该协议使用两相流: blockSenaPauseDraw (锁定循环并记录承诺)和 blockSenaDrawPay (揭晓、抽奖和支付)。

目标

确保可审核、可重复的流程以及每轮透明的支付规则。

可审计性

任何人都可以验证输入(提交、盐、目标块)、种子计算、抽奖号码和结算事件。

提交-揭示(2个阶段)

第一阶段:暂停+提交

功能 blockSenaPauseDraw(usdValuePoolSnapshot, commitHash) 锁定轮圈 对于新购买,设定未来目标块,并仅存储秘密盐 散列.

第二阶段:揭晓+抽奖+支付

功能 blockSenaDrawPay(盐) 验证了 keccak256(盐) == commitHash,使用目标块 区块链, 生成6个唯一号码并执行支付。

技术区块宽度

区块链 只能读取约256个块。如果过渡,则该轮需要 此重置是一种罕见的故障保护,具有 on-chain 超时,并且每次使用都保持公共 on-chain。

盐承诺

commitHash = keccak256(abi.encodePacked(salt))
在第1阶段中不会公开盐值。只有存储值是公开的。在第2阶段,显示的盐必须与提交完全匹配。

目标块

目标块 = 块.数量 + 5
抽签使用未来区块的哈希值。在提交时,这个块不太存在,所以没有人提前知道这个输入。

相似流程(21:00 UTC -> +5 个区块 -> DrawPay)

Block-Sena 操作流程明确区分 票务关闭6个数字的生成。 风险这种去除消除了买票的 了解结果后或尝试调整彩票以匹配中奖号码。

1) 21:00 UTC(操作窗口)-> blockSenaPauseDraw

功能 blockSenaPauseDraw(usdValuePoolSnapshot, commitHash) 锁定轮圈, 阻止新的购买,记录 提交哈希值,定义 目标块 = 块.数量 + 5,并以美元存储池快照。

2)在门票被冻结之前随机存在

PauseDraw,没有新票可以进入该轮。 那一刻, blockhash(targetBlock) 仍然不存在, 所以最后的6个数字还无法预测或计算。

3) +5 块(目标块之后)-> blockSenaDrawPay

功能 blockSenaDrawPay(盐) 根据提交的验证盐, 读取目标块 区块链,生成6个唯一的数字,并执行 每代币的支出。如果在目标块调用之前,事务将恢复 on-chain。

4)现场公开阅读

任何人都可以在资源管理器中验证: blockSenaPauseDraw 德克萨斯州, 目标块,这个 blockSenaDrawPay TX,显着使用盐, 抽奖号码和结算/支付事件。

这种设计在实践中会阻止什么

这是不可能的 看到该轮的6个数字后购买彩票, 因为回合已经锁定 blockSenaPauseDraw 在抽签执行之前。

这是不可能的 知道锁定时的6个数字,因为公式取决于 在未来的区块上(目标块)此时还不存在。

这是不可能的 在技​​术时间之前执行抽签,因为 blockSenaDrawPay 要求 on-chain 当前块已经超过 目标块.

关于ResetDraw(罕见场景)

blockSenaResetDraw 存在只是为了阻止募集卡住址 如果发生长期基础设施故障(例如:RPC中断、服务维护、 网络/基础设施中断或长期运营问题)以及 DrawPay 无法执行 之前 blockhash(targetBlock) 过渡期。

在正常流程中,预期的行为是执行 DrawPay 几个街区之后 PauseDraw (目标为 +5 重置是一种活性, 不是正常流程的一部分。

数学绘图公式(6个不同的数字)

抽取种子源自未来区块、承诺盐和一轮数据的组合。 合约消耗生成 1 到 30 个之间的数字,并丢弃重复的数字,直到 6 个唯一的数字。

在操作安全方面:因为门票已经被冻结了 PauseDraw 在未来区块存在之前的阶段,抽签无法“提出设计” 接下来插入的彩票,之后任何参与者都不能在同一轮中下注 知道结果。

获取种子

种子 = keccak256(abi.encodePacked(blockhash(targetBlock), salt, block.prevrandao, roundId))
约定使用的实际输入: blockhash(targetBlock), , 块.prevrandao,和 currentRoundId.

每个数字的生成

num = (keccak256(种子, 随机数) mod 30) + 1
如果该号码已在该轮中抽出,则该号码将被丢弃,并且 随机数 是递增的。 重复该过程直到获得 6 个唯一的数字。

此程序可防止最终结果出现重复数字,清晰抽签保持在有效范围内 1..30.

重要(宽度) 最终的结果是确定性的,并且可以使用 on-chain 数据重置。任何可操作的 干预尝试(例如,回合)重置会留下公共且可审计的痕迹on-chain。

多选门票(6至10个号码)和组合损耗

在 Block-Sena 中,票证可以包含 6 至 10 个数字。这张票代表多名 6个数字的等价组合。奖金计算依据 恐惧 (组合),而不仅仅是“人”。

具有 k 个数字的拟意的总组合

连击 (k) = C(k, 6)
示例:如果 k = 10,然后 C(10,6) = 210 等价组合。

更多增益增益 (4/5/6)

考虑购买门票 k 数字和 x 6 个抽奖号码内的匹配。

q6 = C(x, 6)
q5 = C(x, 5) * C(k - x, 1)
q4 = C(x, 4) * C(k - x, 2)
约定将每个钱包的这些损耗相加,并以每个代币的聚合形式支付(更)。

示例(10号彩票,其中6个中奖号码在10内)

q6 = 1, q5 = 24, q4 = 90。 同一张彩票可以同时赢得全部 3 个等级。

多币种支付(按币种结算)

每个池代币(例如,本机、USDC、USDT)都是独立结算的。契约按轮次计算恐怖者和奖金 并象征性地维护准确的历史记录 RoundTokenStats.

等级划分

6 命中层 = 代币池的 80%
5次命中等级=代币池的15%
4次命中等级=代币池的5%

每个人都获得了名额奖金

prizePerWinnerX = 下限(prizeBucketX /quotasX)
除法使用整数算术on-chain。舍入剩余物(最少)在下一轮中保留为carry-over。

如果没有赢家

该层金额不会损失:在下一轮中该代币将变为 carry-over。

如果获奖者有多名

奖金按获奖者每名额分配。同一钱包可能会收到多个损失,这些损失汇总为代币的单次付款。

如何评估脚步(步骤)

  1. 找到 blockSenaPauseDraw tx 并记下 提交哈希值目标块.
  2. 在目标块之后,找到 blockSenaDrawPay tx 并阅读提交的内容 .
  3. 重新计算 keccak256(盐) 并确认其匹配 提交哈希值.
  4. blockhash(targetBlock) 在探索者和 prevrandao 来自相似的 tx 块。
  5. 重置种子和 6 数生成例程(丢弃重复项)并与 现有已执行.
  6. 如果发生罕见的操作故障,请检查 DrawReset (roundId、targetBlock、reset block)以验证超时并重置可调整性。
  7. 查看 RoundTokenSettled 矿池、每层支付和每代币 carry-over 的事件。
  8. 确认本机/ERC20转账以验证对获奖者的付款。

保证、失误和运营限制

Block-Sena 的设计使问卷结果为 可审核、可重复且透明。 提交-显示与未来块相结合显着降低了手动结果推测的可能性。

用技术术语来说,该模型得出的结果 锁定时间不可预测, 因为循环在 blockhash(targetBlock) 使用于种子中存在。 这使得公式保持公开和可审计,允许以后根据结果进行投注。

保证什么on-chain

抽奖规则、损耗计算、等级支付(80/15/5)、分配每个币种的历史记录、事件和每个步骤的可追溯性。

紧急操作

对于罕见的技术场景(例如,由于以下原因导致区块暂停过渡)有抽签重置功能 长时间的基础设施/网络故障)。它只能在固定且 on-chain 超时后执行。 危险使用都是公开的,记录在 on-chain 中,并且可以在资源管理器中进行审核。

重置不会移动资金、删除项目或更改池。它只解锁循环以允许 一次新的抽奖尝试 轮同 在极少数的故障情况下。

奖金保留在合同中,草案抽奖并自动支付给获奖者。如果没有获胜家 在某一层中,该值在下一个激动中仍记作 carry-over 。楼主没有这个功能 已提取计入奖励池的资金。

rescueAll 功能的存在只是为了拯救 未入盈账余 (例如,错误的直接路线),计算 实际余额 - 入账池。它达到了没有 奖金已计入总池。

其中:Block-Sena 不要求盲目信任。它提供了可以观察到的流动性, 任何人都可以随时以数学方式复制并验证on-chain。