Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

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

オープン
#178 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
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分
マージ済み PR(30日)
39

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

InfiniteZeroFoundation/DevNet のほかの issue

InfiniteZeroFoundation/DevNet の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。