feat(world-state): add genesis timestamp support and GenesisData type#22359
Merged
spalladino merged 2 commits intomerge-train/spartanfrom Apr 8, 2026
Merged
feat(world-state): add genesis timestamp support and GenesisData type#22359spalladino merged 2 commits intomerge-train/spartanfrom
spalladino merged 2 commits intomerge-train/spartanfrom
Conversation
…#22201) ## Motivation The genesis block has `timestamp=0`, which forces a block 1 special case for transaction expiration validation. Transactions anchored to genesis get an expiration clamped to `0 + MAX_TX_LIFETIME` (~86400 = Jan 2 1970), making them impossible to include after block 1. This complicates e2e test setup by requiring empty block 1 mining and `minTxsPerBlock` manipulation. ## Approach Adds a `genesisTimestamp` parameter that flows through the full world state stack (C++ → NAPI → TypeScript), allowing the genesis block header to have a non-zero timestamp. Introduces a `GenesisData` type that bundles `prefilledPublicData` and `genesisTimestamp`, replacing the two separate parameters that were threaded everywhere. The e2e setup automatically passes the current time as the genesis timestamp. ## Changes - **New `GenesisData` type** (`stdlib/src/world-state/genesis_data.ts`) — bundles `prefilledPublicData` and `genesisTimestamp` into a single type - **C++ world state** — accepts `genesis_timestamp` parameter, uses it in the genesis block header hash - **TS world state stack** — `NativeWorldState`, `NativeWorldStateService`, factory, and synchronizer all take `GenesisData` - **Node/CLI** — `AztecNodeService.createAndSync`, `createAztecNode`, `start_node.ts`, `standby.ts` all use `GenesisData` - **E2e setup** — passes `genesisTimestamp: Date.now()` to genesis values; block 1 wait logic preserved - **~30 e2e/p2p test files** — `prefilledPublicData` references replaced with `genesis` - **New e2e test** — `e2e_genesis_timestamp.test.ts` verifies genesis-anchored txs work after block 1 --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
8fd3561 to
ef933b3
Compare
PhilWindle
approved these changes
Apr 8, 2026
…eak-genesis-time-2
github-merge-queue bot
pushed a commit
that referenced
this pull request
Apr 9, 2026
BEGIN_COMMIT_OVERRIDE chore: fix mempool limit test (#22332) fix(bot): bot fee juice funding (#21949) fix(foundation): flush current batch on BatchQueue.stop() (#22341) chore: (A-750) read JSON body then parse to avoid double stream consumption on error message (#22247) chore: bump log level in stg-public (#22354) chore: fix main.tf syntax (#22356) chore: wire up spartan checks to make (#22358) fix(p2p): reduce flakiness in proposal tx collector benchmark (#22240) fix: disable sponsored fpc and test accounts for devnet (#22331) chore: add v4-devnet-3 to tf network ingress (#22327) chore: remove unused env var (#22365) chore: add pdb (#22364) chore: dispatch CB on failed deployments (#22367) chore: (A-749) single character url join (#22269) feat: support different docker image for HA validator nodes (#22371) chore: fix the daily healthchecks (#22373) chore: remove v4-devnet-2 references (#22372) fix: rename #team-alpha → #e-team-alpha slack channel (#22374) chore(pipeline): timetable adjustments under pipelining (#21076) feat(pipeline): handle pipeline prunes (#21250) fix: handle error types serialization errors (#22379) feat(spartan): configurable HA validator replica count (#22384) fix(e2e): increase prune timeout in epochs_mbps_pipeline test (#22392) fix(epoch-cache): use TTL-based caching with finalization tracking and correct lag (#22204) chore: deflake e2e ha sync test (#22403) chore(ci): skip prunes-uncheckpointed test in epochs_mbps_pipeline (#22401) refactor(slasher): remove empire slasher model (#21830) fix: use strict equality in world-state ops queue (#22398) fix: remove unused BLOCK reqresp sub-protocol (#22407) refactor(sequencer): sign last block before archiver sync (#22117) feat(world-state): add genesis timestamp support and GenesisData type (#22359) fix: use Int64Value instead of Uint32Value for 64-bit map sizes (#22400) chore: Reduce logging verbosity (#22423) fix(p2p): include values in tx validation error messages (#22422) END_COMMIT_OVERRIDE
federicobarbacovi
added a commit
that referenced
this pull request
Apr 9, 2026
commit 4576993efe49404d2912bff9c9b94f963404232a
Merge: 2f77ec5dd4 3744482e4e
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date: Thu Apr 9 07:06:02 2026 +0000
feat: merge-train/spartan (#22352)
BEGIN_COMMIT_OVERRIDE
chore: fix mempool limit test (#22332)
fix(bot): bot fee juice funding (#21949)
fix(foundation): flush current batch on BatchQueue.stop() (#22341)
chore: (A-750) read JSON body then parse to avoid double stream
consumption on error message (#22247)
chore: bump log level in stg-public (#22354)
chore: fix main.tf syntax (#22356)
chore: wire up spartan checks to make (#22358)
fix(p2p): reduce flakiness in proposal tx collector benchmark (#22240)
fix: disable sponsored fpc and test accounts for devnet (#22331)
chore: add v4-devnet-3 to tf network ingress (#22327)
chore: remove unused env var (#22365)
chore: add pdb (#22364)
chore: dispatch CB on failed deployments (#22367)
chore: (A-749) single character url join (#22269)
feat: support different docker image for HA validator nodes (#22371)
chore: fix the daily healthchecks (#22373)
chore: remove v4-devnet-2 references (#22372)
fix: rename #team-alpha → #e-team-alpha slack channel (#22374)
chore(pipeline): timetable adjustments under pipelining (#21076)
feat(pipeline): handle pipeline prunes (#21250)
fix: handle error types serialization errors (#22379)
feat(spartan): configurable HA validator replica count (#22384)
fix(e2e): increase prune timeout in epochs_mbps_pipeline test (#22392)
fix(epoch-cache): use TTL-based caching with finalization tracking and
correct lag (#22204)
chore: deflake e2e ha sync test (#22403)
chore(ci): skip prunes-uncheckpointed test in epochs_mbps_pipeline
(#22401)
refactor(slasher): remove empire slasher model (#21830)
fix: use strict equality in world-state ops queue (#22398)
fix: remove unused BLOCK reqresp sub-protocol (#22407)
refactor(sequencer): sign last block before archiver sync (#22117)
feat(world-state): add genesis timestamp support and GenesisData type
(#22359)
fix: use Int64Value instead of Uint32Value for 64-bit map sizes (#22400)
chore: Reduce logging verbosity (#22423)
fix(p2p): include values in tx validation error messages (#22422)
END_COMMIT_OVERRIDE
commit 2f77ec5dd4d68861c268ec5b87f8e2111bf1c13d
Merge: d7934b93bd e089081a9b
Author: federicobarbacovi <171914500+federicobarbacovi@users.noreply.github.com>
Date: Thu Apr 9 06:53:03 2026 +0000
feat: merge-train/barretenberg (#22363)
BEGIN_COMMIT_OVERRIDE
fix: addresses logic audit findings (#22304)
chore: fix asm_self_* field arithmetic signatures (#22353)
fix: polynomials module audit response (#22361)
chore: UB updates (#22308)
fix: increase test timeout for heavy recursion tests in debug build
(#22347)
chore: origin tag updates (#22307)
chore: ECCVM QoL — operator precedence fix, assert correctness,
documentation (#22351)
fix: minor bigfield fixes - take 2 (#22415)
chore: decouple perm arg boundary from shiftability assumptions (#22396)
END_COMMIT_OVERRIDE
commit 3744482e4e00aa907e2d913ea3617cfdfd888eca
Merge: 2105f38406 d7934b93bd
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 20:29:43 2026 +0000
Merge branch 'next' into merge-train/spartan
commit e089081a9bbabe09727a21022dab7bd9e2f4c2d6
Merge: 517f44f97a d7934b93bd
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 20:29:34 2026 +0000
Merge branch 'next' into merge-train/barretenberg
commit 2105f38406b8bcdd1facac3dba38ca184df56887
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date: Wed Apr 8 17:17:39 2026 -0300
fix(p2p): include values in tx validation error messages (#22422)
When a transaction fails validation (e.g. insufficient balance, gas
limits out of bounds), the error returned to the client is a static
string like "Insufficient fee payer balance" with no context. Users have
to guess what went wrong. The validators already have the relevant
values (balance, fee limit, gas limits) and log them server-side, but
don't include them in the error reason returned to the client.
Append contextual values to each error reason string in `GasTxValidator`
and `GasLimitsValidator`. The base error constant is preserved as a
prefix so existing substring-based assertions (e2e tests using
`toThrow`) continue to work. Refactored `#shouldSkip` to
`#getSkipReason` so the fee-per-gas skip path can also include values.
- **p2p (gas_validator.ts)**: All five validation error paths now
include values in the reason string: fee payer balance
(`required`/`available`), gas limits (`required`/`got` or
`limit`/`max`), and fee per gas (`maxFee`/`required`)
- **p2p (gas_validator.test.ts)**: Updated test helpers and assertions
to use substring matching (`toContain`/`stringContaining`) since error
messages now have dynamic suffixes
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
commit 5f9e1db1e8879ce2b1991166b6264f9d4d80b9ea
Merge: 91295ec376 8727397949
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 20:12:59 2026 +0000
Merge branch 'next' into merge-train/spartan
commit 517f44f97a6ed5f9cad56fe5068b20f4d9e3fbd9
Merge: 4fbef345b1 8727397949
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 20:12:49 2026 +0000
Merge branch 'next' into merge-train/barretenberg
commit 91295ec376232f0a67c01ae02f9c00ce5ecefaa4
Author: PhilWindle <60546371+PhilWindle@users.noreply.github.com>
Date: Wed Apr 8 20:45:21 2026 +0100
chore: Reduce logging verbosity (#22423)
PR to simply reduce an annoying logline to debug.
commit d7934b93bdb4ea5b0124f407874469c72a6102f3
Merge: 8727397949 53dd9bcade
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date: Wed Apr 8 19:29:35 2026 +0000
feat: merge-train/fairies (#22390)
BEGIN_COMMIT_OVERRIDE
fix(pxe): support custom PrivateKernelProver and unify
EmbeddedWalletOptions (#22348)
fix: subfield note selectors (#22211)
fix: pass additionalScopes to executeUtility (#22411)
feat(e2e): support running tests against legacy noir contract artifacts
(#22410)
END_COMMIT_OVERRIDE
commit 87273979490b2e6817972631d77e4e82f58d147b
Merge: abdb834199 0335cfdd60
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date: Wed Apr 8 19:29:27 2026 +0000
feat: merge-train/avm (#22418)
BEGIN_COMMIT_OVERRIDE
chore(avm)!: Apply standard multi-row recipe everywhere (#22279)
END_COMMIT_OVERRIDE
commit 27bf3fb551f04057df1ef9c82da76cb8cac61c34
Merge: 5e8f0f6418 abdb834199
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 17:57:53 2026 +0000
Merge branch 'next' into merge-train/spartan
commit 53dd9bcade8129ed5a7e822d9c270157bf62568e
Merge: 1d84e85a5c abdb834199
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 17:57:49 2026 +0000
Merge branch 'next' into merge-train/fairies
commit 4fbef345b1f7e2f039175e1f74a68b1fd6d358f9
Merge: a6c119f89a abdb834199
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 17:57:41 2026 +0000
Merge branch 'next' into merge-train/barretenberg
commit 0335cfdd6044f387d6503131fadd9a91c9e63f2c
Merge: c527917300 abdb834199
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 17:57:38 2026 +0000
Merge branch 'next' into merge-train/avm
commit abdb834199d4f0aaeb859d755918544d13f64c9d
Merge: b68c85535e 4111e2357a
Author: josh crites <jc@joshcrites.com>
Date: Wed Apr 8 17:21:31 2026 +0000
fix(docs): update networks page for Alpha phase, fix contract addresses and unstaking delay (#22419)
Updates contract addresses and unstaking documentation to reflect the
current on-chain state.
- Updated **Reward Booster** mainnet address (`0x7101a...` →
`0x1cbb7...`)
- Updated **Tally Slashing Proposer** mainnet address (`0x7a318...` →
`0xa4a38...`)
- Fixed **Slasher** testnet address — was incorrectly showing
`0xf6D0D42...`, corrected to `0xCF750B7...`
- Added **Honk Verifier** mainnet address (`0x70aed...`) — was
previously N/A
- Added **Slash Payload Cloneable** mainnet address (`0xAA432...`) — was
previously N/A
- Fixed trailing pipe formatting on Slash Payload Cloneable row
- Replaced preprocessor conditional (`#if(testnet)/#else/#endif`) with a
table showing delays for both networks
- Added **governance withdrawal delay** info (~38 days mainnet, ~1.6
days testnet) with formula explanation
- Clarified distinction between staking exit delay and governance
withdrawal delay
This branch includes changes from `merge-train/avm` (#22394):
- `barretenberg/cpp/pil/vm2/` — comment fixes in data_copy.pil and
gas.pil
- `yarn-project/` — `resumeSync` flag for `rollbackTo` to fix offchain
payment flake (#22230)
commit 4111e2357afe99c9fd808e8c35c8dfd7a943d397
Author: Codespace <codespace@aztec.dev>
Date: Wed Apr 8 13:02:09 2026 -0400
fix(docs): update Reward Booster and Tally Slashing Proposer mainnet addresses
commit a94217e7cf17be0ffccc5666249da01f63fe0a0f
Merge: ea565cd8dd b68c85535e
Author: Codespace <codespace@aztec.dev>
Date: Wed Apr 8 16:54:59 2026 +0000
fix: resolve merge conflicts with next in networks.md
Merge resolution strategy:
- Reward Booster mainnet: took next's updated address
- Slasher testnet: kept branch's address (next had duplicate of Rollup address)
- Tally Slashing Proposer mainnet: took next's updated address
- Honk Verifier mainnet: kept branch's addition (was N/A in next)
- Slash Payload Cloneable mainnet: kept branch's addition (was N/A in next)
- Execution Delay: took next's 7 days value
commit a6c119f89a45e0126be16c3e161f822d81449b6e
Author: sergei iakovenko <105737703+iakovenkos@users.noreply.github.com>
Date: Wed Apr 8 18:36:19 2026 +0200
chore: decouple perm arg boundary from shiftability assumptions (#22396)
making `z_perm` boundary constraint less brittle, previously we implicitly used the fact that it's opened as a shifted poly in gemini implying `z_perm(0) = 0`. as a prerequisite for placing zk masking scalars at the top of the trace, we need to explicitly constrain `z_perm * Lagrange_first = 0`
commit 564da2b83372a35ebb0916cfa8769397b9020df8
Author: Suyash Bagad <suyash@aztecprotocol.com>
Date: Wed Apr 8 18:26:50 2026 +0200
fix: minor bigfield fixes - take 2 (#22415)
List of fixes (none of them should change circuits):
- Adds a missing reconstruction constraint in
`decompose_non_native_field_double_width_limb` to ensure the
reconstructed value matches the original input.
- Asserts `r_lo` is nonzero in `validate_split_in_field_unsafe`, closing
a soundness gap where a zero low limb could pass unchecked.
- Removes unreachable dead code in the carry bit computation path.
- Changes `batch_mul` default to `with_edgecases=true` to avoid
incorrect results on edge-case inputs.
- Adds boundary tests for the byte array constructor.
resolves
https://github.com/AztecProtocol/barretenberg-claude/issues/2433
commit ea565cd8ddd997a0e92d26484c96651654da8c26
Author: AztecBot <tech@aztec-labs.com>
Date: Wed Apr 8 16:26:43 2026 +0000
fix(docs): correct contract addresses, add HonkVerifier mainnet, fix execution delay and unstaking info
- Reward Booster mainnet: 0x1cbb707... (verified via Rollup.getRewardConfig)
- TallySlashingProposer mainnet: 0xa4a38fD0... (verified via Slasher.PROPOSER)
- SlashPayloadCloneable mainnet: 0xAA43220b... (verified via TallySlashingProposer.SLASH_PAYLOAD_IMPLEMENTATION)
- HonkVerifier mainnet: 0x70aedda4... (provided by Josh)
- Slasher testnet: 0xCF750B72... (was showing Rollup address, verified via Rollup.getSlasher)
- Execution Delay mainnet: 30 days (was 7 days, verified via Governance.getConfiguration)
- Replace conditional unstaking delay with table showing both networks and governance withdrawal delay (~38 days)
commit a43f4056bc20c158ea706f97e3fe6d26badb32bd
Author: AztecBot <tech@aztec-labs.com>
Date: Wed Apr 8 16:19:27 2026 +0000
fix(docs): update mainnet addresses from Robert, add HonkVerifier, fix execution delay
- Reward Booster mainnet: 0x1cbb707bd7b4fd2bced6d96d84372fb428e93d80 (verified via Rollup.getRewardConfig)
- TallySlashingProposer mainnet: 0xa4a38fD0108C00983E75616b638Ff3321FD26958 (verified via Slasher.PROPOSER)
- SlashPayloadCloneable mainnet: 0xAA43220b7eb7c8Ffe75bc9C483f3C07b0a55B445 (verified via TallySlashingProposer.SLASH_PAYLOAD_IMPLEMENTATION)
- HonkVerifier mainnet: 0x70aedda427f26480d240bc0f4308cedec8d31348
- Execution Delay mainnet: 30 days (was 7 days, verified via Governance.getConfiguration)
- Add governance withdrawal delay (~38 days) to staking docs
commit 364646ea1ad987b2058316a3fbcc8cba39cd2da0
Author: AztecBot <tech@aztec-labs.com>
Date: Wed Apr 8 15:27:15 2026 +0000
fix(docs): align with Alpha phase, remove Devnet, fix addresses and unstaking delay
- Rename Ignition → Alpha (Mainnet) throughout
- Remove Devnet column from all tables (deprecated)
- Update mainnet addresses to new Alpha deployment (Rollup, Inbox, Outbox, etc.)
- Fix Slasher testnet address (was showing Rollup address)
- Add Slash Payload Cloneable mainnet address (was N/A)
- Update Sponsored FPC: now available on testnet
- Remove Use Case Suitability section (apps can be developed)
- Replace unstaking delay conditional with table showing both networks
- Update descriptions and links to reflect Alpha phase
commit a564927857a9d75845a5bc839d1aa7909313b5bf
Author: AztecBot <tech@aztec-labs.com>
Date: Wed Apr 8 15:15:47 2026 +0000
fix(docs): update outdated network info, contract addresses, and unstaking delay
commit c527917300fbda42f6c6e4bbd26d8f6d83e6e121
Author: Jean M <132435771+jeanmon@users.noreply.github.com>
Date: Wed Apr 8 17:06:12 2026 +0200
chore(avm)!: Apply standard multi-row recipe everywhere (#22279)
Linear issue:
[AVM-244](https://linear.app/aztec-labs/issue/AVM-244/review-multi-rows-computation-instances-prevent-truncation)
commit 5e8f0f64187cd0d84db64f1c7f0e5b3d45d87d85
Author: PhilWindle <60546371+PhilWindle@users.noreply.github.com>
Date: Wed Apr 8 16:00:29 2026 +0100
fix: use Int64Value instead of Uint32Value for 64-bit map sizes (#22400)
- Replace `Uint32Value()` with `Int64Value()` when reading LMDB map
sizes from JS
- Affects `lmdb_store_wrapper.cpp` and `world_state.cpp` — 3 call sites
- `Uint32Value()` silently truncates values above 4 GiB; `Int64Value()`
is the widest integer accessor available in N-API
Fixes A-849
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
commit bd53d99706374f76ee5ada14b92050e0d4fc42b1
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date: Wed Apr 8 11:59:51 2026 -0300
feat(world-state): add genesis timestamp support and GenesisData type (#22359)
Retry for #22201
The genesis block has `timestamp=0`, which forces a block 1 special case
for transaction expiration validation. Transactions anchored to genesis
get an expiration clamped to `0 + MAX_TX_LIFETIME` (~86400 = Jan 2
1970), making them impossible to include after block 1. This complicates
e2e test setup by requiring empty block 1 mining and `minTxsPerBlock`
manipulation.
Adds a `genesisTimestamp` parameter that flows through the full world
state stack (C++ → NAPI → TypeScript), allowing the genesis block header
to have a non-zero timestamp. Introduces a `GenesisData` type that
bundles `prefilledPublicData` and `genesisTimestamp`, replacing the two
separate parameters that were threaded everywhere. The e2e setup
automatically passes the current time as the genesis timestamp.
- **New `GenesisData` type** (`stdlib/src/world-state/genesis_data.ts`)
— bundles `prefilledPublicData` and `genesisTimestamp` into a single
type
- **C++ world state** — accepts `genesis_timestamp` parameter, uses it
in the genesis block header hash
- **TS world state stack** — `NativeWorldState`,
`NativeWorldStateService`, factory, and synchronizer all take
`GenesisData`
- **Node/CLI** — `AztecNodeService.createAndSync`, `createAztecNode`,
`start_node.ts`, `standby.ts` all use `GenesisData`
- **E2e setup** — passes `genesisTimestamp: Date.now()` to genesis
values; block 1 wait logic preserved
- **~30 e2e/p2p test files** — `prefilledPublicData` references replaced
with `genesis`
- **New e2e test** — `e2e_genesis_timestamp.test.ts` verifies
genesis-anchored txs work after block 1
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
commit 5504ba5596bdb390017ceffc30c8c6647b8c1cfe
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date: Wed Apr 8 11:38:28 2026 -0300
refactor(sequencer): sign last block before archiver sync (#22117)
The last block in a checkpoint was being synced to the archiver _before_
passing through the HA signing gate. If HA signing failed afterwards,
the archiver would be polluted with a block that never made it on-chain.
Reorder the block-building loop so that block proposal signing and
archiver sync happen in the same order for all blocks (sign first, sync
second), not just for non-last blocks. Pass the already-signed
`BlockProposal` through to `CheckpointProposal.createProposalFromSigner`
instead of raw block data.
Unrelated to the above, we replaced `undefined` returns from
`buildSingleBlock` with typed `{ failure: 'insufficient-txs' |
'insufficient-valid-txs' }` objects, so the failure reason is made
explicit.
- **sequencer-client**: Reorder block-building loop so signing happens
before archiver sync for all blocks (including last). Simplify
`blockPendingBroadcast` to just `BlockProposal | undefined`. Return
typed failure objects from `buildSingleBlock` instead of `undefined`.
Update caller to check `'failure' in buildResult`.
- **stdlib**: `CheckpointProposal.createProposalFromSigner` accepts
`BlockProposal | undefined` instead of `CheckpointLastBlockData`. Remove
`CreateCheckpointProposalLastBlockData` type. Update
`makeCheckpointProposal` test helper to create a real `BlockProposal`
via `makeBlockProposal`.
- **validator-client**: Update `Validator` interface, `ValidatorClient`,
and `ValidationService` to pass `BlockProposal` instead of raw block
data for checkpoint proposal creation.
- **tests**: Update assertions from `toBeUndefined()` to `toEqual({
failure: ... })`, update signing-context test to reflect that only
checkpoint signing happens in `createCheckpointProposal`.
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
commit 1d84e85a5ccbc5ab5d18ffb98bb7efe6fc4914ea
Author: Jan Beneš <janbenes1234@gmail.com>
Date: Wed Apr 8 21:29:41 2026 +0700
feat(e2e): support running tests against legacy noir contract artifacts (#22410)
commit 46755cb98d3ff72b80c60dc4f72381f158b8113f
Author: PhilWindle <60546371+PhilWindle@users.noreply.github.com>
Date: Wed Apr 8 15:26:11 2026 +0100
fix: remove unused BLOCK reqresp sub-protocol (#22407)
- Remove the dead BLOCK req/resp sub-protocol from the P2P layer
- The protocol was fully wired up (handler, validator, rate limits,
metrics) but never called as a client — no production code ever
requested blocks from peers via this protocol
- The validator was also broken: it rejected responses when the local
node didn't have the block, which is the exact scenario where you'd want
to request it
- Removes enum member, protocol constant, handler, validator, rate
limits, metrics entry, mock helpers, and all associated tests
- 9 files changed, ~215 lines deleted
Fixes A-860
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
commit a07850d7bf69c15b5f0354c0f6e9125a07479516
Author: Gregorio Juliana <gregojquiros@gmail.com>
Date: Wed Apr 8 16:21:06 2026 +0200
fix: pass additionalScopes to executeUtility (#22411)
Necessary to enable patterns like the `Immutables` macro. Wallets still
need to verify scopes forwarded from the app, so this is harmless and
useful
commit d093674717a24bf554bad9362e7218f9eaa92dd2
Merge: 85bbd01029 b68c85535e
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 14:09:24 2026 +0000
Merge branch 'next' into merge-train/fairies
commit bedf77ccb4e2b426ce28563f50eba39c326ab0b4
Merge: 49ee003af1 b68c85535e
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 14:09:14 2026 +0000
Merge branch 'next' into merge-train/barretenberg
commit 27d80aa8c5904593a89713124a922e7de7e21a7c
Author: PhilWindle <60546371+PhilWindle@users.noreply.github.com>
Date: Wed Apr 8 15:03:45 2026 +0100
fix: use strict equality in world-state ops queue (#22398)
- Replace loose equality (`==`/`!=`) with strict equality (`===`/`!==`)
in `world_state_ops_queue.ts`
- 5 instances in concurrency-critical queue dispatch logic
Fixes A-733
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
commit 0ea1d34aef64d5013fb0a6f72bccf1405f882472
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date: Wed Apr 8 10:38:08 2026 -0300
refactor(slasher): remove empire slasher model (#21830)
The empire slashing model was developed during an earlier iteration but
never tested in a real network. The tally model is the only one in
production use. The empire code adds ~5000 lines of unnecessary
complexity across L1 contracts, TypeScript, deployment scripts, and
configuration with no benefit.
Fixes A-670
Removed all empire-slasher-specific code while preserving shared
governance infrastructure (`EmpireBase`, `IEmpire`) that the
`GovernanceProposer` depends on. Also removed the `SlashFactory`
periphery contract (empire-only), the
`slashMinPenaltyPercentage`/`slashMaxPenaltyPercentage` config fields
(empire-only), replaced the `SlasherFlavor` enum with a simple
`slasherEnabled` boolean, and renamed all
`TallySlashingProposer`/`TallySlasherClient` types to
`SlashingProposer`/`SlasherClient` since "tally" is now redundant.
- **Env var**: `AZTEC_SLASHER_FLAVOR` (string `"tally"|"none"`) replaced
with `AZTEC_SLASHER_ENABLED` (boolean)
- **Env vars removed**: `SLASH_MIN_PENALTY_PERCENTAGE`,
`SLASH_MAX_PENALTY_PERCENTAGE`
- **Node admin API**: `getSlashPayloads()` method removed
- **Deploy outputs**: `slashFactoryAddress` removed
- **L1 contracts**: `SlasherFlavor` enum removed;
`RollupConfigInput.slasherFlavor` replaced with `slasherEnabled: bool`;
`TallySlashingProposer` renamed to `SlashingProposer`; `SlashFactory`
contract removed
- **TS config**: `slasherFlavor: 'tally' | 'none'` replaced with
`slasherEnabled: boolean`;
`slashMinPenaltyPercentage`/`slashMaxPenaltyPercentage` removed from
`SlasherConfig`
- **l1-contracts**: Deleted `EmpireSlashingProposer.sol`,
`EmpireSlasherDeploymentExtLib.sol`, `SlashFactory.sol`,
`ISlashFactory.sol`, and empire slashing tests. Replaced `SlasherFlavor`
enum with `bool slasherEnabled`. Renamed `TallySlashingProposer` to
`SlashingProposer` and `TallySlasherDeploymentExtLib` to
`SlasherDeploymentExtLib`.
- **slasher**: Deleted `EmpireSlasherClient`, `SlasherPayloadsStore`,
and all empire helpers. Removed `getSlashPayloads()` from the interface.
Renamed `TallySlasherClient` to `SlasherClient`. Updated README.
- **stdlib**: Deleted empire slashing helpers, `SlashFactoryContract`
wrapper, `SlashPayload`/`SlashPayloadRound` types. Removed empire action
variants from `ProposerSlashAction`. Removed
`slashMinPenaltyPercentage`/`slashMaxPenaltyPercentage` from
`SlasherConfig`.
- **ethereum**: Deleted `EmpireSlashingProposerContract` and
`SlashFactory` artifacts. Removed `slashFactoryAddress` from
`L1ContractAddresses`. Replaced `slasherFlavor` with `slasherEnabled:
boolean`. Renamed `TallySlashingProposerContract` to
`SlashingProposerContract`.
- **sequencer-client**: Removed empire action handling from
`SequencerPublisher`. Removed `SlashFactoryContract`. Updated types to
use renamed slasher classes.
- **end-to-end**: Removed empire branches from slash tests and
`slash_veto_demo`. Removed `SlashFactory` from test setup.
- **spartan/terraform**: Replaced `AZTEC_SLASHER_FLAVOR` with
`AZTEC_SLASHER_ENABLED`. Removed
`SLASH_MIN_PENALTY_PERCENTAGE`/`SLASH_MAX_PENALTY_PERCENTAGE` and
`slashFactoryAddress` from helm, terraform, and deploy scripts.
- **cli, archiver, aztec-node, pxe**: Removed `slashFactoryAddress` and
`getSlashPayloads` references.
- **docs**: Added migration notes for breaking changes.
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
commit b68c85535e9e42b47b643290fc463a282b5fa092
Merge: f3f42bd345 6ddaab00b9
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date: Wed Apr 8 13:30:20 2026 +0000
feat: merge-train/avm (#22394)
BEGIN_COMMIT_OVERRIDE
chore: fix broken comments found by claude (#22382)
END_COMMIT_OVERRIDE
commit 374350abd9aaaa8388c389d0c418e155cf109730
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date: Wed Apr 8 09:24:01 2026 -0400
chore(ci): skip prunes-uncheckpointed test in epochs_mbps_pipeline (#22401)
The "prunes uncheckpointed blocks when proposer fails to deliver" test
in `epochs_mbps.pipeline.parallel.test.ts` consistently times out in CI,
even after the timeout bump in #22392.
Adding `skip: true` in `.test_patterns.yml` to unblock the merge train
while the underlying timing issue is investigated.
ClaudeBox log: https://claudebox.work/s/94ade5ccbe68dc27?run=3
commit 9e9ac7549fe1fd1259b72da0f2f8d72f0339f309
Merge: 3d1b45f673 f3f42bd345
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 13:07:07 2026 +0000
Merge branch 'next' into merge-train/spartan
commit 85bbd01029e7f5f295870b34b0d0bda9ccf6bc06
Merge: 88c479873d f3f42bd345
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 13:07:04 2026 +0000
Merge branch 'next' into merge-train/fairies
commit 49ee003af1e5104ca0b3e00d08da6d3a70b62cc9
Merge: 920122bfa3 f3f42bd345
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 13:06:57 2026 +0000
Merge branch 'next' into merge-train/barretenberg
commit 6ddaab00b92a3e7e7f25f328424392edc978ca73
Merge: 2d57b83d65 f3f42bd345
Author: AztecBot <tech@aztecprotocol.com>
Date: Wed Apr 8 13:06:55 2026 +0000
Merge branch 'next' into merge-train/avm
commit 3d1b45f673b39b8c2e043d1bd070c9d5e3c61f2e
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date: Wed Apr 8 09:42:56 2026 -0300
chore: deflake e2e ha sync test (#22403)
Test was failing with:
```
15:21:49 Error warping: InvalidParamsRpcError: Invalid parameters were provided to the RPC method.
15:21:49 Double check you have provided the correct parameters.
15:21:49
15:21:49 URL: http://127.0.0.1:8545/
15:21:49 Request body: {"method":"evm_setNextBlockTimestamp","params":[1775575740]}
15:21:49
15:21:49 Details: Timestamp error: 1775575740 is lower than previous block's timestamp
15:21:49 Version: viem@2.38.2
15:21:49
15:21:49 250 | }
15:21:49 251 | } catch (err) {
15:21:49 > 252 | throw new Error(`Error warping: ${err}`);
15:21:49 | ^
15:21:49 253 | } finally{
15:21:49 254 | // Restore interval mining so the next block is mined in `blockInterval` seconds from this one
15:21:49 255 | if (opts.resetBlockInterval && blockInterval !== null && blockInterval > 0) {
15:21:49
15:21:49 at EthCheatCodes.warp (../../ethereum/dest/test/eth_cheat_codes.js:252:19)
15:21:49 at Object.<anonymous> (e2e_epochs/epochs_ha_sync.test.ts:157:5)
```
commit 2730d08d7d26d9f31587ce0a381a156c03db3608
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date: Wed Apr 8 09:42:34 2026 -0300
fix(epoch-cache): use TTL-based caching with finalization tracking and correct lag (#22204)
PR #22153 introduced a hard "finalized block guard" that refuses to
compute committees if L1 data isn't finalized. While the safety goal is
valid (preventing L1 reorgs from invalidating cached committees), it
breaks many tests that don't properly set L1 finalized time and would
cause the chain to stall if L1 stops finalizing. This PR takes a
different approach that preserves safety while maintaining liveness.
Also fixes the lag parameter: the old code used
`lagInEpochsForValidatorSet` (the looser constraint) instead of
`lagInEpochsForRandao` (the binding one), and computed the sampling
timestamp from the slot rather than the epoch start.
Fixes A-680
Instead of refusing to serve committee data that isn't finalized, use a
TTL-based cache: finalized entries are cached permanently, non-finalized
entries expire after one Ethereum slot (12s) and get re-fetched from L1.
The cache map stores both resolved entries and in-flight promises
directly, so concurrent callers for the same epoch coalesce on a single
L1 query. On fetch failure, the previous stale entry is restored so the
next caller retries cleanly.
- **epoch-cache**: Replaced the simple `Map<EpochNumber,
EpochCommitteeInfo>` cache with `Map<EpochNumber, CachedEpochEntry |
Promise<CachedEpochEntry>>`. Each resolved entry carries L1 block
provenance metadata (number, hash, timestamp) and a `finalized` flag.
Switched from `lagInEpochsForValidatorSet` to `lagInEpochsForRandao` and
compute sampling timestamp from epoch start via
`getStartTimestampForEpoch`. Simplified `isEscapeHatchOpen` to delegate
cache management to `getCommittee`.
- **epoch-cache (tests)**: Updated unit tests for the new cache
structure. Added 4 new TTL tests: re-query after TTL, no re-query for
finalized, concurrent coalescing, eventual finalization promotion.
- **epoch-cache (integration tests)**: New integration test suite
against real Anvil with deployed L1 contracts and 4 validators. Tests
finalized committee retrieval, non-finalized TTL refresh, and cache
re-fetch after L1 reorg.
- **epoch-cache (README)**: Added comprehensive documentation covering
committee computation, LAG values, RANDAO seed, proposer selection,
escape hatch, TTL caching with finalization tracking, and configuration.
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
commit f3f42bd3454fb304cb0edd7586c6d65cf7629078
Merge: c6042dd4f6 273ea981d9
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date: Wed Apr 8 12:09:14 2026 +0000
fix(e2e): add resumeSync flag to rollbackTo to fix offchain payment flake (#22230)
Fixes flaky `e2e_offchain_payment` test ("reprocesses an
offchain-delivered payment after an L1 reorg").
`rollbackTo()` unconditionally resumes archiver + world state sync in
its `finally` block. After a shallow L1 reorg (1 block), the archiver
immediately re-downloads the same checkpoint and the PXE re-syncs before
the test can verify post-rollback balances. Offchain-delivered notes
(stored as capsules, which have no rollback mechanism) get re-processed
during re-sync, restoring Alice's balance to 60n instead of the expected
100n.
- **`AztecNodeAdmin.rollbackTo`**: Added `resumeSync` parameter (default
`true`) that controls whether sync is resumed after rollback. Existing
callers are unaffected.
- **`e2e_offchain_payment.test.ts`**: `forceReorg` passes
`resumeSync=false` to keep sync paused during post-rollback balance
checks, then explicitly calls `resumeSync()` before `forceEmptyBlock`.
Full analysis:
https://gist.github.com/AztecBot/219f8ed5b6a30a74deb4f22f93c39dc4
- `e2e_offchain_payment` reorg test should pass consistently since sync
is atomically kept paused (no race window)
- Second half of the test (verifying offchain notes are reprocessed
after re-sync) unaffected since sync is explicitly resumed before
`forceEmptyBlock`
- All existing callers of `rollbackTo` use the default
(`resumeSync=true`) and are unaffected
commit 273ea981d9f63371eabb2733bea2e2c250a9917f
Author: AztecBot <49558828+AztecBot@users.noreply.github.com>
Date: Wed Apr 8 10:40:18 2026 +0000
fix(e2e): add resumeSync flag to rollbackTo to fix offchain payment flake
Fixes flaky `e2e_offchain_payment` test ("reprocesses an offchain-delivered payment after an L1 reorg").
`rollbackTo()` unconditionally resumes archiver + world state sync in its `finally` block. After a shallow L1 reorg (1 block), the archiver immediately re-downloads the same checkpoint and the PXE re-syncs before the test can verify post-rollback balances. Offchain-delivered notes (stored as capsules, which have no rollback mechanism) get re-processed during re-sync, restoring Alice's balance to 60n instead of the expected 100n.
- **`AztecNodeAdmin.rollbackTo`**: Added `resumeSync` parameter (default `true`) that controls whether sync is resumed after rollback. Existing callers are unaffected.
- **`e2e_offchain_payment.test.ts`**: `forceReorg` passes `resumeSync=false` to keep sync paused during post-rollback balance checks, then explicitly calls `resumeSync()` before `forceEmptyBlock`.
Full analysis: https://gist.github.com/AztecBot/219f8ed5b6a30a74deb4f22f93c39dc4
- `e2e_offchain_payment` reorg test should pass consistently since sync is atomically kept paused (no race window)
- Second half of the test (verifying offchain notes are reprocessed after re-sync) unaffected since sync is explicitly resumed before `forceEmptyBlock`
- All existing callers of `rollbackTo` use the default (`resumeSync=true`) and are unaffected
commit 88c479873d4c745741f641eecc707e1f0e3495ce
Author: Gregorio Juliana <gregojquiros@gmail.com>
Date: Wed Apr 8 11:41:18 2026 +0200
fix: subfield note selectors (#22211)
Closes:
https://linear.app/aztec-labs/issue/F-492/propertyselectoroffset-noirtypescript-semantic-mismatch
While it was intended to be supported, this was never really tested.
Added ts-only and e2e verification for a packed note.
commit 2d57b83d65512566ddd80b682b5ddfaf45ab096b
Author: David Banks <47112877+dbanks12@users.noreply.github.com>
Date: Wed Apr 8 04:59:13 2026 -0400
chore: fix broken comments found by claude (#22382)
minor comment fixes
commit f2a6006bf9c279b87e16d40ab47396668a564743
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date: Wed Apr 8 04:50:56 2026 -0400
fix(e2e): increase prune timeout in epochs_mbps_pipeline test (#22392)
Fixes timeout in "prunes uncheckpointed blocks when proposer fails to
deliver" test that was blocking merge-train/spartan from merging into
next.
The prune detection timeout of `L2_SLOT_DURATION_IN_S * 3` (108s) is
exactly at the worst-case boundary. After `executeTimeout` starts, three
things must happen sequentially:
1. Wait for the proposer's slot to arrive (up to 1 L2 slot = 36s)
2. Proposer builds blocks and skips publishing (during the slot)
3. L1 advances past the slot boundary so the archiver detects the prune
(up to 1 L2 slot = 36s)
In CI, total was 119s — exceeding the 108s timeout by 11s. The prune
event did fire (on validator-4 at 08:00:37), but 11 seconds after the
timeout had already triggered teardown and stopped all archivers.
Increased to `L2_SLOT_DURATION_IN_S * 5` (180s) for comfortable margin.
ClaudeBox log: https://claudebox.work/s/94ade5ccbe68dc27?run=1
commit a5f9e388152faad8e8f17edf54d158b1775d04ec
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date: Wed Apr 8 04:49:38 2026 -0400
feat(spartan): configurable HA validator replica count (#22384)
Makes validator and HA validator pod counts independently configurable.
Adds two new optional variables:
- **`VALIDATOR_PRIMARY_REPLICA_COUNT`**: Override pod count for the
primary validator release (defaults to `VALIDATOR_REPLICAS`)
- **`VALIDATOR_HA_REPLICA_COUNT`**: Override pod count for HA validator
releases (defaults to `VALIDATOR_REPLICAS`)
`VALIDATOR_REPLICAS` remains the canonical "node slot count" used for
key derivation and publisher key stride. The new variables only affect
how many pods each release runs.
Sets staging-public to run **2 primary validators + 4 HA validators**:
```
VALIDATOR_REPLICAS=4 # 4 node slots (256 attesters)
VALIDATOR_PRIMARY_REPLICA_COUNT=2 # 2 primary pods
VALIDATOR_HA_REPLICAS=1 # 1 HA release
VALIDATOR_HA_REPLICA_COUNT=4 # 4 HA pods
```
This means attester slots 0-1 are served by both primary and HA, while
slots 2-3 are served only by HA nodes. When HA runs a different image
(via `VALIDATOR_HA_DOCKER_IMAGE`), this forces mixed-version consensus.
- **`variables.tf`**: Added `VALIDATOR_PRIMARY_REPLICA_COUNT` and
`VALIDATOR_HA_REPLICA_COUNT` (both `number`, default `null`)
- **`main.tf`**: Moved `validator.replicaCount` from shared settings to
per-release, using `coalesce()` to fall back to `VALIDATOR_REPLICAS`
- **`deploy_network.sh`**: Passes both new variables through env →
tfvars
- **`staging-public.env`**: Set to 2 primary + 4 HA
commit 5a4b0b62ec80dfb621b8d3523b8007b11315f1fd
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date: Wed Apr 8 05:49:28 2026 -0300
fix: handle error types serialization errors (#22379)
Do not throw in the logger when we try to log something that fails
during serialization.
I ran into this while playing with a test script:
```
TypeError: Cannot read properties of undefined (reading 'value')
at formatProperty (node:internal/util/inspect:2280:12)
at formatRaw (node:internal/util/inspect:1176:9)
at formatValue (node:internal/util/inspect:932:10)
at inspect (node:internal/util/inspect:409:10)
at formatErr
(file:///home/santiago/Projects/aztec-3/yarn-project/foundation/dest/log/pino-logger.js:326:29)
at Object.error
(file:///home/santiago/Projects/aztec-3/yarn-project/foundation/dest/log/pino-logger.js:56:97)
at L2BlockStream.work (file:///home/santiago/Projects/aztec-3/yarn-project/stdlib/dest/block/l2_bloc
k_stream/l2_block_stream.js:222:22)
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
at async L2BlockStream.sync (file:///home/santiago/Projects/aztec-3/yarn-project/stdlib/dest/block/l
2_block_stream/l2_block_stream.js:46:9)
at async BlockSynchronizer.doSync (file:///home/santiago/Projects/aztec-3/yarn-project/pxe/dest/bloc
k_synchronizer/block_synchronizer.js:157:9)
[18:27:08.952] INFO: teardown-failure:pxe:service Simulating transaction execution request to 0xf04908a9
at 0x0000000000000000000000000000000000000000000000000000000000000004
{"origin":"0x0000000000000000000000000000000000000000000000000000000000000004","functionSelector":"0xf04
908a9","simulatePublic":true,"chainId":"0x0000000000000000000000000000000000000000000000000000000000aa36
a7","version":"0x000000000000000000000000000000000000000000000000000000009a3a0b73","authWitnesses":["0x2
983e158c25f7487e066bfa57d58f43340b2b45a114e6d6934dbc95213778ee6"]}
[18:27:09.301] ERROR: teardown-failure:pxe:service TypeError: TypeError: Cannot read properties of
undefined (reading 'value')
at formatProperty (node:internal/util/inspect:2280:12)
at formatRaw (node:internal/util/inspect:1176:9)
at formatValue (node:internal/util/inspect:932:10)
at inspect (node:internal/util/inspect:409:10)
at formatErr
(file:///home/santiago/Projects/aztec-3/yarn-project/foundation/dest/log/pino-logger.js:326:29)
at Object.error
(file:///home/santiago/Projects/aztec-3/yarn-project/foundation/dest/log/pino-logger.js:56:97)
at L2BlockStream.work (file:///home/santiago/Projects/aztec-3/yarn-project/stdlib/dest/block/l2_bloc
k_stream/l2_block_stream.js:222:22)
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
at async L2BlockStream.sync (file:///home/santiago/Projects/aztec-3/yarn-project/stdlib/dest/block/l
2_block_stream/l2_block_stream.js:46:9)
at async BlockSynchronizer.doSync (file:///home/santiago/Projects/aztec-3/yarn-project/pxe/dest/bloc
k_synchronizer/block_synchronizer.js:157:9)
```
commit cac2411ad2d62fbc83c3997f7bff7a2e02dbd365
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date: Wed Apr 8 03:47:50 2026 -0400
fix(pxe): support custom PrivateKernelProver and unify EmbeddedWalletOptions (#22348)
- Fixes `EmbeddedWallet` silently ignoring custom `PrivateKernelProver`
implementations passed via `pxeOptions.proverOrOptions`
- The `instanceof BBPrivateKernelProver` check in all three `createPXE`
utils only matched BB's own prover subclasses — custom implementations
fell through and were destructured as config options, causing runtime
errors
- Replaced with a duck-type `isPrivateKernelProver()` guard using
`createChonkProof` as the distinguishing method
- Unified the confusing `pxeConfig`/`pxeOptions` split in
`EmbeddedWalletOptions` into a single `pxe` field that accepts both
config and dependency overrides
```ts
// Before (confusing — which one do I use?)
const wallet = await EmbeddedWallet.create(nodeUrl, {
pxeConfig: { proverEnabled: true },
pxeOptions: { proverOrOptions: myCustomProver },
});
// After (single unified option)
const wallet = await EmbeddedWallet.create(nodeUrl, {
pxe: {
proverEnabled: true,
proverOrOptions: myCustomProver,
},
});
```
The old `pxeConfig`/`pxeOptions` fields are kept but marked
`@deprecated`.
- Existing BB provers still pass the duck-type check (they implement
`createChonkProof`)
- Plain `BBPrivateKernelProverOptions` objects correctly fall through to
create default provers
- Custom `PrivateKernelProver` implementations are now correctly
detected and used as-is
- Old `pxeConfig`/`pxeOptions` usage still works (backward compatible)
- New `pxe` field merges correctly with deprecated fields
commit abbb9eb0048c160177e6e09af94f72ca809c9fa0
Author: Maddiaa <47148561+Maddiaa0@users.noreply.github.com>
Date: Tue Apr 7 22:49:58 2026 +0100
feat(pipeline): handle pipeline prunes (#21250)
Revert the pending chain whenever a pipeline does not get checkpointed
onto L1
commit a8c649f012695a721e67fa2bf973825b5a044688
Merge: 1754519bbd c6042dd4f6
Author: AztecBot <tech@aztecprotocol.com>
Date: Tue Apr 7 21:31:23 2026 +0000
Merge branch 'next' into merge-train/spartan
commit 1754519bbdf8d3a7194eda67d283e9952382b8b2
Author: Maddiaa <47148561+Maddiaa0@users.noreply.github.com>
Date: Tue Apr 7 22:07:27 2026 +0100
chore(pipeline): timetable adjustments under pipelining (#21076)
commit 5ea1f65b6f6e7ac72ab396bcdba9cec13f538e2f
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date: Tue Apr 7 13:39:36 2026 -0400
fix: rename #team-alpha → #e-team-alpha slack channel (#22374)
The `#team-alpha` Slack channel was renamed to `#e-team-alpha`. This
updates all references across CI scripts and docs:
- `ci3/merge_train_failure_slack_notify` — merge train failure
notifications
- `ci3/network_healthcheck` — network healthcheck dispatches
- `scripts/socket-fix-ci.sh` — Socket vulnerability notifications
- `spartan/testnet-runbook.md` — testnet runbook docs
- `.claude/skills/merge-trains/SKILL.md` — merge train skill reference
- Verify merge train failures for `merge-train/spartan` post to
`#e-team-alpha`
- Verify network healthcheck posts to `#e-team-alpha`
ClaudeBox log: https://claudebox.work/s/0cbf19c4f8f32780?run=1
commit 7de9a23af8701f7de2b3a169a82e9c8d0140d825
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date: Tue Apr 7 13:28:23 2026 -0400
chore: remove v4-devnet-2 references (#22372)
Decommissions the v4-devnet-2 network by removing its references across
the repo. The generic devnet infrastructure (workflows, scripts, env
templates) is preserved for future devnet iterations.
ClaudeBox log: https://claudebox.work/s/e8707a3b2ea53bf3?run=1
commit f54add108c04cf768cc2d4ed5e939d9c8619358a
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date: Tue Apr 7 18:27:49 2026 +0100
chore: fix the daily healthchecks (#22373)
.
commit 0c4273573adc1b2f5f8c96967e217a6b1d0a879a
Merge: 019145c30d 0dcc13bed2
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date: Tue Apr 7 18:08:27 2026 +0100
feat: support different docker image for HA validator nodes (#22371)
Extracted from
https://github.com/AztecProtocol/aztec-packages/pull/22329 — adds
support for running a different docker image on HA validator nodes.
- Adds `VALIDATOR_HA_DOCKER_IMAGE` terraform variable that, when set,
overrides the image for HA validator releases (idx > 0)
- Passes the variable through `deploy_network.sh` tfvars generation
- Adds optional `ha_docker_image` input to the `deploy-network` workflow
(both `workflow_call` and `workflow_dispatch`). When unset, HA nodes use
the regular aztec docker image.
**Note:** The workflow change is in
`.github-new/workflows/deploy-network.yml` — please move it to
`.github/workflows/` before merging (ci-allow was requested but not
detected by the sidecar).
- If `VALIDATOR_HA_DOCKER_IMAGE` is empty (default), all validator
releases use `AZTEC_DOCKER_IMAGE`
- If set, HA releases (idx > 0) get their `global.aztecImage.repository`
and `global.aztecImage.tag` overridden
- The primary validator release (idx=0) always uses `AZTEC_DOCKER_IMAGE`
- [ ] Verify terraform plan with `VALIDATOR_HA_DOCKER_IMAGE` unset — no
change to existing behavior
- [ ] Verify terraform plan with `VALIDATOR_HA_DOCKER_IMAGE` set — HA
releases use the override image
- [ ] Move `.github-new/workflows/deploy-network.yml` to
`.github/workflows/deploy-network.yml` and test workflow dispatch with
`ha_docker_image` parameter
ClaudeBox log: https://claudebox.work/s/c73d93309f2bbc88?run=1
commit 0dcc13bed2a328942e315e24bbf1553ea20cfd47
Author: AztecBot <tech@aztec-labs.com>
Date: Tue Apr 7 16:56:16 2026 +0000
feat: support different docker image for HA validator nodes
commit 019145c30d77eecf3c1e8c7da38f370d4808b27c
Author: danielntmd <162406516+danielntmd@users.noreply.github.com>
Date: Tue Apr 7 12:42:49 2026 -0400
chore: (A-749) single character url join (#22269)
urlJoin now properly appends single characters.
Co-authored-by: danielntmd <danielntmd@nethermind.io>
commit e258d0013ea476492e9cbc8a56c99c6ace424b17
Merge: b80e5d0621 09869bddb0
Author: AztecBot <tech@aztecprotocol.com>
Date: Tue Apr 7 16:06:26 2026 +0000
Merge branch 'next' into merge-train/spartan
commit b80e5d062114a10beb36bf5192b4846d8f56e0fc
Merge: ad5ecf6ca8 45f88a816f
Author: AztecBot <tech@aztecprotocol.com>
Date: Tue Apr 7 15:35:43 2026 +0000
Merge branch 'next' into merge-train/spartan
commit ad5ecf6ca8c71a825c85d8f73f10067ab3187d66
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date: Tue Apr 7 16:23:33 2026 +0100
chore: dispatch CB on failed deployments (#22367)
.
commit 32995f6439f0e6d8450766a77478a700fb0d0a46
Merge: 9037ae5d24 dddbaab63e
Author: AztecBot <tech@aztecprotocol.com>
Date: Tue Apr 7 15:19:56 2026 +0000
Merge branch 'next' into merge-train/spartan
commit 9037ae5d24367324aeeb96604ddc405efc20124b
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date: Tue Apr 7 15:34:04 2026 +0100
chore: add pdb (#22364)
.
commit 46f6ddc4077f859416e2a2d0a40cdb6304855f22
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date: Tue Apr 7 15:33:41 2026 +0100
chore: remove unused env var (#22365)
Removes an env var that wasn't being used anymore.
commit 4a45f3dae9807a862b0e87e8ba773d2dc6a4c4dc
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date: Tue Apr 7 09:56:06 2026 -0300
chore: add v4-devnet-3 to tf network ingress (#22327)
As title
commit d8c2e6778c25a17ccf835888944b70011d71454e
Author: Santiago Palladino <santiago@aztecprotocol.com>
Date: Tue Apr 7 09:50:42 2026 -0300
fix: disable sponsored fpc and test accounts for devnet (#22331)
To avoid incorrect genesis root when deploying with 4.1 contracts.
commit d26761fa0e84795e5154a3ca14fd814d8a19b668
Author: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Date: Tue Apr 7 08:34:50 2026 -0400
fix(p2p): reduce flakiness in proposal tx collector benchmark (#22240)
Fixes flakiness in `p2p_client.proposal_tx_collector.bench.test.ts`
caused by three compounding issues:
1. **`chunkTxHashesRequest` defaulted to chunkSize=1**, creating 500
individual libp2p streams for the 500-tx `send-batch-request` case. The
rapid stream churn overwhelms the connection, causing EPIPE cascades
that kill the muxer. Bumped to chunkSize=8 as the existing TODO
indicated.
2. **Peer scores persisted between benchmark cases**, so hundreds of
HighToleranceError penalties from EPIPE failures in one case degraded
peer selection in subsequent cases. Added `PeerScoring.resetAllScores()`
and called it in the worker before each benchmark run.
3. **No connectivity check between cases**, so degraded connections from
a previous case could silently affect the next. Added
`waitForConnectivity()` to verify the aggregator has 80% of expected
peers before each case starts.
Full analysis with CI log evidence:
https://gist.github.com/AztecBot/e5af3238fbfefc29c51de2ee5deaa8ea
- `protocols/tx.ts`: Change `chunkTxHashesRequest` default chunkSize
from 1 to 8
- `peer_scoring.ts`: Add `resetAllScores()` method
- `p2p_client_testbench_worker.ts`: Reset peer scores before each bench
case, add `GET_PEER_COUNT` IPC command
- `worker_client_manager.ts`: Add `waitForConnectivity()` and
`getPeerCount()` methods
- `p2p_client.proposal_tx_collector.bench.test.ts`: Check connectivity
in `beforeEach`
ClaudeBox log: https://claudebox.work/s/38590d3cfe6a7000?run=2
Co-authored-by: PhilWindle <60546371+PhilWindle@users.noreply.github.com>
commit 1450e1722e49bed76d2da941eb14b63bc7ed8aee
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date: Tue Apr 7 12:32:09 2026 +0100
chore: wire up spartan checks to make (#22358)
.
commit 34e53c37904fe082d83f052fc778241b6004fcd4
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date: Tue Apr 7 12:22:35 2026 +0100
chore: fix main.tf syntax (#22356)
.
commit b07c02b3d885c526d916f3f65ffe693e478d5623
Author: Alex Gherghisan <alexghr@users.noreply.github.com>
Date: Tue Apr 7 11:32:00 2026 +0100
chore: bump log level in stg-public (#22354)
.
commit 7fbc228c546b6b1e7dd39b23c517c654e569029c
Author: danielntmd <162406516+danielntmd@users.noreply.github.com>
Date: Tue Apr 7 06:31:53 2026 -0400
chore: (A-750) read JSON body then parse to avoid double stream consumption on error message (#22247)
Read JSON body then parse to avoid double stream consumption on error
message.
Co-authored-by: danielntmd <danielntmd@nethermind.io>
commit cb7f3e342ab7444684150d641b2b080af1b28206
Author: danielntmd <162406516+danielntmd@users.noreply.github.com>
Date: Tue Apr 7 05:58:26 2026 -0400
fix(foundation): flush current batch on BatchQueue.stop() (#22341)
BatchQueue.stop() was not flushing the current in-progress batch before
ending the container queue. Any items accumulated below maxBatchSize
whose timer hadn't fired were silently dropped. In KVBrokerDatabase,
this could lose proving job writes on graceful shutdown, requiring
unnecessary re-computation on restart.
Co-authored-by: danielntmd <danielntmd@nethermind.io>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
commit 0e26736b11b51786e278cf3f4a0701c91ce3a473
Author: spypsy <spypsy@users.noreply.github.com>
Date: Tue Apr 7 10:54:40 2026 +0100
fix(bot): bot fee juice funding (#21949)
Fixes
[A-657](https://linear.app/aztec-labs/issue/A-657/ensure-bots-are-funded-on-deployment)
- **Early refuel on restart**: `ensureFeeJuiceBalance` runs before setup
when token already exists (`setupTokenWithOptionalEarlyRefuel`,
`setupTokenContractWithOptionalEarlyRefuel`)
- **Bridge claim for low-balance deploys**: When balance < 100 FJ, use
bridge claim for deploys in `setupToken` and `registerOrDeployContract`
so setup doesn't fail before refuel
- **Constants**: Hardcode threshold 100 FJ, target 10k FJ
- **L1**: Raise FeeAssetHandler initial mint from 1000 to 10000
commit 47e4879a68cca80316089f3bc84b3402a1c03611
Author: danielntmd <162406516+danielntmd@users.noreply.github.com>
Date: Tue Apr 7 05:42:18 2026 -0400
chore: fix mempool limit test (#22332)
Fixing up the rest of the bad merge from #21889, reintroduced original
intent from #21578.
Co-authored-by: danielntmd <danielntmd@nethermind.io>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Retry for #22201
Motivation
The genesis block has
timestamp=0, which forces a block 1 special case for transaction expiration validation. Transactions anchored to genesis get an expiration clamped to0 + MAX_TX_LIFETIME(~86400 = Jan 2 1970), making them impossible to include after block 1. This complicates e2e test setup by requiring empty block 1 mining andminTxsPerBlockmanipulation.Approach
Adds a
genesisTimestampparameter that flows through the full world state stack (C++ → NAPI → TypeScript), allowing the genesis block header to have a non-zero timestamp. Introduces aGenesisDatatype that bundlesprefilledPublicDataandgenesisTimestamp, replacing the two separate parameters that were threaded everywhere. The e2e setup automatically passes the current time as the genesis timestamp.Changes
GenesisDatatype (stdlib/src/world-state/genesis_data.ts) — bundlesprefilledPublicDataandgenesisTimestampinto a single typegenesis_timestampparameter, uses it in the genesis block header hashNativeWorldState,NativeWorldStateService, factory, and synchronizer all takeGenesisDataAztecNodeService.createAndSync,createAztecNode,start_node.ts,standby.tsall useGenesisDatagenesisTimestamp: Date.now()to genesis values; block 1 wait logic preservedprefilledPublicDatareferences replaced withgenesise2e_genesis_timestamp.test.tsverifies genesis-anchored txs work after block 1