Skip to content

v5.1.0

Latest

Choose a tag to compare

@aminsammara aminsammara released this 22 Jul 11:05
3ffc13a
$ aztec verify --release v5.1.0
──────────────────────────────────────────────────────────────────────────────
  proof     π ........................................................... ok
  vk root   0x2b3b6ea4412b9c8f6457a37f91a2870306f8641e07e16a49b68bda6f8bc02892  ✓
  ↳ matches canonical rollup 0x91fF8bbD8Ebb07893010D50A48A1609e5EBd8E34 on mainnet
──────────────────────────────────────────────────────────────────────────────
  A Z T E C  ·  v5.1.0  ·  verified ✓

Date: 2026-07-22 · Tag: v5.1.0 · Baseline: v5.0.1 · Minor release — required for aztec.nr / contract developers, recommended for aztec.js / PXE

Install: aztec-up install 5.1.0 · Docker: aztecprotocol/aztec:5.1.0

Summary

The v5.1.0 release targets contract and client devs. Two breaking aztec.nr changes make it required if you build contracts; it's recommended for wallet/PXE developers and optional for node operators.

Upgrade guidance

  • Required for anyone building with aztec.nr. Two breaking changes: note property selectors are now computed from the packed layout (a filter on a field that followed a multi-Field member previously constrained the wrong field), and the canonical HandshakeRegistry moved to a new address. Existing contracts otherwise compile unchanged — audit select/sort usage for the cases in the breaking-changes section, and re-establish any handshakes made against the old registry.
  • Recommended for aztec.js / PXE / wallet builders. Client fixes close a sender-scoping gap in tagging and make browser storage robust to multi-tab access and corruption.
  • Optional for node operators. No consensus-affecting change. Operators still get the validator sync-ordering fix and the mainnet slashing-config update.

Breaking changes

  • fix!: note property selectors are computed from the packed layoutproperties() selectors used a field's position in the note-struct declaration, which pointed at the wrong packed field for any note whose earlier field packs to more than one Field (a Point, an array, a nested struct), so select/sort silently constrained a different field than the one named. Selector indices are now the field's offset in the packed representation. Consequences: PropertySelector<T> carries the selected property's type (hand-constructed literals need a type annotation); select/sort reject properties that pack to more than one Field at compile time; select takes its value typed as the property's type; properties() can't be used with a custom Packable layout (define selectors manually); and every note field type must implement Packable (#24689).
  • Canonical HandshakeRegistry re-pinned at a new address — the registry now binds the owner's address into its PrivateMutable initialization nullifiers, so accounts that share keys keep independent handshake state. It moves to a new address; handshakes established with the previous instance are not visible to the new one and must be re-established. The other standard contracts keep their addresses (#24893, #24892).

What contract developers should care about

  • Note property selectors packed-layout fix — the breaking change above; audit any select/sort usage on notes with Point, array, or nested-struct fields.
  • Shared no-op sync handler for stateless contracts — contracts that define no notes get a shared no-op note-sync handler instead of bespoke boilerplate (#24844).
  • Contracts with no notes no longer panic on note messages — delivering a note message to a contract that defines no notes previously panicked; it is now tolerated (#24852).
  • Docs — the partial-note completion trust model (#24816) and the standard-contract re-pin consequences (#24890) are now documented.

What wallet / PXE users should care about

  • Web-lock-controlled OPFS pool — browser SQLite store creation is now guarded by web locks, preventing multi-tab concurrency issues (#24740); legacy duplicate opaque handles left by pre-web-lock versions are quarantined and the store is reopened empty, so local state resyncs (#24743).
  • Store corruption is handled gracefully — corruption errors in the local store are caught rather than crashing the client; the store is rebuilt and resynced (#24739).
  • PXE oracle interface hash from wire-structural mapping labels — the oracle interface hash is now derived from wire-structural mapping labels rather than by parsing the oracle registry's TypeScript source (refactor) (#24752).

Security & correctness

  • secp256r1 fixed-base lookup tables get unique indices — the four secp256r1 fixed-base table families could be assigned colliding lookup-table indices. Finalization now threads a unique table_index per table and rejects duplicate or zero indices, with new circuit-checker tests (#24842).
  • Tagging secrets are scoped by sender — an account's ivsk could be used to derive an ECDH shared secret even when that account was not in scope; the base wallet now scopes tagging secrets to the selected explicit sender (#24772).
  • Owner-bound handshake nullifiers — init and single-claim nullifiers now include the owner address so accounts that share keys do not collide (the mechanism behind the registry re-pin) (#24892).

What node operators should care about

This release is optional for operators — no consensus-affecting changes — but includes:

  • Validator syncs world state before forking in checkpoint proposal validation — fixes a sync-ordering issue where the fork was taken before world state had synced during checkpoint proposal validation (#24694).
  • Optional custom proof-submission target for proversPROVER_NODE_PROOF_SUBMISSION_TARGET_ADDRESS lets a prover send submitEpochRootProof to a wrapper contract instead of the rollup; it defaults to the rollup address, so existing provers are unaffected (#24270).
  • Mainnet slashing config — the mainnet preset restores SLASH_INACTIVITY_TARGET_PERCENTAGE from 0.8 to 0.7 and SLASH_GRACE_PERIOD_L2_SLOTS to 8400 (7 days at a 72s slot).(#24827, #24804).

Also in this release

  • Docs-examples — pin TypeScript to the 5.x line in the aztec.js execute runner (#24736).
  • aztec.nr — the scope of Packable-impl detection is clarified (#24820).

Reference