[Core Protocol] If the DA is not accessible by the DisputeGames, how does the later differentiate between two equally valid states? #736
-
|
Edited for better wording. Did you check the documentation and specs?
Was there anything unclear or missing?The sequencer is posting blobs / calldata to Ethereum, nodes are syncing from it and derive new states. The address were these blobs are being posted is void though, so the blobs are not being registered anywhere that is accessible by other smart contracts in the Ethereum network (example transaction) OTOH, the state of the L2 can be proposed by anyone. The transition from the current state to the next state should be that given by the transactions posted on blobs. But from the current state, there are virtually infinite new valid states, depending on how transactions were ordered (and included). If we imagine the current state of the L2 as a hole the wall of a dark room where a cone of light shines, and this cone of light is all the possible future states (blocks), only one thread of light inside that cone would be described by the blobs that are being / will be posted to the L1, but there is millions of possible future states that emanate from the current instant. What stops me from building and proposing an alternative new state (like a fork of the network) on top of the latest valid state? Since the dispute games contract cannot reference the blobs that were posted, if the state I proposed is valid (as in no rules of the EVM were broken), I assume no one can dispute me. Further, I could leverage this chance to sneak in an invalid state, because no one has the transactions I used to generate the new state, and challenging the state without having the data is risky. The only way I can think of is if the dispute games do check that blocks inside the proposed state are signed by the sequencer, but that feels a bit oracle-y to me. I guess that at certain points, you want to rotate the keys of the L2 sequencer / block producer (or maybe there is a specific special transaction for that, so key rotations could be proven on the L1). I have not been able to find any reference to how this connection between DA and posted state is made, and I have observed that other rollups do make smart contract calls along with their blob posts to "register" the data, a clear example of this would be Taiko or Arbitrum. EDIT. I will paste something that is down below in the reply section:
Did you check for duplicate questions?
Similar Questions or Issues FoundNo response Please select the type of request
Steps to ReproduceNo response Expected vs. Actual BehaviourNo response Software VersionsNo response Operating SystemNo response Hardware ResourcesNo response Configuration Files, Startup Flags & Environment VariablesNo response Error Messages / LogsNo response Feature DescriptionNo response Purpose and BenefitsNo response Relevant Context or ExamplesNo response |
Beta Was this translation helpful? Give feedback.
Replies: 4 comments 22 replies
-
|
I found this sentence on specs.optimism.io : "queries the rollup node for the latest output root derived from the latest finalized L1 block." Although this content is somewhat outdated, I believe it might still be valid. |
Beta Was this translation helpful? Give feedback.
-
|
To verify whether a specific blob transaction was included in a past block, a proof can be generated from the block hash. I don’t have complete knowledge of all the specifications, but I think it would be beneficial to dive deeper into Cannon's DB hinting. |
Beta Was this translation helpful? Give feedback.
-
|
Been looking for an answer to this also. would love if someone from the OP core team can shed light over this. |
Beta Was this translation helpful? Give feedback.
-
|
Hi, I'm happy to answer your questions about fault proofs. First, let me clarify a key concept. Based on your description, it seems like you assume the fault proof game directly reads the data sent by the L1 batcher to participate in fault proofing. This is a common misconception. In reality, blob or calldata only indirectly affects fault proofs by influencing the L1 block hash. To explain this further, let me address a specific question you raised. Before diving into the example, I want to emphasize another important concept: all L2 blocks that undergo fault proofing have already reached finalization. This means that the corresponding calldata or blob data has been submitted to L1 and has passed two epochs. Now, let’s get into the example. Suppose an L2 sequencer node and a non-sequencer node diverge, creating a subjective fork. Your question is: if a non-sequencer also submits DA (data availability) data to L1, wouldn’t that data be valid for fault proofing as well? Let’s analyze the flaw in this assumption. Regardless of whether it's a sequencer or a non-sequencer node, consensus is always formed based on the official batcher address as the batch source. This means a non-sequencer node cannot independently create a subjective fork and continue batching its own data to DA. Instead, it will eventually detect a mismatch with the L1 batcher DA data and roll back accordingly. I completely understand that fault proofs can be tricky to grasp at first. I recommend checking out this fault proof series of articles for reference https://github.com/joohhnnn/The-book-of-optimism-fault-proof . If you have any further questions about the details, feel free to ask! |
Beta Was this translation helpful? Give feedback.
Hi, I'm happy to answer your questions about fault proofs. First, let me clarify a key concept. Based on your description, it seems like you assume the fault proof game directly reads the data sent by the L1 batcher to participate in fault proofing. This is a common misconception. In reality, blob or calldata only indirectly affects fault proofs by influencing the L1 block hash.
To explain this further, let me address a specific question you raised. Before diving into the example, I want to emphasize another important concept: all L2 blocks that undergo fault proofing have already reached finalization. This means that the corresponding calldata or blob data has been submitted to L1 and ha…