feat: Validate num txs in block proposals#20850
feat: Validate num txs in block proposals#20850PhilWindle merged 3 commits intomerge-train/spartanfrom
Conversation
Deduplicate the SEQ_MAX_TX_PER_BLOCK config mapping by moving it to the shared sequencer config in stdlib, removing the duplicate definitions from p2p and sequencer-client configs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
Is there a way to tell the values of SEQ_MAX_TX_PER_BLOCK that nodes are setting? i.e. as in it would be helpful to be able to tell things like "40% of the validator nodes are signalling they want a max SEQ_MAX_TX_PER_BLOCK of x". |
spalladino
left a comment
There was a problem hiding this comment.
Change looks good, but should we be penalizing the peer for this offense, or rather the proposer? I think it makes more sense to penalize the proposer (ie slash them), but to do that, we'd have to re-broadcast the proposal so other nodes see it and vote for the slash. It's probably easier to just restrict on p2p as you did here.
I did wonder this. I kept the same approach as the previous check for txs permitted. But @aminsammara, should this be a slashing condition? Not for Alpha, but potentially part of the post Alpha slashing changes. |
This PR introduces additional block/checkpoint proposal validation to ensure `SEQ_MAX_TX_PER_BLOCK` is not breached. Also adds additional tests for existing validation criteria.
|
✅ Successfully backported to backport-to-v4-staging #20906. |
This PR introduces additional block/checkpoint proposal validation to ensure `SEQ_MAX_TX_PER_BLOCK` is not breached. Also adds additional tests for existing validation criteria.
BEGIN_COMMIT_OVERRIDE fix: write pointers for environ_get and environ_sizes_get functions (#20902) fix(aztec-up): install noir-profiler alongside nargo (#20896) chore: fix staging-public deployment (#20901) feat: Validate num txs in block proposals (#20850) fix(archiver): enforce checkpoint boundary on rollbackTo (#20908) END_COMMIT_OVERRIDE --------- Co-authored-by: just-mitch <just-mitch@users.noreply.github.com> Co-authored-by: nchamo <nchamo@users.noreply.github.com> Co-authored-by: alexghr <alexghr@users.noreply.github.com> Co-authored-by: PhilWindle <PhilWindle@users.noreply.github.com> Co-authored-by: spalladino <spalladino@users.noreply.github.com>
Pending Aztec Packages v4 release --- ## [4.0.1](v4.0.0...v4.0.1) (2026-02-26) ### � BREAKING CHANGES * Bump l2 gas per note hash ([#20862](#20862)) * update vks * update da gas ([#20611](#20611)) * change max private log size to 16 fields ([#20515](#20515)) * pairing points audit ([#20456](#20456)) * include_by_timestamp -> expiration_timestamp ([#20536](#20536)) ### Features * (A-302) add reloadKeystore admin RPC endpoint ([#20325](#20325)) ([639368d](639368d)) * (A-451) error codes for RPC calls ([#20560](#20560)) ([639368d](639368d)) * (A-514) add API key authentication for admin RPC endpoint ([#20411](#20411)) ([639368d](639368d)) * add `aztec profile` command with gate count profiling ([#20695](#20695)) ([83ea202](83ea202)) * add API key authentication for admin RPC endpoint ([ff4cf99](ff4cf99)) * add aztec profile flamegraph command ([#20741](#20741)) ([83ea202](83ea202)) * add support for signed integers on contract functions ([#20784](#20784)) ([fdd0d0d](fdd0d0d)) * adding mempool transactions ([#20679](#20679)) ([43caf7c](43caf7c)) * alpha payload ([#20865](#20865)) ([7a09c3c](7a09c3c)) * **archiver:** add l2 tips cache ([#20510](#20510)) ([639368d](639368d)) * **archiver:** return L2 block data to avoid fetching full block ([#20503](#20503)) ([639368d](639368d)) * automatically stop node from signalling ([#20416](#20416)) ([639368d](639368d)) * avoid redundant serial zeroing in polynomial allocation ([#20670](#20670)) ([bb844d4](bb844d4)) * call syncImmediate without block number during chain prune ([#20717](#20717)) ([43caf7c](43caf7c)) * check calldata against emitted hashes ([#20486](#20486)) ([43caf7c](43caf7c)) * **ci.aztec-labs.com:** CI cost and metrics tracking ([#20100](#20100)) ([639368d](639368d)) * disabling peer scoring for block proposals topic ([#20577](#20577)) ([6414d9b](6414d9b)) * dynamically adjust missing txs set ([#20300](#20300)) ([dedf440](dedf440)) * Error codes for RPC calls ([43ed6a9](43ed6a9)) * expose blockheader getters ([#20790](#20790)) ([fdd0d0d](fdd0d0d)) * Metrics added to the transaction pool ([#20477](#20477)) ([639368d](639368d)) * notify slack on merge train PR merge ([#20614](#20614)) ([dbbeddc](dbbeddc)) * **p2p:** add download metrics to file store tx source ([#20601](#20601)) ([639368d](639368d)) * printing out public contract function debug logs in a tx ([#20749](#20749)) ([83ea202](83ea202)) * Re-instate the function optionally to delete all transactions in an epoch prune ([#20602](#20602)) ([dedf440](dedf440)) * reduced hashing ([#20676](#20676)) ([bf3191c](bf3191c)) * run low priority eviction rule on chain_pruned ([#20687](#20687)) ([43caf7c](43caf7c)) * suspend sentinel during escape hatch ([#20471](#20471)) ([639368d](639368d)) * tcmalloc enabled in docker images ([#20644](#20644)) ([b87c8ae](b87c8ae)) * trim attestations to the minimum required length ([#20591](#20591)) ([43caf7c](43caf7c)) * use native crypto to compute p2p message ID ([#20846](#20846)) ([fdd0d0d](fdd0d0d)) * Validate num txs in block proposals ([#20850](#20850)) ([f3f5438](f3f5438)) * worker thread wallet ([#20557](#20557)) ([639368d](639368d)) * World state history length is now defined in checkpoints ([#20566](#20566)) ([639368d](639368d)) ### Bug Fixes * (A-575) prevent checkpoint event spam in L2BlockStream on restart ([#20791](#20791)) ([fdd0d0d](fdd0d0d)) * `DelayedPublicMutable` not relying on the guarantee of increasing timestamps ([#20244](#20244)) ([a178034](a178034)) * allow compiling mixed (contract + noir script) aztec project ([#20428](#20428)) ([83ea202](83ea202)) * **archiver:** enforce checkpoint boundary on rollbackTo ([#20908](#20908)) ([f3f5438](f3f5438)) * async blob ([#20559](#20559)) ([639368d](639368d)) * async dispose() lint rule ([#20587](#20587)) ([639368d](639368d)) * async world state cleanups ([#20578](#20578)) ([639368d](639368d)) * attribute for L1 fee analysis for full blocks ([#20548](#20548)) ([63131de](63131de)) * **avm:** alu gadget fuzzer serialisation ([#19115](#19115)) ([50e778a](50e778a)) * **aztec-up:** install noir-profiler alongside nargo ([#20896](#20896)) ([f3f5438](f3f5438)) * charge 3.6M for epoch verification ([#20765](#20765)) ([fdd0d0d](fdd0d0d)) * **ci:** insufficient parallelism in merge-queue-heavy ([#20613](#20613)) ([5bfbd67](5bfbd67)) * **ci:** preserve both attempt logs when retrying flaky tests ([#20439](#20439)) ([639368d](639368d)) * default pp handling ([#20516](#20516)) ([f9431cd](f9431cd)) * do not ignore test artifacts ([#20574](#20574)) ([402f438](402f438)) * docs examples lockfile ([#20453](#20453)) ([4bf9ddd](4bf9ddd)) * escape hatch snapshots ([#20363](#20363)) ([e4712cd](e4712cd)) * **ethereum:** check timeout before consuming nonce in L1TxUtils ([#20501](#20501)) ([639368d](639368d)) * **ethereum:** remove viem NonceManager to fix nonce gap after failed sends ([#20819](#20819)) ([fdd0d0d](fdd0d0d)) * evicted transactions could reappear after a node restart ([#20773](#20773)) ([fdd0d0d](fdd0d0d)) * Fix checkpoint invalidation test ([#20579](#20579)) ([639368d](639368d)) * Fix the epoch long proving test ([#20617](#20617)) ([6414d9b](6414d9b)) * flag stripping error ([#20655](#20655)) ([b87c8ae](b87c8ae)) * getVotes return empty instead of stale data ([#20756](#20756)) ([fdd0d0d](fdd0d0d)) * hodgepodge of small things ([#20720](#20720)) ([43caf7c](43caf7c)) * increase waitForTx timeout in epochs_invalidate_block test ([#20603](#20603)) ([639368d](639368d)) * limit number of threads when verifying server-side proofs ([#20818](#20818)) ([fdd0d0d](fdd0d0d)) * min expiration timestamp instead of assert ([#20554](#20554)) ([fa29717](fa29717)) * misc minor contract fixes ([#20423](#20423)) ([3a13674](3a13674)) * **node:** sync ws before simulating public calls ([#20499](#20499)) ([639368d](639368d)) * **p2p:** fix compress option in file store and enable for tx uploads ([#20605](#20605)) ([639368d](639368d)) * **p2p:** wait for GossipSub mesh formation before sending txs in e2e tests ([#20626](#20626)) ([fdd0d0d](fdd0d0d)) * pass log level to AVM simulator ([#20762](#20762)) ([fdd0d0d](fdd0d0d)) * pxe native prover log level ([#20724](#20724)) ([fdd0d0d](fdd0d0d)) * Reduce tx hash conversions inside tx pool ([#20829](#20829)) ([fdd0d0d](fdd0d0d)) * respecting MAX_RPC_LEN limit in getAllLogsByTags ([#20543](#20543)) ([c2475bd](c2475bd)) * separate rejected and aborted proving jobs ([#20777](#20777)) ([fdd0d0d](fdd0d0d)) * Set Aztec slot duration as a multiple of the Ethereum slot duration ([#20608](#20608)) ([dedf440](dedf440)) * set PXE sync chain tip to proposed for scenario bot ([#20530](#20530)) ([639368d](639368d)) * skip default pp in sol aggregation ([#20521](#20521)) ([f9431cd](f9431cd)) * stringify all bigints in pino-logger ([#20303](#20303)) ([639368d](639368d)) * sync world state before forking in simulatePublicCalls ([#20544](#20544)) ([f3420e0](f3420e0)) * track last seen nonce in case of stale fallback L1 RPC node ([#20855](#20855)) ([83ea202](83ea202)) * **txe:** committing after txs ([#20714](#20714)) ([83ea202](83ea202)) * underflow in snapshot synch ([#20780](#20780)) ([fdd0d0d](fdd0d0d)) * Use async poseidon ([#20826](#20826)) ([fdd0d0d](fdd0d0d)) * use ci3_labels_to_env.sh for ci-external label ([#20597](#20597)) ([3efb1d9](3efb1d9)) * write pointers for environ_get and environ_sizes_get functions ([#20902](#20902)) ([f3f5438](f3f5438)) * yolo debugging tweaks ([0a9d6e0](0a9d6e0)) * yolo some fd cleanup, maybe stop hangs ([43d292c](43d292c)) ### Miscellaneous * include_by_timestamp -> expiration_timestamp ([#20536](#20536)) ([44a33a1](44a33a1)) * update vks ([4d653dd](4d653dd)) ### Documentation * document RevertCodeEnum phases and add 120-char line width rule ([#20751](#20751)) ([83ea202](83ea202)) * fix avm docs - l2 gas is not the same as mana ([#20565](#20565)) ([50e778a](50e778a)) * minor clarification ([#20788](#20788)) ([fdd0d0d](fdd0d0d)) * simulator readme typos ([#19701](#19701)) ([50e778a](50e778a)) * some tail circuit doc comments ([#20449](#20449)) ([fd509a3](fd509a3)) This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Pending Aztec Packages v4 release --- ## [4.0.1](v4.0.0...v4.0.1) (2026-02-26) ### � BREAKING CHANGES * Bump l2 gas per note hash ([#20862](#20862)) * update vks * update da gas ([#20611](#20611)) * change max private log size to 16 fields ([#20515](#20515)) * pairing points audit ([#20456](#20456)) * include_by_timestamp -> expiration_timestamp ([#20536](#20536)) ### Features * (A-302) add reloadKeystore admin RPC endpoint ([#20325](#20325)) ([639368d](639368d)) * (A-451) error codes for RPC calls ([#20560](#20560)) ([639368d](639368d)) * (A-514) add API key authentication for admin RPC endpoint ([#20411](#20411)) ([639368d](639368d)) * add `aztec profile` command with gate count profiling ([#20695](#20695)) ([83ea202](83ea202)) * add API key authentication for admin RPC endpoint ([ff4cf99](ff4cf99)) * add aztec profile flamegraph command ([#20741](#20741)) ([83ea202](83ea202)) * add support for signed integers on contract functions ([#20784](#20784)) ([fdd0d0d](fdd0d0d)) * adding mempool transactions ([#20679](#20679)) ([43caf7c](43caf7c)) * alpha payload ([#20865](#20865)) ([7a09c3c](7a09c3c)) * **archiver:** add l2 tips cache ([#20510](#20510)) ([639368d](639368d)) * **archiver:** return L2 block data to avoid fetching full block ([#20503](#20503)) ([639368d](639368d)) * automatically stop node from signalling ([#20416](#20416)) ([639368d](639368d)) * avoid redundant serial zeroing in polynomial allocation ([#20670](#20670)) ([bb844d4](bb844d4)) * call syncImmediate without block number during chain prune ([#20717](#20717)) ([43caf7c](43caf7c)) * check calldata against emitted hashes ([#20486](#20486)) ([43caf7c](43caf7c)) * **ci.aztec-labs.com:** CI cost and metrics tracking ([#20100](#20100)) ([639368d](639368d)) * disabling peer scoring for block proposals topic ([#20577](#20577)) ([6414d9b](6414d9b)) * dynamically adjust missing txs set ([#20300](#20300)) ([dedf440](dedf440)) * Error codes for RPC calls ([43ed6a9](43ed6a9)) * expose blockheader getters ([#20790](#20790)) ([fdd0d0d](fdd0d0d)) * Metrics added to the transaction pool ([#20477](#20477)) ([639368d](639368d)) * notify slack on merge train PR merge ([#20614](#20614)) ([dbbeddc](dbbeddc)) * **p2p:** add download metrics to file store tx source ([#20601](#20601)) ([639368d](639368d)) * printing out public contract function debug logs in a tx ([#20749](#20749)) ([83ea202](83ea202)) * Re-instate the function optionally to delete all transactions in an epoch prune ([#20602](#20602)) ([dedf440](dedf440)) * reduced hashing ([#20676](#20676)) ([bf3191c](bf3191c)) * run low priority eviction rule on chain_pruned ([#20687](#20687)) ([43caf7c](43caf7c)) * suspend sentinel during escape hatch ([#20471](#20471)) ([639368d](639368d)) * tcmalloc enabled in docker images ([#20644](#20644)) ([b87c8ae](b87c8ae)) * trim attestations to the minimum required length ([#20591](#20591)) ([43caf7c](43caf7c)) * use native crypto to compute p2p message ID ([#20846](#20846)) ([fdd0d0d](fdd0d0d)) * Validate num txs in block proposals ([#20850](#20850)) ([f3f5438](f3f5438)) * worker thread wallet ([#20557](#20557)) ([639368d](639368d)) * World state history length is now defined in checkpoints ([#20566](#20566)) ([639368d](639368d)) ### Bug Fixes * (A-575) prevent checkpoint event spam in L2BlockStream on restart ([#20791](#20791)) ([fdd0d0d](fdd0d0d)) * `DelayedPublicMutable` not relying on the guarantee of increasing timestamps ([#20244](#20244)) ([a178034](a178034)) * allow compiling mixed (contract + noir script) aztec project ([#20428](#20428)) ([83ea202](83ea202)) * **archiver:** enforce checkpoint boundary on rollbackTo ([#20908](#20908)) ([f3f5438](f3f5438)) * async blob ([#20559](#20559)) ([639368d](639368d)) * async dispose() lint rule ([#20587](#20587)) ([639368d](639368d)) * async world state cleanups ([#20578](#20578)) ([639368d](639368d)) * attribute for L1 fee analysis for full blocks ([#20548](#20548)) ([63131de](63131de)) * **avm:** alu gadget fuzzer serialisation ([#19115](#19115)) ([50e778a](50e778a)) * **aztec-up:** install noir-profiler alongside nargo ([#20896](#20896)) ([f3f5438](f3f5438)) * charge 3.6M for epoch verification ([#20765](#20765)) ([fdd0d0d](fdd0d0d)) * **ci:** insufficient parallelism in merge-queue-heavy ([#20613](#20613)) ([5bfbd67](5bfbd67)) * **ci:** preserve both attempt logs when retrying flaky tests ([#20439](#20439)) ([639368d](639368d)) * default pp handling ([#20516](#20516)) ([f9431cd](f9431cd)) * do not ignore test artifacts ([#20574](#20574)) ([402f438](402f438)) * docs examples lockfile ([#20453](#20453)) ([4bf9ddd](4bf9ddd)) * escape hatch snapshots ([#20363](#20363)) ([e4712cd](e4712cd)) * **ethereum:** check timeout before consuming nonce in L1TxUtils ([#20501](#20501)) ([639368d](639368d)) * **ethereum:** remove viem NonceManager to fix nonce gap after failed sends ([#20819](#20819)) ([fdd0d0d](fdd0d0d)) * evicted transactions could reappear after a node restart ([#20773](#20773)) ([fdd0d0d](fdd0d0d)) * Fix checkpoint invalidation test ([#20579](#20579)) ([639368d](639368d)) * Fix the epoch long proving test ([#20617](#20617)) ([6414d9b](6414d9b)) * flag stripping error ([#20655](#20655)) ([b87c8ae](b87c8ae)) * getVotes return empty instead of stale data ([#20756](#20756)) ([fdd0d0d](fdd0d0d)) * hodgepodge of small things ([#20720](#20720)) ([43caf7c](43caf7c)) * increase waitForTx timeout in epochs_invalidate_block test ([#20603](#20603)) ([639368d](639368d)) * limit number of threads when verifying server-side proofs ([#20818](#20818)) ([fdd0d0d](fdd0d0d)) * min expiration timestamp instead of assert ([#20554](#20554)) ([fa29717](fa29717)) * misc minor contract fixes ([#20423](#20423)) ([3a13674](3a13674)) * **node:** sync ws before simulating public calls ([#20499](#20499)) ([639368d](639368d)) * **p2p:** fix compress option in file store and enable for tx uploads ([#20605](#20605)) ([639368d](639368d)) * **p2p:** wait for GossipSub mesh formation before sending txs in e2e tests ([#20626](#20626)) ([fdd0d0d](fdd0d0d)) * pass log level to AVM simulator ([#20762](#20762)) ([fdd0d0d](fdd0d0d)) * pxe native prover log level ([#20724](#20724)) ([fdd0d0d](fdd0d0d)) * Reduce tx hash conversions inside tx pool ([#20829](#20829)) ([fdd0d0d](fdd0d0d)) * respecting MAX_RPC_LEN limit in getAllLogsByTags ([#20543](#20543)) ([c2475bd](c2475bd)) * separate rejected and aborted proving jobs ([#20777](#20777)) ([fdd0d0d](fdd0d0d)) * Set Aztec slot duration as a multiple of the Ethereum slot duration ([#20608](#20608)) ([dedf440](dedf440)) * set PXE sync chain tip to proposed for scenario bot ([#20530](#20530)) ([639368d](639368d)) * skip default pp in sol aggregation ([#20521](#20521)) ([f9431cd](f9431cd)) * stringify all bigints in pino-logger ([#20303](#20303)) ([639368d](639368d)) * sync world state before forking in simulatePublicCalls ([#20544](#20544)) ([f3420e0](f3420e0)) * track last seen nonce in case of stale fallback L1 RPC node ([#20855](#20855)) ([83ea202](83ea202)) * **txe:** committing after txs ([#20714](#20714)) ([83ea202](83ea202)) * underflow in snapshot synch ([#20780](#20780)) ([fdd0d0d](fdd0d0d)) * Use async poseidon ([#20826](#20826)) ([fdd0d0d](fdd0d0d)) * use ci3_labels_to_env.sh for ci-external label ([#20597](#20597)) ([3efb1d9](3efb1d9)) * write pointers for environ_get and environ_sizes_get functions ([#20902](#20902)) ([f3f5438](f3f5438)) * yolo debugging tweaks ([0a9d6e0](0a9d6e0)) * yolo some fd cleanup, maybe stop hangs ([43d292c](43d292c)) ### Miscellaneous * include_by_timestamp -> expiration_timestamp ([#20536](#20536)) ([44a33a1](44a33a1)) * update vks ([4d653dd](4d653dd)) ### Documentation * document RevertCodeEnum phases and add 120-char line width rule ([#20751](#20751)) ([83ea202](83ea202)) * fix avm docs - l2 gas is not the same as mana ([#20565](#20565)) ([50e778a](50e778a)) * minor clarification ([#20788](#20788)) ([fdd0d0d](fdd0d0d)) * simulator readme typos ([#19701](#19701)) ([50e778a](50e778a)) * some tail circuit doc comments ([#20449](#20449)) ([fd509a3](fd509a3)) This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
I do think we should penalize the proposer (if we know who they are). I don't think this should be a slashing offence |
Pending Aztec Packages v4 release --- ## [4.0.1](v4.0.0...v4.0.1) (2026-02-26) ### � BREAKING CHANGES * Bump l2 gas per note hash ([#20862](#20862)) * update vks * update da gas ([#20611](#20611)) * change max private log size to 16 fields ([#20515](#20515)) * pairing points audit ([#20456](#20456)) * include_by_timestamp -> expiration_timestamp ([#20536](#20536)) ### Features * (A-302) add reloadKeystore admin RPC endpoint ([#20325](#20325)) ([639368d](639368d)) * (A-451) error codes for RPC calls ([#20560](#20560)) ([639368d](639368d)) * (A-514) add API key authentication for admin RPC endpoint ([#20411](#20411)) ([639368d](639368d)) * add `aztec profile` command with gate count profiling ([#20695](#20695)) ([83ea202](83ea202)) * add API key authentication for admin RPC endpoint ([ff4cf99](ff4cf99)) * add aztec profile flamegraph command ([#20741](#20741)) ([83ea202](83ea202)) * add support for signed integers on contract functions ([#20784](#20784)) ([fdd0d0d](fdd0d0d)) * adding mempool transactions ([#20679](#20679)) ([43caf7c](43caf7c)) * alpha payload ([#20865](#20865)) ([7a09c3c](7a09c3c)) * **archiver:** add l2 tips cache ([#20510](#20510)) ([639368d](639368d)) * **archiver:** return L2 block data to avoid fetching full block ([#20503](#20503)) ([639368d](639368d)) * automatically stop node from signalling ([#20416](#20416)) ([639368d](639368d)) * avoid redundant serial zeroing in polynomial allocation ([#20670](#20670)) ([bb844d4](bb844d4)) * call syncImmediate without block number during chain prune ([#20717](#20717)) ([43caf7c](43caf7c)) * check calldata against emitted hashes ([#20486](#20486)) ([43caf7c](43caf7c)) * **ci.aztec-labs.com:** CI cost and metrics tracking ([#20100](#20100)) ([639368d](639368d)) * disabling peer scoring for block proposals topic ([#20577](#20577)) ([6414d9b](6414d9b)) * dynamically adjust missing txs set ([#20300](#20300)) ([dedf440](dedf440)) * Error codes for RPC calls ([43ed6a9](43ed6a9)) * expose blockheader getters ([#20790](#20790)) ([fdd0d0d](fdd0d0d)) * Metrics added to the transaction pool ([#20477](#20477)) ([639368d](639368d)) * notify slack on merge train PR merge ([#20614](#20614)) ([dbbeddc](dbbeddc)) * **p2p:** add download metrics to file store tx source ([#20601](#20601)) ([639368d](639368d)) * printing out public contract function debug logs in a tx ([#20749](#20749)) ([83ea202](83ea202)) * Re-instate the function optionally to delete all transactions in an epoch prune ([#20602](#20602)) ([dedf440](dedf440)) * reduced hashing ([#20676](#20676)) ([bf3191c](bf3191c)) * run low priority eviction rule on chain_pruned ([#20687](#20687)) ([43caf7c](43caf7c)) * suspend sentinel during escape hatch ([#20471](#20471)) ([639368d](639368d)) * tcmalloc enabled in docker images ([#20644](#20644)) ([b87c8ae](b87c8ae)) * trim attestations to the minimum required length ([#20591](#20591)) ([43caf7c](43caf7c)) * use native crypto to compute p2p message ID ([#20846](#20846)) ([fdd0d0d](fdd0d0d)) * Validate num txs in block proposals ([#20850](#20850)) ([f3f5438](f3f5438)) * worker thread wallet ([#20557](#20557)) ([639368d](639368d)) * World state history length is now defined in checkpoints ([#20566](#20566)) ([639368d](639368d)) ### Bug Fixes * (A-575) prevent checkpoint event spam in L2BlockStream on restart ([#20791](#20791)) ([fdd0d0d](fdd0d0d)) * `DelayedPublicMutable` not relying on the guarantee of increasing timestamps ([#20244](#20244)) ([a178034](a178034)) * allow compiling mixed (contract + noir script) aztec project ([#20428](#20428)) ([83ea202](83ea202)) * **archiver:** enforce checkpoint boundary on rollbackTo ([#20908](#20908)) ([f3f5438](f3f5438)) * async blob ([#20559](#20559)) ([639368d](639368d)) * async dispose() lint rule ([#20587](#20587)) ([639368d](639368d)) * async world state cleanups ([#20578](#20578)) ([639368d](639368d)) * attribute for L1 fee analysis for full blocks ([#20548](#20548)) ([63131de](63131de)) * **avm:** alu gadget fuzzer serialisation ([#19115](#19115)) ([50e778a](50e778a)) * **aztec-up:** install noir-profiler alongside nargo ([#20896](#20896)) ([f3f5438](f3f5438)) * charge 3.6M for epoch verification ([#20765](#20765)) ([fdd0d0d](fdd0d0d)) * **ci:** insufficient parallelism in merge-queue-heavy ([#20613](#20613)) ([5bfbd67](5bfbd67)) * **ci:** preserve both attempt logs when retrying flaky tests ([#20439](#20439)) ([639368d](639368d)) * default pp handling ([#20516](#20516)) ([f9431cd](f9431cd)) * do not ignore test artifacts ([#20574](#20574)) ([402f438](402f438)) * docs examples lockfile ([#20453](#20453)) ([4bf9ddd](4bf9ddd)) * escape hatch snapshots ([#20363](#20363)) ([e4712cd](e4712cd)) * **ethereum:** check timeout before consuming nonce in L1TxUtils ([#20501](#20501)) ([639368d](639368d)) * **ethereum:** remove viem NonceManager to fix nonce gap after failed sends ([#20819](#20819)) ([fdd0d0d](fdd0d0d)) * evicted transactions could reappear after a node restart ([#20773](#20773)) ([fdd0d0d](fdd0d0d)) * Fix checkpoint invalidation test ([#20579](#20579)) ([639368d](639368d)) * Fix the epoch long proving test ([#20617](#20617)) ([6414d9b](6414d9b)) * flag stripping error ([#20655](#20655)) ([b87c8ae](b87c8ae)) * getVotes return empty instead of stale data ([#20756](#20756)) ([fdd0d0d](fdd0d0d)) * hodgepodge of small things ([#20720](#20720)) ([43caf7c](43caf7c)) * increase waitForTx timeout in epochs_invalidate_block test ([#20603](#20603)) ([639368d](639368d)) * limit number of threads when verifying server-side proofs ([#20818](#20818)) ([fdd0d0d](fdd0d0d)) * min expiration timestamp instead of assert ([#20554](#20554)) ([fa29717](fa29717)) * misc minor contract fixes ([#20423](#20423)) ([3a13674](3a13674)) * **node:** sync ws before simulating public calls ([#20499](#20499)) ([639368d](639368d)) * **p2p:** fix compress option in file store and enable for tx uploads ([#20605](#20605)) ([639368d](639368d)) * **p2p:** wait for GossipSub mesh formation before sending txs in e2e tests ([#20626](#20626)) ([fdd0d0d](fdd0d0d)) * pass log level to AVM simulator ([#20762](#20762)) ([fdd0d0d](fdd0d0d)) * pxe native prover log level ([#20724](#20724)) ([fdd0d0d](fdd0d0d)) * Reduce tx hash conversions inside tx pool ([#20829](#20829)) ([fdd0d0d](fdd0d0d)) * respecting MAX_RPC_LEN limit in getAllLogsByTags ([#20543](#20543)) ([c2475bd](c2475bd)) * separate rejected and aborted proving jobs ([#20777](#20777)) ([fdd0d0d](fdd0d0d)) * Set Aztec slot duration as a multiple of the Ethereum slot duration ([#20608](#20608)) ([dedf440](dedf440)) * set PXE sync chain tip to proposed for scenario bot ([#20530](#20530)) ([639368d](639368d)) * skip default pp in sol aggregation ([#20521](#20521)) ([f9431cd](f9431cd)) * stringify all bigints in pino-logger ([#20303](#20303)) ([639368d](639368d)) * sync world state before forking in simulatePublicCalls ([#20544](#20544)) ([f3420e0](f3420e0)) * track last seen nonce in case of stale fallback L1 RPC node ([#20855](#20855)) ([83ea202](83ea202)) * **txe:** committing after txs ([#20714](#20714)) ([83ea202](83ea202)) * underflow in snapshot synch ([#20780](#20780)) ([fdd0d0d](fdd0d0d)) * Use async poseidon ([#20826](#20826)) ([fdd0d0d](fdd0d0d)) * use ci3_labels_to_env.sh for ci-external label ([#20597](#20597)) ([3efb1d9](3efb1d9)) * write pointers for environ_get and environ_sizes_get functions ([#20902](#20902)) ([f3f5438](f3f5438)) * yolo debugging tweaks ([0a9d6e0](0a9d6e0)) * yolo some fd cleanup, maybe stop hangs ([43d292c](43d292c)) ### Miscellaneous * include_by_timestamp -> expiration_timestamp ([#20536](#20536)) ([44a33a1](44a33a1)) * update vks ([4d653dd](4d653dd)) ### Documentation * document RevertCodeEnum phases and add 120-char line width rule ([#20751](#20751)) ([83ea202](83ea202)) * fix avm docs - l2 gas is not the same as mana ([#20565](#20565)) ([50e778a](50e778a)) * minor clarification ([#20788](#20788)) ([fdd0d0d](fdd0d0d)) * simulator readme typos ([#19701](#19701)) ([50e778a](50e778a)) * some tail circuit doc comments ([#20449](#20449)) ([fd509a3](fd509a3)) This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Pending Aztec Packages v4 release --- ## [4.0.1](v4.0.0...v4.0.1) (2026-02-26) ### � BREAKING CHANGES * Bump l2 gas per note hash ([#20862](#20862)) * update vks * update da gas ([#20611](#20611)) * change max private log size to 16 fields ([#20515](#20515)) * pairing points audit ([#20456](#20456)) * include_by_timestamp -> expiration_timestamp ([#20536](#20536)) ### Features * (A-302) add reloadKeystore admin RPC endpoint ([#20325](#20325)) ([639368d](639368d)) * (A-451) error codes for RPC calls ([#20560](#20560)) ([639368d](639368d)) * (A-514) add API key authentication for admin RPC endpoint ([#20411](#20411)) ([639368d](639368d)) * add `aztec profile` command with gate count profiling ([#20695](#20695)) ([83ea202](83ea202)) * add API key authentication for admin RPC endpoint ([ff4cf99](ff4cf99)) * add aztec profile flamegraph command ([#20741](#20741)) ([83ea202](83ea202)) * add support for signed integers on contract functions ([#20784](#20784)) ([fdd0d0d](fdd0d0d)) * adding mempool transactions ([#20679](#20679)) ([43caf7c](43caf7c)) * alpha payload ([#20865](#20865)) ([7a09c3c](7a09c3c)) * **archiver:** add l2 tips cache ([#20510](#20510)) ([639368d](639368d)) * **archiver:** return L2 block data to avoid fetching full block ([#20503](#20503)) ([639368d](639368d)) * automatically stop node from signalling ([#20416](#20416)) ([639368d](639368d)) * avoid redundant serial zeroing in polynomial allocation ([#20670](#20670)) ([bb844d4](bb844d4)) * call syncImmediate without block number during chain prune ([#20717](#20717)) ([43caf7c](43caf7c)) * check calldata against emitted hashes ([#20486](#20486)) ([43caf7c](43caf7c)) * **ci.aztec-labs.com:** CI cost and metrics tracking ([#20100](#20100)) ([639368d](639368d)) * disabling peer scoring for block proposals topic ([#20577](#20577)) ([6414d9b](6414d9b)) * dynamically adjust missing txs set ([#20300](#20300)) ([dedf440](dedf440)) * Error codes for RPC calls ([43ed6a9](43ed6a9)) * expose blockheader getters ([#20790](#20790)) ([fdd0d0d](fdd0d0d)) * Metrics added to the transaction pool ([#20477](#20477)) ([639368d](639368d)) * notify slack on merge train PR merge ([#20614](#20614)) ([dbbeddc](dbbeddc)) * **p2p:** add download metrics to file store tx source ([#20601](#20601)) ([639368d](639368d)) * printing out public contract function debug logs in a tx ([#20749](#20749)) ([83ea202](83ea202)) * Re-instate the function optionally to delete all transactions in an epoch prune ([#20602](#20602)) ([dedf440](dedf440)) * reduced hashing ([#20676](#20676)) ([bf3191c](bf3191c)) * run low priority eviction rule on chain_pruned ([#20687](#20687)) ([43caf7c](43caf7c)) * suspend sentinel during escape hatch ([#20471](#20471)) ([639368d](639368d)) * tcmalloc enabled in docker images ([#20644](#20644)) ([b87c8ae](b87c8ae)) * trim attestations to the minimum required length ([#20591](#20591)) ([43caf7c](43caf7c)) * use native crypto to compute p2p message ID ([#20846](#20846)) ([fdd0d0d](fdd0d0d)) * Validate num txs in block proposals ([#20850](#20850)) ([f3f5438](f3f5438)) * worker thread wallet ([#20557](#20557)) ([639368d](639368d)) * World state history length is now defined in checkpoints ([#20566](#20566)) ([639368d](639368d)) ### Bug Fixes * (A-575) prevent checkpoint event spam in L2BlockStream on restart ([#20791](#20791)) ([fdd0d0d](fdd0d0d)) * `DelayedPublicMutable` not relying on the guarantee of increasing timestamps ([#20244](#20244)) ([a178034](a178034)) * allow compiling mixed (contract + noir script) aztec project ([#20428](#20428)) ([83ea202](83ea202)) * **archiver:** enforce checkpoint boundary on rollbackTo ([#20908](#20908)) ([f3f5438](f3f5438)) * async blob ([#20559](#20559)) ([639368d](639368d)) * async dispose() lint rule ([#20587](#20587)) ([639368d](639368d)) * async world state cleanups ([#20578](#20578)) ([639368d](639368d)) * attribute for L1 fee analysis for full blocks ([#20548](#20548)) ([63131de](63131de)) * **avm:** alu gadget fuzzer serialisation ([#19115](#19115)) ([50e778a](50e778a)) * **aztec-up:** install noir-profiler alongside nargo ([#20896](#20896)) ([f3f5438](f3f5438)) * charge 3.6M for epoch verification ([#20765](#20765)) ([fdd0d0d](fdd0d0d)) * **ci:** insufficient parallelism in merge-queue-heavy ([#20613](#20613)) ([5bfbd67](5bfbd67)) * **ci:** preserve both attempt logs when retrying flaky tests ([#20439](#20439)) ([639368d](639368d)) * default pp handling ([#20516](#20516)) ([f9431cd](f9431cd)) * do not ignore test artifacts ([#20574](#20574)) ([402f438](402f438)) * docs examples lockfile ([#20453](#20453)) ([4bf9ddd](4bf9ddd)) * escape hatch snapshots ([#20363](#20363)) ([e4712cd](e4712cd)) * **ethereum:** check timeout before consuming nonce in L1TxUtils ([#20501](#20501)) ([639368d](639368d)) * **ethereum:** remove viem NonceManager to fix nonce gap after failed sends ([#20819](#20819)) ([fdd0d0d](fdd0d0d)) * evicted transactions could reappear after a node restart ([#20773](#20773)) ([fdd0d0d](fdd0d0d)) * Fix checkpoint invalidation test ([#20579](#20579)) ([639368d](639368d)) * Fix the epoch long proving test ([#20617](#20617)) ([6414d9b](6414d9b)) * flag stripping error ([#20655](#20655)) ([b87c8ae](b87c8ae)) * getVotes return empty instead of stale data ([#20756](#20756)) ([fdd0d0d](fdd0d0d)) * hodgepodge of small things ([#20720](#20720)) ([43caf7c](43caf7c)) * increase waitForTx timeout in epochs_invalidate_block test ([#20603](#20603)) ([639368d](639368d)) * limit number of threads when verifying server-side proofs ([#20818](#20818)) ([fdd0d0d](fdd0d0d)) * min expiration timestamp instead of assert ([#20554](#20554)) ([fa29717](fa29717)) * misc minor contract fixes ([#20423](#20423)) ([3a13674](3a13674)) * **node:** sync ws before simulating public calls ([#20499](#20499)) ([639368d](639368d)) * **p2p:** fix compress option in file store and enable for tx uploads ([#20605](#20605)) ([639368d](639368d)) * **p2p:** wait for GossipSub mesh formation before sending txs in e2e tests ([#20626](#20626)) ([fdd0d0d](fdd0d0d)) * pass log level to AVM simulator ([#20762](#20762)) ([fdd0d0d](fdd0d0d)) * pxe native prover log level ([#20724](#20724)) ([fdd0d0d](fdd0d0d)) * Reduce tx hash conversions inside tx pool ([#20829](#20829)) ([fdd0d0d](fdd0d0d)) * respecting MAX_RPC_LEN limit in getAllLogsByTags ([#20543](#20543)) ([c2475bd](c2475bd)) * separate rejected and aborted proving jobs ([#20777](#20777)) ([fdd0d0d](fdd0d0d)) * Set Aztec slot duration as a multiple of the Ethereum slot duration ([#20608](#20608)) ([dedf440](dedf440)) * set PXE sync chain tip to proposed for scenario bot ([#20530](#20530)) ([639368d](639368d)) * skip default pp in sol aggregation ([#20521](#20521)) ([f9431cd](f9431cd)) * stringify all bigints in pino-logger ([#20303](#20303)) ([639368d](639368d)) * sync world state before forking in simulatePublicCalls ([#20544](#20544)) ([f3420e0](f3420e0)) * track last seen nonce in case of stale fallback L1 RPC node ([#20855](#20855)) ([83ea202](83ea202)) * **txe:** committing after txs ([#20714](#20714)) ([83ea202](83ea202)) * underflow in snapshot synch ([#20780](#20780)) ([fdd0d0d](fdd0d0d)) * Use async poseidon ([#20826](#20826)) ([fdd0d0d](fdd0d0d)) * use ci3_labels_to_env.sh for ci-external label ([#20597](#20597)) ([3efb1d9](3efb1d9)) * write pointers for environ_get and environ_sizes_get functions ([#20902](#20902)) ([f3f5438](f3f5438)) * yolo debugging tweaks ([0a9d6e0](0a9d6e0)) * yolo some fd cleanup, maybe stop hangs ([43d292c](43d292c)) ### Miscellaneous * include_by_timestamp -> expiration_timestamp ([#20536](#20536)) ([44a33a1](44a33a1)) * update vks ([4d653dd](4d653dd)) ### Documentation * document RevertCodeEnum phases and add 120-char line width rule ([#20751](#20751)) ([83ea202](83ea202)) * fix avm docs - l2 gas is not the same as mana ([#20565](#20565)) ([50e778a](50e778a)) * minor clarification ([#20788](#20788)) ([fdd0d0d](fdd0d0d)) * simulator readme typos ([#19701](#19701)) ([50e778a](50e778a)) * some tail circuit doc comments ([#20449](#20449)) ([fd509a3](fd509a3)) This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
BEGIN_COMMIT_OVERRIDE fix: track last seen nonce in case of stale fallback L1 RPC node (#20855) feat: Validate num txs in block proposals (#20850) fix(archiver): enforce checkpoint boundary on rollbackTo (#20908) fix: tps zero metrics (#20656) fix: handle scientific notation in bigintConfigHelper (#20929) feat(aztec): node enters standby mode on genesis root mismatch (#20938) fix: logging of class instances (#20807) feat(slasher): make slash grace period relative to rollup upgrade time (#20942) chore: add script to find PRs to backport (#20956) chore: remove unused prover-node dep (#20955) fix: increase minFeePadding in e2e_bot bridge resume tests and harden GasFees.mul() (#20962) feat(sequencer): (A-526) rotate publishers when send fails (#20888) chore: (A-554) bump reth version 1.6.0 -> 1.11.1 for eth devnet (#20889) chore: metric on how many epochs validator has been on committee (#20967) fix: set wallet minFeePadding in BotFactory constructor (#20992) chore: deflake epoch invalidate block test (#21001) chore(sequencer): e2e tests for invalid signature recovery in checkpoint attestations (#20971) chore: deflake duplicate proposals and attestations (#20990) chore: deflake epochs mbps test (#21003) feat: reenable function selectors in txPublicSetupAllowList (#20909) fix: limit offenses when voting in tally slashing mode by slashMaxPayloadSize (#20683) fix(spartan): wire SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT env var (#21017) END_COMMIT_OVERRIDE
This PR introduces additional block/checkpoint proposal validation to ensure `SEQ_MAX_TX_PER_BLOCK` is not breached. Also adds additional tests for existing validation criteria. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This PR introduces additional block/checkpoint proposal validation to ensure
SEQ_MAX_TX_PER_BLOCKis not breached. Also adds additional tests for existing validation criteria.