Commit ed20cfc9 authored by Adrian Sutton's avatar Adrian Sutton

specs: Remove l2oo v2 proposal

parent 3682f04f
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
- [Proposing L2 Output Commitments](#proposing-l2-output-commitments) - [Proposing L2 Output Commitments](#proposing-l2-output-commitments)
- [L2OutputOracle v1.0.0](#l2outputoracle-v100) - [L2OutputOracle v1.0.0](#l2outputoracle-v100)
- [L2OutputOracle v2.0.0](#l2outputoracle-v200)
- [L2 Output Commitment Construction](#l2-output-commitment-construction) - [L2 Output Commitment Construction](#l2-output-commitment-construction)
- [L2 Output Oracle Smart Contract](#l2-output-oracle-smart-contract) - [L2 Output Oracle Smart Contract](#l2-output-oracle-smart-contract)
- [Configuration](#configuration) - [Configuration](#configuration)
...@@ -71,54 +70,6 @@ while True: ...@@ -71,54 +70,6 @@ while True:
A `CHALLENGER` account can delete multiple output roots by calling the `deleteL2Outputs()` function A `CHALLENGER` account can delete multiple output roots by calling the `deleteL2Outputs()` function
and specifying the index of the first output to delete, this will also delete all subsequent outputs. and specifying the index of the first output to delete, this will also delete all subsequent outputs.
### L2OutputOracle v2.0.0
The submission of output proposals is permissionless and there is no interval at which output
proposals must be submitted at. It is expected that users will "just in time" propose an output
proposal to facilitate their own withdrawal. A bond must be placed with an output proposal to
disincentivize the proposal of malicious outputs. If it can be proven that the output is malicious,
either via fault proof or by an attestation proof, then the bond can be slashed and used as a
payment to the users who paid for gas to remove the malicious output.
The `op-proposer` can still be used to submit output proposals. A naive implementation of the
`op-proposer` will submit output proposals on an interval. However, this is not required, and other
proposer implementations may submit valid outputs at any time. A more ideal implementation
will use heuristics such as time of last submission or number of pending withdrawals that have
yet to be included in an output proposal.
A single iteration of this proposer (posting one output root to L1) is depicted below:
```mermaid
sequenceDiagram
participant L1
participant Rollup Node
participant Proposer
L1->>L1: L1 block finalized
L1->>Rollup Node: L1 block finalized
Proposer->>Rollup Node: optimism_syncStatus
Rollup Node->>Proposer: sync status { finalized L1 block num }
Proposer->>Rollup Node: optimism_outputAtBlock
Rollup Node->>Proposer: output root
Proposer->>L1: Query L2OutputOracle for this output root
L1->>Proposer: output root or nil
Proposer->>Proposer: stop if the current output is already proposed
Proposer->>L1: L2OutputOracle.proposeOutputRoot
```
Since there may be multiple proposers running simultaneously when permissionless output proposals are enabled,
the [op-proposer](../op-proposer/) will check that it's output root has not been posted for the given L2 block
number before sending the proposal transaction. This is shown in the sequence diagram above when the `Proposer`
queries the `L2OutputOracle` for the output root. If it receives an output root that is equal to the one it
received from the rollup node, it will **not** send this output root in a transaction to the `L2OutputOracle`.
Also note, while the [op-proposer](../op-proposer/) implementation submits outputs _only_ based on finalized
or safe L2 blocks, other proposer implementations may submit outputs corresponding to unsafe (non-finalized)
L2 blocks. This comes with risk as it will be possible for [batchers](./batcher.md) to submit L2 blocks that
do not correspond to the output that have already been made available (implying those outputs are now _invalid_).
Version `v2.0.0` includes breaking changes to the `L2OutputOracle` ABI.
## L2 Output Commitment Construction ## L2 Output Commitment Construction
The `output_root` is a 32 byte string, which is derived based on the a versioned scheme: The `output_root` is a 32 byte string, which is derived based on the a versioned scheme:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment