$ 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-
Fieldmember previously constrained the wrong field), and the canonicalHandshakeRegistrymoved to a new address. Existing contracts otherwise compile unchanged — auditselect/sortusage 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 layout —properties()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 oneField(aPoint, an array, a nested struct), soselect/sortsilently 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/sortreject properties that pack to more than oneFieldat compile time;selecttakes its value typed as the property's type;properties()can't be used with a customPackablelayout (define selectors manually); and every note field type must implementPackable(#24689).- Canonical
HandshakeRegistryre-pinned at a new address — the registry now binds the owner's address into itsPrivateMutableinitialization 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/sortusage on notes withPoint, 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_indexper table and rejects duplicate or zero indices, with new circuit-checker tests (#24842). - Tagging secrets are scoped by sender — an account's
ivskcould 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 provers —
PROVER_NODE_PROOF_SUBMISSION_TARGET_ADDRESSlets a prover sendsubmitEpochRootProofto 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_PERCENTAGEfrom0.8to0.7andSLASH_GRACE_PERIOD_L2_SLOTSto8400(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
- v5.0.1 release notes — the previous client-focused patch release.
- v5.0.0 release notes — the first stable v5 release and full v4→v5 migration reference.
- Migration notes — per-change migration reference for contract and wallet developers.