Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

BL-11 follow-up: mainnet-grade randomness (VRF / multi-party commit-reveal) for dispute subgroup seed

未关闭
#178 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
25/100
Issue 类型
功能
描述清晰度
描述清楚
活跃度
活跃
技术栈
solidity

调研方向

Read DINTaskCoordinator, _assignFreshSubgroup, and _shuffleAddressArray(address[], bytes32 seed), then inspect DisputeResolution.t.sol and the review on #151. Compare the VRF and multi-party commit-reveal options, including funding, timeouts, and anti-reroll incentives; coordinate with #156 on aggregation shuffles. Done means the seed resists bias by all named parties, missing randomness has a tested non-free-reroll outcome, existing tests pass, and NatSpec documents the trust model.

由索引模型根据 Issue 内容生成。

描述

enhancement

Context

Follow-up from #151, which is closed via PR #171 and tracked as BL-11 in Developer/BACK_LOG.md.

Since PR #171, DINTaskCoordinator seeds the dispute recomputation subgroup from a block in the future. openDispute sets seedBlock = block.number + disputeSeedDelay. After that block is mined, anyone can call lockDisputeSeed, which stores keccak256(blockhash(seedBlock), GI, tierKind, batchId). So the draw no longer depends on when the model owner calls resolveDispute.

What remains: on OP Stack, blockhash comes from the sequencer. A sequencer that wants a particular subgroup can grind the seed block. That's acceptable for DevNet/testnet, but not for mainnet.

What needs to change

Replace the source of randomness behind the dispute seed with one the sequencer can't bias. Options:

  1. VRF, e.g. Chainlink VRF v2.5 on OP. The seed is fulfilled by a callback, and lockDisputeSeed becomes a request/fulfil pair. Needs a subscription or funding model, plus handling for a VRF request that never gets fulfilled.
  2. Multi-party commit-reveal with a slashable non-reveal penalty. This has no external dependency, but the penalty must make aborting at the last reveal cost more than the value of re-rolling. See the review on #151 for why a commit-reveal where only one party commits doesn't work.

The seed-in, subgroup-out interface should stay the same. _assignFreshSubgroup and _shuffleAddressArray(address[], bytes32 seed) already take an explicit seed, so only the way the seed is produced should change.

Scope notes

  • Coordinate with #156. The aggregation-side shuffles (autoCreateTier1AndTier2, DINTaskAuditor._shuffleAddressArray) will probably need the same mainnet-grade source. Ideally a single randomness provider serves both.
  • BL-11 residual (2): if nobody calls lockDisputeSeed within about 256 blocks, the seed re-anchors and a second draw happens. Under VRF this goes away, but a VRF request that never gets fulfilled needs its own timeout and re-request path.
  • Not a DevNet 2.0 blocker. It must land before mainnet, or before dispute adjudication moves off the model owner, whichever comes first.

Acceptance criteria

  • The dispute seed no longer depends on blockhash, and its source can't be biased by the sequencer, the model owner, the challenger or the accused aggregators.
  • There is a defined, tested outcome for a seed that never arrives (a VRF request that isn't fulfilled, or a missed reveal), and it can't be used as a free re-roll.
  • Existing DisputeResolution.t.sol tests still pass, including the timing-independence test.
  • A trust-model NatSpec note explains what the new source trusts.
主要语言
Python
星标
4
派生
7
平均合并
3 天 58 分钟
30 天内合并 PR
39

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

InfiniteZeroFoundation/DevNet 的其他 Issue

查看 InfiniteZeroFoundation/DevNet 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。