Skip to content

chore(next): move to aztec 6.0.0-rc.1 and target the v6 testnet - #65

Merged
Thunkar merged 23 commits into
nextfrom
gj/next-v6.0.0-rc.1
Sep 29, 2026
Merged

Thunkar merged 23 commits into
nextfrom
gj/next-v6.0.0-rc.1

Conversation

@Thunkar

@Thunkar Thunkar commented Sep 25, 2026 •

Copy link
Copy Markdown
Collaborator

Brings next level with main (v5.0.1 plus the stable fixes), then moves it to Aztec v6.0.0-rc.1 on the v6 testnet. Changes mirror aztec-kit's next.

Changes

  • Merge main into next. Only version pins and lockfiles conflicted. They were resolved to main, so the merge result equals main.
  • New npm scopes. @aztec/* → @aztec-labs/*. bb.js, noir-* and l1-artifacts → @aztec-foundation/*. @aztec/viem is unchanged. All pins are 6.0.0-rc.1.
  • v6 API changes:
    • BaseWallet.scopesFrom(from, additionalScopes, sendMessagesAs): the tag sender is now kept in scope.
    • Functions have a single returnType; multiple return values are one tuple. decodeFromAbi takes one type, argument lists use decodeEachFromAbi, and return types are read with getFunctionReturnType.
  • Network. testnet now points at https://testnet-v6.rpc2.aztec-labs.com (Sepolia L1). The node sits behind the rpc2 AWS API gateway, which reads the key from x-api-key. Its CORS allows that header.
  • Per-network API keys:
    • Each network's key is read at build time from VITE_<ID>_API_KEY, where <ID> is the network id in upper snake case (for example VITE_TESTNET_API_KEY).
    • The new shared createNodeClient(network) sends the key. The Electron worker and the web wallet both use it.
    • Keys end up in the client bundles by design.
  • CI.
    • Before building, every <ID>_API_KEY repo secret is exported as VITE_<ID>_API_KEY. This happens in the web deploy (deploy-web.yml), the release web deploy, and the Electron builds (CI dev builds via secrets: inherit in ci.yml, plus the release build).
    • The shared step is .github/actions/export-network-api-keys. It is inlined in deploy-web.yml because under pull_request_target a local action would run the PR head's copy with every secret.
    • A new gated network only needs its secret; no workflow changes.
  • scripts/update.js. Tracks v6 nightlies under @aztec-labs and sends each network's key when fetching node info.

Before merging / deploying

  • Add the TESTNET_API_KEY repo secret.

Testing

  • typecheck (app, shared, web, extension), lint, and unit tests pass
  • The web build and electron-forge package both succeed, and the key is injected into the web bundle and the Electron main, renderer and worker bundles.
  • Gateway check: CORS preflight allows x-api-key from browser origins.

🤖 Generated with Claude Code

Thunkar and others added 22 commits June 18, 2026 09:02
- Schnorr signing keys are Grumpkin scalars (Fq); the account-creation UI
  was generating raw random 32-byte keys, which frequently exceed the Fq
  modulus and made Fq.fromBuffer throw ("greater or equal to field
  modulus"). Generate a valid Fq for schnorr/schnorr_initializerless;
  ECDSA keeps raw 32-byte buffers.
- initStubClasses registered the stub contract classes with PXE on every
  wallet/session bootstrap, producing repeated "Added contract class" work
  on the shared PXE. Guard registration with a getContractArtifact check so
  each class is registered at most once per PXE.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The dev-mode system-wide manifest check hardcoded Google Chrome's dir
(/etc/opt/chrome/native-messaging-hosts), so on Chromium/Brave (e.g.
Arch/CachyOS, which default to Chromium) the browser never found the
host and never spawned it. Check all Chromium-family dirs and print a
one-shot install command covering Chrome, Chromium and Brave; document
the per-browser paths in the README.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Align the live progress bar and the phase-breakdown timeline with the
reference palette in aztec-kit/packages/embedded-wallet:
- Simulation: #ff9800 -> #ce93d8 (reference purple)
- Sync (#90caf9), Witgen (#ffb74d), Proving (#f48fb1), Other (#bdbdbd),
  Sending (#2196f3), Mining (#4caf50) already matched.
- Validation moves to the freed #ff9800 so it stays distinct from
  Simulation in the breakdown bar (the reference has no Validation phase).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… can load them

Since SQLite3MultipleCiphers 2.3.5 (aztec-packages#24293, in rc.2) the
sqlite3mc loader resolves sqlite3.wasm through Module['locateFile'] with a
dynamic path the bundler can't rewrite; production builds request unhashed
assets/sqlite3.wasm relative to the worker chunk and 404 ('unsupported
MIME type' follow-up). Dev is unaffected. Emit the wasm and the OPFS
async-proxy script under their original names at build time. Same fix as
aztec-kit's sqliteRuntimeAssetsPlugin.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fix(web): emit sqlite3mc runtime assets unhashed so production builds…
Bump all @aztec/* packages from 5.0.0-rc.2 to the stable 5.0.0 release
across every workspace (shared, web, extension, app) and migrate the
breaking API changes between the RC and the stable release:

- PXE now stores/returns contract instance *preimages*
  (ContractInstancePreimageWithAddress): they expose
  originalContractClassId instead of currentContractClassId, which is
  now chain-tracked state. Update DecodingCache, the tx callstack
  decoder and the call-authorization formatter accordingly.
- Wallet.registerContract is now
  (instance: ContractInstancePreimage, artifact?, secretKeyOrKeys?:
  Fr | MasterSecretKeys) => Promise<void>. Update the ExternalWallet
  override and rewrite RegisterContractOperation to register the
  contract class and instance independently, derive privacy keys
  before registerAccount, compute the address from the preimage, and
  drop the removed pxe.updateContract path.

Verified: typecheck (shared/web/app + extension tsc), tests (31 pass),
lint (0 errors) and the web production build all pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v5's pxe.getContractInstance returns only the immutable address preimage
(originalContractClassId), so decoding an upgraded contract's calls against
that class id would pick a stale artifact (or none, if only the new class's
artifact is registered), producing wrong or missing function/contract names.

Resolve the effective (current) contract class id from chain state via
node.getContract().currentContractClassId, falling back to the preimage's
originalContractClassId when the contract isn't published on-chain (local
registrations, where original and current are necessarily equal). The lookup
is memoized per address in DecodingCache, so it costs at most one node call
per address per session. All six decoder sites now go through the new
getContractArtifactForAddress helper.

resolveContractName is intentionally left on originalContractClassId: it names
a preimage at registration time (not yet on chain), where original == current.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(deps): update Aztec packages to v5.0.0 stable
The v5 Wallet interface makes registerContract return void, and the SDK's
batch output schema validates each registerContract result as
z.void().optional(). The batch handler was forwarding the operation's
internal return value — the contract instance, which we keep as the
"already registered" early-return sentinel — as the wire result, so an app
batching registerContract calls rejected the response with "expected void"
(invalid_type) zod errors, one per batched item.

Emit undefined as the batch wire result for registerContract. The standalone
registerContract path already returns void, and registerContract is the only
batchable method whose wallet-interface return type is void.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(batch): emit void for registerContract results over the wire
Bump all @aztec/* packages from the 5.0.0 stable release to tonight's
nightly (5.0.0-nightly.20260715) to pick up the latest fixes, across all
workspaces. No source changes were required — the v5 migration on this
branch is drop-in compatible with the nightly (typecheck, tests, extension
compile and web build all pass).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Surface the Aztec SDK version the wallet is built against in a footer at
the bottom of the expanded menu drawer, so it's easy to tell which SDK
build a running wallet is using (handy when testing nightlies).

The version is read from the workspace's pinned @aztec/aztec.js dependency
at build time and injected via a Vite `define` (__AZTEC_SDK_VERSION__) in
both the web and Electron-renderer configs — a single source of truth that
tracks whatever version is installed. shared/src/ui/utils/version.ts reads
the define and falls back to "unknown" where it isn't applied (e.g. tests).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Update to 5.0.0-nightly.20260715 + show Aztec SDK version in UI
Bump all @aztec/* packages from 5.0.0-nightly.20260715 to the official
5.0.1 release across every workspace. 5.0.1 is structurally identical to
that nightly, so no source changes were needed — the version-display footer
picks up "5.0.1" automatically from the pinned dependency at build time.

Verified: typecheck (shared/web/app), extension tsc, tests (31 pass) and the
web build all pass; the built bundle shows 5.0.1 with no stale nightly refs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(deps): update Aztec packages to v5.0.1
# Conflicts:
#	app/package.json
#	extension/package.json
#	extension/yarn.lock
#	shared/package.json
#	web/package.json
#	yarn.lock
…staging-public

v6 ships under new npm scopes, so this is more than a version bump:

- @aztec/* -> @aztec-labs/*; foundation packages (bb.js, noir-*, l1-artifacts)
  -> @aztec-foundation/*. The vendored viem fork keeps its npm:@aztec/viem alias.
- BaseWallet.scopesFrom takes (from, additionalScopes, sendMessagesAs) so the
  tag sender is kept in scope.
- FunctionAbi.returnTypes is deprecated in favour of a single returnType
  (multiple returns are one tuple): decodeFromAbi takes a single type, and
  argument lists decode with decodeEachFromAbi. Read return types through
  getFunctionReturnType.
- The testnet network entry is replaced by staging-public
  (https://staging-public.rpc.aztec-labs.com, Sepolia L1) until an official v6
  testnet exists. Its gateway requires an API key, read at build time from
  VITE_STAGING_PUBLIC_API_KEY and sent as x-aztec-api-key by the new shared
  createNodeClient(network), which both the Electron worker and the web wallet use.
- Release builds get the key from the STAGING_PUBLIC_API_KEY secret.
- update.js tracks v6 nightlies under @aztec-labs and sends the key when
  fetching node info.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…network

The official v6 testnet is up behind the rpc2 AWS API gateway, so the
staging-public stand-in goes away and `testnet` comes back, pointing at
https://testnet-v6.rpc2.aztec-labs.com. That gateway reads the key from
x-api-key (a missing or wrong key both come back 403 Forbidden).

API keys are no longer wired per network by hand: each network's key is read
at build time from VITE_<ID>_API_KEY (network id in upper snake case, e.g.
VITE_TESTNET_API_KEY). In CI, every <ID>_API_KEY repo secret is exported under
that name before the web deploys and the Electron release build, via
.github/actions/export-network-api-keys (inlined in deploy-web.yml, where a
local action would run the PR head's copy under pull_request_target). A new
gated network only needs its secret. update.js uses the same naming.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@Thunkar Thunkar changed the title chore(next): move to aztec 6.0.0-rc.1 and target staging-public chore(next): move to aztec 6.0.0-rc.1 and target the v6 testnet Sep 29, 2026
ci.yml now passes secrets to build-artifacts and the export step runs for dev
builds too, so PR/next artifacts can reach gated networks like testnet. Fork
PRs get no secrets and still build keyless.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

🚀 Web wallet deployed!

Preview URL: https://demo-wallet-lw7dzntdr-thunkars-projects.vercel.app

@Thunkar
Thunkar merged commit b3b5937 into next Sep 29, 2026
14 of 17 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