Skip to content

Aztec 6.0.0 for testnet v6: Kafka namespace, version picker, archive mode - #10

Merged
koenmtb1 merged 8 commits into
mainfrom
feat/aztec-v6
Oct 26, 2026
Merged

koenmtb1 merged 8 commits into
mainfrom
feat/aztec-v6

Conversation

@koenmtb1

@koenmtb1 koenmtb1 commented Oct 26, 2026 •

Copy link
Copy Markdown

Moves main to Aztec 6.0.0 so AztecScan can index the v6 testnet rollup. It also adds what's needed to run v6 next to v5 rather than instead of it. Each major version of a network becomes its own deployment, picked from a version dropdown, and a retired one stays browsable without a node.

Mainnet is still on Aztec 5.0.0, so mainnet (and testnet v5) move to the new release/v5 branch; see #11. The one open item is a live-node check (below).

Commits

  1. fix: parse boolean env vars strictly. z.coerce.boolean() read "false" as true for six env switches (also in release/v5: Node 24.22.1 (eMudhra), strict boolean env parsing, ARCHIVE_MODE #11).
  2. feat(explorer-api): add ARCHIVE_MODE. Serve a retired rollup from Postgres alone: no Kafka, no reconciliation, source verification returns 503 (also in release/v5: Node 24.22.1 (eMudhra), strict boolean env parsing, ARCHIVE_MODE #11).
  3. chore: upgrade to Aztec 6.0.0.
    • 6.0.0 publishes under new scopes: @aztec-labs/*, plus @aztec-foundation/l1-artifacts and @aztec-foundation/bb.js. Imports, deps and root resolutions move to them.
    • The 6.0.0 L1 ABIs match the deployed contracts of the canonical testnet rollup exactly (0x1f435a7f…, version 679261766): every Rollup/Inbox/Outbox/FeeJuicePortal selector is in the bytecode, and recent logs decode.
    • createAztecNodeClient now takes an options object.
    • Genesis blocks are added for the v6 rollups, so the L1 listener doesn't scan Sepolia from block 8.1M.
  4. feat(message-registry): optional KAFKA_NAMESPACE. v5 and v6 testnet share L2_NETWORK_ID=TESTNET. Topics and consumer groups derive only from that, so two stacks on one Kafka would read each other's blocks. When set, KAFKA_NAMESPACE=v6 prefixes every topic and group (v6.TESTNET__NEW_BLOCK_EVENT). Unset, every name is unchanged.
  5. feat(explorer-ui-v2): version picker.
    • VITE_NETWORK_VERSION names this build's version.
    • VITE_CHICMOZ_ALL_UI_URLS entries can carry a version and status: Network|URL[|version[|status]], with status canonical (default), live or archived. Old two-field entries still work.
    • The network picker always goes to a network's canonical version; a separate version picker lists the network's versions.
    • Non-canonical builds show a banner pointing at the canonical one; archived builds drop the WebSocket and live tip.
  6. fix(compiler): 6.x compilers.
    • From 6.0.0, aztec-nr lives at aztec-labs-eng/aztec-nr (the AztecProtocol/aztec-nr mirror stops at v5.2.1), and azteclabs/aztec no longer ships nargo.
    • Dockerfile.compile-contracts installs the pinned Noir release (1.0.0-rc.3 for 6.0.0, sha256-checked) only when the base image has none, and prefetches aztec-labs-eng/aztec-nr only for tags that exist there, plus poseidon v0.3.0/v0.4.0. It still builds the 4.x/5.x compilers.
    • build_contract_compiler.sh picks azteclabs/aztec for 6.x.
    • event-cannon: Nargo pins move to the new repo, the v6 consume_l1_to_l2_message signature is handled, and createSchnorrAccount gets a signing key.
  7. chore(event-cannon): regenerated artifacts. Compiled with the 6.0.0 compiler image on a native amd64 GitHub runner (bb's transpile and VK steps need CPU features x86 emulation lacks), then aztec codegen. All three artifacts are transpiled and stamped aztec_version 6.0.0.
  8. fix(contract-verification): run tests in child processes. On Linux, vitest 0.34's worker-thread pool exits 1 after every test passes; this package's tests load the Aztec SDK, native modules included. Reproduced on ubuntu-latest (default pool exits 1, --no-threads exits 0). Also in release/v5: Node 24.22.1 (eMudhra), strict boolean env parsing, ARCHIVE_MODE #11.

Verification

  • Shared packages and all deployed services build and lint clean (aztec-listener, ethereum-listener, explorer-api, websocket-event-publisher, compiler-orchestrator, auth, explorer-ui-v2).
  • yarn test passes: contract-verification 4, message-registry 3, auth 105, aztec-listener 41, explorer-api 62, explorer-ui-v2 9.
  • The PR build workflow (yarn install && yarn build && yarn test on ubuntu-latest) passes.
  • The UI was driven in headless Chrome as archived Testnet v5 and as canonical Testnet v6, dark and light; no page errors.

Known gaps

  • Not run against a live v6 node. Block fetch and parseBlock against a real V6 node are untested; no public testnet endpoint answered. The first v6 RPC node from the foundation-iac change is the place to check this before pointing listeners at it.
  • Compile jobs download the CRS. 6.x contracts with private functions fetch the CRS from crs.aztec-labs.com at compile time to derive verification keys. Production compile jobs already have network (they git clone the source), so this works; warming the CRS in the image would only make jobs faster.

Deploying

This needs foundation-iac changes, which come in a separate PR:

  • per-network CHICMOZ_REF;
  • a new testnetv6 network with KAFKA_NAMESPACE=v6;
  • a rpc_networks entry on azteclabs/aztec:6.0.0 (the image validation currently only allows aztecprotocol/aztec);
  • versioned UI config in deploy-ui.sh.

🤖 Generated with Claude Code

koenmtb1 and others added 5 commits October 26, 2026 13:50
z.coerce.boolean() reads the string "false" as true, so these switches
could never be turned off from the environment:

- aztec-listener: AZTEC_LISTEN_FOR_PENDING_TXS, AZTEC_LISTEN_FOR_CHAIN_INFO,
  AZTEC_LISTEN_FOR_L2_TIPS, AZTEC_DISABLED
- explorer-api: L2_BLOCK_RECONCILIATION_ENABLED,
  L1_GOVERNANCE_URI_RECONCILIATION_ENABLED

parseBooleanEnv accepts exactly "true" or "false"; unset or empty means
the default, anything else fails at startup. A deployment that already
sets one of these to "false" now gets that setting.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With ARCHIVE_MODE=true the API serves a retired rollup's stored history
from Postgres without Kafka: it starts no message bus, consumes no events,
runs no reconciliation, and answers source verification with 503. An
archived version then needs only explorer-api, Postgres and Redis; no
Aztec node, listeners or Kafka.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Aztec 6.0.0 publishes its packages under new scopes: the client
libraries as @aztec-labs/* and l1-artifacts/bb.js as
@aztec-foundation/*. Imports, workspace dependencies and the root
resolutions move to them at 6.0.0. The 6.0.0 L1 ABIs match the deployed
contracts of the canonical testnet rollup exactly
(0x1f435a7f2da358caf887a470faeee7d5d5f4efba, version 679261766).

- aztec-listener: createAztecNodeClient takes an options object.
- ethereum-listener: genesis blocks for the v6 testnet rollups
  (0x8c2fb2a6... at 11785332, 0x1f435a7f... at 11969225), so the L1
  listener does not scan Sepolia from block 8125387.
- Local dev and compiler images move to azteclabs/aztec:6.0.0.

Known gap: event-cannon (dev-only, never deployed) does not build yet.
Its contract artifacts need recompiling with the 6.0 toolchain and
createSchnorrAccount now needs a signing key. Its aztec-nr pins say
v6.0.0, but aztec-nr has no v6 tag yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two deployments of the same L2 network (testnet v5 and v6 share
L2_NETWORK_ID=TESTNET) would read each other's events on a shared Kafka
cluster, since topic and consumer-group names derive only from the
network id. KAFKA_NAMESPACE, when set, prefixes every topic and consumer
group, e.g. v6.TESTNET__NEW_BLOCK_EVENT. Unset, all names are unchanged,
so existing deployments keep their topics and committed offsets.

Every service builds its names through generateL2TopicName,
generateL1TopicName and getConsumerGroupId, except ethereum-listener's
chain-info group, which now goes through withKafkaNamespace too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each major Aztec version of a network is its own deployment (backend
stack and UI build). The UI learns about them from build-time config:

- VITE_NETWORK_VERSION: this build's major version, e.g. v6.
- VITE_CHICMOZ_ALL_UI_URLS entries may carry a version and status:
  Network|URL[|version[|status]], status canonical (default), live or
  archived. Two-field entries keep working as canonical.

The network picker links each network to its canonical deployment. A
separate version picker lists the current network's versions and opens
a version's landing page. A non-canonical build shows a banner pointing
at the canonical one. An archived build opens no WebSocket and shows a
final block instead of the live tip and next-block countdown.

Adds vitest to the UI for the config parsing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
koenmtb1 and others added 3 commits October 26, 2026 14:19
…nargo

From 6.0.0, aztec-nr is published at aztec-labs-eng/aztec-nr (the
AztecProtocol mirror stops at v5.2.1), and the azteclabs/aztec image no
longer ships nargo. Dockerfile.compile-contracts serves every Aztec
version production builds compilers for:

- installs nargo from the Noir release the version pins (1.0.0-rc.3 for
  6.0.0, sha256-verified) only when the base image has none;
- prefetches aztec-labs-eng/aztec-nr only for tags that exist there, plus
  poseidon v0.3.0/v0.4.0 that 6.0.0's aztec-nr and protocol_types need.

build_contract_compiler.sh picks azteclabs/aztec for 6.x and
aztecprotocol/aztec before.

event-cannon: Nargo pins move to aztec-labs-eng/aztec-nr v6.0.0;
ExplorerShowcase passes the L1->L2 secret as an array (v6 signature,
same ABI); createSchnorrAccount gets a signing key, which 6.x no longer
derives from the secret.

Verified: the image builds for linux/amd64, and all three contracts
compile with nargo offline (--network none) against the prefetched
dependencies. The bb transpile step can't run under x86 emulation on
Apple silicon (SIGILL), so the artifacts are not regenerated here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Compiled with the 6.0.0 compiler image (nargo 1.0.0-rc.3, aztec-nr
v6.0.0) on a native amd64 GitHub runner, since bb's transpile and VK
steps can't run under x86 emulation, then `aztec codegen` for the
TypeScript bindings. All three artifacts are transpiled and stamped
aztec_version 6.0.0. event-cannon builds again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On Linux, vitest 0.34's worker-thread pool exits 1 after all
contract-verification tests pass, failing the PR build. These tests load
the Aztec SDK, native modules included. Reproduced on ubuntu-latest with
Node 20: the default pool exits 1 and --no-threads exits 0. macOS was
unaffected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@koenmtb1
koenmtb1 marked this pull request as ready for review October 26, 2026 04:54
@koenmtb1 koenmtb1 closed this Oct 26, 2026
@koenmtb1 koenmtb1 reopened this Oct 26, 2026
@koenmtb1
koenmtb1 merged commit 510fc21 into main Oct 26, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant