Skip to content

feat: merge-train/spartan#21034

Merged
AztecBot merged 62 commits intonextfrom
merge-train/spartan
Mar 6, 2026
Merged

feat: merge-train/spartan#21034
AztecBot merged 62 commits intonextfrom
merge-train/spartan

Conversation

@AztecBot
Copy link
Collaborator

@AztecBot AztecBot commented Mar 3, 2026

BEGIN_COMMIT_OVERRIDE
test: update proving-real test to mbps (#20991)
chore: epoch proving log analyzer (#21033)
chore: update pause script to allow resume (#21032)
feat: price bump for RPC transaction replacement (#20806)
refactor: remove update checker, retain version checks (#20898)
fix: (A-592) p2p client proposal tx collector test (#20998)
refactor: use publishers-per-pod in deployments (#21039)
chore: web3signer refreshes keystore (#21045)
feat(sequencer): set block building limits from checkpoint limits (#20974)
chore(e2e): fix e2e bot L1 tx nonce reuse (#21052)
feat: Update L1 to L2 message APIs (#20913)
fix: (A-589) epochs l1 reorgs test (#20999)
feat(sequencer): add SEQ_MAX_TX_PER_CHECKPOINT config (#21016)
fix: drop --pid=host from docker_isolate (#21081)
feat: standby mode for prover broker (#21098)
fix(p2p): remove default block handler in favor of block handler (#21105)
feat(validator): add VALIDATOR_ env vars for independent block limits (#21060)
refactor(p2p): decouple proposal validators from base class via composition (#21075)
feat: additional validation in public setup allowlist (onlySelf + null msg sender) (#21122)
fix: (A-591) aztecProofSubmissionEpochs incorrectly named as aztecProofSubmissionWindow (#21108)
refactor(sequencer): rename SEQ_GAS_PER_BLOCK_ALLOCATION_MULTIPLIER to SEQ_PER_BLOCK_ALLOCATION_MULTIPLIER (#21125)
fix: unbound variable in check_doc_references.sh with set -u (#21126)
feat: calldata length validation of public setup function allowlist (#21139)
fix: include mismatched values in tx metadata validation errors (#21147)
feat: single-node implementation of slash-protection signer (#20894)
feat: Remove non-protocol contracts from public setup allowlist (#21154)
chore: More updated Alpha configuration (#21155)
chore: tally slashing pruning improvements (#21161)
fix: update dependencies (#20997)
fix: omit bigint priceBumpPercentage from IPC config in testbench worker (#21169)
refactor(p2p): (A-588) maintain sorted array in tx pool instead of sorting on read (#21079)
fix(p2p): report most severe failure in runValidations (#21185)
fix: use dedicated L1 account for bot bridge resume tests to avoid nonce race (#21148)
fix: parse error.message in formatViemError (#21163)
fix: bump lighthouse consensus client v7.1.0 -> v8.0.1 (#21170)
chore: code decuplication + refactor (public setup allowlist) (#21200)
END_COMMIT_OVERRIDE

alexghr and others added 8 commits March 3, 2026 09:41
A script to analyze the proving timeline of an epoch. Output example:

```
$ ./spartan/scripts/extract_proving_metrics.ts prove-n-tps-real --start 2026-03-02 --epoch 3

Epoch 3 stats:
  Checkpoints: 32 (33 to 64), Blocks: 256 (40 to 295), Txs: 2283
  Blob fields per checkpoint: 211.92ms
  Blob batching: 3408.91ms

Timeline:
  Epoch started proving                                T+0s
  Blocks started processing                            T+1m 3s
  PUBLIC_CHONK_VERIFIER first enqueued (2283 jobs)     T+1m 9s
  PARITY_BASE first enqueued (1 jobs)                  T+1m 9s
  # ...
Proving jobs by stage:
  PARITY_BASE                     1 jobs    enqueued T+1m 9s                   completed T+1m 22s  (13s)
  PARITY_ROOT                     1 jobs    enqueued T+1m 23s                  completed T+7m 1s  (5m 38s)
  PUBLIC_CHONK_VERIFIER        2283 jobs    enqueued T+1m 9s..T+1m 16s         completed T+1m 21s..T+6m 55s  (5m 46s)
  # ...

Per-job duration stats:
  Type                          Count    Median      Mean       p90       Max
  PARITY_BASE                       1     13.4s     13.4s     13.4s     13.4s
  PARITY_ROOT                       1    338.3s    338.3s    338.3s    338.3s
  # ...

Per block (sorted by block number):
  Block 40 (slot 96): 18 txs, processing 29.4s
  Block 41 (slot 96): 18 txs, processing 44.8s
  # ... 
```
Updates the pause script to save its state in order for later resume.
## Summary

Adds a configurable percentage-based "price bump" requirement for
RPC-submitted transactions that clash on nullifiers with existing pool
transactions, or that need to evict the lowest-priority tx when the pool
is full. This prevents spam via infinitesimally small fee increments.

- When a tx arrives via RPC with nullifier conflicts, it must now pay at
least X% above each conflicting tx's priority fee (default: 10%) — i.e.
`>= existingFee + existingFee * bump / 100`
- The same bump applies to pool-full eviction via
`LowPriorityPreAddRule`
- P2P gossip path is unchanged — continues using `comparePriority` (fee
+ hash tiebreaker) with no bump
- Rejection errors now include the minimum required fee so callers know
how much to bid
- New env var `P2P_RPC_PRICE_BUMP_PERCENTAGE` (default: 10) controls the
bump percentage

## Implementation details

- `getMinimumPriceBumpFee(existingFee, priceBumpPercentage)` helper
computes the threshold using integer arithmetic: `existingFee +
max(existingFee * bump / 100, 1)` — the minimum bump is always at least
1 unit, so replacement always requires paying strictly more (even with
0% bump or zero existing fee)
- `priceBumpPercentage` is typed as `bigint` throughout the config chain
to avoid `BigInt()` conversion issues with non-integer values
- `checkNullifierConflict` accepts an optional `priceBumpPercentage`
param; when set, uses fee-only `>=` comparison against the bumped
threshold instead of `comparePriority`
- `NullifierConflictRule` now passes `context.priceBumpPercentage`
through to the conflict check (previously ignored context entirely)
- `LowPriorityPreAddRule` uses the bumped fee threshold when both
`feeComparisonOnly` and `priceBumpPercentage` are set
- Config flows: `P2P_RPC_PRICE_BUMP_PERCENTAGE` env var -> `P2PConfig`
-> `TxPoolV2Config` -> `PreAddContext` (only for RPC path)
- `NULLIFIER_CONFLICT` rejection error enriched with
`minimumPriceBumpFee` and `txPriorityFee` fields

## Test plan

- 15 new unit tests across `tx_metadata.test.ts`,
`nullifier_conflict_rule.test.ts`, and
`low_priority_pre_add_rule.test.ts`
- Tests cover: exact threshold acceptance, below-threshold rejection,
well-above threshold, 0% bump edge case, P2P path unchanged, error field
population
- All existing tests continue to pass

Fixes A-452
This PR removes the update checker with a simpler version checker. It
also enables network_config.json to specify a latest node version which
the node will check against.

The node won't restart automatically if the rollup or node version
changes but it will print a warning to logs every 10 minutes to inform
the operator to restart.

Fix A-193
The aggregator worker may wait up to MAX_PEER_WAIT_MS for peer
connections before starting collection, so we must give it at least that
much additional headroom beyond the collection timeout.

Co-authored-by: danielntmd <danielntmd@nethermind.io>
This PR changes `VALIDATOR_PUBLISHERS_PER_VALIDATOR_KEY` to
`VALIDATOR_PUBLISHERS_PER_REPLICA` to reduce the number of overall
publishers used for a test deployment

Fix A-609
When redeploying testnet, validators refused to come up because the
attester count was changed and the new keys weren't loaded into
web3signer's state even though they keystores were updated.
…0974)

The checkpoint builder now tracks remaining L2 gas, DA gas, and blob
fields in a checkpoint while building each block, and forwards them to
the public processor. This means that a proposer will not propose blocks
that overall exceed checkpoint limits, and validators will properly
reject them.

In addition, the proposer defaults the L2 and DA gas limits per block to
the checkpoint limits divided by expected number of blocks, times two.
This value is still capped by the remaining gas in the checkpoint
builder, but means that a proposer will not waste the entire checkpoint
gas allocation on the first block.

Fixes A-528

## Changes

_As described by Claude_

- Derives per-block L2 and DA gas budgets from L1 checkpoint limits
(`rollupManaLimit`, `MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT`) using the
timetable's `maxNumberOfBlocks` and a configurable multiplier (default:
2) for creating proposals only (**not** for validation)
- Moves blob field and gas tracking from the checkpoint proposal job
loop into `CheckpointBuilder.capLimitsByCheckpointBudgets()`, which caps
per-block limits by remaining checkpoint budgets for both proposer and
validator paths
- Plumbs `maxTxsPerBlock`, `maxL2BlockGas`, `maxDABlockGas`, and
`rollupManaLimit` through to validator re-execution so limits are
enforced during block validation
- Replaces byte-based `maxBlockSizeInBytes` with field-based blob limits
and a pre-processing blob field estimation
(`getPrivateTxEffectsSizeInFields`)
- Adds `gasPerBlockAllocationMultiplier` config
(`SEQ_GAS_PER_BLOCK_ALLOCATION_MULTIPLIER`, default: 2)
- Makes `maxL2BlockGas` and `maxDABlockGas` optional (auto-computed from
checkpoint limits when not set)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
spalladino and others added 13 commits March 3, 2026 14:03
Fixes the following error caused by reusing the same L1 private key
across multiple bots, without waiting for the txs from the previous bots
to be done.

```
13:06:39   ● e2e_bot › bridge resume › does not reuse prior bridge claims if recipient address changes
13:06:39
13:06:39     expect(received).rejects.toThrow(expected)
13:06:39
13:06:39     Expected substring: "test error"
13:06:39     Received message:   "Transaction creation failed.·
13:06:39     URL: http://127.0.0.1:8545
13:06:39     Request body: {\"method\":\"eth_sendRawTransaction\",\"params\":[\"0x02f8b1827a6935843b9aca00843c028b4a82b54194a513e6e4b8f2a923d98304ec87f64353c4d5c85380b844095ea7b3000000000000000000000000846005fdb8e3f125749df47d36b2c826029e536400000000000000000000000000000000000000000000003635c9adc5dea00000c080a019eb199d74619635cc3f88492e1818ae26ece48c5dc102091b03be9a4cbc2df7a0047b03d47e4f034a239c639c6610d472e36a35b01c070f6b9072c1b67df6b9c4\"]}··
13:06:39     Request Arguments:
13:06:39       from:  0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
13:06:39       to:    0xa513e6e4b8f2a923d98304ec87f64353c4d5c853
13:06:39       data:  0x095ea7b3000000000000000000000000846005fdb8e3f125749df47d36b2c826029e536400000000000000000000000000000000000000000000003635c9adc5dea00000··
13:06:39     Contract Call:
13:06:39       address:   0xa513e6e4b8f2a923d98304ec87f64353c4d5c853
13:06:39       function:  approve(address spender, uint256 value)
13:06:39       args:             (0x846005fdb8e3f125749df47d36b2c826029e5364, 1000000000000000000000)
13:06:39       sender:    0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266·
13:06:39     Docs: https://viem.sh/docs/contract/writeContract
13:06:39     Details: replacement transaction underpriced
13:06:39     Version: viem@2.38.2"
13:06:39
13:06:39           87 |         this.logger.info(`Approving ${amount} tokens for ${stringifyEthAddress(address, addressName)}`);
13:06:39           88 |         await this.extendedClient.waitForTransactionReceipt({
13:06:39         > 89 |             hash: await this.contract.write.approve([
13:06:39              |                   ^
13:06:39           90 |                 address,
13:06:39           91 |                 amount
13:06:39           92 |             ])
13:06:39
13:06:39           at getContractError (../node_modules/viem/utils/errors/getContractError.ts:78:10)
13:06:39           at writeContract.internal (../node_modules/viem/actions/wallet/writeContract.ts:242:13)
13:06:39           at L1TokenManager.approve (../aztec.js/dest/ethereum/portal_manager.js:89:19)
13:06:39           at L1FeeJuicePortalManager.bridgeTokensPublic (../aztec.js/dest/ethereum/portal_manager.js:129:9)
13:06:39           at BotFactory.bridgeL1FeeJuice (../bot/dest/factory.js:450:23)
13:06:39           at BotFactory.getOrCreateBridgeClaim (../bot/dest/factory.js:432:23)
13:06:39           at BotFactory.setupAccountWithPrivateKey (../bot/dest/factory.js:170:27)
13:06:39           at BotFactory.setupAccount (../bot/dest/factory.js:149:20)
13:06:39           at BotFactory.setup (../bot/dest/factory.js:49:39)
13:06:39           at Bot.create (../bot/dest/bot.js:14:61)
13:06:39           at Object.<anonymous> (src/e2e_bot.test.ts:189:9)
```

Fix is to use different L1 private key per test.
This PR fixes issue A-548 by replacing the block-based L1-to-L2 message
readiness API with a checkpoint-based one. The core insight: messages
are grouped by checkpoint number, not block number, so readiness should
be checked against the checkpoint the node has synced to.

Key changes:

New API getCheckpointNumber() added to AztecNode, L2BlockSource, and
archiver interfaces — returns the latest synced checkpoint number.

Renamed getL1ToL2MessageBlock → getL1ToL2MessageCheckpoint — now returns
CheckpointNumber instead of BlockNumber, eliminating the deprecated
BlockNumber.fromCheckpointNumber cast.

Simplified isL1ToL2MessageReady — removed the forPublicConsumption flag
entirely. This now checks whether we have reached the first block in the
message's inclusion checkpoint.

Updated all callers — bot factory, cross-chain bot, e2e tests, spartan
setup, and epoch tests. Removed all A-548 workaround comments.

E2E test improvements — new helpers advanceCheckpoint and
waitForBlockToCheckpoint for checkpoint-aware test flow. The drift test
now mines checkpoints instead of blocks.
Use same structure as the handles missed message inserted by an L1 reorg
test to wait for checkpoint when sending L2 txs to help trigger mbps.

Co-authored-by: danielntmd <danielntmd@nethermind.io>
Fixes A-611

## Summary

- Adds `SEQ_MAX_TX_PER_CHECKPOINT` env var and `maxTxsPerCheckpoint`
config to limit total transactions across all blocks in a checkpoint,
mirroring the existing two-level pattern for gas limits
- Proposers derive per-block TX limits from the checkpoint limit (using
`ceil(checkpointLimit / maxBlocks * multiplier)`) when
`SEQ_MAX_TX_PER_BLOCK` is not explicitly set
- Validators enforce the checkpoint TX budget via
`capLimitsByCheckpointBudgets` and `validateCheckpoint`
- Makes `maxTxsPerBlock` mandatory (`number | undefined`) in proposal
validator constructors to prevent missed wiring, and wires it through
P2P, validator-client, and sequencer-client
- Extracts `computeBlockLimits` as a free function with dedicated unit
tests
- Moves `maxTxsPerBlock` config mapping to
`sharedSequencerConfigMappings` so both P2P and sequencer packages share
it
- Adds extra structural validations to the checkpoint validation, and
wires them to the archiver data updater.

## Test plan

- Unit tests for `computeBlockLimits` (L2 gas, DA gas, TX count
derivation, multi-block mode)
- Unit tests for `maxTxsPerBlock` validation in shared proposal
validator test suite (block + checkpoint)
- Unit tests for `maxTxsPerCheckpoint` capping in
`checkpoint_builder.test.ts`
- Unit tests for TX limit validation in `validate.ts`
- Existing sequencer and checkpoint proposal job tests updated and
passing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
`--pid=host` no longer needed, and was a bit suss
Drop some flakes

Co-authored-by: ludamad <adam.domurad@gmail.com>
AztecBot and others added 13 commits March 4, 2026 21:11
…21139)

## Summary

- Add calldata length validation to the public setup function allowlist
in `PhasesTxValidator`, preventing setup calls with malformed arguments
from being accepted
- Extend `AllowedElement` with an optional `calldataLength` field and
compute expected lengths dynamically from contract artifacts
(`AuthRegistry`, `FeeJuice`, `Token`)
- Reject setup calls where calldata length doesn't match the expected
length for the matched allowlist entry, returning a new
`TX_ERROR_SETUP_WRONG_CALLDATA_LENGTH` error

## Details

Even when a setup function call matches the allowlist by address/class
and selector, it can still revert if the arguments are malformed. Since
Aztec's ABI has no variable-size inputs, validating that the calldata
length matches the expected length for a given selector is sufficient to
guarantee the arguments are deserializable.

**AllowedElement type** (`stdlib`): Added optional `calldataLength?:
number` to both `AllowedInstanceFunction` and `AllowedClassFunction`,
plus corresponding Zod schema updates.

**PhasesTxValidator** (`p2p`): After matching an entry by address or
class+selector, checks `entry.calldataLength` against
`publicCall.calldata.length` before proceeding to
`onlySelf`/`rejectNullMsgSender` checks. When `calldataLength` is not
set, any length is accepted (backwards compatible).

**Default allowlist** (`p2p`): Uses `getFunctionArtifactByName` +
`countArgumentsSize` from `stdlib/abi` to compute expected calldata
lengths from `AuthRegistryArtifact`, `FeeJuiceArtifact`, and
`TokenContractArtifact`.

Fixes A-612
## Summary
- Surfaces the actual vs expected values in metadata validation error
messages (vk tree root, chain ID, rollup version, protocol contracts
hash)
- Previously the error returned to the client was just a generic string
like "Incorrect verification keys tree root" — now it includes both
values for easier debugging
- Updated tests to use `stringContaining` since errors now include
dynamic values
Fixes [A-477](https://linear.app/aztec-labs/issue/A-477/lightweight-ha-like-signer-to-prevent-duplicate-proposals)

- Introduces `LocalSignerWithProtection` which will be used by default if no high-availability config has been provided
- Moves around a bunch of things bc `DataStoreConfig` had to be moved into `stdlib` in order to be required by `validator-ha-signer`

Co-authored-by: Alex Gherghisan <alexghr@users.noreply.github.com>
Fixes
[A-477](https://linear.app/aztec-labs/issue/A-477/lightweight-ha-like-signer-to-prevent-duplicate-proposals)

- Introduces `LocalSignerWithProtection` which will be used by default
if no high-availability config has been provided
- Moves around a bunch of things bc `DataStoreConfig` had to be moved
into `stdlib` in order to be required by `validator-ha-signer`
## Summary

Removes non-protocol contracts (Token class-based entries) from the
default public setup allowlist for alpha. Token class IDs change with
aztec-nr releases, making the allowlist hard to maintain—and FPC-based
fee payment with custom tokens won't be supported on mainnet alpha.

- **Removed Token entries from the default allowlist**
(`allowed_public_setup.ts`): only protocol contracts (AuthRegistry,
FeeJuice) remain in the hardcoded defaults
- **Extended `parseAllowList` to support validation flags**: new
optional flags segment (`os`, `rn`, `cl=N`) so node operators who
manually re-add entries get proper `onlySelf`, `rejectNullMsgSender`,
and `calldataLength` validation
- **Updated e2e tests to manually extend the allowlist**: `FeesTest` and
`ClientFlowsBenchmark` now compute Token allowlist entries and pass them
via `txPublicSetupAllowListExtend`
- **Updated local network node** (`local-network.ts`): computes Token
allowlist entries at startup so FPC-based fee payments continue to work
in local development and CI
- **Deprecated `PublicFeePaymentMethod` and `PrivateFeePaymentMethod`**
in aztec.js with `@deprecated` JSDoc tags
- **Added CLI wallet deprecation warnings** for `fpc-public` and
`fpc-private` payment methods
- **Added warning comment to FPC Noir contract** clarifying it's a
reference implementation that won't work on mainnet alpha
- **Updated v4 changelog** with the breaking change, new flag syntax
documentation, and migration guidance

## Test plan

- [x] Unit tests: `p2p/src/config.test.ts` (11 tests including 4 new
flag parsing tests)
- [x] Unit tests:
`p2p/src/msg_validators/tx_validator/phases_validator.test.ts` (23
tests)
- [x] E2E tests: all 8 fee test suites (26 tests total) —
public_payments, private_payments, failures, account_init,
gas_estimation, sponsored_payments, fee_juice_payments, fee_settings
- [ ] E2E: `e2e_local_network_example.test.ts` (requires running local
network — unchanged, validated via local-network.ts code review)
- [x] Alert `@AztecProtocol/devrel` to update docs

Fixes A-606

---------

Co-authored-by: Santiago Palladino <santiago@aztecprotocol.com>
This PR applies configuration settings for Alpha.
Ref: A-459

Most packages are updated via resolutions. Except `minimatch`, it's used
by multiple dependencies with different major versions.

boxes/yarn.lock still has minimatch 9.0.3 pinned by
@typescript-eslint/typescript-estree@6.21.0 (from
boxes/boxes/react using @typescript-eslint v6). Fixing this requires
upgrading boxes/react to @typescript-eslint v8.

| yarn.lock | Package | Old Version | New Version |

|-----------------------------------|----------------------|-------------|-------------|
| yarn-project/yarn.lock | rollup | 4.52.3 | 4.59.0 |
| boxes/yarn.lock | rollup | 4.41.1 | 4.59.0 |
| playground/yarn.lock | rollup | 4.50.1 | 4.59.0 |
| barretenberg/acir_tests/yarn.lock | basic-ftp | 5.0.5 | 5.2.0 |
| docs/yarn.lock | h3 | 1.15.4 | 1.15.5 |
| barretenberg/docs/yarn.lock | h3 | 1.15.3 | 1.15.5 |
| yarn-project/yarn.lock | systeminformation | 5.23.8 | 5.31.1 |
| yarn-project/yarn.lock | node-forge | 1.3.1 | 1.3.3 |
| boxes/yarn.lock | node-forge | 1.3.1 | 1.3.3 |
| docs/yarn.lock | node-forge | 1.3.1 | 1.3.3 |
| barretenberg/acir_tests/yarn.lock | node-forge | 1.3.1 | 1.3.3 |
| barretenberg/docs/yarn.lock | node-forge | 1.3.1 | 1.3.3 |
| yarn-project/yarn.lock | koa | 2.16.2 | 2.16.4 |
| yarn-project/yarn.lock | serve | 14.2.4 | 14.2.6 |
| boxes/yarn.lock | serve | 14.2.4 | 14.2.6 |
| barretenberg/acir_tests/yarn.lock | serve | 14.2.4 | 14.2.6 |
| yarn-project/yarn.lock | minimatch | 3.1.2 | 3.1.5 |
| boxes/yarn.lock | minimatch | 3.1.2 | 3.1.5 |
| docs/yarn.lock | minimatch | 3.1.2 | 3.1.5 |
| playground/yarn.lock | minimatch | 3.1.2 | 3.1.5 |
| barretenberg/docs/yarn.lock | serve-handler | 6.1.6 | 6.1.7 |
| docs/yarn.lock | serve-handler | 6.1.6 | 6.1.7 |
| docs/yarn.lock | minimatch | 3.1.2 | 3.1.5 |
| yarn-project/yarn.lock | minimatch | 5.1.6 | 5.1.9 |
| boxes/yarn.lock | minimatch | 5.1.6 | 5.1.9 |
| docs/yarn.lock | minimatch | 5.1.6 | 5.1.9 |
| yarn-project/yarn.lock | minimatch | 9.0.5 | 9.0.9 |
| docs/yarn.lock | minimatch | 9.0.5 | 9.0.9 |
| barretenberg/acir_tests/yarn.lock | minimatch | 9.0.5 | 9.0.9 |
| boxes/yarn.lock | minimatch | 9.0.5 | 9.0.9 |
| yarn-project/yarn.lock | serialize-javascript | 6.0.2 | 7.0.4 |
| boxes/yarn.lock | serialize-javascript | 6.0.2 | 7.0.4 |
| docs/yarn.lock | serialize-javascript | 6.0.2 | 7.0.4 |
| barretenberg/acir_tests/yarn.lock | serialize-javascript | 6.0.2 |
7.0.4 |
| barretenberg/docs/yarn.lock | serialize-javascript | 6.0.2 | 7.0.4 |
| boxes/yarn.lock | axios | 1.12.2 | 1.13.6 |
| docs/yarn.lock | axios | 1.12.2 | 1.13.6 |
@socket-security
Copy link

socket-security bot commented Mar 5, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatednpm/​serve@​14.2.4 ⏵ 14.2.69910099 +192 +5100
Updatednpm/​koa@​2.16.2 ⏵ 2.16.498 +1100 +18100 +195 -1100

View full report

AztecBot and others added 4 commits March 5, 2026 14:38
…ker (#21169)

Forward-port of
#21086 to next (via
merge-train/spartan where the priceBumpPercentage feature lives).

Fixes `TypeError: Do not know how to serialize a BigInt` in
`p2p_client.proposal_tx_collector.bench.test.ts`. The
`priceBumpPercentage` config field is a `bigint` which can't be
serialized over IPC (JSON). This omits it from the IPC config and
restores the default on the worker side.

ClaudeBox log: http://ci.aztec-labs.com/0233e65ff02e664d-2
…rting on read (#21079)

Replace `Map<bigint, Set<bigint>>` priority index with a sorted array,
eliminating `O(n log n)` re-sorting on every read of pending
transactions.

[Edit]:
- Add small optimization for `iteratePendingTxs` and
  `iterateEligibilePendingTxs` to use a single SerialQueue entry instead
of N queue entries
When multiple validators fail, `runValidations` reported whichever
failure appeared first in the Record by insertion order. Now it reports
the one with the harshest penalty severity.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@AztecBot AztecBot enabled auto-merge March 5, 2026 23:22
@AztecBot
Copy link
Collaborator Author

AztecBot commented Mar 5, 2026

🤖 Auto-merge enabled after 4 hours of inactivity. This PR will be merged automatically once all checks pass.

AztecBot and others added 5 commits March 6, 2026 09:33
…nce race (#21148)

## Summary
- The "bridge resume" tests in `e2e_bot.test.ts` were using `l1Mnemonic`
with the hardhat default mnemonic (account index 0), which is the **same
L1 account** the sequencer uses for block proposals
- This caused a flaky nonce-too-low error when the sequencer sent an L1
transaction between the bot's mint and approve calls
- Fix: use `l1PrivateKey` from account index 7 (a dedicated, unused
index) instead

## Test plan
- The flaky test "does not reuse prior bridge claims if recipient
address changes" should no longer fail with nonce-too-low errors
- Other bot tests using indices 8 and 9 are unaffected

ClaudeBox log: http://ci.aztec-labs.com/7cffb2ae9eb6b324-1
- reduce aztec committee lag -> 1 for scenario network

Co-authored-by: danielntmd <danielntmd@nethermind.io>
## Summary

Follow-up to #21154, addressing review feedback to deduplicate code and
use contract artifacts instead of hardcoded signature strings.

- **New `buildAllowedElement` helper** (`@aztec/p2p/msg_validators`):
Builds an `AllowedElement` from a `ContractArtifact` + function name,
deriving both the selector (via
`FunctionSelector.fromNameAndParameters`) and calldata length from the
artifact. Eliminates all hardcoded `FunctionSelector.fromSignature(...)`
calls.
- **Refactored protocol allowlist** (`allowed_public_setup.ts`): Uses
`buildAllowedElement` with `AuthRegistryArtifact` and `FeeJuiceArtifact`
instead of manually constructing selectors and calldata lengths.
- **Deduplicated token allowlist** into a single shared
`getTokenAllowedSetupFunctions()` in `@aztec/aztec/testing`, removing
three identical copies from `local-network.ts`, `fees_test.ts`, and
`client_flows_benchmark.ts`.
- **Refactored `fee_payer_balance.ts`**: Replaced hardcoded
`fromSignature('_increase_public_balance((Field),u128)')` with
artifact-derived selector using `FeeJuiceArtifact`.
- **Left `public_fee_payment_method.ts` and
`private_fee_payment_method.ts` as-is**: These deprecated classes in
`aztec.js` would require adding contract artifact dependencies or API
changes to refactor.

Net result: **-154 lines** removed across 3 duplicated functions and
hardcoded selectors, **+73 lines** added for the shared helper and
single source of truth.
@PhilWindle PhilWindle requested a review from nventuro as a code owner March 6, 2026 13:23
@AztecBot AztecBot added this pull request to the merge queue Mar 6, 2026
@AztecBot
Copy link
Collaborator Author

AztecBot commented Mar 6, 2026

Flakey Tests

🤖 says: This CI run detected 1 tests that failed, but were tolerated due to a .test_patterns.yml entry.

\033FLAKED\033 (8;;http://ci.aztec-labs.com/e2b6af334dcd8e8e�e2b6af334dcd8e8e8;;�):  yarn-project/end-to-end/scripts/run_test.sh simple src/e2e_p2p/reqresp/reqresp.test.ts (236s) (code: 0) group:e2e-p2p-epoch-flakes

Merged via the queue into next with commit ab47a6e Mar 6, 2026
20 checks passed
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.

9 participants