Overview
In previous upgrades (v0.10
and v0.11
) our goal was to lower the costs of committing L2 data to L1. We achieved this by:
- Data-availability via an EIP-4844 blob-carrying transaction (#1153 )
- Encoding data in the blob and implementing an in-circuit
zstd
decoder (#1213 )
In v0.12
, we tackle the challenge of lowering on-chain proof verification costs.
As of v0.11
, every batch
's proof is verified on-chain (L1 EVM) which finalizes the state root post-batch. A batch
already aggregates proofs from multiple chunks
, essentially not requiring each of those chunk proofs to be verified on-chain. We are now pushing these verification costs even lower by recursively bundling those batches into a single bundle
that can be verified on-chain. As opposed to the aggregation scheme used from a list of chunks to a single batch
(where we have an upper bound to the number of chunks we can aggregate), the recursive aggregation scheme adopted in v0.12
is not bound by such a limit to the number of batches we can aggregate. Instead, the number of "recursion rounds" can be fine-tuned by the desired latency for L2 data to be finalized on L1.
Features
- Change Batch Circuit PI for Recursion (#1349 ) @darth-cy
RecursionCircuit
and updatedBatchCircuit
(#1352 ) @noel2004prover
updates to supportRecursionCircuit
(#1355 ) @roynalnaruto- New Batch Circuit PI Integration Debug Fixes (#1357 ) @darth-cy
- Standalone BatchHeader Constructor (#1362 ) @darth-cy
Tests, Fixes and Documentation
- Add full blob encoding and consistency check (#1379) @darth-cy
- Add full blob batch data (#1374) @darth-cy
- fix: blob bytes <= max allowed (#1373) @roynalnaruto
- [FEAT] Detect constraint failure early in recursion circuit (#1369) @noel2004
- Update
aggregator
doc (#1365) @roynalnaruto - Update EIP2930_1559.md (#1364) @Olexandr88
- Fix: Update aggregator/README.md and comments for EIP4844 (#1331) @dongliangCai
Auto-generated Section
Changes in the bus-mapping
- upgrade l2geth and remove old bytecode collecting codes (#1376) @lispc
- add comment to explain rlp_unsigned_bytes (#1367) @DreamWuGit
- chore: upgrade revm to v40 (#1360) @lightsing
- refactor: disable "test" "mock" features in prover side to get rid of Go (#1347) @lispc
- Refactor: trace (#1341) @lispc
- enhancement: add a typeos check in CI, and fix current existly typos errors. that is a TODO thing, and it's done now. (#1340) @xyq-c-cpp
- move Field and ToScalar to gadgets (#1337) @lispc
Changes in eth-types
- upgrade l2geth and remove old bytecode collecting codes (#1376) @lispc
- feat: allow bincode ser/de (#1370) @lightsing
- add comment to explain rlp_unsigned_bytes (#1367) @DreamWuGit
- chore: upgrade revm to v40 (#1360) @lightsing
- [feat] add Bernoulli to HardforkId (#1356) @lightsing
- [fix] move from_json_file back to prover crate (#1350) @lightsing
- Sync v0.11 till 38a68e2 (#1348) @lispc
- Refactor: trace (#1341) @lispc
- enhancement: add a typeos check in CI, and fix current existly typos errors. that is a TODO thing, and it's done now. (#1340) @xyq-c-cpp
- v0.11: Update fork height (#1338) @lispc
- move Field and ToScalar to gadgets (#1337) @lispc
Changes in external-tracer
- enhancement: add a typeos check in CI, and fix current existly typos errors. that is a TODO thing, and it's done now. (#1340) @xyq-c-cpp
Changes in gadgets
RecursionCircuit
and updatedBatchCircuit
(#1352) @noel2004- enhancement: add a typeos check in CI, and fix current existly typos errors. that is a TODO thing, and it's done now. (#1340) @xyq-c-cpp
- move Field and ToScalar to gadgets (#1337) @lispc
Changes in geth-utils
- upgrade l2geth and remove old bytecode collecting codes (#1376) @lispc
- Sync v0.11 till 38a68e2 (#1348) @lispc
- enhancement: add a typeos check in CI, and fix current existly typos errors. that is a TODO thing, and it's done now. (#1340) @xyq-c-cpp
Changes in integration-tests
- enhancement: add a typeos check in CI, and fix current existly typos errors. that is a TODO thing, and it's done now. (#1340) @xyq-c-cpp
Changes in Keccak
- enhancement: add a typeos check in CI, and fix current existly typos errors. that is a TODO thing, and it's done now. (#1340) @xyq-c-cpp
Changes in mock
- enhancement: add a typeos check in CI, and fix current existly typos errors. that is a TODO thing, and it's done now. (#1340) @xyq-c-cpp
Changes in prover
- fix: propagate
chain_id
over app SNARKs (batch circuit instances) (#1382) @noel2004 - fix: vk filenames (#1371) @roynalnaruto
RecursionCircuit
and updatedBatchCircuit
(#1352) @noel2004- revert chunk circuit vk to mainnet version (#1361) @lispc
- [fix] move from_json_file back to prover crate (#1350) @lightsing
- refactor: disable "test" "mock" features in prover side to get rid of Go (#1347) @lispc
- refactor(ccc): less magic numbers (#1346) @lispc
- Refactor: trace (#1341) @lispc
- enhancement: add a typeos check in CI, and fix current existly typos errors. that is a TODO thing, and it's done now. (#1340) @xyq-c-cpp
Changes in the zkevm-circuits
- refactor SameContextGadget:assign_exec_step to include block, call (#1380) @DreamWuGit
- upgrade l2geth and remove old bytecode collecting codes (#1376) @lispc
RecursionCircuit
and updatedBatchCircuit
(#1352) @noel2004- revert chunk circuit vk to mainnet version (#1361) @lispc
- [feat] add Bernoulli to HardforkId (#1356) @lightsing
- Sync v0.11 till 38a68e2 (#1348) @lispc
- refactor: disable "test" "mock" features in prover side to get rid of Go (#1347) @lispc
- refactor(ccc): less magic numbers (#1346) @lispc
- Fix: Update tx_circuit.rs MAX_AGG_SNARKS (#1344) @dongliangCai
- add error mcopy test (#1333) @DreamWuGit
- Refactor: trace (#1341) @lispc
- enhancement: add a typeos check in CI, and fix current existly typos errors. that is a TODO thing, and it's done now. (#1340) @xyq-c-cpp
- move Field and ToScalar to gadgets (#1337) @lispc