Skip to content

feat: add zk dispute game#368

Merged
ajsutton merged 19 commits intoethereum-optimism:mainfrom
defi-wonderland:feat/zk-dispute-game-design-doc
Mar 8, 2026
Merged

feat: add zk dispute game#368
ajsutton merged 19 commits intoethereum-optimism:mainfrom
defi-wonderland:feat/zk-dispute-game-design-doc

Conversation

@Joxess
Copy link
Copy Markdown
Contributor

@Joxess Joxess commented Feb 27, 2026

Description

This document introduces the design for integrating a ZK-based dispute game into the OP Stack as a first-class game type alongside the existing fault proof system. It defines the contract architecture, lifecycle, and OPCM integration needed to support single-round ZK proof disputes with full permissionless access, DelayedWETH bond management, and verifier agnosticism. The design builds on the existing OptimisticZkGame/OPSuccinctFaultDisputeGame contracts, aligning them with the OP Stack security model, enabling per-chain deployment through the MCP clone pattern and generalizing the verifier interface to support multiple zkVM backends.

This implements the ZK-based dispute game integration as a follow-up to #356

Add design document for ZK Dispute Game contracts detailing architecture, purpose, and lifecycle.

Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

@ajsutton ajsutton left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good overall, just the change to avoid resolving as CHALLENGER_WINS if the parent is blacklisted/retired.

Joxess and others added 4 commits March 3, 2026 09:50
Co-authored-by: Adrian Sutton <adrian@symphonious.net>
Mark ZKDisputeGame as game type 10 and remove the open question.

Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
Parent blacklisted or retired status no longer forces child games to resolve as CHALLENGER_WINS. Only parent resolving as CHALLENGER_WINS cascades to the child. Guardian handles invalidated chains by blacklisting or retiring child games individually.

Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
Removed open questions and thoughts section regarding claimCredit and fund burning scenarios as they are resolved.

Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
Copy link
Copy Markdown

@wwared wwared left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm concerned about removing the ROLLUP_CONFIG_HASH from the on-chain verifier, but it's very possible I'm missing some context on how this can be done safely

@wwared
Copy link
Copy Markdown

wwared commented Mar 4, 2026

I believe the design already covers this case, but I wanted to call out a specific use case we want to support: eager finalization/resolution of games/state roots by submitting proofs for them. I know the design already supports submitting proofs for unchallenged roots, but I am not 100% sure about what the requirements on the state of the parents of this proof would be. The prover would need to submit proofs for any parent games in the parent chain that have not been resolved yet, correct? Do we have any estimate on how many proofs or how many blocks that might usually involve?

The case I am worrying about is that the prover might need to prove too many states to resolve the entire chain to get finality for the state they're actually interested in, so we might need to do some benchmarking and finetuning of the challenge period to ensure this use case remains viable for enabling on-demand speedier withdrawals without compromising security

Joxess and others added 4 commits March 4, 2026 16:05
Co-authored-by: wwared <wwared@users.noreply.github.com>
Co-authored-by: wwared <wwared@users.noreply.github.com>
Co-authored-by: wwared <wwared@users.noreply.github.com>
Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
@ajsutton
Copy link
Copy Markdown
Contributor

ajsutton commented Mar 5, 2026

I know the design already supports submitting proofs for unchallenged roots, but I am not 100% sure about what the requirements on the state of the parents of this proof would be. The prover would need to submit proofs for any parent games in the parent chain that have not been resolved yet, correct? Do we have any estimate on how many proofs or how many blocks that might usually involve?

Yes a proof would have to be provided for all parents that haven't already resolved. The use case for pre-emptive proofs isn't really that you'd prove a single game, it's that you would be continuously proving all proposals - effectively running a full ZK chain.

If you were trying to prove a single game, the number of blocks you'd need to prove would be equal to the number of blocks in the challenge period - after that point the parent games would already be resolvable.

Joxess added 4 commits March 5, 2026 10:36
Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
@Joxess
Copy link
Copy Markdown
Contributor Author

Joxess commented Mar 5, 2026

I've done the last major changes in the doc based on the discussions held since yesterday about the zk program and absolutePrestate definition, with a new section called "ZK Program Implications", cc: @pauldowman, @ajsutton, @wwared, @stevennevins

Looking forward to the design review!

Joxess added 2 commits March 5, 2026 16:47
Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
Joxess added 2 commits March 6, 2026 11:07
Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
Signed-off-by: Joxes <91908708+Joxess@users.noreply.github.com>
@ajsutton ajsutton merged commit e090f51 into ethereum-optimism:main Mar 8, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants