-
Notifications
You must be signed in to change notification settings - Fork 2.2k
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
feat(protocol): support smaller more frequent L2 blocks (replacing soft blocks) #18743
base: pacaya_fork
Are you sure you want to change the base?
Conversation
feat(protocol): support smaller more frequent L2 blocks (replacing soft blocks)
🚨 Report Summary
For more details view the full report in OpenZeppelin Code Inspector |
// The metadata must be supplied as calldata prior to proving the batch, enabling the | ||
// computation and verification of its integrity through the comparison of the metahash. | ||
unchecked { | ||
meta_ = BatchMetadata({ |
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.
Shall we comment how to calculate block.difficulty
here?
bytes32 txListHash; | ||
bytes32 extraData; | ||
address coinbase; | ||
uint64 blockId; | ||
uint64 batchId; |
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.
In this design, when we propose blocks on L2, do we propose the batch or the blocks in the batch?
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.
We propose a batch. We move holistically across the stack from block based to batch based in this design, from proposing to proving.
|
||
_debitBond(_proposer, config.livenessBond * _paramsArray.length); | ||
emit BlocksProposedV3(metas_, calldataUsed, _txList); | ||
_debitBond(_proposer, config.livenessBond); |
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.
So rn for each batch, we only charge config.livenessBond
once, is it by design?
Overview
This PR introduces support for smaller and more frequent L2 blocks, replacing the previously planned soft-blocks. The primary motivation for this change stems from @cyberhorsey's discovery that most existing Ethereum SDKs and tools (e.g., MetaMask) do not handle frequent block reorganizations gracefully. Instead of investing effort into improving these libraries and tools, adopting smaller and more frequent blocks appears to be the most pragmatic solution.
Key Changes
In this PR, we introduce the concept of a "batch", which represents a collection of Taiko blocks. A batch serves as the smallest unit for block proposal, block proving, and cross-chain data synchronization. Block header data are derived from the same batch metadata to minimize on-chain footprint per block. This means that, given the same set of transactions within a batch, splitting them into 10 blocks versus 20 blocks does not significantly impact L1 gas costs—though there are still minor differences.
However, creating more L2 blocks from the same set of transactions does increase gas costs for batch proposals (slightly) and proving costs (more noticeable). Specifically, proofs are now aggregated in two stages:
More L2 blocks result in higher costs for the first level of aggregation.
Additionally, the protocol does not support proposing multiple batches in a single transaction. Instead, it leverages multiple blobs within a single
proposeBatch
transaction. As a result, proposers are encouraged to propose fewer and larger batches whenever possible to optimize efficiency.Review Tips
This is a large PR, but your primary focus should be on TaikoInbox.sol. The other changes are secondary and result from ripple effects.
Todos