Skip to content
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

Merged
merged 42 commits into from
Jan 13, 2025

Conversation

dantaik
Copy link
Contributor

@dantaik dantaik commented Jan 9, 2025

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:

  1. From block proofs to batch proofs.
  2. From batch proofs to multi-batch proofs.

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

  • Consult Nethermind about this change and understand the impact on preconf
  • Remove soft block API - feat(taiko-client): remove soft blocks implementation #18744
  • Need to verify "timestamp + timeThift" is within valid range
  • Document how block difficulty should be calculated in client and prover
  • Fix tests
  • add more tests for verifying lastBlockId

Copy link

openzeppelin-code bot commented Jan 9, 2025

feat(protocol): support smaller more frequent L2 blocks (replacing soft blocks)

Generated at commit: 5b60189f504dca610695e003340b1329cae3d75c

🚨 Report Summary

Severity Level Results
Contracts Critical
High
Medium
Low
Note
Total
3
3
0
9
40
55
Dependencies Critical
High
Medium
Low
Note
Total
0
0
0
0
0
0

For more details view the full report in OpenZeppelin Code Inspector

@dantaik dantaik changed the title Pacaya subblocks feat(protocol): support smaller more frequent L2 blocks (replacing soft blocks) Jan 10, 2025
@dantaik dantaik marked this pull request as ready for review January 12, 2025 03:36
@dantaik dantaik requested a review from davidtaikocha January 12, 2025 11:49
@dantaik dantaik merged commit d52cf4a into pacaya_fork Jan 13, 2025
6 checks passed
@dantaik dantaik deleted the pacaya_subblocks branch January 13, 2025 02:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants