Skip to content

chore!: bump Aztec to 6.0.0-rc.4 and noir-bignum to v0.11.0 - #61

Merged
alejoamiras merged 3 commits into
mainfrom
worktree-aztec-v6-rc4
Oct 21, 2026
Merged

alejoamiras merged 3 commits into
mainfrom
worktree-aztec-v6-rc4

Conversation

@alejoamiras

@alejoamiras alejoamiras commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Moves the contracts and the SDK from Aztec 6.0.0-rc.3 to 6.0.0-rc.4, and noir-bignum to its audit-fix release. An rc.4 PXE won't execute the private or utility functions of contracts compiled against rc.3 (their oracle interface is major 32, it expects 33), so the next rc of this package needs this.

What changed

  • Every aztec-nr dependency moves to v6.0.0-rc.4, and the SDK to @aztec-labs/*@6.0.0-rc.4, pinned exactly. config.aztecVersion and the package version follow, so CI and the release job install the rc.4 toolchain. @aztec-foundation/bb.js moves to 6.0.0-rc.7, the version the rc.4 SDK depends on (aztec-nr rc.4 likewise builds on aztec-packages v6.0.0-rc.7).
  • noir-bignum moves from v0.10.0 to v0.11.0, the fixes for the 11 findings of its external audit (fix!: address audit issues noir-lang/noir-bignum#270). Vault's share/asset math and Escrow's key-derivation library use it. Its methods now borrow, so both udiv_mod calls pass the divisor by reference, and its checked API validates inputs: from_limbs range-checks the limbs, from_be_bytes and constrained udiv_mod reject non-canonical values. Every input here is canonical by construction (a u128 split into limbs, a SHA-512 digest under a zero byte, the Grumpkin scalar modulus), so no result changes. Look hardest here, the PR's only change to contract code. No finding applies to these inputs: Escrow's operands are a constant and a digest whose encoding keeps it below U512's modulus, and Vault's math runs only in public functions, where bignum computes the result directly instead of checking a prover's hint. Vault's public bytecode changes; Escrow's does not, since only the Logic contracts that compile in its library derive keys. In the benchmarks, the bump adds 4,050 L2 gas (+0.4%) to each Vault transaction that converts shares or assets, and 220 gates (+0.07%) to each TestLogic call that derives a key set.
  • viem moves from the @aztec/viem@2.38.3 fork to upstream viem@2.57.1, because the rc.4 SDK switched to it, and keeping the fork would install a second viem next to the SDK's. Only the benchmarks import it, for parseUnits. Look hard at the lockfile too: besides the 40 Aztec packages it changes only viem's tree (viem, ox, abitype) and adds undici@6.29.1, which @aztec-labs/foundation now requires (a High-CVE security release, six days old).
  • sha512 is re-pinned to 811b378. Its master gained one commit that touches only CI files, the LICENSE copyright line and the README, so escrow compiles from the same Noir sources. Without the re-pin, check:noir-deps and the release job's dependency guard fail.
  • The ARC-403 README links to the protocol interfaces' new home. rc.4 moved the FeeJuice and ContractInstanceRegistry interface stubs from aztec-node into aztec-nr, and the old aztec-node path no longer exists.
  • The bump skill follows the SDK's viem specifier instead of insisting on the fork, and records rc.4's Node 24.15 floor, foundryup refusing to install while any anvil runs on the host, and a TXE flake on loaded hosts.

Breaking changes

  • Every class id changes, and with it every derived address. All 13 contracts are recompiled against aztec-nr rc.4 (and Vault against noir-bignum v0.11.0), which bakes in oracle interface 33 and new addresses for the four standard contracts (AuthRegistry, MultiCallEntrypoint, PublicChecks, HandshakeRegistry). An rc.4 PXE won't run rc.3 builds and an rc.3 PXE won't run these: upgrade the package and the SDK together, and redeploy. Public authorizations set in the old AuthRegistry don't carry over.
  • Consumers install @aztec-labs/aztec.js@6.0.0-rc.4 (the package's config.aztecVersion) next to the package.

rc.4 migration notes against this repo

  • ECDSA note and protocol interfaces published with aztec-nr: not depended on here; only the README link moves.
  • FactScope (oracle 32 to 33): applies through the recompile; nothing here calls aztec::facts.
  • Not in the notes, from the aztec-nr diff: PublicImmutable reads in private and utility functions now cache the value in the PXE's fact store. Private reads still prove the value against the anchor block, so the cache cannot change their result, and no utility function here reads a PublicImmutable. The standard-contract addresses move again (above).
  • Not in the notes, from the protocol crates: Writer::advance_offset is now really gone, Option serialization rejects a None with a non-zero payload, and BoundedVec serialization asserts its length. Nothing here calls the first. Of the other two, only the macro-generated offchain_receive entrypoint takes them (a BoundedVec of messages carrying Option tx hashes), and their canonical encodings are unchanged; no handwritten entrypoint, note or event does. types also moves to noir-lang/poseidon v0.4.0, where only the incremental sponge changed: the array hash the protocol crates call is identical.
  • The other notes (V3 address separator, batch nullifier oracle, OriginBlock, getBlockHashMembershipWitness) shipped in rc.3 and were covered by chore!: bump Aztec to 6.0.0-rc.3 #57.

Not in this PR

  • The release. Tagging v6.0.0-rc.4 and publishing to npm follow the merge.
  • aztec-benchmark stays at 6.0.0-rc.1 (the devDependency and both workflow pins): no newer release exists, and its peer range (>=6.0.0-0 <7) accepts rc.4. The other Noir dependencies are already at their latest: aztec-nr at the newest rc, sha512 at master.
  • What only CI shows: setup-aztec still pins Node 24.0.0 under rc.4's 24.15 floor (rc.1 and rc.3 CI passed regardless), and the Benchmark job compares against main's rc.3 baseline.

Upstream pins: aztec-nr v6.0.0-rc.4 is 208255fe28acd6582b2adbb49f4d2b681c1ab0e1, aztec-packages v6.0.0-rc.7 is 0219f11d8133970df3974fe5ae65e006bf8c193a, noir-bignum v0.11.0 is c2767065cc9012e1b6201edec14acc92cb2a4a68.

Evidence: CI passes every job on the final commit, all 449 Noir tests in one run included. Against main's rc.3 baseline, its benchmark shows +0.10% to +0.31% gates on all 56 transactions, and gas unchanged except Vault's +4,050 L2 gas. Locally against an rc.4 network, the Vault, Escrow and TestLogic Noir tests (TestLogic holds the key-derivation vectors), the 22 Vault and Escrow JS tests, typecheck, build, npm publish --dry-run --tag rc and the release smoke test pass with noir-bignum v0.11.0, and Escrow compiles to the same bytecode under both bignum versions. No test was added. Codex (GPT-6 Astra, xhigh) found no blocker in four rounds; its findings are the skill's viem line and the ABI, soundness, class-id and cost wording above.

🤖 Generated with Claude Code

alejoamiras and others added 2 commits October 21, 2026 18:26
Moves aztec-nr to v6.0.0-rc.4 and the SDK to @aztec-labs/*@6.0.0-rc.4,
with bb.js 6.0.0-rc.7 and upstream viem 2.57.1, the versions the rc.4 SDK
pins. Re-pins sha512 master, whose one new commit touches no Noir source.
An rc.4 PXE only runs contracts built for oracle interface major 33.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gotchas

The bump skill told the next bump to keep the @aztec/viem alias, which the
rc.4 SDK dropped. It also gains rc.4's Node 24.15 floor, the foundryup refusal
next to a running anvil, and the TXE's lost-session failure on a loaded host.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

This comment has been minimized.

v0.11.0 is noir-bignum's audit-fix release (noir-lang/noir-bignum#270).
Its methods borrow, so Vault's share/asset math and Escrow's key
derivation pass the udiv_mod divisor by reference. Its checked API also
validates inputs now (from_limbs range-checks limbs; from_be_bytes and
constrained udiv_mod require canonical values). Every input here is
canonical by construction, so no result changes.

Vault's public bytecode changes, and with it its class id. Escrow's
bytecode does not: only the Logic contracts that compile in its library
derive keys, and they pick up the new checks when they rebuild.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@alejoamiras alejoamiras changed the title chore!: bump Aztec to 6.0.0-rc.4 chore!: bump Aztec to 6.0.0-rc.4 and noir-bignum to v0.11.0 Oct 21, 2026
@alejoamiras
alejoamiras marked this pull request as ready for review October 21, 2026 19:35
@github-actions

Copy link
Copy Markdown

Benchmark Comparison

CPU Cores RAM Arch
AMD EPYC 7763 64-Core Processor 4 16 GiB x64

Contract: escrow

🚦 Function Gates DA Gas L2 Gas Proving Time (ms)
Base PR Diff Base PR Diff Base PR Diff Base PR Diff
⚪ (partial) withdraw 354,808 355,175 +367 (+0.1%) 3,744 3,744 587,800 587,800 6,876 8,549 +1,673 (+24.3%)
⚪ withdraw 270,381 270,752 +371 (+0.1%) 832 832 499,700 499,700 5,587 7,096 +1,509 (+27.0%)
⚪ withdraw_nft 266,744 267,121 +377 (+0.1%) 1,440 1,440 527,400 527,400 5,795 7,352 +1,557 (+26.9%)

Contract: logic

🚦 Function Gates DA Gas L2 Gas Proving Time (ms)
Base PR Diff Base PR Diff Base PR Diff Base PR Diff
⚪ get_escrow 298,874 299,458 +584 (+0.2%) 192 192 456,000 456,000 6,189 7,897 +1,708 (+27.6%)
⚪ secret_key_to_public_keys 296,339 296,924 +585 (+0.2%) 192 192 456,000 456,000 6,155 7,787 +1,632 (+26.5%)
⚪ share_escrow 245,486 245,858 +372 (+0.2%) 1,952 1,952 520,700 520,700 5,389 6,851 +1,462 (+27.1%)

Contract: multitoken

🚦 Function Gates DA Gas L2 Gas Proving Time (ms)
Base PR Diff Base PR Diff Base PR Diff Base PR Diff
⚪ burn_private 222,499 222,863 +364 (+0.2%) 832 832 499,700 499,700 5,149 6,366 +1,217 (+23.6%)
⚪ burn_public 185,849 186,417 +568 (+0.3%) 416 416 638,286 638,286 4,805 6,032 +1,227 (+25.5%)
⚪ initialize_transfer_commitment 188,492 188,857 +365 (+0.2%) 768 768 474,500 474,500 4,878 6,026 +1,148 (+23.5%)
⚪ mint_to_private 239,280 239,651 +371 (+0.2%) 1,408 1,408 511,400 511,400 5,417 6,766 +1,349 (+24.9%)
⚪ mint_to_public 185,849 186,417 +568 (+0.3%) 416 416 637,794 637,794 4,832 6,002 +1,170 (+24.2%)
⚪ transfer_private_to_commitment 225,608 225,972 +364 (+0.2%) 1,024 1,024 511,400 511,400 5,196 6,500 +1,304 (+25.1%)
⚪ transfer_private_to_private 278,999 279,354 +355 (+0.1%) 2,048 2,048 555,100 555,100 5,810 7,218 +1,408 (+24.2%)
⚪ transfer_private_to_public 254,700 255,274 +574 (+0.2%) 1,056 1,056 714,671 714,671 5,639 6,983 +1,344 (+23.8%)
⚪ transfer_public_to_commitment 185,849 186,417 +568 (+0.3%) 640 640 663,507 663,507 4,915 6,046 +1,131 (+23.0%)
⚪ transfer_public_to_private 247,136 247,710 +574 (+0.2%) 1,024 1,024 683,952 683,952 5,569 6,887 +1,318 (+23.7%)
⚪ transfer_public_to_public 185,849 186,417 +568 (+0.3%) 480 480 673,499 673,499 4,848 6,016 +1,168 (+24.1%)

Contract: nft

🚦 Function Gates DA Gas L2 Gas Proving Time (ms)
Base PR Diff Base PR Diff Base PR Diff Base PR Diff
⚪ burn_private 223,837 224,411 +574 (+0.3%) 416 416 660,857 660,857 5,281 6,708 +1,427 (+27.0%)
⚪ burn_public 185,849 186,417 +568 (+0.3%) 448 448 669,839 669,839 4,768 6,039 +1,271 (+26.7%)
⚪ mint_to_private 268,429 269,010 +581 (+0.2%) 1,600 1,600 735,147 735,147 5,713 7,283 +1,570 (+27.5%)
⚪ mint_to_public 185,849 186,417 +568 (+0.3%) 448 448 670,523 670,523 4,649 6,033 +1,384 (+29.8%)
⚪ transfer_private_to_private 212,012 212,377 +365 (+0.2%) 832 832 499,700 499,700 4,880 6,306 +1,426 (+29.2%)
⚪ transfer_private_to_public 223,864 224,438 +574 (+0.3%) 416 416 659,063 659,063 5,208 6,704 +1,496 (+28.7%)
⚪ transfer_public_to_private 241,253 241,827 +574 (+0.2%) 992 992 683,073 683,073 5,415 6,866 +1,451 (+26.8%)
⚪ transfer_public_to_public 185,849 186,417 +568 (+0.3%) 384 384 633,285 633,285 4,670 6,096 +1,426 (+30.5%)

Contract: token

🚦 Function Gates DA Gas L2 Gas Proving Time (ms)
Base PR Diff Base PR Diff Base PR Diff Base PR Diff
⚪ burn_private 251,116 251,689 +573 (+0.2%) 1,024 1,024 713,951 713,951 5,561 6,953 +1,392 (+25.0%)
⚪ burn_public 185,849 186,417 +568 (+0.3%) 448 448 672,626 672,626 4,795 6,042 +1,247 (+26.0%)
⚪ initialize_transfer_commitment 188,492 188,857 +365 (+0.2%) 768 768 474,500 474,500 4,786 5,996 +1,210 (+25.3%)
⚪ mint_to_private 282,347 282,927 +580 (+0.2%) 2,144 2,144 738,064 738,064 5,951 7,449 +1,498 (+25.2%)
⚪ mint_to_public 185,849 186,417 +568 (+0.3%) 448 448 672,221 672,221 4,816 6,065 +1,249 (+25.9%)
⚪ transfer_private_to_commitment 222,075 222,440 +365 (+0.2%) 992 992 511,400 511,400 5,058 6,426 +1,368 (+27.0%)
⚪ transfer_private_to_private 286,430 286,785 +355 (+0.1%) 2,592 2,592 557,600 557,600 5,929 7,265 +1,336 (+22.5%)
⚪ transfer_private_to_public 251,168 251,741 +573 (+0.2%) 1,024 1,024 714,017 714,017 5,593 6,946 +1,353 (+24.2%)
⚪ transfer_private_to_public_with_commitment 255,090 255,663 +573 (+0.2%) 1,600 1,600 747,317 747,317 5,646 7,056 +1,410 (+25.0%)
⚪ transfer_public_to_commitment 185,849 186,417 +568 (+0.3%) 576 576 662,520 662,520 4,814 6,152 +1,338 (+27.8%)
⚪ transfer_public_to_private 245,102 245,675 +573 (+0.2%) 992 992 683,298 683,298 5,484 6,899 +1,415 (+25.8%)
⚪ transfer_public_to_public 185,849 186,417 +568 (+0.3%) 448 448 672,542 672,542 4,758 6,048 +1,290 (+27.1%)

Contract: vault

🚦 Function Gates DA Gas L2 Gas Proving Time (ms)
Base PR Diff Base PR Diff Base PR Diff Base PR Diff
⚪ deposit_private_to_private 363,142 363,716 +574 (+0.2%) 1,312 1,312 1,080,775 1,084,825 +4,050 (+0.4%) 7,064 8,664 +1,600 (+22.7%)
⚪ deposit_private_to_private_exact 471,573 472,196 +623 (+0.1%) 1,888 1,888 1,117,843 1,121,893 +4,050 (+0.4%) 8,839 10,929 +2,090 (+23.6%)
⚪ deposit_private_to_public 309,328 309,912 +584 (+0.2%) 768 768 1,064,800 1,068,850 +4,050 (+0.4%) 6,343 7,904 +1,561 (+24.6%)
⚪ deposit_public_to_private 299,333 299,918 +585 (+0.2%) 1,984 1,984 1,167,572 1,171,622 +4,050 (+0.3%) 6,255 7,774 +1,519 (+24.3%)
⚪ deposit_public_to_private_exact 302,039 302,607 +568 (+0.2%) 1,952 1,952 1,151,996 1,156,046 +4,050 (+0.4%) 6,326 7,745 +1,419 (+22.4%)
⚪ deposit_public_to_public 185,849 186,417 +568 (+0.3%) 832 832 1,100,090 1,104,140 +4,050 (+0.4%) 4,837 6,034 +1,197 (+24.7%)
⚪ issue_private_to_private_exact 471,573 472,196 +623 (+0.1%) 1,888 1,888 1,118,119 1,122,169 +4,050 (+0.4%) 8,460 10,401 +1,941 (+22.9%)
⚪ issue_private_to_public_exact 339,944 340,519 +575 (+0.2%) 1,344 1,344 1,102,141 1,106,191 +4,050 (+0.4%) 6,770 8,410 +1,640 (+24.2%)
⚪ issue_public_to_private 275,996 276,559 +563 (+0.2%) 1,376 1,376 1,123,804 1,127,854 +4,050 (+0.4%) 5,885 7,345 +1,460 (+24.8%)
⚪ issue_public_to_public 185,849 186,417 +568 (+0.3%) 832 832 1,100,396 1,104,446 +4,050 (+0.4%) 4,792 5,993 +1,201 (+25.1%)
⚪ redeem_private_to_private_exact 474,540 475,163 +623 (+0.1%) 1,888 1,888 1,118,350 1,122,400 +4,050 (+0.4%) 8,508 10,454 +1,946 (+22.9%)
⚪ redeem_private_to_public 309,275 309,859 +584 (+0.2%) 768 768 1,065,244 1,069,294 +4,050 (+0.4%) 6,485 7,886 +1,401 (+21.6%)
⚪ redeem_public_to_private_exact 305,059 305,627 +568 (+0.2%) 1,952 1,952 1,152,317 1,156,367 +4,050 (+0.4%) 6,374 7,829 +1,455 (+22.8%)
⚪ redeem_public_to_public 185,849 186,417 +568 (+0.3%) 832 832 1,100,612 1,104,662 +4,050 (+0.4%) 4,902 6,056 +1,154 (+23.5%)
⚪ withdraw_private_to_private 366,109 366,683 +574 (+0.2%) 1,312 1,312 1,080,601 1,084,651 +4,050 (+0.4%) 7,081 8,727 +1,646 (+23.2%)
⚪ withdraw_private_to_private_exact 474,540 475,163 +623 (+0.1%) 1,888 1,888 1,117,912 1,121,962 +4,050 (+0.4%) 8,496 10,429 +1,933 (+22.8%)
⚪ withdraw_private_to_public_exact 339,891 340,466 +575 (+0.2%) 1,344 1,344 1,102,375 1,106,425 +4,050 (+0.4%) 6,854 8,415 +1,561 (+22.8%)
⚪ withdraw_public_to_private 315,321 315,905 +584 (+0.2%) 2,528 2,528 1,169,499 1,173,549 +4,050 (+0.3%) 6,503 7,972 +1,469 (+22.6%)
⚪ withdraw_public_to_public 185,849 186,417 +568 (+0.3%) 832 832 1,100,531 1,104,581 +4,050 (+0.4%) 4,809 6,042 +1,233 (+25.6%)

@alejoamiras
alejoamiras merged commit 663aa10 into main Oct 21, 2026
9 checks passed
@alejoamiras
alejoamiras deleted the worktree-aztec-v6-rc4 branch October 21, 2026 20:56
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