多重彩串关与位图互斥
除了单期投注外,DeSix 还支持高阶的多重彩串关交易 (Parlay)。 串关允许交易者将不同期数(例如第 10 期、第 11 期、第 12 期)的选择连结在一起。只有当所有选择的期数都预测成功时,该串关单才算中奖。中奖时,各期的赔率会级联相乘,为玩家提供“以小博大”的数十倍高精度赔率乘数。
然而,串关机制在链上实现时面临着复杂的数学冲突和安全风控隐患。DeSix 通过位图互斥算法与独立的风控仓位隔离实现了这一机制。
1. 49位位图互斥校验 (Bitmap Mutual Exclusion)
在一个澳门六合彩开奖期内,最终有且仅能有一个数字作为中奖号。如果玩家在同一个串关组合中,对同一期既押注了 8 又押注了 12,在数学上是绝对矛盾的(因为最终结果不可能既是 8 又是 12)。这种投注不仅注定失败,还会空耗用户的本金。
为了在合约底层彻底拦截这种自我矛盾的无效串关,DeSix 设计了 49位 uint64 位图互斥校验:
- 号码位图化:在
DeSixTypes.sol中,用户的选号被重构为一个极轻量的位图(numberBitmap),其中第 $k$ 位的1或0代表是否选择了该号码。 - 高效位运算:在
DeSixParlay.sol的下注前置校验中,系统通过 EVM Yul 汇编的内联 SWAR 位操作,对同一串关单中属于同一期数(issueId)的选号位图进行逻辑与(AND)运算。 - 互斥阻断:如果位图重叠度或组合校验发现数学上的绝对互斥,合约会抛出
NumbersConflict并强行回滚交易,保护用户不犯常识性投注错误,同时防御了利用矛盾号码操纵池子最大敞口的潜在攻击。
多重彩 (Parlay) 级联赔率与 49位 Bitmap 互斥校验
串关的中奖赔率是级联相乘的,这会导致极其恐怖的瞬时最大赔付敞口。为此,DeSix 采用了独立的资金风控架构:
- 级联高精赔率引擎:串关的理论赔率等于各子单赔率的乘积,但为了避免相乘时的精度截断误差,系统将赔率精度(
ODDS_PRECISION)提升了百倍至10,000进行高精算术运算。 - 3-Bucket 独立储备:多重彩合约拥有独立的资金储备桶(Parlay lpEquity, Parlay payoutReserve, Parlay refundReserve),不与主 Core 的 LP 资金池共用,防止高倍串关黑天鹅事件将主流动性池抽干。
3. 多重彩安全漏洞修复与加固
在最新的安全审计与 Sprint 27 修复中,我们对 DeSixParlay.sol 进行了两项核心加固:
修复一:P1-2 settleParlayBatch 时间权限旁路
- 原先漏洞:任何人可以在期数截止 2 小时后调用结算,但此时主 Core 上的开奖结果可能因为遭遇预言机争议而尚未在
DrawManager中固化。如果提前按不确定的状态结算了串关,会造成严重错判。 - 修复加固:重构了结算逻辑。在判定串关结算前,多重彩合约会额外向
DrawManager发起调用,强制校验目标期数(issueId)的预言机生命周期状态是否确为Finalized(最终固化),彻底堵死了旁路漏洞。
修复二:P2-3 activeIssues 数组增长无清理死锁
- 原先漏洞:串关合约内部通过一个
activeIssues数组记录当前运行中的期数。但在期数被主 Core 作废(Void)时,该期数会永久滞留在此数组中,导致maxActiveIssueExposure()持续计入已废弃期数的虚拟敞口,从而使 LP 提款(withdrawLP)被永久死锁阻塞。 - 修复加固:引入了
pruneStaleActiveIssues(过期垃圾期数静默自愈) 机制。系统在每次结算或提款时自动扫描该数组,物理清除已作废或超过 claim 期的残留期数,为 LP 顺利提取资金扫清了障碍。