Skip to content

feat: Validate num txs in block proposals#20850

Merged
PhilWindle merged 3 commits intomerge-train/spartanfrom
pw/validate-num-txs
Feb 26, 2026
Merged

feat: Validate num txs in block proposals#20850
PhilWindle merged 3 commits intomerge-train/spartanfrom
pw/validate-num-txs

Conversation

@PhilWindle
Copy link
Collaborator

@PhilWindle PhilWindle commented Feb 25, 2026

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.

PhilWindle and others added 3 commits February 24, 2026 20:31
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>
@aminsammara
Copy link
Contributor

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".

Copy link
Contributor

@spalladino spalladino left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@PhilWindle
Copy link
Collaborator Author

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.

@PhilWindle PhilWindle enabled auto-merge (squash) February 26, 2026 17:35
@PhilWindle PhilWindle merged commit 38a2fa3 into merge-train/spartan Feb 26, 2026
21 checks passed
@PhilWindle PhilWindle deleted the pw/validate-num-txs branch February 26, 2026 17:35
AztecBot pushed a commit that referenced this pull request Feb 26, 2026
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.
@AztecBot
Copy link
Collaborator

✅ Successfully backported to backport-to-v4-staging #20906.

alexghr pushed a commit that referenced this pull request Feb 26, 2026
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.
alexghr added a commit that referenced this pull request Feb 26, 2026
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>
aminsammara pushed a commit that referenced this pull request Feb 27, 2026
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 -&gt; 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).
ludamad pushed a commit that referenced this pull request Feb 27, 2026
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 -&gt; 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).
@aminsammara
Copy link
Contributor

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.

I do think we should penalize the proposer (if we know who they are). I don't think this should be a slashing offence

aminsammara pushed a commit that referenced this pull request Feb 27, 2026
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 -&gt; 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).
aminsammara pushed a commit that referenced this pull request Feb 27, 2026
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 -&gt; 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).
github-merge-queue bot pushed a commit that referenced this pull request Mar 3, 2026
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
johnathan79717 pushed a commit that referenced this pull request Mar 4, 2026
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>
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