-
Notifications
You must be signed in to change notification settings - Fork 48
First draft of ZK Proofs design doc #356
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
pauldowman
wants to merge
1
commit into
main
Choose a base branch
from
pd/zk-proofs
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,90 @@ | ||
| # ZK Proofs: Design Doc | ||
|
|
||
| | | | | ||
| | ------------------ | -------------------------------------------------- | | ||
| | Author | Paul Dowman | | ||
| | Created at | 2025-11-12 | | ||
| | Initial Reviewers | _TBD_ | | ||
| | Need Approval From | _TBD_ | | ||
| | Status | Draft | | ||
|
|
||
| ## Purpose | ||
|
|
||
| There are two motivations to move to ZK proofs: | ||
| 1. Faster withdrawals (reduces the cost of capital for market makers and liquidity bridges). | ||
| 2. Eventually removing the need to maintain a custom VM (Cannon) *if* we deprecate the fault dispute game. | ||
|
|
||
| ## Summary | ||
|
|
||
| We would like to support ZK proofs as an option for the OP Stack. The optimistic fault dispute game has served us well but there are now several ZK VMs available that are widely used and well tested, and there are at least two full proof systems that work with the OP Stack: [Kailua](https://boundless-xyz.github.io/kailua/) (RISC Zero / Boundless) and [OP Succinct](https://succinctlabs.github.io/op-succinct/). | ||
|
|
||
| This proposal is to use one of those as the starting point, but bring it into the Optimism contracts repo, and evolve it into a generic ZK proof for the OP Stack, that will support multiple ZK provers (as options initially, not as a multi-proof system in this proposal). | ||
|
|
||
|
|
||
| ## Problem Statement + Context | ||
|
|
||
| ### Problem 1: Withdrawal Delays | ||
|
|
||
| Currently withdrawals from OP Stack chains take approximately 7 days in the normal case. This withdrawal delay increases the cost of capital for market makers and other liquidity providers such as bridges. For example if there’s a large price movement somewhere else, market makers are unable to quickly move capital through the canonical bridge for an OP Stack chain. And liquidity provider bridges must reserve a larger pool of capital. | ||
|
|
||
| The withdrawal delay is caused by two factors: | ||
| - The game resolution time `MAX_CLOCK_DURATION` (usually 3.5 days), sometimes referred to as the challenger period, the amount of time that we wait for a challenger to respond. | ||
| - The finality delay, sometimes referred to as the "air gap", `DISPUTE_GAME_FINALITY_DELAY_SECONDS` (3.5d), the amount of time before the game’s claim is considered valid by the portal. | ||
|
|
||
| There would still need to be a finality delay (until we add a mechanism like a second proof to remove or reduce it), but the game would be resolved immediately by posting a ZK proof. (So game resolution time would be reduced to the amount of time needed to generate the proof.) | ||
|
|
||
|
|
||
| ### Problem 2: Cannon Maintenance Costs and MIPS Architecture Risk | ||
|
|
||
| Cannon is a lot of effort to maintain. We at least need to implement new system calls every time there’s a Go compiler update. | ||
|
|
||
| And the MIPS architecture has poor compiler support. Go 1.25 had a MIPS bug that wasn't fixed until Go 1.25.4, and it’s “tier 3” for Rust, which means they rely on community contributions. | ||
|
|
||
|
|
||
| ## Proposed Solution | ||
|
|
||
| We propose to use one of the existing ZK proofs systems with only minor modifications to serve as a foundation for an OP Stack ZK proof system that supports multiple provers and verifiers. | ||
|
|
||
| OP Succinct seems to be the best candidate because it's more minimal. Kailua has some great features such as the ability to prove a smaller number of blocks for optimistic proposals, and a bond structure that's more capital efficient and solves the risk of attackers creating an overwhelming number of invalid proposals. However, OP Succinct's more minimal approach leaves room to solve these outside of the dispute game implementation itself, which may end up being a more desirable design in the long run. | ||
|
|
||
| Because ZK proving costs are still hard to estimate we would use the optimistic version ("OP Succinct Lite"), which still allows the option of eagerly posting ZK proofs for fast finality. | ||
|
|
||
| The steps would be: | ||
| 1. Add OP Succinct Lite contracts to the Optimism repo, renamed as a generic ZK dispute game. | ||
ajsutton marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| 2. Apply minor modifications: | ||
| - Refactor to apply the [same deployment pattern as `FaultDisputeGame`](https://github.com/ethereum-optimism/design-docs/blob/main/protocol/proofs/dispute-game-creators.md). | ||
| - Remove `AccessManager` to only support permissionless proposals. | ||
| - Add configuration to use an immutable verifier contract at a specific version, rather than the upgradeable verifier gateway contract. | ||
| 3. Use OPCM for deployment. | ||
|
|
||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would like to highlight the fact that we make the op-succinct to support permissionless proposals, we might also want to revisit the economic aspects around bond amounts, as well as the challenge and prove durations |
||
| An immediate next phase would integrate the Risc Zero VM and Boundless prover network into the same contracts as an alternative proof. | ||
|
|
||
| A future phase could implement an improved bond system like Kailua. | ||
|
|
||
|
|
||
| ### Resource Usage | ||
|
|
||
| <!-- What is the resource usage of the proposed solution? | ||
| Does it consume a large amount of computational resources or time? --> | ||
|
|
||
| ### Single Point of Failure and Multi Client Considerations | ||
|
|
||
| <!-- Details on how this change will impact multiple clients. Do we need to plan for changes to both op-geth and op-reth? --> | ||
|
|
||
| ## Failure Mode Analysis | ||
|
|
||
| <!-- Link to the failure mode analysis document, created from the fma-template.md file. --> | ||
|
|
||
| ## Impact on Developer Experience | ||
| <!-- Does this proposed design change the way application developers interact with the protocol? | ||
| Will any Superchain developer tools (like Supersim, templates, etc.) break as a result of this change? --> | ||
|
|
||
| ## Alternatives Considered | ||
|
|
||
| <!-- List out a short summary of each possible solution that was considered. | ||
| Comparing the effort of each solution --> | ||
|
|
||
| ## Risks & Uncertainties | ||
|
|
||
| <!-- An overview of what could go wrong. | ||
| Also any open questions that need more work to resolve. --> | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably also worth mentioning that Kailua requires proposals at fixed intervals and at this stage we'd like to keep the current flexibility to propose anytime.