fix: init bb.js sync singleton before subsystems start in createAndSync - #24147
Merged
PhilWindle merged 2 commits intoJun 17, 2026
Merged
Conversation
The prover node begins monitoring epochs as soon as it is created in createAndSync, and epoch proving deserializes compressed Chonk proofs via ChonkProof.fromBuffer -> BarretenbergSync.getSingleton(), which throws "First call BarretenbergSync.initSingleton()" if the singleton has not yet been initialised. The existing init in aztec_start_action runs later and is guarded on services.aztec, leaving a race that crashed EpochSession jobs in production. Initialise the singleton at the top of createAndSync so every subsystem (and every createAndSync caller) is covered.
PhilWindle
marked this pull request as ready for review
June 17, 2026 09:56
createAndSync now imports @aztec/bb.js to initialise the sync singleton, so declare it as a dependency. Fixes the import-x/no-extraneous-dependencies lint error.
ludamad
approved these changes
Jun 17, 2026
rangozd
pushed a commit
to rangozd/aztec-packages
that referenced
this pull request
Aug 5, 2026
BEGIN_COMMIT_OVERRIDE fix(test): reliably find target proposer in sentinel_status_slash (A-1217) (AztecProtocol#24143) fix(test): wait for full gossip mesh before committee produces (A-1219) (AztecProtocol#24149) fix: init bb.js sync singleton before subsystems start in createAndSync (AztecProtocol#24147) feat(prover-node): capture checkpoint-level proving metrics (AztecProtocol#24051) fix: stabilize scenario invalidation timing (AztecProtocol#24128) fix: set default inbox lag to 2 (AztecProtocol#24127) test(spartan): wait for proposed instead of checkpointed in performTransfers (AztecProtocol#24123) fix(validator): make block-number guard reorg-aware (A-1218) (AztecProtocol#24141) fix(test): pin AZTEC_INBOX_LAG=1 in sandbox compose envs (AztecProtocol#24162) chore(sequencer): downgrade insufficient-txs block log to verbose (AztecProtocol#24164) fix(test): use in-memory file store for TxFileStore tests (A-1211) (AztecProtocol#24167) fix(test): handle default inbox lag of 2, remove temporary inboxLag=1 pins (A-1250) (AztecProtocol#24170) fix(world-state): clean up queues for destroyed forks (AztecProtocol#24178) END_COMMIT_OVERRIDE
rangozd
pushed a commit
to rangozd/aztec-packages
that referenced
this pull request
Aug 5, 2026
* docs: complete and correct the proving historic state page
Add the missing history::storage module (public_storage_historical_read),
a data-availability caveat (pruning/archive node, 24h anchor window), and a
block-header getter section. Fix the Archive-tree framing (inclusion proofs
are against the note hash / nullifier / public data tree roots committed in a
block header; the Archive tree holds block-header hashes), and correct the
nullifier helpers to say siloed rather than raw nullifier.
* chore(bb-prover): wire BB_DEBUG_OUTPUT_DIR through AvmProvingTester
Pass debugDir and a logger to BBJsFactory so that running the AVM
proving tests with BB_DEBUG_OUTPUT_DIR set actually dumps avm_inputs.bin
and the equivalent bb-avm CLI command to disk (via DebugBBJsInstance).
Without this the env var was silently ignored by these tests.
* fix(docs): fable review
Fix critical issues found in a full docs audit, in both the source docs
and the published v4.3.1 versioned docs:
- counter tutorial: add the missing 'clear the scaffold placeholder test'
note (renaming Main->Counter broke aztec compile with 6 errors)
- token bridge tutorial: correct artifact import paths and bytecode field
for the Hardhat layout, fix the run command (npx tsx), add a note to
update the @aztec/l1-contracts tag, fix a broken relative link
- aztec CLI reference: write the missing 'aztec start' section
- aztec-wallet CLI reference: remove leaked generator-machine defaults
(/home/josh/.aztec/wallet, host.docker.internal)
- sequencer governance/slashing pages: replace removed contract getters
(M/N/yeaCount/proposals -> ROUND_SIZE/QUORUM_SIZE/signalCount/getProposal),
correct the ejection threshold description (rollup localEjectionThreshold,
not '98% / max 3 slashes'), fix 36s->72s slot math
- aztec-nr docs: replace nonexistent APIs (emit_public_log ->
emit_public_log_unsafe, RetrievedNote/HintedNote -> ConfirmedNote,
history::contract_inclusion -> history::deployment), correct the Storage
struct naming claim
- outbox.md (source only): update IOutbox signatures to the
checkpoint-based interface
* docs: correct aztec start source reference
* docs: regenerate v4.3.1 aztec cli reference
* fix(docs): complete truncated v4.3.1 aztec start reference, review fixes
The regenerated v4.3.1 aztec start section was cut off mid-generation:
the --p2pBootstrap.queryForIp description ended mid-word ("Defau"),
which failed cspell and broke the docs deploy preview, and the
TELEMETRY, BOT, PXE, and TXE categories were missing entirely. Restored
from the real v4.3.1 `aztec start --help` output, including the dropped
P2P SUBSYSTEM / P2P BOOTSTRAP category headers.
Also:
- Backtick the setup allow-list format strings so Docusaurus stops
parsing `:selector` as an unused markdown directive.
- outbox.md: update consume() edge-case error signatures to the current
Epoch-typed forms (Outbox__NothingToConsumeAtEpoch, Outbox__AlreadyNullified).
- counter tutorial (both copies): fix stub-comment URL that 404s
(/aztec-nr/... -> /developers/docs/aztec-nr/...).
* fix(docs): correct stale slashing grace period values
The 'First 128 slots' grace period was stale in both copies. The actual
mainnet SLASH_GRACE_PERIOD_L2_SLOTS deployment default is 8,400 slots
(~7 days) at v4.3.1 and 1,200 slots (~1 day) on next, anchored at the
CanonicalRollupUpdated event (spartan/environments/network-defaults.yml,
yarn-project/slasher/src/config.ts).
* chore: add create-issue skill for filing Linear issues
## Summary
Adds a generic `create-issue` skill at `.claude/skills/create-issue/SKILL.md` for turning a unit of work into a well-formed Linear issue.
The skill encodes our conventions so issues are consistent and actionable:
- **Self-contained context** — every issue must contain enough for a fresh agent (no prior conversation) to execute end-to-end: summary, evidence, root cause / approach with `file:line` references, the specific change, and references.
- **1/2/3/5 point estimates** — what each value means, with a reminder to state the reasoning so it can be overridden.
- **Required acceptance criteria** — concrete, objectively checkable, including negative criteria.
- **Two modes** — standalone (ask for team/project/labels/priority) vs. planning a project breakdown (inherit the project's conventions, link issues via parent/`blocks`/`blockedBy`).
Docs-only change (a Claude Code skill); no code or build impact.
## Backport
Labeled `backport-to-v5-next` so the skill is also available on the v5 line.
* feat: add alerts for internal networks (#24090)
Fix A-1139
Alert on:
- any slashing round execution
- missed slots
- checkpoint proposal failures
- L1 failures
- slow gossip validation
- spike in tx validation
- attestation validation issues
- parent checkpoint mismatch
* feat(docs): serve markdown + llms.txt for agent readiness
Improve the docs site's Fern/afdocs "agent score" by making pages
agent-readable:
- Replace docusaurus-plugin-llms with @signalwire/docusaurus-plugin-llms-txt,
covering all four docs instances and emitting a .md sibling per route plus
llms-full.txt (links now point to .md).
- Add a Netlify edge function for `Accept: text/markdown` content negotiation.
- Inject a hidden llms.txt link into every page's <body> and an llms.txt
pointer into every generated page .md (afdocs discovery directives).
- Scope the auto-generated API reference out of the sitemap (drop
augment_sitemap.js) and exclude utility routes, aligning the coverage
denominator with real doc pages; the API stays discoverable via the existing
scoped hub-and-spoke llms.txt.
- Make append_api_docs_to_llms.js idempotent on re-runs.
* fix(docs): negotiate markdown for doc routes ending in a version number
The edge function treated any path ending in .<alnum> as a static file,
so doc routes whose last segment is a version (e.g. a changelog page like
.../changelog/v2.0.2 or v4.2) skipped markdown negotiation. Match only known
static-file extensions instead.
* feat: setup RPC monitoring (#24103)
Fix A-1137. Adds Grafana Cloud monitoring for RPC mainnet deployments.
No alerts are enabled yet.
* docs: point robots.txt at llms.txt for agent discovery
* chore: update Noir to v1.0.0-beta.22 (v5-next, redo of #23870) (#23886)
## Summary
Redo of #23870 against the current `v5-next` (after it was reverted in `9e53e1f` "revert two bad automerges").
Cherry-pick of the original PR head `884e84e8` (the noir submodule bump + Rust/Noir source fixes) plus a second commit that regenerates `yarn-project/yarn.lock`. That lockfile refresh was the explicit "Remaining knock-on" the original PR called out as needing CI/maintainer work; without it, CI's `yarn install --immutable` rejects the mismatched `@aztec/noir-noir_js` file: hash and the `npm:1.0.0-beta.21` references for the noir-* packages.
## Changes
Commit 1 (cherry-pick of `884e84e8`, original PR #23870):
- **`noir/noir-repo`** → `c57152f91260ecdb9faad4efc20abb14b6d2ece7` (`v1.0.0-beta.22`), replacing the off-mainline `temp-serialization-tag` commit (`f1a4575`, "Fixes") that `v5-next` was pinned back to after the revert.
- **`avm-transpiler/Cargo.lock`** → noir crates `1.0.0-beta.21` → `1.0.0-beta.22` (adds `msgpack_tagged`, `serde_bytes`, `bs58`, `tinyvec`; bumps `darling` 0.23, `serde_with` 3.20).
- **`noir-projects/aztec-nr`** → replace the now-deprecated `BoundedVec::from_parts_unchecked` with `BoundedVec::from_parts` in `note_getter.nr` and `utils/array/subbvec.nr` (`aztec-nr` CI runs `nargo check --deny-warnings`, so the deprecation is otherwise a hard failure).
Commit 2 (new):
- **`yarn-project/yarn.lock`** → regenerated against the v5 noir commit `c57152f` (`1.0.0-beta.22`) via `yarn install --mode=update-lockfile` (noir-* package versions `1.0.0-beta.21` → `1.0.0-beta.22`; `@aztec/noir-noir_js@file:` hash `294c27` → `893a3e`; checksum updated).
## Notes
- Same diff shape as the original PR (4 files, +91/-38) plus the `yarn-project/yarn.lock` regen. The yarn.lock change is binary in `git diff --stat` due to the `.gitattributes` `-diff` setting; the textual change is the noir-* version bump + the `file:` hash and checksum update, matching what the `merge-train/fairies-v5` lockfile already carries.
- This is the same lockfile regeneration the parallel fix in #23875 (against `merge-train/fairies-v5`) used, sourced from the prebuilt `noir-packages-7c3d4e0f9363947d.tar.gz` build-cache artifact.
- Tracking label `private-port-next` and `C-noir` mirror the original. `ci-draft` so CI runs while the PR is in draft.
---
*Created by [claudebox](https://claudebox.work/v2/sessions/c29eb43af6cd3071) · group: `slackbot`*
* chore(port): fix(avm-transpiler): lowered cmov was clobbering false branch (AztecProtocol/aztec-packages-private#226)
Forward-port of #226 (merged to v5-next) onto next. Reorders the lowered
ConditionalMov so destination is written once on the taken branch, fixing the
case where destination == source_b clobbered the false branch.
* chore(port): fix(kernel): reject squashing a zero-valued note hash (AztecProtocol/aztec-packages-private#239)
Forward-port of #239 (merged to v5-next) onto next. kernels-audit #538:
validate_squashable_note_hash_nullifier_pair now rejects a zero-valued note
hash linkage, preventing the settled-note nullifier double-spend.
* chore(port): feat: merge-train/fairies-v5 — RAW pick, conflicts committed (AztecProtocol/aztec-packages#23881)
Cherry-pick -m 1 of public v5-next merge b8ac769b1 (193 files, ~12 PRs).
RAW state: the 11 conflicted paths below are committed as git left them
(markers in text files, 'ours' for binaries); the next fix(port) commit
is the complete hand-written resolution.
Conflicted paths:
- noir-projects/aztec-nr/aztec/src/oracle/version.nr
- noir-projects/aztec-nr/aztec/src/standard_addresses.nr
- noir-projects/noir-contracts/contracts/protocol/aztec_sublib/src/oracle/version.nr
- noir-projects/noir-contracts/contracts/protocol/aztec_sublib/src/standard_addresses.nr
- noir-projects/noir-contracts/pinned-standard-contracts.tar.gz
- yarn-project/pxe/src/contract_function_simulator/oracle/interfaces.ts
- yarn-project/pxe/src/contract_function_simulator/oracle/oracle.ts
- yarn-project/pxe/src/contract_function_simulator/oracle/utility_execution_oracle.ts
- yarn-project/pxe/src/oracle_version.ts
- yarn-project/standard-contracts/src/standard_contract_data.ts
- yarn-project/txe/src/oracle/txe_oracle_top_level_context.ts
* fix(port): merge-train/fairies-v5 (#23881) — conflict resolution + CI fixups + regenerated standard-contracts artifacts
The complete hand-written part of the #23881 port, on top of the RAW pick:
- resolve all 11 conflicts to the incoming public version (oracle
version/interface hash, pxe/txe oracle imports)
- pinned-standard-contracts.tar.gz REGENERATED from this branch's sources
with this branch's own toolchain (nargo beta.22 + private bb-avm built
from the branch): carries the delivery-mode DiscoveredHandshake
get_handshakes return (98 fields) AND private-bb chonk VKs (5216 bytes)
— fixes both the handshake TXE failure (Expected 98 got 66) and the
earlier BBApiException VK mismatch
- standard_contract_data.ts + both standard_addresses.nr twins rewritten
by the standard-contracts generator (generate_data.ts) from the
regenerated tarball, so the committed derived values match the new
artifacts (addresses change because the handshake artifact changed)
- delete orphaned pxe oracle.ts (deleted upstream by #23915; the
modify/delete conflict otherwise keeps it)
- dedup utilityExecutor in txe_oracle_top_level_context.ts (TS1117)
* chore(port): fix(kernel): bound private-log squashing to the claimed length (AztecProtocol/aztec-packages-private#240)
Forward-port of #240 (merged to v5-next) onto next. kernels-audit #529:
validate_log_squashing forces slots beyond logs.length to be treated as kept,
preventing a planted out-of-length slot from inflating the squashed count and
silently dropping a real kept private log.
* chore(port): feat(pxe): constrained-secret search discipline in syncTaggedPrivateLogs (AztecProtocol/aztec-packages#23948 / #23942)
Forward-port of public merge-train #23948 (merged to aztec-packages:v5-next),
net content = #23942. Cherry-picked merge 0ac07a13 (-m 1): pxe
sync_tagged_private_logs.ts + test (+253/-60). No conflicts.
* chore(port): feat(noir): optionally install nargo from the matching official release (AztecProtocol/aztec-packages#23949)
Forward-port of public #23949 (merged to v5-next). Adds a noir/bootstrap.sh dev
opt-in: with a noir-from-release.flag file and the noir/noir-repo commit pinned
to an official release tag, build_native fetches released nargo instead of
compiling. Cherry-picked 0ae1e7a6 (-m 1): .gitignore + noir/bootstrap.sh +
contract-snapshots/bootstrap.sh (+91/-1). No conflicts.
* chore(port): fix(pxe): prevent contract sync deadlock on nested syncs (AztecProtocol/aztec-packages#23961 / #23951)
Forward-port of public merge-train #23961 (net content = #23951). Cherry-picked
72824f3d (-m 1): pxe contract_sync_service.ts + test (+101/-19). No conflicts.
* chore(port): feat: merge-train/spartan-v5 — RAW pick, conflicts committed (AztecProtocol/aztec-packages#23965)
Cherry-pick -m 1 of public v5-next merge 7baab8368b0 (76 files):
- refactor(prover-node): CheckpointStore + SessionManager redesign (#23552)
- fix: pin getAttesters reads to a single L1 block (A-819) (#23920)
- test: always capture local network logs for compose tests (#23912)
- docs(stdlib): clarify checkpoint capacity ceiling is the provable max (#23952)
RAW state: the 3 conflicted paths below are committed with markers; the
next fix(port) commit is the complete hand-written resolution + the
dependency alignment this pick needs to compile.
Conflicted paths:
- yarn-project/end-to-end/bootstrap.sh
- yarn-project/end-to-end/scripts/docker-compose.yml
- yarn-project/stdlib/src/deserialization/index.ts
* fix(port): merge-train/spartan-v5 (#23965) — mechanical: conflict resolution to source
Resolves the RAW pick's 3 conflicts to public v5-next post-merge, verbatim:
e2e bootstrap.sh + docker-compose.yml log-capture wiring, stdlib
deserialization constants. No hand judgment beyond taking the source side;
every path here matches public v5-next post-#23965.
* fix(port): merge-train/spartan-v5 (#23965) — decisions: A-1156 stdlib alignment
Independent of the conflicts but required to compile — the judgment call in
this block: the train's docs commit (#23952) removes
MAX_BLOCKS_PER_CHECKPOINT, renamed publicly by the unlabeled, never-ported
#23934 (A-1156); private's checkpoint.ts/validate.ts still imported it.
Aligned stdlib/checkpoint/{checkpoint,validate,validate.test}.ts + added
deserialization.test.ts to public. Rename + compat-extending option only;
the A-1156 archiver-ingest BEHAVIOR change is deliberately NOT ported.
* chore(port): feat: initializerless schnorr account contract (AztecProtocol/aztec-packages#23974 / #23962)
Clean cherry-pick (-m 1) of public v5-next merge train 6f5a42147, which
carried a single PR: feat: initializerless schnorr account contract
(#23962). 31 files, no conflicts.
* chore(port): feat(avm): lock-free sharded TraceContainer (AztecProtocol/aztec-packages-private#312)
Clean cherry-pick (-m 1) of private v5-next merge 1e3cfb32b2e: replaces
the AVM TraceContainer's per-column shared_mutex + hash-map storage with
a lock-free sharded design (~4x faster tracegen, ~20% lower peak memory).
2 files (vm2 tracegen trace_container .hpp/.cpp), no conflicts.
* chore(port): feat: merge-train/fairies-v5 r3 — RAW pick, conflicts committed (AztecProtocol/aztec-packages#23992)
Cherry-pick -m 1 of public v5-next merge 951b1fc149c (46 files):
- chore: improve noir contract test tooling (#23946)
- feat(aztec-nr): extend OnchainDelivery builder for secret origin (#23865)
- feat(aztec-nr): wire handshake secret discovery into contract sync (#23938)
- fix(ci): run noir-projects nargo fmt check in CI (#24003)
RAW state: the 4 conflicted paths below (the standard-contracts generated
set — the train changes handshake source, so public regenerated its
artifacts while this branch carries its own regen) are committed as git
left them (markers in text files, 'ours' for the binary tarball); the
next fix(port) commit is the regeneration from this branch's post-pick
sources.
Conflicted paths:
- noir-projects/aztec-nr/aztec/src/standard_addresses.nr
- noir-projects/noir-contracts/contracts/protocol/aztec_sublib/src/standard_addresses.nr
- noir-projects/noir-contracts/pinned-standard-contracts.tar.gz
- yarn-project/standard-contracts/src/standard_contract_data.ts
* fix(port): merge-train/fairies-v5 r3 (#23992) — standard-contracts regen to fixed point
The complete hand-written part of the #23992 port, on top of the RAW
pick. All 4 conflicts are the standard-contracts generated set (the
train changes handshake/aztec-nr source, so artifacts and addresses
move): resolved by REGENERATING from this branch's post-pick sources
with this branch's own toolchain (nargo beta.22 + private bb-avm), then
iterating pin-standard-build + the standard-contracts generator until
the stamp->artifact->address chain reached its fixed point (no drift;
converged on pass 3). Tarball carries the post-#23938 handshake
artifacts with private-bb chonk VKs; standard_contract_data.ts and both
standard_addresses.nr twins are the converged generator output.
* chore(port): fix: bump Grumpkin LIBRA_UNIVARIATES_LENGTH to 4 — RAW pick, conflicts committed (AztecProtocol/aztec-packages-private#304)
Cherry-pick -m 1 of private v5-next merge c73cdde8a99 (8 files): fully
mask committed sumcheck round univariates for Grumpkin (L=4 Libra) +
CHONK_RECURSION_GATES bump + regenerated mock-protocol-circuits pin.
RAW state: conflicted paths below committed as git left them (markers /
'ours' for the binary); the fix(port) commit carries the resolution and
the pinned-artifact regens this change requires.
Conflicted paths:
- barretenberg/cpp/src/barretenberg/dsl/acir_format/gate_count_constants.hpp
- noir-projects/mock-protocol-circuits/pinned-build.tar.gz
* fix(port): Grumpkin L=4 Libra masking (#304) — re-measured gate counts + mock pin regen
The complete hand-written part of the #304 port, on top of the RAW pick:
- gate_count_constants.hpp: both conflicted constants are MEASURED values,
re-derived on this tree by running the pinning tests with a bb built
from this branch + the fix:
CHONK_RECURSION_GATES 1369085 (ours 1368429 / theirs 1367968)
ECCVM_RECURSIVE_VERIFIER_GATE_COUNT 234909 (ours 234253 / theirs 233791)
Neither parent's number is valid here: private bb's gate counts differ
from v5's, and the L=4 fix adds +656 gates on both branches (the same
delta v5 measured). ChonkRecursionConstraintTest.GateCountChonkRecursion
and ECCVMRecursiveTests.SingleRecursiveVerification are green locally
with these values.
- mock-protocol-circuits/pinned-build.tar.gz (binary conflict, both
branches regenerate it): regenerated from this branch's post-pick
sources with this branch's bb (pin-build, clean).
- pinned-standard-contracts.tar.gz: verified UNCHANGED — regenerated and
the extracted contents are byte-identical to the committed tarball
(matches upstream's 'Pinned Chonk VKs unchanged'), so no churn is
committed; the standard-contracts generator also reports no drift.
* chore(port): feat: merge-train/spartan-v5 r2 — RAW pick, conflicts committed (AztecProtocol/aztec-packages#23975)
Cherry-pick -m 1 of public v5-next merge ab5413c72dc (296 files, ~13 PRs:
p2p checkpoint-replay fix #23967, sequencer timetable rework #23821,
peer-ban persistence A-1157 #23922, aztec_* JSON-RPC rename #23909,
tx-protection release #23978, checkpoint tips #23968, gas fallback
A-1154 #23947, consensus config A-1168 #23977, e2e/bot fixes).
RAW state: 46 conflicted paths committed as git left them (list in
/dev/null — see the fix(port) commit diff for the full set; markers in
text files). The fix(port) commit is the complete hand-written
resolution.
* fix(port): merge-train/spartan-v5 r2 (#23975) — mechanical: alignment to the source train
Every path in this commit is byte-identical after this commit to public
v5-next at the train merge (ab5413c72dc5377107943b8614130ec8050bf06c),
including deletions of files the train does not have. Nothing here is
hand-judged beyond the block's standing resolve-to-v5 policy; verify with:
git fetch https://github.com/AztecProtocol/aztec-packages.git ab5413c72dc
git diff ab5413c72dc <this commit> -- <any path in this commit> # empty
Accumulated across CI rounds 1-8: the 46 conflict resolutions, the v5
pipelined-timetable redesign consumers aligned wholesale (the 3-way
auto-merges produced stale old/new hybrids with no conflict markers),
type providers, gov_proposal / sequencer_config / aztec-node server tests,
tx_collection tx_source (includeProof for prover-node collection), the epoch
e2e suite's l1PublishingTime parameterization, libp2p receive-window clock
pins, test_epoch_cache nowMs = slot start, restored stdlib checkpoint.test.ts,
aztec-node schema proof-options coverage, automine includeProof:false, and
the sequencer README.
* fix(port): merge-train/spartan-v5 r2 (#23975) — constants: import v5's generated MAX_TX_BLOB_DATA_SIZE_IN_FIELDS
The previous resolution of the constants.ts conflict took neither side: it re-derived
MAX_TX_BLOB_DATA_SIZE_IN_FIELDS by hand in TypeScript, duplicating the Noir formula in
tx_blob_data.nr. spartan-v5 deliberately removed that duplication — #23933 taught the
constants generator to extract MAX_TX_BLOB_DATA_SIZE_IN_FIELDS from tx_blob_data.nr into
constants.gen.ts, and constants.ts imports the generated value.
Take v5's side:
- constants.in.ts: port the ADDITIONAL_NOIR_CONSTANT_FILES extraction mechanism (#23933),
so the generator emits MAX_TX_BLOB_DATA_SIZE_IN_FIELDS from tx_blob_data.nr.
- constants.gen.ts: MAX_TX_BLOB_DATA_SIZE_IN_FIELDS = 8475 (the generated value).
- constants.ts: import MAX_TX_BLOB_DATA_SIZE_IN_FIELDS from ./constants.gen.js instead of
re-deriving it; MAX_TX_DA_GAS = MAX_TX_BLOB_DATA_SIZE_IN_FIELDS * DA_GAS_PER_FIELD.
All three files are now byte/line-faithful to the source train (ab5413c72dc).
MAX_TX_DA_GAS is unchanged at 271200; this is a structural fix removing the duplicated
single-source-of-truth derivation, not a value change.
* fix(rebase): re-derive measured/generated artifacts after rebases onto advancing next
Round 1 — next advanced 15 merges (incl. the barretenberg merge-train
#273, custom arithmetic gates for kernels: re-measured gate constants,
VK format 5216 -> 4832 bytes). Stack rebased onto f77812b6a17; artifacts
re-derived with a branch-built toolchain: CHONK_RECURSION_GATES measured
1373940 (next's 1373283 + the #304 delta), ECCVM unchanged 234909,
other constants restored to next's values, mock pin + standard-contracts
set regenerated to fixed point (stale ~/.bb vk_cache cleared — it was
injecting old-format VKs into fresh artifacts).
Round 2 — next advanced 8 more merges (incl. #335, translator
delta-range lower anchor: chonk base +25). Stack rebased onto
2fbbe4c5f80; re-measured on this tree: CHONK_RECURSION_GATES = 1373965
(ChonkRecursionConstraintTest green), ECCVM unchanged 234909
(SingleRecursiveVerification green); all other constants at next's
current values; mock pin + standard-contracts set regenerated to fixed
point with this base's bb (converged pass 1).
Note: private#336 (ECCVM msm_pc interior-skew pin, port of #208 to
v5-next) needed NO port — #208 merged into next directly; its
cherry-pick is content-empty here apart from these same re-derived
artifacts.
* feat: merge-train/fairies-v5 (#24020)
BEGIN_COMMIT_OVERRIDE
feat: use initializerless accounts (#23973)
fix: remove type assertion (#24023)
feat: richer EphemeralArray and TransientArray APIs (#23982)
fix: merge train conflicts (#24047)
fix: restore v5-next merge ancestry on fairies merge train (re-open
#24047) (#24049)
fix: client flows benchmarks (#24055)
END_COMMIT_OVERRIDE
* fix(port): merge-train/fairies-v5 r4 (#24020) — standard-contracts pin regen
The pick applied cleanly, but its aztec-nr changes (unconstrained_array
module + richer Ephemeral/Transient array APIs) alter the compiled
standard-contract artifacts, so pinned-standard-contracts.tar.gz is
regenerated from the post-pick sources with the branch toolchain.
Address stamps did NOT move (generator converged with no drift on
pass 1), so only the tarball changes. Workspace typecheck clean of
stack-attributable errors.
CI round 8: align e2e_bot.test (hardcoded-gas test declares MAX_TX_DA_GAS,
the per-tx cap, not next's checkpoint-wide MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT
which inbound validation now rejects) and epochs_test (v5-at-r4 harness
defaults; the l1PublishingTime parameterization the epoch suite's v5 files
no longer pass) to this block's source state.
* chore(port): fix(noir-protocol-circuits): fail when pinned VKs do not match — RAW pick, conflicts committed (AztecProtocol/aztec-packages-private#364)
Cherry-pick -m 1 of 96912451ca4. Conflicted paths (markers committed as git
produced them):
- noir-projects/noir-protocol-circuits/bootstrap.sh
* fix(port): fail when pinned VKs do not match (#364) — extraction-style resolution
The only conflict was the pinned-build extraction: this branch's pin tarball
stores artifacts at the archive root (created with 'tar czf ... -C target .'),
so extraction keeps 'mkdir -p target && tar xzf pinned-build.tar.gz -C target'
where the source extracts in place. The VK-consistency gate is appended
verbatim after extraction; generate_vk/check_pinned_vk refactor applied clean.
noir-protocol-circuits does not track a pinned-build.tar.gz on this branch
today, so the gate is dormant here until a pin is committed — ported to keep
the safety net consistent with v5-next.
The v5-only chonk repro fixture deletions (chonk_fail_input,
public_chonk_verifier_repro.test.ts) were no-ops: those files never existed
on this branch.
* chore(port): reject non-canonical x coordinate (native affine_element) — RAW pick, conflicts committed (AztecProtocol/aztec-packages#24029)
Cherry-pick -m 1 of 5fd61870609. Source code (affine_element from_compressed
range check + regression test, grumpkin SRS v2 rename across crs scripts/ts,
ECCVM fixed VK) auto-merged onto our content. Binary conflicts committed as
git left them:
- noir-projects/mock-protocol-circuits/pinned-build.tar.gz (content)
- noir-projects/noir-protocol-circuits/pinned-build.tar.gz (modify/delete; our branch does not track it)
* fix(port): reject non-canonical x coordinate (#24029) — pin resolutions + mock pin regen
Block 17 (aztec-packages#24029) switches the build to the grumpkin SRS v2
(grumpkin_g1_v2.dat), which moves the mock-protocol-circuits chonk VKs even
though their bytecode is unchanged. The mock pin was previously kept at its
pre-v2 form so the CI mock-protocol-circuits leg would confirm the staleness
before spending a bb rebuild; it did (check_pinned_vk mock_rollup_tx_base_private
mismatch).
Regenerated noir-projects/mock-protocol-circuits/pinned-build.tar.gz with this
branch's bb/bb-avm (clang20) via `bootstrap.sh pin-build` — all 13 mock circuits
recompiled and re-keyed (mock_rollup_root ultra_honk, mock_rollup_tx_base_public
GoblinAvm included), zero failed jobs. noir-protocol's pin stays deleted
(introducing v5-next's would trip the #364 VK-consistency gate against our bb).
* chore: fix next-net dns
* fix(telemetry): raise span queue size and make telemetry shutdown idempotent (#24121)
* refactor: sticky session based on IP (#24120)
Pin session by client ID rather than cookie, add Kong healtchecks and
clean up namespaces.
* feat(ci3): run uploadable benchmarks on a dedicated on-demand instance
> [!IMPORTANT]
> Depends on the IAM change aztec-labs-eng/iac#6 (grants `ci3-build-instance-role` the launch/SSM/PassRole surface). **That must apply first**, else the build instance's `create-fleet` hits `UnauthorizedOperation`.
## Problem
Spot diversification (create-fleet) means build instances now land on variable EC2 types — m6a/m7a/m6i/r6a/r7a at 16/32/48xlarge, AMD vs Intel. The in-build benchmark phase runs on that box, so wall-time numbers vary by hardware family far more than the 105% regression alert threshold → false regressions. (The instance type isn't even recorded in the bench JSON.)
## Approach
Only the canonical **merge-queue→next** series (the one used for real regression tracking) runs benches on a **dedicated, fixed, on-demand m6a.16xlarge**. PR `ci-full` runs keep running benches inline on the contended build box purely as a **breakage check** — no dedicated box, no upload.
Benches are scheduled by the existing test engine: when the build completes in `build_and_test` (full builds only),
- **upload runs** (`SHOULD_UPLOAD_BENCHMARKS=1`): launch the dedicated box via `./ci.sh bench` as a backgrounded, colored, denoised job (logged like the test engine) and `wait` on it (non-fatal) before returning;
- **otherwise**: `bench_cmds >> $test_cmds_file` — benches become ordinary test commands.
`ci.sh bench` → `bootstrap_ec2` blocks until the remote `ci-bench` finishes (ending in `cache_upload bench-<treehash>`), so the `wait` is the whole rendezvous. Results reach the GA `Upload benchmarks` step unchanged via that cache key (`ci3_success.sh` `gh-bench`).
## Changes
- **`bootstrap.sh`**: drop inline `bench` from `ci-full`/`ci-full-no-test-cache`; add the `build_and_test` launch/append hook + non-fatal `wait`; new `ci-bench` mode = cache-hit `make full` + `bench` (no test engine).
- **`ci.sh`**: new `bench` launcher — `AWS_INSTANCE=m6a.16xlarge NO_SPOT=1` (pins a fixed on-demand type; `CPUS` not needed since `AWS_INSTANCE` bypasses pool sizing).
- **`ci3/bench_engine`**: drop the 8-core OS isolation / HT-disable / pinning. Dedicated box → benches use the full machine, honouring per-bench `CPUS` via the strict scheduler (defaults to `nproc/2` without `BENCH_CPU_COUNT`). This is what lets the 64-vCPU 16xlarge satisfy the `CPUS=32` bb rollup bench.
- **`.github/ci3_labels_to_env.sh`**: scope `SHOULD_UPLOAD_BENCHMARKS` to merge-queue→next (it now also gates the dedicated box). **`ci3/bootstrap_ec2`**: pass it through to the instance.
## Notes
- **One-time baseline shift** in `bench/next`: different machine + no isolation changes absolute numbers once; stable thereafter. May want to annotate the series.
- **Soft failure**: a bench-box failure is logged and the run proceeds (no fresh numbers) rather than blocking the merge.
- **PR benches-as-tests**: `:PARALLEL=0` serial benches lose one-at-a-time isolation and run contended — fine for breakage-only; real numbers come from the dedicated box's `bench_engine` path.
- Validated: all touched scripts pass `bash -n`; the `AWS_INSTANCE`+`NO_SPOT` fixed-on-demand launch mechanism was verified live during the create-fleet work. Full e2e is exercised by a merge-queue→next run once the iac PR lands.
* chore: disable v4-nightlies (#24125)
.
* fix(ci): refresh stale mock_hiding pinned VK in mock-protocol-circuits
* feat(ipc): add IPC runtime and codegen foundation
Introduce ipc-runtime (msgpack-over-UDS/SHM transports for C++, TS, Rust, Zig)
and ipc-codegen (schema-driven client/server/dispatch generator for the same
four languages), plus the echo example and its cross-language wire-compat
test matrix.
Runtime:
- UDS and shared-memory transports (single-client SPSC and multi-client MPSC
rings) behind a common IpcClient/IpcServer interface, with NAPI bindings.
- Unified constants and timeout semantics, max-frame guards, frame-desync
detection, and shutdown/cancellation via futex wake (SHM) / fd close (UDS).
- NAPI lifecycle hardening: clean close/join, no TSFN leak, the process exits
when no calls are in flight.
Codegen:
- Human-authored JSONC schema format: a single per-service object
(service/aliases/types/error/commands with shorthand type refs) that lowers
to the internal named_union IR the four generators consume, so output is
identical across the friendly and legacy positional forms. Naming derives
from the 'service' field; aliases support bin32 (nominal) and scalar synonyms.
- Generators hand-roll the [name, payload] msgpack framing keyed on
MSGPACK_SCHEMA_NAME (no C++ schema reflection).
- Schema validation, unified server error wrapping, and per-language wire
fixes (rust Option<bytes>/[bytes;N], ts u64 bigint + bin32, zig signed-int
tolerance), with a golden corpus pinning canonical msgpack output.
Full echo test matrix (golden x4, UDS 4x4, SHM, ts_package) passes.
* refactor(wsdb): migrate to generated ipc package
Generate the @aztec/wsdb TS package and the wsdb C++ client/server from
wsdb_schema.jsonc via ipc-codegen instead of the hand-written bindings.
Add a "bin" entry to the generated package.json (when the package wraps a
native binary) so the binary lands on the user's PATH on install. The bin
target is a generated JS launcher (src/bin.ts -> dest/bin.js) that resolves the
native binary via the same per-arch resolution as the spawned client and execs
it forwarding argv/stdio/exit code — the binary itself ships in the per-arch
optional-dependency packages, and npm only links the main package's own bin.
* chore(ci): run nightly spartan bench namespaces from private repo only
* ci: reusable network-teardown action that runs on GitHub runners
* ci: use OIDC role for nightly spartan benchmarks
The nightly spartan bench jobs authenticated to AWS with long-lived
IAM user keys (AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY for user/adam),
which lack iam:PassRole on ci3-build-instance-role and fail with
UnauthorizedOperation when CI3 launches build instances.
Switch all six AWS-touching jobs (benchmark, proving-benchmark,
block-capacity-benchmark and their cleanup jobs) to the GitHub OIDC
role already used by ci3.yml and already trusted for this repo in the
Labs iac repo (terraform/oidc, policy ci3-pipeline-exec-full.json,
which grants PassRole). Each job now sets id-token: write and assumes
the role via aws-actions/configure-aws-credentials; downstream steps
inherit the credentials from the job env.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(prover-node): provers dashboard checkpoint metrics
* fix(ci): nightly spartan bench reports correct PASSED/FAILED in Slack
* feat: enable v5 testnet RPC (#24165)
.
* docs: point testnet docs at v5.0.0-rc.1 and refresh networks.md testnet addresses
* update PR #24168
* Add custom bytecode tests for SET_FF with overflowing value
* Move getInstructionSize() to instruction_serialization.ts
* docs: finish v5.0.0-rc.1 testnet cut (TS API, CLI/node-API refs, FPC + L1 addresses)
Completes the v5.0.0-rc.1 testnet docs release that was blocked in the prior
environment:
- Generate the TypeScript API for testnet (static/typescript-api/testnet/,
9 packages) from the v5.0.0-rc.1 tag source.
- Regenerate CLI references from the installed v5.0.0-rc.1 binary (the
tag-committed copies were stale): the three developer refs, the operator
cli-reference.md, and the node JSON-RPC API reference.
- Set the canonical SponsoredFPC address (CLI-computed) in networks.md, the
v5 snapshot, and the live testnet getting-started page.
- Resolve two L1 periphery addresses on-chain: Reward Booster (via
Rollup.getRewardConfig) and Slash Payload Cloneable (via
SlashingProposer.SLASH_PAYLOAD_IMPLEMENTATION).
- Fix broken MessageDelivery API-reference links in the v5 snapshot's
state_variables.md (global.MessageDelivery -> struct.MessageDelivery) and
add "uncheckpointed" to the cspell dictionary.
* docs: mark testnet Register New Rollup Version Payload as N/A
The v5 testnet canonical rollup (registry.getCanonicalRollup()) is the
registry's genesis rollup, not registered via a governance payload. None of
the four on-chain governance proposals registers it; the previously-listed
address was an unrelated executed rehearsal proposal that registered a
different rollup.
* feat(avm): per-column sizes for public inputs in recursive verifier
Replace the single AVM_PUBLIC_INPUTS_COLUMNS_MAX_LENGTH (applied to all four
public input columns) with per-column lengths, so the AVM recursive verifier
no longer hashes or MLE-evaluates the trailing zeros of the shorter columns.
Per-column lengths: col0=4685, col1=4683, col2=522, col3=99 (combined 9989
vs 18740), removing 8751 trailing-zero elements. This saves ~221,692 gates in
the two-layer recursive verifier and the public base rollup that embeds it.
The committed public-input columns remain pinned to zero beyond each column's
length by the MLE consistency check, so the change is sound; tracegen, the
prover/verifier Fiat-Shamir hashing, the Noir serialize_to_columns and the
C++ flat_to_columns all switch to per-column lengths consistently.
* fix(avm): regenerate mock pinned-build for per-column public input length
The mock-protocol-circuits pin freezes compiled bytecode (restored in CI instead
of recompiling). The per-column change reduced AVM_PUBLIC_INPUTS_COLUMNS_COMBINED_LENGTH
to 9989, but the committed pinned-build.tar.gz still embedded the old 18740, so the
freshly-built bb-avm aborted check_pinned_vk for mock_rollup_tx_base_public with
'Flattened public inputs vector size does not match the expected combined length'.
Regenerated via 'bootstrap.sh pin-build' so the pinned mock bytecode (and VKs) match
the new 9989 length. Verified check_pinned_vk passes for all mock circuits.
* test(avm): guard public-input column lengths against silent truncation
serialize_to_columns (Noir) copies only rows [0, COLUMN_i_LENGTH) of each column, so a
field mapped past a column's length is silently dropped from the AVM proof — a latent
soundness footgun that the IMPORTANT comment in constants.nr was the only guard against.
Add out-of-circuit invariant tests (no gate impact):
- Noir: deserialize a maximally-populated AvmCircuitPublicInputs (all fields non-zero,
covering future fields automatically) and assert to_columns()[i] is zero for every row
in [COLUMN_i_LENGTH, MAX_LENGTH), i = 1,2,3.
- C++: to_columns() returns columns sized exactly at their per-column length (jagged), so
the equivalent invariant is tightness — populate each column's last row and assert sizes
match the constants and the final cell is non-zero. A field past Lᵢ is then an
out-of-bounds write caught under assert/sanitizer builds.
* Add comments related to writing accumulated data
* docs(avm): address PR review comments on public-input column length tests
- prover.cpp: point the trailing-zeros note at the consistency check (evaluate_public_input_column).
- avm_io.test.cpp / avm_circuit_public_inputs.nr: trim the wordy test comments.
* feat: merge-train/fairies-v5 (#24117)
BEGIN_COMMIT_OVERRIDE
chore: remove obsolete no_predicates wrappers (#7729) (#24093)
feat!: change for_each iteration order in CapsuleArray, EphemeralArray,
TransientArray (#24021)
END_COMMIT_OVERRIDE
* feat: merge-train/spartan-v5 (#24053)
BEGIN_COMMIT_OVERRIDE
refactor(stdlib)!: thin chain-checkpointed event, collapse sync (#24007)
refactor!: remove proposedCheckpoint tip (#24008)
fix(sequencer): wait for previous L1 block before publishing (#24037)
test(e2e_fees): bridge fee juice from a dedicated L1 account (#24054)
fix(aztec-node): pipelining-aware slot and fee simulation in
simulatePublicCalls (#24031)
refactor: move registerContractFunctionSignatures to the node debug API
(#24066)
fix: resolve v5-next → merge-train/spartan-v5 conflict (#24072)
chore: merge v5-next into merge-train/spartan-v5 (raw, conflict markers)
(#24071)
test(ci): mark e2e_epochs/epochs_mbps_redistribution as flaky (#24098)
fix: isolate cross-chain L1 writes from publisher nonce (#24104)
test(world-state): make delayed-close fork queue-cleanup wait
deterministic (#24106)
fix(kv-store): lazy-load skipped browser benchmark deps (#24108)
feat(p2p): slash proposers exceeding max blocks per checkpoint (A-1166)
(#24041)
fix(stdlib): fix race conditions in L2BlockStream (#24042)
test(prover-node): make checkpoint store pruning test deterministic
(#24130)
END_COMMIT_OVERRIDE
* feat: merge-train/fairies-v5 (#24134)
BEGIN_COMMIT_OVERRIDE
fix(simulator): make circuit recorder concurrency-safe via
AsyncLocalStorage (#24112)
refactor(pxe): restore satisfies-typed oracle registries (#24132)
END_COMMIT_OVERRIDE
* feat: merge-train/fairies-v5 (#24144)
See
[merge-train-readme.md](https://github.com/AztecProtocol/aztec-packages/blob/next/.github/workflows/merge-train-readme.md).
This is a merge-train.
* feat: merge-train/fairies-v5 (#24152)
BEGIN_COMMIT_OVERRIDE
fix: allow prover mode autodetection (#24151)
fix(pxe): repoint broken debugging docs link in PXE error messages
(#24145)
END_COMMIT_OVERRIDE
* feat: merge-train/fairies-v5 (#24176)
BEGIN_COMMIT_OVERRIDE
fix(ci): import initializerless account in CLI acceptance test (#24175)
END_COMMIT_OVERRIDE
* update rpc
* feat: merge-train/spartan-v5 (#24148)
BEGIN_COMMIT_OVERRIDE
fix(test): reliably find target proposer in sentinel_status_slash
(A-1217) (#24143)
fix(test): wait for full gossip mesh before committee produces (A-1219)
(#24149)
fix: init bb.js sync singleton before subsystems start in createAndSync
(#24147)
feat(prover-node): capture checkpoint-level proving metrics (#24051)
fix: stabilize scenario invalidation timing (#24128)
fix: set default inbox lag to 2 (#24127)
test(spartan): wait for proposed instead of checkpointed in
performTransfers (#24123)
fix(validator): make block-number guard reorg-aware (A-1218) (#24141)
fix(test): pin AZTEC_INBOX_LAG=1 in sandbox compose envs (#24162)
chore(sequencer): downgrade insufficient-txs block log to verbose
(#24164)
fix(test): use in-memory file store for TxFileStore tests (A-1211)
(#24167)
fix(test): handle default inbox lag of 2, remove temporary inboxLag=1
pins (A-1250) (#24170)
fix(world-state): clean up queues for destroyed forks (#24178)
END_COMMIT_OVERRIDE
* docs: clean up and align v5.0.0-rc.1 migration notes
Migration-notes review for the v5.0.0-rc.1 release (developer snapshot +
unversioned source):
- Restructure: fold `## TBD` + `## Unreleased (v5)` into a single
`## 5.0.0-rc.1` heading (frozen snapshot); the unversioned source keeps an
empty `## TBD` on top for future entries. Remove a stray git conflict marker
in the snapshot.
- Merge three superseded intermediate entries into their accurate siblings
(verified against the v5.0.0-rc.1 source), preserving their unique guidance:
- `set_sender_for_tags` "scoped" -> "oracle removed" (account-contract /
`sendMessagesAs` guidance kept).
- `emit_*_unsafe` "deprecated" -> "now take BoundedVec" (array->BoundedVec
conversion examples kept).
- `aztec-up` "transitive npm bins" -> "bundled binaries no longer bare"
(shell-profile cleanup steps kept).
- Fix three accuracy bugs: `public_checks` demotion slot 6 -> 4;
`ContractDeployer.deploy` prose (args first, instantiation second);
`LogResult` now lists the required `txIndexWithinBlock` field.
- Sync the unversioned source's v5 section to match the snapshot (it was
missing ~10 v5 entries); its `## 4.3.0`+ history (with macros) is unchanged.
* docs: re-resolve v5.0.0-rc.1 developer snapshot include_code from the v5 tag
The developer versioned snapshot's `#include_code` snippets had been resolved
against the `next` (v6) working tree rather than the v5.0.0-rc.1 tag, so 23
pages embedded v6 example/contract code instead of what shipped in v5 (e.g.
`MessageDelivery::onchain_constrained` where v5 uses `onchain_unconstrained`).
Re-cut the developer snapshot from a v5.0.0-rc.1 worktree (preprocess +
docs:version run against v5 source so includes resolve correctly), then
re-applied the artifacts that are intentionally newer than the tag: the CLI
references (regenerated from the v5 binary), the node JSON-RPC reference, the
cleaned migration notes, the canonical SponsoredFPC address, and the
MessageDelivery API-reference link fix.
Scope verified: only the developer snapshot was affected. The operator/network
snapshot, aztec-nr API (delivery/ structure), and TypeScript API were already
generated from v5. Full `yarn build` passes (no broken links in the snapshot).
* docs: fix dead testnet RPC URL in getting started guide
Point NODE_URL at https://v5.testnet.rpc.aztec-labs.com, matching the
endpoint in networks.md. The previous host rpc.testnet.aztec-labs.com
no longer serves requests, so the guide failed at the first step.
* update PR #425
* Update discard.pil
* docs: fix testnet getting-started and bridge/counter tutorials
- Drop the stale '~36 seconds' block-time row from the testnet getting
started comparison (block time is variable, not a fixed value).
- Add @aztec/viem@2.38.2 to the token bridge tutorial install command;
its scripts import @aztec/viem, which is versioned off the Aztec
release line (mirrors upstream viem) and has no 5.0.0-rc.1 build.
- Add a 'clear the scaffold test' note to the counter tutorial so
'aztec compile' stays clean after renaming the contract to Counter
(matches the existing note in the token tutorial).
* docs: note @aztec/viem off-release versioning in release-docs skill
Future docs cuts must not rewrite @aztec/viem to the release version: it
mirrors upstream viem (e.g. 2.38.2) and has no Aztec-release-line build,
yet type-checks in CI via the auto-linked workspace copy, so the missing
installable version slips through. Tutorials importing @aztec/viem must
list it at its own pinned version in their install command.
* docs: update release-docs skill for the dedicated testnet getting-started page
Step 10 said no getting_started_on_testnet.md page exists; it does now.
Document updating NODE_URL/SPONSORED_FPC_ADDRESS/version there, keeping
NODE_URL in sync with the networks.md RPC endpoint (they drift apart),
and avoiding fixed block-time figures. Add the page and the NODE_URL
check to the Step 12 review.
* docs: drop block-time guidance from release-docs skill testnet section
* docs: tighten release-docs skill prose
* docs: correct v5.0.0-rc.1 migration notes
- Fix swapped protocol-contract slot numbers: multi_call_entrypoint was
hardcoded at 4 (not 6) and public_checks at 6 (not 4) in v4.3.1; reorder
the compaction sentence's contract list to match slots 1, 4, 6.
- Correct the PublicKeys entry: v5 PublicKeys has 6 fields (adds the new
mspk_m_hash and fbpk_m_hash), so the ContractInstancePublished event is
15 fields and the TS constructor takes 6 args (were 13 / 4).
- Remove the stale 'sandbox' keyword/tag from the frontmatter.
* chore: top-level tenstet DNS record
* feat: merge-train/spartan-v5 (#24181)
BEGIN_COMMIT_OVERRIDE
fix(ethereum): skip unfunded publishers in selection (#24180)
test(e2e): deflake epochs_mbps_redistribution (#24182)
feat(prover-node)!: wire prover JSON-RPC API to the admin endpoint
(#24189)
END_COMMIT_OVERRIDE
* chore: testnet-v4
* fix: resolve public-next → next merge conflict
* fix: resolve public-next -> next merge conflicts
Resolves the 6 conflicts from the raw merge (cb/merge-public-next-raw):
- .github/ci3_labels_to_env.sh: keep private-repo release safety gate, adopt
public's updated bench-upload comment.
- .github/workflows/nightly-spartan-bench.yml: adopt public's network-teardown
composite action for all 3 teardown steps (pure gcloud, no EC2 build instance).
- Makefile: union the fast test-target list (keep private contract-snapshots-tests
and public ipc-codegen-tests).
- barretenberg/.../bbapi/bbapi_chonk.cpp: keep private BB_HAS_BATCH_VERIFIER_SERVICE
macro guard and INT_MAX write-chunk (Windows/MinGW aware), consistent with the
rest of the file.
- docs/.../migration_notes.md: keep private TBD notes, drop a stray committed
conflict-marker artifact, take public's '4' for the multi_call_entrypoint index.
- yarn-project/world-state/src/native/ipc_world_state_instance.ts: accept public's
deletion (file is orphaned; no importers in next or public-next).
* feat(ipc): concurrent wsdb server — async handlers + per-fork ordering
Asynchronous server-handler codegen across C++/Rust/Zig (TS already async):
the generated dispatch hands each handler a respond callback, so a handler may
run inline or defer to a thread pool and respond when ready. The wire protocol
is unchanged. ipc-runtime gains run_reactor (a non-blocking reactor that owns
all ring I/O, is the sole sender, and reorders responses per connection) plus
notify()/wait_for_data_or_ready for completion wakeups, and the run() serial
loop is unchanged.
The wsdb C++ server adopts this: each of the 40 handlers declares its own
ordering via schedule_read / schedule_write (reads concurrent, committed reads
unordered, writes exclusive per fork), and WsdbScheduler implements the
read-batch / write-barrier model with an inline fast path when idle and a
dispatch pool distinct from WorldState's intra-op pool.
This is the IPC-machinery layer that the wsdb cutover builds on; it is
independent of the world-state IPC consumer. Includes the single-connection
parallel-read benchmark (transport-agnostic).
* feat: Poseidon2 -2 rows/perm
## What
Poseidon2 **bridge-row compaction**: merge all five Poseidon2 gate kinds into the single `poseidon2_quad_internal` block so each permutation's rows are contiguous, letting the existing `v_k = w_shift` round relations bind directly across the external↔internal boundary. Removes **2 unconstrained bridge rows per permutation** (the propagate row after the first external group, and the standard-transition row after the internal rounds) — a pure commitment win, zero added sumcheck, proof length unchanged.
## Scope (rebased onto current `next`)
Applied across **all four** Mega chonk flavors — `MegaFlavor`, `MegaZKFlavor`, **`MegaAppFlavor`**, **`MegaKernelFlavor`**:
- **flavor-codegen**: reassign the external/initial poseidon2 relations to `gateBlockName: "poseidon2_quad_internal"` in `mega.ts` / `mega_zk.ts` / `mega_app.ts` / `mega_kernel.ts`; keep `poseidon2_external` as an empty block in the shared Mega trace; regenerate all flavor + trace headers.
- **builder**: a Mega `create_poseidon2_external_gate` override + redirected initial gate emit into the merged block.
- **permutation**: contiguous row emission, dropping the propagate-after-first-group row and the standard-transition row.
## ⚠️ Audit
This edits the audited `poseidon2_permutation.cpp`; its audit-status header is **reset to `not started`** — the bridge-row layout change needs re-audit (internal + Spearbit). The malicious-prover soundness suite (`poseidon2.bridge_row_soundness.test.cpp`) and `Poseidon2QuadInternalSoundnessTests` pin the new boundary handoffs and pass; `boomerang_value_detection` confirms the duplicate-provenance tagging is intact.
## Validation (local, freshly-derived VKs)
- `stdlib_poseidon2_tests` 29/29 (incl. bridge-row malicious-prover soundness)
- `chonk_tests` 40/40 (Mega IVC prove+verify, recursive verifier, ZK hiding kernel, bad-proof + tampering rejection)
- `boomerang_value_detection` 161/161 · `dsl_tests` + `goblin_tests` gate-count suites green
Rotates every kernel VK; pinned Chonk inputs refreshed (`chonk-inputs.hash` → `8bd693632a8b97e6`). Mega gate-count pins re-derived on this base (Honk recursion, Hypernova kernels, `POSEIDON2_PERMUTATION`, BatchMerge `VERIFIER_NUM_GATES`).
Co-authored-by: iakovenkos <sergey.s.yakovenko@gmail.com>
* fix(wsdb): regenerate yarn.lock to capture aztec-wsdb bin entry
* fix update inputs
* chore(noir-contracts): repin standard contracts with poseidon2 bb-avm
Regenerate pinned-standard-contracts.tar.gz with the AVM-enabled bb so the
standard-contract VKs reflect the poseidon2 bridge-row change. build() extracts
this pin and skips recompiling standard/ contracts, so their precomputed VKs
(e.g. MultiCallEntrypoint:entrypoint) never refreshed on the backend change,
causing the chonk capture VK gate to reject deploy flows. Also document this
repin step in the chonk-inputs skill.
* docs: apply fable review fixes to v5.0.0-rc.1 versioned docs
Port the developer/operator doc corrections from PR #24005 into the
v5.0.0-rc.1 versioned snapshot: ConfirmedNote rename, emit_public_log_unsafe,
history::deployment assert_contract_* API, Outbox partial-proof signatures,
governance getProposal/ROUND_SIZE/QUORUM_SIZE/signalCount, mainnet slashing
values, and token_bridge tutorial fixes. Verified against the v5.0.0-rc.1 tag.
* chore: update yarn.lock
* chore(standard-contracts): regenerate address stamps after poseidon2 repin
The standard-contracts repin (12309df15a) rotated standard contract VKs ->
privateFunctionsRoot -> classId -> address, but did not regenerate the derived
address constants. Regenerate the three generator outputs so dependent Noir
contracts and TS consume the new MultiCallEntrypoint/AuthRegistry/PublicChecks/
HandshakeRegistry addresses.
* ci: route staging-internal deploy failures to #alerts-staging-public
* Apply suggestion from @ciaranightingale
Co-authored-by: ciaranightingale <52419674+ciaranightingale@users.noreply.github.com>
* docs: clarify private historical public reads and sync v5 page
Distinguish reading historical public storage from a private function
(no enqueued public call needed) from reading the live value, and explain
that PublicImmutable/DelayedPublicMutable private reads go through
public_storage_historical_read via WithHash. Define what a siloed
nullifier is for the history table. Mirror the same changes into the
v5.0.0-rc.1 versioned page.
* fix(standard-contracts): re-pin against regenerated addresses to a fixpoint
The earlier repin (12309df15a) compiled the pinned standard contracts against the
pre-rotation address stamps, so MultiCallEntrypoint baked in the OLD HandshakeRegistry
address; after the stamps were regenerated, the pinned entrypoint still called the old
address and account-deployment capture failed with 'Function artifact not found'.
Standard contracts cross-reference each other's addresses (entrypoint -> registries), so
pinning requires iterating pin-standard-build + address regeneration until generation
reports no drift. Re-pin to that fixpoint and commit the consistent pin + stamps.
* upd skill
* chore(bb): refresh pinned Chonk IVC inputs to 24371d103174077c
Generated by ci-refresh-chonk.
Only the pinned Chonk input hash is committed here; the immediate follow-up CI run is skipped intentionally.
--ci-skip
* remove nonexistent hn cpp
* fix(chonk-inputs): build only the bb-avm target in capture
The capture-time AVM build used `bootstrap.sh build_preset "$bb_preset" --target bb-avm`,
but build_preset ignores extra args, so it rebuilt the whole preset and only incidentally
produced bb-avm. Use cmake_build, which forwards --target, to build just bb-avm.
* fix noir test
* fix(docs): remove duplicate markdown-negotiation edge function declaration
The edge function declares its own path via the inline config export in
markdown-negotiation.js, so the [[edge_functions]] entry in netlify.toml was
redundant and could run the function twice per request.
* Update noir-projects/noir-contracts/contracts/standard/handshake_registry_contract/src/test.nr
Apply the suggestion from @nchamo
Co-authored-by: Nicolas Chamo <nicolas@chamo.com.ar>
* chore: update private kernel reset costs and add prettierignore
* chore: repin mock protocol circuit artifacts
* chore(bb): refresh pinned Chonk IVC inputs to a1a47cdde7622d32
Generated by ci-refresh-chonk.
Only the pinned Chonk input hash is committed here; the immediate follow-up CI run is skipped intentionally.
--ci-skip
---------
Co-authored-by: critesjosh <jc@joshcrites.com>
Co-authored-by: jeanmon <jean@aztec-labs.com>
Co-authored-by: PhilWindle <60546371+PhilWindle@users.noreply.github.com>
Co-authored-by: Alex <alexghr@users.noreply.github.com>
Co-authored-by: AztecBot <tech@aztecprotocol.com>
Co-authored-by: Aztec Bot <49558828+AztecBot@users.noreply.github.com>
Co-authored-by: Ilyas Ridhuan <ilyasridhuan@gmail.com>
Co-authored-by: Michael Connor <mike@aztec.foundation>
Co-authored-by: Maxim Vezenov <mvezenov@gmail.com>
Co-authored-by: AztecBot <tech@aztec-labs.com>
Co-authored-by: ludamad <adam.domurad@gmail.com>
Co-authored-by: Gregorio Juliana <gregojquiros@gmail.com>
Co-authored-by: Facundo <fcarreiro@users.noreply.github.com>
Co-authored-by: charlielye <5764343+charlielye@users.noreply.github.com>
Co-authored-by: ludamad <domuradical@gmail.com>
Co-authored-by: Randy Quaye <randyquaye@Randys-MacBook-Pro.local>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: randyquaye <69855400+randyquaye@users.noreply.github.com>
Co-authored-by: Jean M <132435771+jeanmon@users.noreply.github.com>
Co-authored-by: josh crites <critesjosh@gmail.com>
Co-authored-by: ciaranightingale <52419674+ciaranightingale@users.noreply.github.com>
Co-authored-by: ledwards2225 <l.edwards.d@gmail.com>
Co-authored-by: ledwards2225 <98505400+ledwards2225@users.noreply.github.com>
Co-authored-by: Nicolas Chamo <nicolas@chamo.com.ar>
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.
Problem
A prover node in production crashed an epoch proving job:
The error comes from
BarretenbergSync.getSingleton()throwing when the WASM singleton has not been initialised. Epoch proving deserializes compressed Chonk proofs viaChonkProof.fromBuffer→ChonkProof.fromCompressedBytes→getSingleton().The prover node starts monitoring epochs as soon as it is created inside
AztecNodeService.createAndSync. The only init on the start path (aztec_start_action.ts) runs later and is guarded onservices.aztec, so anEpochSessioncan reach the decompress path before the singleton is initialised — the race that crashed the job in production.Fix
Initialise the singleton at the top of
createAndSync, before any subsystem runs. This covers the prover node, validator, sequencer, and every othercreateAndSynccaller (including e2e tests).The existing
initSingleton()call inaztec_start_actionis left in place —initSingletonis idempotent (the singleton promise is cached), so it remains a harmless guard for the RPC schema-parsing path.Fixes A-1243.