diff --git a/.claude/commands/update-version.md b/.claude/commands/update-version.md new file mode 100644 index 0000000..9f6238c --- /dev/null +++ b/.claude/commands/update-version.md @@ -0,0 +1,210 @@ +--- +description: Update the Aztec version across the entire repo, update contract and TS code, and run tests. Usage: /update-version +--- + +# Update Aztec Version + +Update all Aztec version references, sync the MCP server, update contract and TypeScript code for API changes, and run tests. + +**Version argument:** $ARGUMENTS + +## Workflow + +### Step 1: Determine the new version + +- If a version argument is provided, use it directly (strip leading `v` if present for npm versions, keep `v` prefix for git tags) +- If no version argument, ask the user to provide one + +The version has two forms: +- **npm version** (no `v` prefix): e.g. `4.1.0-devnet.1` — used in `package.json`, config JSONs, README install command, and `CLAUDE.md` +- **git tag** (with `v` prefix): e.g. `v4.1.0-devnet.1` — used in `Nargo.toml` aztec dependency tag and for MCP sync + +### Step 2: Sync MCP server to new version + +Call `aztec_sync_repos` with the new version tag (with `v` prefix) and `force: true`: + +``` +aztec_sync_repos({ version: "v", force: true }) +``` + +Then call `aztec_status()` to verify the sync succeeded. This gives the MCP server access to the new version's source code and docs — essential for the later steps. + +### Step 3: Read current files + +Read these files to understand current state: +- `Nargo.toml` +- `package.json` +- `config/local-network.json` +- `config/devnet.json` +- `README.md` +- `CLAUDE.md` + +### Step 4: Update all version references + +Use the Edit tool to update each file. Be precise — only change version strings, nothing else. + +**1. `Nargo.toml`** — Update the aztec dependency tag: +```toml +aztec = { git = "https://github.com/AztecProtocol/aztec-nr/", tag = "v", directory = "aztec" } +``` + +**2. `package.json`** — Update ALL `@aztec/*` dependency versions to the new npm version (no `v` prefix). Do NOT change non-aztec dependencies. + +**3. `config/local-network.json`** — Update `settings.version` to the new npm version. + +**4. `config/devnet.json`** — Update `settings.version` to the new npm version. + +**5. `README.md`** — Update the install command version in the Getting Started section: +```bash +export VERSION= +curl -fsSL "https://install.aztec.network/${VERSION}" | VERSION="${VERSION}" bash -s +``` + +**6. `CLAUDE.md`** — Update the `**Aztec version: ...**` line to reflect the new version. + +### Step 5: Verify version references + +After all edits, grep the repo for the OLD version string to check for any missed references: + +```bash +grep -r "" --include="*.toml" --include="*.json" --include="*.md" . +``` + +Report any remaining occurrences (excluding `node_modules`, `target`, `.git`). + +### Step 6: Upgrade the Aztec CLI + +Run `aztec-up install ` (npm version, no `v` prefix) to upgrade the local aztec toolchain (CLI, nargo, bb, etc.) to match the new version: + +```bash +aztec-up install +``` + +Verify with `aztec --version`. + +### Step 6b: Install dependencies + +Run `yarn install` to pull new `@aztec/*` package versions and update `yarn.lock`. + +### Step 7: Research API changes in the new version + +Use the MCP tools (now synced to the new version) to research what changed. This is critical — the Aztec API frequently changes between versions. + +**7a. Search for breaking changes in Noir contract APIs:** + +Use `aztec_search_code` to look up current signatures and patterns for: +- Contract macros: `#[aztec]`, `#[storage]`, `#[note]`, `#[external]`, `#[initializer]`, `#[only_self]` +- Storage types: `Map`, `Owned`, `PrivateSet`, `PublicMutable` +- Note system: `NoteGetterOptions`, note delivery via `MessageDelivery` +- Test environment: `TestEnvironment`, `derive_storage_slot_in_map` +- Oracle functions: `debug_log_format` +- Core traits: `Serialize`, `Deserialize`, `Packable`, `ToField` + +**7b. Search for breaking changes in TypeScript APIs:** + +Use `aztec_search_code` and `aztec_search_docs` to look up current patterns for: +- Wallet setup: `EmbeddedWallet`, `createAztecNodeClient` +- Account management: `AccountManager`, `GrumpkinScalar`, Schnorr accounts +- Fee payment: `SponsoredFeePaymentMethod`, `SponsoredFPCContract` +- Contract interaction: `.simulate()`, `.send()`, `ContractDeployer` +- Protocol contracts: `getCanonicalFeeJuice`, `SPONSORED_FPC_SALT` +- Types: `Fr`, `AztecAddress`, `TxStatus`, `GasSettings` + +### Step 8: Update Noir contract files + +Based on the API research from Step 7, update the contract source files as needed. Read each file first, then apply changes. + +**Files to check and update:** +- `src/main.nr` — Main contract (imports, macros, storage declarations, function signatures, note handling, message delivery) +- `src/race.nr` — Race struct (trait implementations, serialization) +- `src/game_round_note.nr` — GameRoundNote (note macro, trait implementations) +- `src/test/utils.nr` — Test setup helper (TestEnvironment API) +- `src/test/helpers.nr` — Test helpers (TestEnvironment API) +- `src/test/pod_racing.nr` — TXE unit tests (test API, storage slot derivation) + +**Common breaking changes to watch for:** +- Import path changes (e.g. `aztec::protocol::address` vs `aztec::address`) +- Macro attribute changes or new required attributes +- Storage type API changes (constructor, read/write methods) +- Note trait requirements or macro changes +- TestEnvironment method signature changes +- Trait rename/restructure (Packable, Serialize, etc.) + +### Step 9: Compile the contract + +Run `yarn compile` to compile the Noir contract with the new Aztec version. + +If compilation fails, read the error messages carefully and fix the contract code. Use `aztec_search_code` and `aztec_search_docs` to look up correct patterns for the new version. Iterate until compilation succeeds. + +Then run `yarn codegen` to regenerate the TypeScript artifacts from the compiled contract. + +### Step 10: Update TypeScript files + +Based on the API research from Step 7 and any changes revealed by `yarn codegen`, update TypeScript files as needed. + +**Utility files (update first — other files depend on these):** +- `src/utils/setup_wallet.ts` — Wallet creation, PXE setup +- `src/utils/create_account_from_env.ts` — Account creation from env vars +- `src/utils/deploy_account.ts` — Account deployment with fees +- `src/utils/sponsored_fpc.ts` — SponsoredFPC setup +- `config/config.ts` — Config manager + +**E2E test files:** +- `src/test/e2e/index.test.ts` — Full game lifecycle tests +- `src/test/e2e/accounts.test.ts` — Account tests +- `src/test/e2e/public_logging.test.ts` — Logging tests + +**Script files:** +- `scripts/deploy_contract.ts` — Contract deployment +- `scripts/deploy_account.ts` — Account deployment +- `scripts/multiple_wallet.ts` — Multi-wallet interaction +- `scripts/interaction_existing_contract.ts` — Existing contract interaction +- `scripts/profile_deploy.ts` — Transaction profiling +- `scripts/fees.ts` — Fee payment examples +- `scripts/read_debug_logs.ts` — Debug log reading +- `scripts/get_block.ts` — Block retrieval + +**Common TypeScript breaking changes:** +- Import path changes (submodule paths like `@aztec/aztec.js/fee` may restructure) +- Constructor/factory method signature changes +- New required parameters on `.simulate()` or `.send()` +- Type renames or moved exports +- Fee payment API changes + +### Step 11: Run Noir TXE tests + +Run `yarn test:nr` to execute the Noir unit tests in the TXE simulator (no network needed). + +If tests fail, diagnose and fix the contract test code. Iterate until tests pass. + +### Step 12: Run TypeScript E2E tests against local network + +**Prerequisites:** The local network must already be running (`aztec start --local-network`). If it's not running, tell the user to start it and wait for confirmation before proceeding. + +1. Clear stale PXE state: `rm -rf ./store` +2. Run E2E tests: `yarn test:js` + +If tests fail: +- Read the error output carefully +- Fix the relevant TypeScript test or utility files +- Use `aztec_search_code` or `aztec_search_docs` to look up correct API usage for the new version +- Re-run `yarn test:js` until tests pass + +### Step 13: Rebuild ONBOARDING.md + +If any source files with `docs:start`/`docs:end` markers were modified, rebuild the onboarding docs: + +```bash +yarn docs:build +``` + +Marker files: `src/main.nr`, `src/race.nr`, `src/game_round_note.nr`, `src/test/utils.nr`, `src/test/helpers.nr`, `src/test/pod_racing.nr`, `src/utils/sponsored_fpc.ts` + +### Step 14: Final summary + +Report: +- Old version → new version +- All files modified (version refs, contract code, TypeScript code) +- Test results (TXE and E2E) +- Any remaining issues or manual steps needed +- Remind user to verify devnet compatibility separately if needed (`yarn test::devnet`) diff --git a/.github/workflows/devnet.yaml b/.github/workflows/devnet.yaml index 09b9bde..28b1166 100644 --- a/.github/workflows/devnet.yaml +++ b/.github/workflows/devnet.yaml @@ -11,6 +11,10 @@ on: - dev workflow_dispatch: +concurrency: + group: devnet-${{ github.ref }} + cancel-in-progress: true + jobs: devnet-deploy-account: name: Deploy Account to Devnet diff --git a/.github/workflows/local-network.yaml b/.github/workflows/local-network.yaml index a14f4c9..2314e46 100644 --- a/.github/workflows/local-network.yaml +++ b/.github/workflows/local-network.yaml @@ -9,20 +9,27 @@ on: branches: - next - dev + - testnet workflow_dispatch: +concurrency: + group: local-network-${{ github.ref }} + cancel-in-progress: true + jobs: local-network-tests: name: Local Network Tests runs-on: ubuntu-latest env: AZTEC_ENV: local-network - AZTEC_VERSION: 4.0.0-devnet.2-patch.1 steps: - name: Checkout repository uses: actions/checkout@v5 + - name: Read Aztec version from config + run: echo "AZTEC_VERSION=$(jq -r '.settings.version' config/local-network.json)" >> $GITHUB_ENV + - name: Set up Node.js uses: actions/setup-node@v4 with: diff --git a/.github/workflows/testnet.yaml b/.github/workflows/testnet.yaml new file mode 100644 index 0000000..49c6ef0 --- /dev/null +++ b/.github/workflows/testnet.yaml @@ -0,0 +1,41 @@ +name: Testnet Tests + +on: + push: + branches: + - testnet + pull_request: + branches: + - testnet + workflow_dispatch: + +concurrency: + group: testnet-deploy + cancel-in-progress: true + +jobs: + testnet-deploy-account: + name: Deploy Account to Testnet + runs-on: ubuntu-latest + env: + AZTEC_ENV: testnet + L1_PRIVATE_KEY: ${{ secrets.L1_PRIVATE_KEY }} + + steps: + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Read Aztec version from config + run: echo "AZTEC_VERSION=$(jq -r '.settings.version' config/testnet.json)" >> $GITHUB_ENV + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + cache: "yarn" + + - name: Install project dependencies + run: yarn + + - name: Deploy account to testnet + run: yarn deploy-account::testnet diff --git a/CLAUDE.md b/CLAUDE.md index b4e258a..bfd76fa 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,7 +6,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co Aztec Starter — a Pod Racing game contract built with Noir on the Aztec network. Two players allocate points across 5 tracks over 3 rounds with private state; scores are revealed at the end (commit-reveal pattern). The player who wins more tracks (best of 5) wins. -**Aztec version: `4.0.0-devnet.2-patch.1`** — pinned across `Nargo.toml`, `package.json`, `config/*.json`, and README. All must stay in sync when updating. +**Aztec version: `4.1.0-rc.2`** — pinned across `Nargo.toml`, `package.json`, `config/*.json`, and README. All must stay in sync when updating. ## Build & Development Commands diff --git a/Nargo.toml b/Nargo.toml index 0f6e610..dcadd60 100644 --- a/Nargo.toml +++ b/Nargo.toml @@ -5,4 +5,4 @@ authors = [ "" ] compiler_version = ">=0.18.0" [dependencies] -aztec = { git = "https://github.com/AztecProtocol/aztec-nr/", tag = "v4.0.0-devnet.2-patch.1", directory = "aztec" } +aztec = { git = "https://github.com/AztecProtocol/aztec-nr/", tag = "v4.1.0-rc.2", directory = "aztec" } diff --git a/ONBOARDING.md b/ONBOARDING.md index 6070c21..f76482f 100644 --- a/ONBOARDING.md +++ b/ONBOARDING.md @@ -9,7 +9,7 @@ This guide takes you from "reading code in a browser" to "deploying on devnet" * **Phases 1-2** need only a browser (read code, compile in a Codespace) * **Phases 3-6** need local tools (deploy, interact, extend, advanced topics) -**Aztec version pinned in this repo:** `4.0.0-devnet.2-patch.1` (check `Nargo.toml` and `package.json` for source of truth) +**Aztec version pinned in this repo:** `4.1.0-rc.2` (check `Nargo.toml` and `package.json` for source of truth) **Links:** @@ -164,7 +164,7 @@ fn create_game(game_id: Field) { // Ensure this game_id hasn't been used yet (player1 must be zero address) assert(self.storage.races.at(game_id).read().player1.eq(AztecAddress::zero())); - let player1 = self.context.maybe_msg_sender().unwrap(); + let player1 = self.msg_sender(); debug_log_format( "Creating game {0} by player {1}", [game_id, player1.to_field()], @@ -193,7 +193,7 @@ Creates a new game. Checks the game ID isn't taken (player1 must be zero address fn join_game(game_id: Field) { let maybe_existing_game = self.storage.races.at(game_id).read(); - let player2 = self.context.maybe_msg_sender().unwrap(); + let player2 = self.msg_sender(); debug_log_format("Player {0} joining game {1}", [player2.to_field(), game_id]); // Add the caller as player2 (validates that player1 exists and player2 is empty) @@ -314,7 +314,7 @@ fn play_round( // Validate that total points don't exceed 9 (you can't max out all tracks) assert(track1 + track2 + track3 + track4 + track5 < 10); - let player = self.context.maybe_msg_sender().unwrap(); + let player = self.msg_sender(); debug_log_format( "Player {0} playing round {1} in game {2}", [player.to_field(), round as Field, game_id], @@ -336,11 +336,11 @@ fn play_round( // Enqueue a public function call to update the round counter // This reveals that a round was played, but not the point allocation - self.enqueue(PodRacing::at(self.context.this_address()).validate_and_play_round( + self.enqueue_self.validate_and_play_round( player, game_id, round, - )); + ); } ``` @@ -361,7 +361,7 @@ Three things happen here that have no direct Ethereum equivalent: // This is the "reveal" phase where private choices become public #[external("private")] fn finish_game(game_id: Field) { - let player = self.context.maybe_msg_sender().unwrap(); + let player = self.msg_sender(); debug_log_format( "Player {0} finishing game {1}", [player.to_field(), game_id], @@ -394,7 +394,7 @@ fn finish_game(game_id: Field) { // Enqueue public function to store the revealed totals on-chain // Now the revealing player's track totals will be publicly visible - self.enqueue(PodRacing::at(self.context.this_address()).validate_finish_game_and_reveal( + self.enqueue_self.validate_finish_game_and_reveal( player, game_id, total_track1, @@ -402,7 +402,7 @@ fn finish_game(game_id: Field) { total_track3, total_track4, total_track5, - )); + ); } ``` @@ -526,7 +526,7 @@ The `.devcontainer/` configures: * **Base image:** Ubuntu 24.04 with Node.js v22.15.0 * **Docker-in-Docker** for running the Aztec local network -* **Aztec CLI** installed via `curl -fsSL "https://install.aztec.network/4.0.0-devnet.2-patch.1" | VERSION="4.0.0-devnet.2-patch.1" bash -s` +* **Aztec CLI** installed via `curl -fsSL "https://install.aztec.network/4.1.0-rc.2" | VERSION="4.1.0-rc.2" bash -s` * **VS Code extension:** `noir-lang.vscode-noir` for Noir syntax highlighting * **Dependencies:** `yarn install` runs automatically @@ -737,7 +737,7 @@ pub unconstrained fn setup() -> (TestEnvironment, AztecAddress, AztecAddress) { **Aztec toolkit:** ```bash -export VERSION=4.0.0-devnet.2-patch.1 +export VERSION=4.1.0-rc.2 curl -fsSL "https://install.aztec.network/${VERSION}" | VERSION="${VERSION}" bash -s ``` diff --git a/README.md b/README.md index 8c5dfd9..db38a38 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Use **Node.js version 22.15.0**. Install the **Aztec toolkit** (local network, CLI, and other tooling) at the correct version: ```bash -export VERSION=4.0.0-devnet.2-patch.1 +export VERSION=4.1.0-rc.2 curl -fsSL "https://install.aztec.network/${VERSION}" | VERSION="${VERSION}" bash -s ``` diff --git a/config/config.ts b/config/config.ts index 04f9fb7..6eec3b6 100644 --- a/config/config.ts +++ b/config/config.ts @@ -69,6 +69,14 @@ export class ConfigManager { return this.config.environment === 'devnet'; } + public isTestnet(): boolean { + return this.config.environment === 'testnet'; + } + + public isRemoteNetwork(): boolean { + return this.isDevnet() || this.isTestnet(); + } + public isLocalNetwork(): boolean { return this.config.environment === 'local'; } @@ -91,7 +99,7 @@ export class ConfigManager { } // Otherwise, use defaults based on environment - if (this.isDevnet()) { + if (this.isRemoteNetwork()) { return { deployTimeout: 1200000, // 20 minutes txTimeout: 180000, // 3 minutes diff --git a/config/local-network.json b/config/local-network.json index eb7b9df..9d78466 100644 --- a/config/local-network.json +++ b/config/local-network.json @@ -8,7 +8,7 @@ }, "settings": { "skipLocalNetwork": false, - "version": "4.0.0-devnet.2-patch.1" + "version": "4.1.0-rc.2" }, "timeouts": { "deployTimeout": 120000, diff --git a/config/testnet.json b/config/testnet.json new file mode 100644 index 0000000..4b7791b --- /dev/null +++ b/config/testnet.json @@ -0,0 +1,18 @@ +{ + "name": "testnet", + "environment": "testnet", + "network": { + "nodeUrl": "https://rpc.testnet.aztec-labs.com", + "l1RpcUrl": "https://ethereum-sepolia-rpc.publicnode.com", + "l1ChainId": 11155111 + }, + "settings": { + "skipLocalNetwork": true, + "version": "4.1.0-rc.2" + }, + "timeouts": { + "deployTimeout": 1200000, + "txTimeout": 180000, + "waitTimeout": 60000 + } +} diff --git a/docs/ONBOARDING.src.md b/docs/ONBOARDING.src.md index e5acad8..fea7466 100644 --- a/docs/ONBOARDING.src.md +++ b/docs/ONBOARDING.src.md @@ -9,7 +9,7 @@ This guide takes you from "reading code in a browser" to "deploying on devnet" - **Phases 1-2** need only a browser (read code, compile in a Codespace) - **Phases 3-6** need local tools (deploy, interact, extend, advanced topics) -**Aztec version pinned in this repo:** `4.0.0-devnet.2-patch.1` (check `Nargo.toml` and `package.json` for source of truth) +**Aztec version pinned in this repo:** `4.1.0-rc.2` (check `Nargo.toml` and `package.json` for source of truth) **Links:** @@ -262,7 +262,7 @@ The `.devcontainer/` configures: - **Base image:** Ubuntu 24.04 with Node.js v22.15.0 - **Docker-in-Docker** for running the Aztec local network -- **Aztec CLI** installed via `curl -fsSL "https://install.aztec.network/4.0.0-devnet.2-patch.1" | VERSION="4.0.0-devnet.2-patch.1" bash -s` +- **Aztec CLI** installed via `curl -fsSL "https://install.aztec.network/4.1.0-rc.2" | VERSION="4.1.0-rc.2" bash -s` - **VS Code extension:** `noir-lang.vscode-noir` for Noir syntax highlighting - **Dependencies:** `yarn install` runs automatically @@ -357,7 +357,7 @@ And higher-level helpers: **Aztec toolkit:** ```bash -export VERSION=4.0.0-devnet.2-patch.1 +export VERSION=4.1.0-rc.2 curl -fsSL "https://install.aztec.network/${VERSION}" | VERSION="${VERSION}" bash -s ``` diff --git a/package.json b/package.json index a3889f4..73c5f7d 100644 --- a/package.json +++ b/package.json @@ -10,42 +10,51 @@ "scripts": { "fees": "NODE_NO_WARNINGS=1 node --loader ts-node/esm scripts/fees.ts", "fees::devnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=devnet node --loader ts-node/esm scripts/fees.ts", + "fees::testnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=testnet node --loader ts-node/esm scripts/fees.ts", "clean": "rm -rf ./src/artifacts ./target ./codegenCache.json", "clear-store": "rm -rf ./store", "codegen": "aztec codegen target --outdir src/artifacts", "compile": "aztec compile", "deploy": "NODE_NO_WARNINGS=1 node --loader ts-node/esm scripts/deploy_contract.ts", "deploy::devnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=devnet node --loader ts-node/esm scripts/deploy_contract.ts", + "deploy::testnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=testnet node --loader ts-node/esm scripts/deploy_contract.ts", "deploy-account": "NODE_NO_WARNINGS=1 node --loader ts-node/esm scripts/deploy_account.ts", "deploy-account::devnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=devnet node --loader ts-node/esm scripts/deploy_account.ts", + "deploy-account::testnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=testnet node --loader ts-node/esm scripts/deploy_account.ts", "interaction-existing-contract": "NODE_NO_WARNINGS=1 node --loader ts-node/esm scripts/interaction_existing_contract.ts", "interaction-existing-contract::devnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=devnet node --loader ts-node/esm scripts/interaction_existing_contract.ts", + "interaction-existing-contract::testnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=testnet node --loader ts-node/esm scripts/interaction_existing_contract.ts", "multiple-wallet": "NODE_NO_WARNINGS=1 node --loader ts-node/esm scripts/multiple_wallet.ts", "multiple-wallet::devnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=devnet node --loader ts-node/esm scripts/multiple_wallet.ts", + "multiple-wallet::testnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=testnet node --loader ts-node/esm scripts/multiple_wallet.ts", "get-block": "NODE_NO_WARNINGS=1 node --loader ts-node/esm scripts/get_block.ts", "get-block::devnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=devnet node --loader ts-node/esm scripts/get_block.ts", + "get-block::testnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=testnet node --loader ts-node/esm scripts/get_block.ts", "profile": "NODE_NO_WARNINGS=1 node --loader ts-node/esm scripts/profile_deploy.ts", "profile::devnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=devnet node --loader ts-node/esm scripts/profile_deploy.ts", + "profile::testnet": "NODE_NO_WARNINGS=1 AZTEC_ENV=testnet node --loader ts-node/esm scripts/profile_deploy.ts", "read-logs": "NODE_NO_WARNINGS=1 LOG_LEVEL='info; debug:contract_log' node --loader ts-node/esm scripts/read_debug_logs.ts", "read-logs::devnet": "NODE_NO_WARNINGS=1 LOG_LEVEL='info; debug:contract_log' AZTEC_ENV=devnet node --loader ts-node/esm scripts/read_debug_logs.ts", + "read-logs::testnet": "NODE_NO_WARNINGS=1 LOG_LEVEL='info; debug:contract_log' AZTEC_ENV=testnet node --loader ts-node/esm scripts/read_debug_logs.ts", "test": "yarn test:js && yarn test:nr", "test::devnet": "AZTEC_ENV=devnet yarn test:js", + "test::testnet": "AZTEC_ENV=testnet yarn test:js", "test:js": "rm -rf store/pxe && NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --runInBand --config jest.integration.config.json", "test:nr": "aztec test", "docs:build": "remark docs/ONBOARDING.src.md -o ONBOARDING.md", "update-readme-version": "node ./.github/scripts/update-readme-version.js" }, "dependencies": { - "@aztec/accounts": "4.0.0-devnet.2-patch.1", - "@aztec/aztec.js": "4.0.0-devnet.2-patch.1", - "@aztec/constants": "4.0.0-devnet.2-patch.1", - "@aztec/entrypoints": "4.0.0-devnet.2-patch.1", - "@aztec/noir-contracts.js": "4.0.0-devnet.2-patch.1", - "@aztec/protocol-contracts": "4.0.0-devnet.2-patch.1", - "@aztec/pxe": "4.0.0-devnet.2-patch.1", - "@aztec/stdlib": "4.0.0-devnet.2-patch.1", - "@aztec/wallet-sdk": "4.0.0-devnet.2-patch.1", - "@aztec/wallets": "4.0.0-devnet.2-patch.1", + "@aztec/accounts": "4.1.0-rc.2", + "@aztec/aztec.js": "4.1.0-rc.2", + "@aztec/constants": "4.1.0-rc.2", + "@aztec/entrypoints": "4.1.0-rc.2", + "@aztec/noir-contracts.js": "4.1.0-rc.2", + "@aztec/protocol-contracts": "4.1.0-rc.2", + "@aztec/pxe": "4.1.0-rc.2", + "@aztec/stdlib": "4.1.0-rc.2", + "@aztec/wallet-sdk": "4.1.0-rc.2", + "@aztec/wallets": "4.1.0-rc.2", "dotenv": "^17.2.2" }, "devDependencies": { diff --git a/scripts/deploy_contract.ts b/scripts/deploy_contract.ts index ca3a6e2..26fc22f 100644 --- a/scripts/deploy_contract.ts +++ b/scripts/deploy_contract.ts @@ -46,11 +46,13 @@ async function main() { from: address, }); logger.info('✅ Simulation successful, sending transaction...'); - const { contract: podRacingContract, instance } = await deployRequest.send({ + const { receipt } = await deployRequest.send({ from: address, fee: { paymentMethod: sponsoredPaymentMethod }, wait: { timeout: timeouts.deployTimeout, returnReceipt: true } }); + const podRacingContract = receipt.contract; + const instance = receipt.instance; logger.info(`🎉 Pod Racing Contract deployed successfully!`); logger.info(`📍 Contract address: ${podRacingContract.address}`); diff --git a/scripts/fees.ts b/scripts/fees.ts index 990b050..69cf90d 100644 --- a/scripts/fees.ts +++ b/scripts/fees.ts @@ -74,7 +74,7 @@ async function main() { // Simulate before sending to surface revert reasons const podRacingDeploy = PodRacingContract.deploy(wallet, account1.address); await podRacingDeploy.simulate({ from: account1.address }); - const podRacingContract = await podRacingDeploy.send({ + const { contract: podRacingContract } = await podRacingDeploy.send({ from: account1.address, fee: { paymentMethod }, wait: { timeout: timeouts.deployTimeout } @@ -82,7 +82,7 @@ async function main() { const bananaCoinDeploy = TokenContract.deploy(wallet, account1.address, "bananaCoin", "BNC", 18); await bananaCoinDeploy.simulate({ from: account1.address }); - const bananaCoin = await bananaCoinDeploy.send({ + const { contract: bananaCoin } = await bananaCoinDeploy.send({ from: account1.address, fee: { paymentMethod }, wait: { timeout: timeouts.deployTimeout } @@ -114,7 +114,7 @@ async function main() { // This uses bananaCoin as the fee paying asset that will be exchanged for fee juice const fpcDeploy = FPCContract.deploy(wallet, bananaCoin.address, account1.address); await fpcDeploy.simulate({ from: account1.address }); - const fpc = await fpcDeploy.send({ + const { contract: fpc } = await fpcDeploy.send({ from: account1.address, fee: { paymentMethod }, wait: { timeout: timeouts.deployTimeout } @@ -135,11 +135,11 @@ async function main() { fee: { paymentMethod }, wait: { timeout: timeouts.txTimeout } }); - const bananaBalance = await bananaCoin.methods.balance_of_private(account2.address).simulate({ + const bananaBalanceResult = await bananaCoin.methods.balance_of_private(account2.address).simulate({ from: account2.address }); - logger.info(`BananaCoin balance of newWallet is ${bananaBalance}`) + logger.info(`BananaCoin balance of newWallet is ${bananaBalanceResult.result ?? bananaBalanceResult}`) const feeJuiceInstance = await getCanonicalFeeJuice(); await wallet.registerContract(feeJuiceInstance.instance, FeeJuiceContract.artifact); @@ -147,9 +147,10 @@ async function main() { await feeJuice.methods.claim(fpc.address, fpcClaim.claimAmount, fpcClaim.claimSecret, fpcClaim.messageLeafIndex).send({ from: account2.address, wait: { timeout: timeouts.txTimeout } }); - logger.info(`Fpc fee juice balance ${await feeJuice.methods.balance_of_public(fpc.address).simulate({ + const fpcBalance = await feeJuice.methods.balance_of_public(fpc.address).simulate({ from: account2.address - })}`); + }); + logger.info(`Fpc fee juice balance ${fpcBalance.result ?? fpcBalance}`); const maxFeesPerGas = (await node.getCurrentMinFees()).mul(1.5); const gasSettings = GasSettings.default({ maxFeesPerGas }); diff --git a/scripts/interaction_existing_contract.ts b/scripts/interaction_existing_contract.ts index 874889b..d56490e 100644 --- a/scripts/interaction_existing_contract.ts +++ b/scripts/interaction_existing_contract.ts @@ -8,7 +8,7 @@ import { setupWallet } from "../src/utils/setup_wallet.js"; import { getSponsoredFPCInstance } from "../src/utils/sponsored_fpc.js"; import { getAccountFromEnv } from "../src/utils/create_account_from_env.js"; import { getTimeouts } from "../config/config.js"; -import { getContractInstanceFromInstantiationParams } from "@aztec/aztec.js/contracts"; +import { getContractInstanceFromInstantiationParams } from "@aztec/stdlib/contract"; async function main() { let logger: Logger; diff --git a/scripts/multiple_wallet.ts b/scripts/multiple_wallet.ts index 6d5f92d..4db74b5 100644 --- a/scripts/multiple_wallet.ts +++ b/scripts/multiple_wallet.ts @@ -1,6 +1,5 @@ import { Fr } from "@aztec/aztec.js/fields"; import { GrumpkinScalar } from "@aztec/foundation/curves/grumpkin"; -import { getContractInstanceFromInstantiationParams, type ContractInstanceWithAddress } from "@aztec/aztec.js/contracts"; import { AztecAddress } from "@aztec/aztec.js/addresses"; import { SponsoredFeePaymentMethod } from "@aztec/aztec.js/fee"; import { createAztecNodeClient } from "@aztec/aztec.js/node"; @@ -14,27 +13,11 @@ const nodeUrl = getAztecNodeUrl(); const node = createAztecNodeClient(nodeUrl); const walletOpts = { ephemeral: true, - pxeConfig: { proverEnabled: configManager.isDevnet() }, + pxeConfig: { proverEnabled: configManager.isRemoteNetwork() }, }; const L2_TOKEN_CONTRACT_SALT = Fr.random(); -export async function getL2TokenContractInstance(deployerAddress: any, ownerAztecAddress: AztecAddress): Promise { - return await getContractInstanceFromInstantiationParams( - TokenContract.artifact, - { - salt: L2_TOKEN_CONTRACT_SALT, - deployer: deployerAddress, - constructorArgs: [ - ownerAztecAddress, - 'Clean USDC', - 'USDC', - 6 - ] - } - ) -} - async function main() { const wallet1 = await EmbeddedWallet.create(node, walletOpts); @@ -58,12 +41,13 @@ async function main() { // Simulate before sending to surface revert reasons const tokenDeploy = TokenContract.deploy(wallet1, ownerAddress, 'Clean USDC', 'USDC', 6); await tokenDeploy.simulate({ from: ownerAddress }); - const token = await tokenDeploy.send({ + const { receipt } = await tokenDeploy.send({ from: ownerAddress, contractAddressSalt: L2_TOKEN_CONTRACT_SALT, fee: { paymentMethod }, - wait: { timeout: timeouts.deployTimeout } + wait: { timeout: timeouts.deployTimeout, returnReceipt: true } }); + const token = receipt.contract; // setup account on 2nd pxe @@ -84,12 +68,11 @@ async function main() { // Simulate before sending to surface revert reasons await token.methods.mint_to_private(schnorrAccount2.address, 100).simulate({ from: ownerAddress }); - const private_mint_tx = await token.methods.mint_to_private(schnorrAccount2.address, 100).send({ + await token.methods.mint_to_private(schnorrAccount2.address, 100).send({ from: ownerAddress, fee: { paymentMethod }, wait: { timeout: timeouts.txTimeout } }); - console.log(await node.getTxEffect(private_mint_tx.txHash)) await token.methods.mint_to_public(schnorrAccount2.address, 100).simulate({ from: ownerAddress }); await token.methods.mint_to_public(schnorrAccount2.address, 100).send({ @@ -112,15 +95,15 @@ async function main() { ) // Check balances - const balance = await l2TokenContract.methods.balance_of_private(wallet2Address).simulate({ + const balanceResult = await l2TokenContract.methods.balance_of_private(wallet2Address).simulate({ from: wallet2Address }) - console.log("private balance should be 100", balance) + console.log("private balance should be 100", balanceResult.result ?? balanceResult) - const publicBalance = await l2TokenContract.methods.balance_of_public(wallet2Address).simulate({ + const publicBalanceResult = await l2TokenContract.methods.balance_of_public(wallet2Address).simulate({ from: wallet2Address }) - console.log("public balance should be 100", publicBalance) + console.log("public balance should be 100", publicBalanceResult.result ?? publicBalanceResult) } diff --git a/scripts/read_debug_logs.ts b/scripts/read_debug_logs.ts index 77d7b1e..cb65ebd 100644 --- a/scripts/read_debug_logs.ts +++ b/scripts/read_debug_logs.ts @@ -57,7 +57,7 @@ async function main() { logger.info('\n--- Deploying PodRacing contract (constructor logs) ---'); const deployRequest = PodRacingContract.deploy(wallet, p1Account.address); await deployRequest.simulate({ from: p1Account.address }); - const contract = await deployRequest.send({ + const { contract } = await deployRequest.send({ from: p1Account.address, fee: { paymentMethod }, wait: { timeout: timeouts.deployTimeout }, diff --git a/src/main.nr b/src/main.nr index 9199e9a..ef6477d 100644 --- a/src/main.nr +++ b/src/main.nr @@ -76,7 +76,7 @@ pub contract PodRacing { // Ensure this game_id hasn't been used yet (player1 must be zero address) assert(self.storage.races.at(game_id).read().player1.eq(AztecAddress::zero())); - let player1 = self.context.maybe_msg_sender().unwrap(); + let player1 = self.msg_sender(); debug_log_format( "Creating game {0} by player {1}", [game_id, player1.to_field()], @@ -99,7 +99,7 @@ pub contract PodRacing { fn join_game(game_id: Field) { let maybe_existing_game = self.storage.races.at(game_id).read(); - let player2 = self.context.maybe_msg_sender().unwrap(); + let player2 = self.msg_sender(); debug_log_format("Player {0} joining game {1}", [player2.to_field(), game_id]); // Add the caller as player2 (validates that player1 exists and player2 is empty) @@ -129,7 +129,7 @@ pub contract PodRacing { // Validate that total points don't exceed 9 (you can't max out all tracks) assert(track1 + track2 + track3 + track4 + track5 < 10); - let player = self.context.maybe_msg_sender().unwrap(); + let player = self.msg_sender(); debug_log_format( "Player {0} playing round {1} in game {2}", [player.to_field(), round as Field, game_id], @@ -151,11 +151,11 @@ pub contract PodRacing { // Enqueue a public function call to update the round counter // This reveals that a round was played, but not the point allocation - self.enqueue(PodRacing::at(self.context.this_address()).validate_and_play_round( + self.enqueue_self.validate_and_play_round( player, game_id, round, - )); + ); } // docs:end:play-round @@ -184,7 +184,7 @@ pub contract PodRacing { // This is the "reveal" phase where private choices become public #[external("private")] fn finish_game(game_id: Field) { - let player = self.context.maybe_msg_sender().unwrap(); + let player = self.msg_sender(); debug_log_format( "Player {0} finishing game {1}", [player.to_field(), game_id], @@ -217,7 +217,7 @@ pub contract PodRacing { // Enqueue public function to store the revealed totals on-chain // Now the revealing player's track totals will be publicly visible - self.enqueue(PodRacing::at(self.context.this_address()).validate_finish_game_and_reveal( + self.enqueue_self.validate_finish_game_and_reveal( player, game_id, total_track1, @@ -225,7 +225,7 @@ pub contract PodRacing { total_track3, total_track4, total_track5, - )); + ); } // docs:end:finish-game diff --git a/src/test/e2e/accounts.test.ts b/src/test/e2e/accounts.test.ts index 54ec921..7e841dd 100644 --- a/src/test/e2e/accounts.test.ts +++ b/src/test/e2e/accounts.test.ts @@ -13,7 +13,7 @@ import { type AztecNode, createAztecNodeClient } from "@aztec/aztec.js/node"; import { L1FeeJuicePortalManager, type L2AmountClaim } from "@aztec/aztec.js/ethereum"; import { AztecAddress } from "@aztec/aztec.js/addresses"; import { type Logger, createLogger } from "@aztec/foundation/log"; -import { type ContractInstanceWithAddress, getContractInstanceFromInstantiationParams } from "@aztec/aztec.js/contracts"; +import { type ContractInstanceWithAddress, getContractInstanceFromInstantiationParams } from "@aztec/stdlib/contract"; import { Fr } from "@aztec/aztec.js/fields"; import { GrumpkinScalar } from "@aztec/foundation/curves/grumpkin"; import { ContractDeployer } from "@aztec/aztec.js/deployment"; @@ -97,9 +97,10 @@ describe("Accounts", () => { // balance of each random account is 0 before bridge console.log('Checking initial balances...'); - let balances = await Promise.all(randomAddresses.map(async a => + let balanceResults = await Promise.all(randomAddresses.map(async a => await feeJuiceContract.methods.balance_of_public(a).simulate({ from: ownerAccount.address }) )); + let balances = balanceResults.map(b => typeof b === 'object' && b !== null && 'result' in b ? b.result : b); console.log(`Initial balances: ${balances.join(', ')}`); balances.forEach(b => expect(b).toBe(0n)); @@ -153,7 +154,7 @@ describe("Accounts", () => { }); // Transaction succeeded if we got here - status could be PROPOSED, CHECKPOINTED, PROVEN, or FINALIZED - expect([TxStatus.PROPOSED, TxStatus.CHECKPOINTED, TxStatus.PROVEN, TxStatus.FINALIZED]).toContain(receipt.status); + expect([TxStatus.PROPOSED, TxStatus.CHECKPOINTED, TxStatus.PROVEN, TxStatus.FINALIZED]).toContain(receipt.receipt.status); const deployedAccount = await randomAccountManagers[0].getAccount(); expect(deployedAccount.getAddress()).toEqual(randomAccountManagers[0].address); @@ -208,8 +209,8 @@ describe("Accounts", () => { const metadata = await wallet.getContractMetadata(deploymentData.address); expect(metadata.instance).toBeTruthy(); // Transaction succeeded if we got here - status could be PROPOSED, CHECKPOINTED, PROVEN, or FINALIZED - expect([TxStatus.PROPOSED, TxStatus.CHECKPOINTED, TxStatus.PROVEN, TxStatus.FINALIZED]).toContain(receipt.status); - expect(receipt.contract.address).toEqual(deploymentData.address); + expect([TxStatus.PROPOSED, TxStatus.CHECKPOINTED, TxStatus.PROVEN, TxStatus.FINALIZED]).toContain(receipt.receipt.status); + expect(receipt.receipt.contract.address).toEqual(deploymentData.address); }) }); diff --git a/src/test/e2e/index.test.ts b/src/test/e2e/index.test.ts index 706fec9..4ba8cfb 100644 --- a/src/test/e2e/index.test.ts +++ b/src/test/e2e/index.test.ts @@ -9,7 +9,7 @@ import { SponsoredFPCContractArtifact } from "@aztec/noir-contracts.js/Sponsored import { getTimeouts } from "../../../config/config.js"; import { AztecAddress } from "@aztec/aztec.js/addresses"; import { type Logger, createLogger } from "@aztec/foundation/log"; -import { type ContractInstanceWithAddress } from "@aztec/aztec.js/contracts"; +import { type ContractInstanceWithAddress } from "@aztec/stdlib/contract"; import { Fr } from "@aztec/aztec.js/fields"; import { GrumpkinScalar } from "@aztec/foundation/curves/grumpkin"; import { TxStatus } from "@aztec/stdlib/tx"; @@ -141,11 +141,12 @@ describe("Pod Racing Game", () => { // Deploy the contract once for all tests logger.info('Deploying Pod Racing contract...'); const adminAddress = player1Account.address; - contract = await PodRacingContract.deploy(wallet, adminAddress).send({ + const deployResult = await PodRacingContract.deploy(wallet, adminAddress).send({ from: adminAddress, fee: { paymentMethod: sponsoredPaymentMethod }, wait: { timeout: getTimeouts().deployTimeout } }); + contract = deployResult.contract; logger.info(`Contract deployed at: ${contract.address.toString()}`); }, 600000) @@ -167,7 +168,7 @@ describe("Pod Racing Game", () => { }); // Transaction succeeded if we got here - status could be PROPOSED, CHECKPOINTED, PROVEN, or FINALIZED - expect([TxStatus.PROPOSED, TxStatus.CHECKPOINTED, TxStatus.PROVEN, TxStatus.FINALIZED]).toContain(tx.status); + expect([TxStatus.PROPOSED, TxStatus.CHECKPOINTED, TxStatus.PROVEN, TxStatus.FINALIZED]).toContain(tx.receipt.status); logger.info('Game created successfully'); }, 600000) @@ -214,7 +215,7 @@ describe("Pod Racing Game", () => { ); // Transaction succeeded if we got here - status could be PROPOSED, CHECKPOINTED, PROVEN, or FINALIZED - expect([TxStatus.PROPOSED, TxStatus.CHECKPOINTED, TxStatus.PROVEN, TxStatus.FINALIZED]).toContain(playTx.status); + expect([TxStatus.PROPOSED, TxStatus.CHECKPOINTED, TxStatus.PROVEN, TxStatus.FINALIZED]).toContain(playTx.receipt.status); logger.info('Round played successfully'); }, 600000) @@ -384,7 +385,7 @@ describe("Pod Racing Game", () => { ); // Transaction succeeded if we got here - status could be PROPOSED, CHECKPOINTED, PROVEN, or FINALIZED - expect([TxStatus.PROPOSED, TxStatus.CHECKPOINTED, TxStatus.PROVEN, TxStatus.FINALIZED]).toContain(tx.status); + expect([TxStatus.PROPOSED, TxStatus.CHECKPOINTED, TxStatus.PROVEN, TxStatus.FINALIZED]).toContain(tx.receipt.status); logger.info('Max points allocation successful'); }, 600000) @@ -413,7 +414,7 @@ describe("Pod Racing Game", () => { ); // Transaction succeeded if we got here - status could be PROPOSED, CHECKPOINTED, PROVEN, or FINALIZED - expect([TxStatus.PROPOSED, TxStatus.CHECKPOINTED, TxStatus.PROVEN, TxStatus.FINALIZED]).toContain(tx.status); + expect([TxStatus.PROPOSED, TxStatus.CHECKPOINTED, TxStatus.PROVEN, TxStatus.FINALIZED]).toContain(tx.receipt.status); logger.info('Zero points allocation successful'); }, 600000) }); diff --git a/src/test/e2e/public_logging.test.ts b/src/test/e2e/public_logging.test.ts index 9b6022c..9778404 100644 --- a/src/test/e2e/public_logging.test.ts +++ b/src/test/e2e/public_logging.test.ts @@ -17,7 +17,7 @@ import { SponsoredFPCContractArtifact } from "@aztec/noir-contracts.js/Sponsored import { getTimeouts } from "../../../config/config.js"; import { AztecAddress } from "@aztec/aztec.js/addresses"; import { type Logger, createLogger } from "@aztec/foundation/log"; -import { type ContractInstanceWithAddress } from "@aztec/aztec.js/contracts"; +import { type ContractInstanceWithAddress } from "@aztec/stdlib/contract"; import { Fr } from "@aztec/aztec.js/fields"; import { GrumpkinScalar } from "@aztec/foundation/curves/grumpkin"; import { EmbeddedWallet } from '@aztec/wallets/embedded'; @@ -70,11 +70,12 @@ describe("Public Function Logging", () => { // Deploy the contract logger.info('Deploying Pod Racing contract...'); const adminAddress = player1Account.address; - contract = await PodRacingContract.deploy(wallet, adminAddress).send({ + const deployResult = await PodRacingContract.deploy(wallet, adminAddress).send({ from: adminAddress, fee: { paymentMethod: sponsoredPaymentMethod }, wait: { timeout: getTimeouts().deployTimeout } }); + contract = deployResult.contract; logger.info(`Contract deployed at: ${contract.address.toString()}`); }, 600000) diff --git a/src/utils/bridge_fee_juice.ts b/src/utils/bridge_fee_juice.ts new file mode 100644 index 0000000..1481c37 --- /dev/null +++ b/src/utils/bridge_fee_juice.ts @@ -0,0 +1,87 @@ +import { L1FeeJuicePortalManager } from '@aztec/aztec.js/ethereum'; +import type { AztecNode } from '@aztec/aztec.js/node'; +import { createEthereumChain } from '@aztec/ethereum/chain'; +import { createExtendedL1Client } from '@aztec/ethereum/client'; +import { Fr } from '@aztec/aztec.js/fields'; +import { ProtocolContractAddress } from '@aztec/aztec.js/protocol'; +import { getNonNullifiedL1ToL2MessageWitness } from '@aztec/stdlib/messaging'; +import { FeeAssetHandlerAbi } from '@aztec/l1-artifacts/FeeAssetHandlerAbi'; +import type { AztecAddress } from '@aztec/aztec.js/addresses'; +import type { Logger } from '@aztec/foundation/log'; +import { getContract } from 'viem'; +import configManager from '../../config/config.js'; + +const MAX_POLL_ATTEMPTS = 40; // 40 * 30s = 20 minutes max + +export async function bridgeL1FeeJuice( + node: AztecNode, + recipient: AztecAddress, + amount: bigint, + logger: Logger, +) { + const { l1RpcUrl, l1ChainId } = configManager.getNetworkConfig(); + const l1PrivateKey = process.env.L1_PRIVATE_KEY; + + if (!l1PrivateKey) { + throw new Error('L1_PRIVATE_KEY env var is required for testnet fee juice bridging. Must be a Sepolia-funded private key prefixed with 0x.'); + } + + const key = l1PrivateKey.startsWith('0x') ? l1PrivateKey : `0x${l1PrivateKey}`; + const chain = createEthereumChain([l1RpcUrl], l1ChainId); + + logger.info(`🌉 Bridging ${amount} fee juice from L1 to ${recipient}...`); + + const l1Client = createExtendedL1Client(chain.rpcUrls, key, chain.chainInfo); + const portal = await L1FeeJuicePortalManager.new(node, l1Client, logger); + const tokenManager = portal.getTokenManager(); + + // Check if we already have enough tokens on L1 + const balance = await tokenManager.getL1TokenBalance(l1Client.account.address); + if (balance < amount) { + // Mint tokens and wait for confirmation. + // Upstream L1TokenManager.mint() doesn't wait for the tx receipt, + // causing nonce conflicts with the subsequent approve transaction. + logger.info(`🪙 Minting fee juice tokens on L1...`); + const handler = getContract({ + address: tokenManager.handlerAddress!.toString() as `0x${string}`, + abi: FeeAssetHandlerAbi, + client: l1Client, + }); + const mintHash = await handler.write.mint([l1Client.account.address]); + logger.info(`⏳ Waiting for mint tx to confirm: ${mintHash}`); + await l1Client.waitForTransactionReceipt({ hash: mintHash }); + logger.info(`✅ Mint confirmed on L1`); + } else { + logger.info(`💰 L1 account already has ${balance} tokens, skipping mint`); + } + + // Create a fresh L1 client so viem picks up the current on-chain nonce. + // The mint (or prior runs) may have incremented it beyond what the + // original client has cached. + const freshClient = createExtendedL1Client(chain.rpcUrls, key, chain.chainInfo); + const freshPortal = await L1FeeJuicePortalManager.new(node, freshClient, logger); + const claim = await freshPortal.bridgeTokensPublic(recipient, amount, false); + + logger.info(`✅ Fee juice bridged! Claim amount: ${claim.claimAmount}, message hash: ${claim.messageHash}`); + logger.info(`⏳ Waiting for L1-to-L2 message to be available on L2...`); + + const pollInterval = 30_000; + for (let attempt = 0; attempt < MAX_POLL_ATTEMPTS; attempt++) { + const witness = await getNonNullifiedL1ToL2MessageWitness( + node, + ProtocolContractAddress.FeeJuice, + Fr.fromHexString(claim.messageHash), + claim.claimSecret, + ).catch(() => undefined); + + if (witness) { + logger.info(`✅ L1-to-L2 message is available on L2!`); + return claim; + } + + logger.info(`⏳ Message not yet available, checking again in ${pollInterval / 1000}s... (${attempt + 1}/${MAX_POLL_ATTEMPTS})`); + await new Promise(resolve => setTimeout(resolve, pollInterval)); + } + + throw new Error(`L1-to-L2 message not available after ${MAX_POLL_ATTEMPTS} attempts (${MAX_POLL_ATTEMPTS * 30}s)`); +} diff --git a/src/utils/deploy_account.ts b/src/utils/deploy_account.ts index e87b2d6..6b4ab91 100644 --- a/src/utils/deploy_account.ts +++ b/src/utils/deploy_account.ts @@ -1,6 +1,8 @@ -import { SponsoredFeePaymentMethod } from "@aztec/aztec.js/fee"; +import { SponsoredFeePaymentMethod, FeeJuicePaymentMethodWithClaim } from "@aztec/aztec.js/fee"; +import type { FeePaymentMethod } from "@aztec/aztec.js/fee"; import { getSponsoredFPCInstance } from "./sponsored_fpc.js"; import { SponsoredFPCContractArtifact } from "@aztec/noir-contracts.js/SponsoredFPC"; +import { ProtocolContractAddress } from "@aztec/aztec.js/protocol"; import { Fr } from "@aztec/aztec.js/fields"; import { GrumpkinScalar } from "@aztec/foundation/curves/grumpkin"; import { type Logger, createLogger } from "@aztec/foundation/log"; @@ -8,17 +10,22 @@ import { setupWallet } from "./setup_wallet.js"; import { AztecAddress } from "@aztec/aztec.js/addresses"; import { AccountManager } from "@aztec/aztec.js/wallet"; import { EmbeddedWallet } from "@aztec/wallets/embedded"; +import { createAztecNodeClient } from "@aztec/aztec.js/node"; +import { deriveStorageSlotInMap } from "@aztec/stdlib/hash"; +import configManager, { getAztecNodeUrl, getTimeouts } from "../../config/config.js"; +import { bridgeL1FeeJuice } from "./bridge_fee_juice.js"; + +const FEE_JUICE_AMOUNT = 1_000_000_000_000_000_000_000n; // 1000e18 — fixed mint amount enforced by the portal export async function deploySchnorrAccount(wallet?: EmbeddedWallet): Promise { - let logger: Logger; - logger = createLogger('aztec:aztec-starter'); + const logger: Logger = createLogger('aztec:aztec-starter'); logger.info('👤 Starting Schnorr account deployment...'); // Generate account keys logger.info('🔐 Generating account keys...'); - let secretKey = Fr.random(); - let signingKey = GrumpkinScalar.random(); - let salt = Fr.random(); + const secretKey = Fr.random(); + const signingKey = GrumpkinScalar.random(); + const salt = Fr.random(); logger.info(`Save the following SECRET and SALT in .env for future use.`); logger.info(`🔑 Secret key generated: ${secretKey.toString()}`); logger.info(`🖊️ Signing key generated: ${signingKey.toString()}`); @@ -29,16 +36,36 @@ export async function deploySchnorrAccount(wallet?: EmbeddedWallet): Promise 0n) { + logger.info(`💰 Account already has ${balance} fee juice on L2, skipping bridge`); + } else { + logger.info('💰 No fee juice found, bridging from Sepolia L1...'); + const claim = await bridgeL1FeeJuice(node, account.address, FEE_JUICE_AMOUNT, logger); + paymentMethod = new FeeJuicePaymentMethodWithClaim(account.address, claim); + logger.info('✅ Fee juice claim ready for account deployment'); + } + } else { + // Devnet/local: use sponsored FPC + logger.info('💰 Setting up sponsored fee payment for account deployment...'); + const sponsoredFPC = await getSponsoredFPCInstance(); + logger.info(`💰 Sponsored FPC instance obtained at: ${sponsoredFPC.address}`); - logger.info('📝 Registering sponsored FPC contract with PXE...'); - await activeWallet.registerContract(sponsoredFPC, SponsoredFPCContractArtifact); - const sponsoredPaymentMethod = new SponsoredFeePaymentMethod(sponsoredFPC.address); - logger.info('✅ Sponsored fee payment method configured for account deployment'); + logger.info('📝 Registering sponsored FPC contract with PXE...'); + await activeWallet.registerContract(sponsoredFPC, SponsoredFPCContractArtifact); + paymentMethod = new SponsoredFeePaymentMethod(sponsoredFPC.address); + logger.info('✅ Sponsored fee payment method configured for account deployment'); + } // Simulate before sending to surface revert reasons await deployMethod.simulate({ @@ -49,11 +76,11 @@ export async function deploySchnorrAccount(wallet?: EmbeddedWallet): Promise { const node = createAztecNodeClient(nodeUrl); const wallet = await EmbeddedWallet.create(node, { ephemeral: true, - pxeConfig: { proverEnabled: configManager.isDevnet() }, + pxeConfig: { proverEnabled: configManager.isRemoteNetwork() }, }); return wallet; } diff --git a/src/utils/sponsored_fpc.ts b/src/utils/sponsored_fpc.ts index 8dc5c65..ea3a3e7 100644 --- a/src/utils/sponsored_fpc.ts +++ b/src/utils/sponsored_fpc.ts @@ -2,7 +2,7 @@ import { Fr } from '@aztec/aztec.js/fields'; import { getContractInstanceFromInstantiationParams, type ContractInstanceWithAddress, -} from '@aztec/aztec.js/contracts'; +} from '@aztec/stdlib/contract'; import type { Wallet } from '@aztec/aztec.js/wallet'; import type { LogFn } from '@aztec/foundation/log'; import { SponsoredFPCContract, SponsoredFPCContractArtifact } from '@aztec/noir-contracts.js/SponsoredFPC'; @@ -32,5 +32,5 @@ export async function setupSponsoredFPC(deployer: Wallet, log: LogFn) { universalDeploy: true, }); - log(`SponsoredFPC: ${deployed.address}`); + log(`SponsoredFPC: ${deployed.contract.address}`); } diff --git a/yarn.lock b/yarn.lock index ab28657..897f4a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -583,59 +583,59 @@ resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.1.1.tgz#2e67f17040b930bde00a79ffb484eb9e77472b06" integrity sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA== -"@aztec/accounts@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/accounts/-/accounts-4.0.0-devnet.2-patch.1.tgz#18f6aad989fa49c724ef71d65933639a1ab74def" - integrity sha512-1zylLQOQjWK6/heWo2c2y+VKee+E5fFWptk/x8mxZFD5F8Z2jcw82TGN1keKp38V7qk0K8jROCYq/QCEZy3SKg== - dependencies: - "@aztec/aztec.js" "4.0.0-devnet.2-patch.1" - "@aztec/entrypoints" "4.0.0-devnet.2-patch.1" - "@aztec/ethereum" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" +"@aztec/accounts@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/accounts/-/accounts-4.1.0-rc.2.tgz#4aa41f2f9f80a906a8952f066a694ef8ab599653" + integrity sha512-pHFrpC6swWVpkPzaA31jlOkHRHLf/prrgK05GFnSZUWuLV/tzAEcpK8DRcbke/eVmJ0Ykm5+PXr6e1uaHkN3Ug== + dependencies: + "@aztec/aztec.js" "4.1.0-rc.2" + "@aztec/entrypoints" "4.1.0-rc.2" + "@aztec/ethereum" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" tslib "^2.4.0" -"@aztec/aztec.js@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/aztec.js/-/aztec.js-4.0.0-devnet.2-patch.1.tgz#b4d1d9d9e4e24e0ba578b3a0765c8e11def7116e" - integrity sha512-tyaKVxp/Ba2FqTtPrM0u0j8ravdqWIggKtCxO+yusyg3sV/dZGa44BFoqrPX3pXPVITrcQGgRfqhOA13hNcc/Q== - dependencies: - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/entrypoints" "4.0.0-devnet.2-patch.1" - "@aztec/ethereum" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/l1-artifacts" "4.0.0-devnet.2-patch.1" - "@aztec/protocol-contracts" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" - axios "^1.12.0" +"@aztec/aztec.js@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/aztec.js/-/aztec.js-4.1.0-rc.2.tgz#51577b3599b1abb6b908bc06bc983270944eea96" + integrity sha512-kbB44RZ4DyEpIYXVSEm0/17IgWlXt94+3UxQ9zJD/b8i6w144EgnTPx6xyE4hsD/nyZi3l6ePbU42H4Y3eVB0g== + dependencies: + "@aztec/constants" "4.1.0-rc.2" + "@aztec/entrypoints" "4.1.0-rc.2" + "@aztec/ethereum" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/l1-artifacts" "4.1.0-rc.2" + "@aztec/protocol-contracts" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" + axios "^1.13.5" tslib "^2.4.0" viem "npm:@aztec/viem@2.38.2" zod "^3.23.8" -"@aztec/bb-prover@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/bb-prover/-/bb-prover-4.0.0-devnet.2-patch.1.tgz#3b9bf7ebd0229fca6f2fe056fdf3c4cdae1c8d45" - integrity sha512-7jVwLQFWuIcbeev4jxAYvcm71RH7wm/mXc3tEt5X90QAvhvDOSqNOMQal7wr2Ars8h6OTvx45S4qFkITiJyLAA== - dependencies: - "@aztec/bb.js" "4.0.0-devnet.2-patch.1" - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/noir-noirc_abi" "4.0.0-devnet.2-patch.1" - "@aztec/noir-protocol-circuits-types" "4.0.0-devnet.2-patch.1" - "@aztec/noir-types" "4.0.0-devnet.2-patch.1" - "@aztec/simulator" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" - "@aztec/telemetry-client" "4.0.0-devnet.2-patch.1" - "@aztec/world-state" "4.0.0-devnet.2-patch.1" +"@aztec/bb-prover@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/bb-prover/-/bb-prover-4.1.0-rc.2.tgz#3aed04c28f801028039444a71c2ef4c6a3758730" + integrity sha512-0fV0uiTC+/KJ9QALg3KZxddVHBtBg8AJtfwexcARtSqwkYTG8pmnP2t6yfv9cyhMaDpwV9ErMXYe13hKjsG45g== + dependencies: + "@aztec/bb.js" "4.1.0-rc.2" + "@aztec/constants" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/noir-noirc_abi" "4.1.0-rc.2" + "@aztec/noir-protocol-circuits-types" "4.1.0-rc.2" + "@aztec/noir-types" "4.1.0-rc.2" + "@aztec/simulator" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" + "@aztec/telemetry-client" "4.1.0-rc.2" + "@aztec/world-state" "4.1.0-rc.2" commander "^12.1.0" pako "^2.1.0" source-map-support "^0.5.21" tslib "^2.4.0" -"@aztec/bb.js@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/bb.js/-/bb.js-4.0.0-devnet.2-patch.1.tgz#4caebd7590d2aaaba229a114c10e2b39f5259d55" - integrity sha512-SEOidi9kKFSE+DGA4w9h+PPJwXGXZ8VzG0xgrZgmx9cWFZMW7BW6k2kqkrmcd1n4YXrDYAztuLacw5oDvebuzg== +"@aztec/bb.js@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/bb.js/-/bb.js-4.1.0-rc.2.tgz#7c6f887b14e5288dd32d26d4d3d963f5c4d1f894" + integrity sha512-+QpmBhbIFv8p0t13qyw+jzu2qxgXOVoqi+vBxdK0I45a5Q3TlT6zhXQFgIxs6HsU2rUu75oF92fn3KthdSOTCA== dependencies: comlink "^4.4.1" commander "^12.1.0" @@ -644,54 +644,54 @@ pako "^2.1.0" tslib "^2.4.0" -"@aztec/blob-lib@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/blob-lib/-/blob-lib-4.0.0-devnet.2-patch.1.tgz#ebaaa39f99e2b03cc5051690d325971793dfbde6" - integrity sha512-UxjqZSUd/B+puRp1hOYcrymsvSgMt+qFijwm6ygQtsnntb5+IJ35TYFGWXPEgvQnE5T0/+nIEJqwc2NvOlohcA== +"@aztec/blob-lib@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/blob-lib/-/blob-lib-4.1.0-rc.2.tgz#8324555df652de6267b91e1b79cd345f7b4c1bb8" + integrity sha512-YuGSoZYq/tgRe+aEVIqoRHgWgdg264TDel3fu4nF8YspNwEeh4bgfpyVJjpc5oxaLI1E6kZDD2vUCXm/yAXXog== dependencies: - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" + "@aztec/constants" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" "@crate-crypto/node-eth-kzg" "^0.10.0" tslib "^2.4.0" -"@aztec/builder@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/builder/-/builder-4.0.0-devnet.2-patch.1.tgz#b7afe10628e92406c2b46147cfaa258df57d9b47" - integrity sha512-gzhHfqo4fRrYkB++0jJVGdXsKFBRQCmxQRJe+4fFRT7utarK12Kfgt99WYwhTUBR5fpxrz8xp8iLuF1qHJNAOQ== +"@aztec/builder@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/builder/-/builder-4.1.0-rc.2.tgz#c9a49c7e63dd9982e5b1ec3197d629be0aff3448" + integrity sha512-/4dh2gFGxFkXx18KJtld0p6HKJlYrSCPqfG45LbhnIJAueqNsWTY+LthoCeawf2OQt4wUL1mnR7QT1pVCnY+Xg== dependencies: - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" commander "^12.1.0" -"@aztec/constants@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/constants/-/constants-4.0.0-devnet.2-patch.1.tgz#42c12878146347b972b4fc40082cc0ca1b65f53b" - integrity sha512-rVM0ATvof5Ve4GHGbnvOvJ468CCeYVPrfLGvLs9dv567EHU7Z78y3P4vXm8JsW1pqXXcldqn2f9591R7dKMYHg== +"@aztec/constants@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/constants/-/constants-4.1.0-rc.2.tgz#97bd1160c67b23ba29124959d0b6d4f657467237" + integrity sha512-xM0Gfls5b/8ttmwLs1WanTvNncB5zzXWbix/2nGKcKCVLQTQqF+tAnZGc17//4yAGXaeNcZilF9Y0LtLEtuQGw== dependencies: - "@aztec/foundation" "4.0.0-devnet.2-patch.1" + "@aztec/foundation" "4.1.0-rc.2" tslib "^2.4.0" -"@aztec/entrypoints@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/entrypoints/-/entrypoints-4.0.0-devnet.2-patch.1.tgz#e826a124d471954dfd04e9b5e788a20c80fce1c2" - integrity sha512-BqmKOuvMmWjL1MQFLIQUiCN9LBfqyFvOqFzLhxqnhQsKmjRMjmOFra5OBQMjmi04P7a1nIg45UgV+q41CoC/ag== +"@aztec/entrypoints@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/entrypoints/-/entrypoints-4.1.0-rc.2.tgz#d3868ad619ddcb08af02ff5392276cf763219e63" + integrity sha512-2Je2Q7r6GHS+RIXeHmgYhRGAqs7n8f/e91MQrAdaPWkr7RqRptDU3trO8iw9AUom9wwQSbuVnubIG/jNMrgPKA== dependencies: - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/protocol-contracts" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" + "@aztec/constants" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/protocol-contracts" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" tslib "^2.4.0" zod "^3.23.8" -"@aztec/ethereum@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/ethereum/-/ethereum-4.0.0-devnet.2-patch.1.tgz#796a27822324ad6611c6b5932549d3689df65aef" - integrity sha512-MqdZBa3V/b8X80aVRa26V5yxo8gWWcSPfG7r4EaMQ2otA7t8MHRLJffN1TNwkYqJPCBuLiZpVGYM2gQw1qmx/A== +"@aztec/ethereum@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/ethereum/-/ethereum-4.1.0-rc.2.tgz#d4ddb23239538b8f305cbd6954daf0cf7412b8b6" + integrity sha512-IsHOn0DAbBu3yskLr77aG6e6AUawR53MIvzx0AG3XJ80JvvpbhDmYLVhEXvF/lohZfaOfxszEIJkQz92p+K+YQ== dependencies: - "@aztec/blob-lib" "4.0.0-devnet.2-patch.1" - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/l1-artifacts" "4.0.0-devnet.2-patch.1" + "@aztec/blob-lib" "4.1.0-rc.2" + "@aztec/constants" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/l1-artifacts" "4.1.0-rc.2" "@viem/anvil" "^0.0.10" dotenv "^16.0.3" lodash.chunk "^4.2.0" @@ -700,12 +700,12 @@ viem "npm:@aztec/viem@2.38.2" zod "^3.23.8" -"@aztec/foundation@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/foundation/-/foundation-4.0.0-devnet.2-patch.1.tgz#670df4ddb5289d5f684e25261adc7b8aa86e2eae" - integrity sha512-s61AqiRhueNVqvCh+11QY/pWExmBtMYq1aD0nXt7ocpkbVEjbuP/1AzmIej5UDcUnC2l+2Z89dDiz4uXDd8pyQ== +"@aztec/foundation@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/foundation/-/foundation-4.1.0-rc.2.tgz#0cd17bd5c9b3083a6a7e5f60ceb3c0d158b81db0" + integrity sha512-tuO/Wa+Tk1AAbwYN87TTVZURvdNpwtKe+AfMCWV2b4aD6+DKHUf/wZyODPpCjxrYb3LeHACIHrf9KLgVPweJmQ== dependencies: - "@aztec/bb.js" "4.0.0-devnet.2-patch.1" + "@aztec/bb.js" "4.1.0-rc.2" "@koa/cors" "^5.0.0" "@noble/curves" "=1.7.0" "@noble/hashes" "^1.6.1" @@ -728,140 +728,140 @@ undici "^5.28.5" zod "^3.23.8" -"@aztec/key-store@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/key-store/-/key-store-4.0.0-devnet.2-patch.1.tgz#4f1f942641aac7234b98f6d32077bf453bfc09ea" - integrity sha512-UNMWNrfOCrRa9zKeHDOVN0YXUGhgMU477foTPcZ5YvAtYTJlQ8znbJ6xiaMWEJEroDIl5aorGlLIdxY3sseKRw== +"@aztec/key-store@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/key-store/-/key-store-4.1.0-rc.2.tgz#cc43bbace7a89823611a240abe2aae4869c39590" + integrity sha512-+yQpMFbfC/1g3GqnWDztAuwbJNtFcbGngDvew08LJd5qarkCovWN9jvPFT0ay9Zn/aslNuwJlX3SJh4ZqmXG1w== dependencies: - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/kv-store" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" + "@aztec/constants" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/kv-store" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" tslib "^2.4.0" -"@aztec/kv-store@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/kv-store/-/kv-store-4.0.0-devnet.2-patch.1.tgz#16afe1fcd60d835f77e8583e9d998bd992f6956c" - integrity sha512-z4IyhmseSFnP2shRtf6wmQxxMBwr7atdUnpYGP+y2L6LWtTvQ4wnHNY7wx/nSFcJ79bkyJF+j5DxJPCgcxDk7g== +"@aztec/kv-store@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/kv-store/-/kv-store-4.1.0-rc.2.tgz#910e539a31915d3252d36ec5cbd15fae7310aec5" + integrity sha512-As+Lvh3meyWzPXO+hEw144MXHs7vxpAFXOD1034XLgyS0tYGIPyl58bFWcC592Mvy9+T1K4YQLbuv57pUOOfzQ== dependencies: - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/ethereum" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/native" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" + "@aztec/constants" "4.1.0-rc.2" + "@aztec/ethereum" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/native" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" idb "^8.0.0" lmdb "^3.2.0" msgpackr "^1.11.2" ohash "^2.0.11" ordered-binary "^1.5.3" -"@aztec/l1-artifacts@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/l1-artifacts/-/l1-artifacts-4.0.0-devnet.2-patch.1.tgz#d5d5e5c79b38d21047bb7100072dc37d4cba2ffe" - integrity sha512-Tj7BtWas0Z2zP390hLrZGBgvvmWJ33YIxwb+m8M/qdeAQNhszn3KFX0dPRH6kNiuBl/iikxLhjL+C5R1eLkgnA== +"@aztec/l1-artifacts@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/l1-artifacts/-/l1-artifacts-4.1.0-rc.2.tgz#fcb3cf85cc63a868f4f488feec6b6952a4b6163c" + integrity sha512-5q0bjKTMUNj1jhloJY5BpJx9qhBCKIZilCfGcpu5RD+hPhgDGByUfuKBaRWv0XaLO07Toaz4+Mf6znBc9fgeuw== dependencies: tslib "^2.4.0" -"@aztec/merkle-tree@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/merkle-tree/-/merkle-tree-4.0.0-devnet.2-patch.1.tgz#a4a1105408abb3b86defb3f3bb85e23fd497c949" - integrity sha512-vmKwpOeKSE72Uj8XgOqdjys9jyEEfcJWIoVG2c/b/1hVBsp3+nARWIB73ksqjzfSbxSq3INZMYYjEWTiFfDbDA== +"@aztec/merkle-tree@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/merkle-tree/-/merkle-tree-4.1.0-rc.2.tgz#2ed8d643abde341b893798341dfd4d2014188fd7" + integrity sha512-YHw6sny8fbK5LmcJIabchJOkkHRsysTsby0zo39LjEbEpWqHDVnjNqsIA30rMjR1PVMUvix/ZtH2TaIQxrlmbg== dependencies: - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/kv-store" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/kv-store" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" sha256 "^0.2.0" tslib "^2.4.0" -"@aztec/native@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/native/-/native-4.0.0-devnet.2-patch.1.tgz#055c6530bf5121dc74a40d7cff3376f230f5e0b1" - integrity sha512-ljlDodg+QDpJjdobfu//6sb8J2crGNUmZfEDBQtq1FU/3WZGDEVw+Dpie3IM+U92Ca6nhe1/xCEy1GTacpuFpg== +"@aztec/native@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/native/-/native-4.1.0-rc.2.tgz#ad31f3a22609e9496adf4b2beca554507abc6e8a" + integrity sha512-7oV9/GyQ4nUu0gTEYxi9h5DzCV21ZtukSEUJeNdeMdXk6z4CA7qlmJvrlmtR8ayF98Ka23CxKaoa3oqn3bitNQ== dependencies: - "@aztec/bb.js" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" + "@aztec/bb.js" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" msgpackr "^1.11.2" -"@aztec/noir-acvm_js@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/noir-acvm_js/-/noir-acvm_js-4.0.0-devnet.2-patch.1.tgz#3ac027dbdc465e1d5180bcb9d0004f0c58187e18" - integrity sha512-wXi4cqLN/5jENfJtHTg5MZSBoU1/OPbAXozWmpi6yP26rBmVQY7c4Fq0D7HwxoGgBoYfflweszM9ZEhKS8Srlg== +"@aztec/noir-acvm_js@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/noir-acvm_js/-/noir-acvm_js-4.1.0-rc.2.tgz#cea85f39cf678039e31c8126a4cc787f3fff9a96" + integrity sha512-y7ti2d/mlNVw2vv7dnaWJKDv3MaY8FETiHzxvUtS9MoQm5yuqILRYm90nZauYQG0VPuWutFaPGOCZapV/TC5OQ== -"@aztec/noir-contracts.js@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/noir-contracts.js/-/noir-contracts.js-4.0.0-devnet.2-patch.1.tgz#acbd0b4997115506da395c0a4200415678dea73e" - integrity sha512-BMyF++ifcnwd6ydcYJ9EmCvA1MEr0XkoAJhVImqUkYGQmGo9qXFlspQ908pz4nsfJ6Id4bz3DlReJFiuufvQAQ== +"@aztec/noir-contracts.js@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/noir-contracts.js/-/noir-contracts.js-4.1.0-rc.2.tgz#d7bb79fd9a0482fcdee9c9ea2102103dfd5e5839" + integrity sha512-LmOwoOQGSPJZVWzf5HMjimDD0iV5QAwUW6ItDJlMWkI6ScLBSBkRp9qFmzvRL+9QEvIiAvgOKWVj0UJexJzrnA== dependencies: - "@aztec/aztec.js" "4.0.0-devnet.2-patch.1" + "@aztec/aztec.js" "4.1.0-rc.2" tslib "^2.4.0" -"@aztec/noir-noir_codegen@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/noir-noir_codegen/-/noir-noir_codegen-4.0.0-devnet.2-patch.1.tgz#1e1419a7e58de6b3e0b12666de5325439dc7f4d7" - integrity sha512-E0mHd74YwJ6ZrBk64zjdN37DywavGMoRQZicDdc1CRIu/rKU94de+KJbH7xH+fIDQ1H23uEV555uajNo36zhDA== +"@aztec/noir-noir_codegen@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/noir-noir_codegen/-/noir-noir_codegen-4.1.0-rc.2.tgz#dd91fb2c96a1056775ba8649fd82548610b4be72" + integrity sha512-N/+JvEHzn4q86kkvmh5hINpLRwnwRTo2FROnxkmiKFBMq7wCfQ4ftoILTuQvL7V/2/OMEhmrNrf9yfOp/qZvcg== dependencies: - "@aztec/noir-types" "4.0.0-devnet.2-patch.1" + "@aztec/noir-types" "4.1.0-rc.2" glob "^13.0.0" ts-command-line-args "^2.5.1" -"@aztec/noir-noirc_abi@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/noir-noirc_abi/-/noir-noirc_abi-4.0.0-devnet.2-patch.1.tgz#26fe7a639d0fe2d7c03828fc0e07db7bf7f9f338" - integrity sha512-9cxLL0BZi0Jw7VT8OK9qYbH7Z7tdz0TIfDHDfiFsXSmtABflAN7XMZ1DwJnwIqPDoTVTBTev99Y9Wh01zyBbWg== - dependencies: - "@aztec/noir-types" "4.0.0-devnet.2-patch.1" - -"@aztec/noir-protocol-circuits-types@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/noir-protocol-circuits-types/-/noir-protocol-circuits-types-4.0.0-devnet.2-patch.1.tgz#e77c3569d82503b4a57ae7d1a79ec2ddabc81ccd" - integrity sha512-rzMyITJvLprXu+TXGSUeisrbl5A1cVZGui5KlaPo+FrqL+GKbBypvqicMgGnirHQ5uDbYH2j/W9IYnlYvwDhoA== - dependencies: - "@aztec/blob-lib" "4.0.0-devnet.2-patch.1" - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/noir-acvm_js" "4.0.0-devnet.2-patch.1" - "@aztec/noir-noir_codegen" "4.0.0-devnet.2-patch.1" - "@aztec/noir-noirc_abi" "4.0.0-devnet.2-patch.1" - "@aztec/noir-types" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" +"@aztec/noir-noirc_abi@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/noir-noirc_abi/-/noir-noirc_abi-4.1.0-rc.2.tgz#181d473e0f42848ffea6c3b7442b5e3f13a69dd0" + integrity sha512-Eit6kssa29yj56yQ2Q5BTRjSr0v/+7/FK6iR/hDWVDK5DEgetIm2j9Sk0d136NdZNQykKGDrUpeUIdAxcSoE8g== + dependencies: + "@aztec/noir-types" "4.1.0-rc.2" + +"@aztec/noir-protocol-circuits-types@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/noir-protocol-circuits-types/-/noir-protocol-circuits-types-4.1.0-rc.2.tgz#4997ef8161fd1de941ac42e63d42717c49f3c6cb" + integrity sha512-tox8pGnDr9PlFtdtirvupjQKPscSPCqeqR4/LLmn7WSL+r8+ytq6Cl7oM65HFNhBLR+9Ssv7akKcKYvBvNzq6w== + dependencies: + "@aztec/blob-lib" "4.1.0-rc.2" + "@aztec/constants" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/noir-acvm_js" "4.1.0-rc.2" + "@aztec/noir-noir_codegen" "4.1.0-rc.2" + "@aztec/noir-noirc_abi" "4.1.0-rc.2" + "@aztec/noir-types" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" change-case "^5.4.4" tslib "^2.4.0" -"@aztec/noir-types@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/noir-types/-/noir-types-4.0.0-devnet.2-patch.1.tgz#080ee9514c85bd0b8698b3a5321646449b46ad22" - integrity sha512-W6bY7YyYXNYYOt/xbIfiZEh8k+pDraxmK1UiU67JO+UYMz4cEru7utJ0vhJ7zbBhvZxRNP9Y59TjfKy5vBYyag== +"@aztec/noir-types@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/noir-types/-/noir-types-4.1.0-rc.2.tgz#c5eda33a61565a5e51585d25d904278a63e3aa91" + integrity sha512-Q5ue5v6v2Bp65fyqih4tLe2SPUrJJOLUnGliFJ/eIG98l8zHpQbZpZk8GOU3K7e8I3X1gxKkR4UL/2Wcv0HwFg== -"@aztec/protocol-contracts@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/protocol-contracts/-/protocol-contracts-4.0.0-devnet.2-patch.1.tgz#f15bf67904e005b3658896923a6b8a254afa1b29" - integrity sha512-7gcHZvqD2RgdtSp28KWS3Xsr7PbiYNj1GP3tcHtmCzCCFJnTCiruNdDWpW1Z4zojlcAWlddUG95enrjTliI8ZA== +"@aztec/protocol-contracts@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/protocol-contracts/-/protocol-contracts-4.1.0-rc.2.tgz#4d9515c0d112c04c8a3737943909c4fca8588598" + integrity sha512-yBoe5UPxV/GZbTapsbvyaqDf6vpJDoiaMOYEFlzxiTZpmCkAkTTMv4dsXiUrjG6PL3qzzeJwlOwu6z2rJsd0lQ== dependencies: - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" + "@aztec/constants" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" lodash.chunk "^4.2.0" lodash.omit "^4.5.0" tslib "^2.4.0" -"@aztec/pxe@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/pxe/-/pxe-4.0.0-devnet.2-patch.1.tgz#fb554f1d2ef29aa49a2767c30ffb7a2b0ef2294f" - integrity sha512-AJcBsKQhYxitn8QM5HN1Rwoz7D5dCuYh2U5T6VIFRyGC4c0hp+lFoY20/5D2rG04O2JdUx1cDJDhg2R7ZVw+vQ== - dependencies: - "@aztec/bb-prover" "4.0.0-devnet.2-patch.1" - "@aztec/bb.js" "4.0.0-devnet.2-patch.1" - "@aztec/builder" "4.0.0-devnet.2-patch.1" - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/ethereum" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/key-store" "4.0.0-devnet.2-patch.1" - "@aztec/kv-store" "4.0.0-devnet.2-patch.1" - "@aztec/noir-protocol-circuits-types" "4.0.0-devnet.2-patch.1" - "@aztec/noir-types" "4.0.0-devnet.2-patch.1" - "@aztec/protocol-contracts" "4.0.0-devnet.2-patch.1" - "@aztec/simulator" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" +"@aztec/pxe@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/pxe/-/pxe-4.1.0-rc.2.tgz#79572ac78f44cdb81b84e6883f50534415a3070d" + integrity sha512-m5fxWgEpcGq1OLGXM76WbbpxEl4yMg2WbrS7PFrbBEOKe1zjvcs9IgtJYuwPWqDPXz9kTpgo4jIhi4tvQzJOXA== + dependencies: + "@aztec/bb-prover" "4.1.0-rc.2" + "@aztec/bb.js" "4.1.0-rc.2" + "@aztec/builder" "4.1.0-rc.2" + "@aztec/constants" "4.1.0-rc.2" + "@aztec/ethereum" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/key-store" "4.1.0-rc.2" + "@aztec/kv-store" "4.1.0-rc.2" + "@aztec/noir-protocol-circuits-types" "4.1.0-rc.2" + "@aztec/noir-types" "4.1.0-rc.2" + "@aztec/protocol-contracts" "4.1.0-rc.2" + "@aztec/simulator" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" koa "^2.16.1" koa-router "^13.1.1" lodash.omit "^4.5.0" @@ -869,42 +869,42 @@ tslib "^2.4.0" viem "npm:@aztec/viem@2.38.2" -"@aztec/simulator@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/simulator/-/simulator-4.0.0-devnet.2-patch.1.tgz#2cc70cf9af6f07b20379fc3b9f203ef10f69c9b0" - integrity sha512-etecxwltlKQ9vdSPtC1iByNcWrWfSLFQZeXviFpBV8Uj67v0H3nJ+86wgG9ivJ0yreWo+pgTKeX7GRyz+W/J6g== - dependencies: - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/native" "4.0.0-devnet.2-patch.1" - "@aztec/noir-acvm_js" "4.0.0-devnet.2-patch.1" - "@aztec/noir-noirc_abi" "4.0.0-devnet.2-patch.1" - "@aztec/noir-protocol-circuits-types" "4.0.0-devnet.2-patch.1" - "@aztec/noir-types" "4.0.0-devnet.2-patch.1" - "@aztec/protocol-contracts" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" - "@aztec/telemetry-client" "4.0.0-devnet.2-patch.1" - "@aztec/world-state" "4.0.0-devnet.2-patch.1" +"@aztec/simulator@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/simulator/-/simulator-4.1.0-rc.2.tgz#d61ac5431cc03a5b5db22df069d2ca99e844ccae" + integrity sha512-49rc01gO0RwXqhTjy1HenRBeoC2L91xhq+hdZgWluSR54V/ptKfGUlBvPDwgh8h6xmbNAoHugr1rzSyTrgrpEA== + dependencies: + "@aztec/constants" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/native" "4.1.0-rc.2" + "@aztec/noir-acvm_js" "4.1.0-rc.2" + "@aztec/noir-noirc_abi" "4.1.0-rc.2" + "@aztec/noir-protocol-circuits-types" "4.1.0-rc.2" + "@aztec/noir-types" "4.1.0-rc.2" + "@aztec/protocol-contracts" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" + "@aztec/telemetry-client" "4.1.0-rc.2" + "@aztec/world-state" "4.1.0-rc.2" lodash.clonedeep "^4.5.0" lodash.merge "^4.6.2" tslib "^2.4.0" -"@aztec/stdlib@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/stdlib/-/stdlib-4.0.0-devnet.2-patch.1.tgz#429e9bf8ed4f2e9baf8d6e23dca41eb85b879176" - integrity sha512-pgNAoejMOw7Xv+q+TkQScZ70D4eQxh5qUMyrwy1gYR3NXuHZahqKwg87eWP1JvqIitWD2n0jW2w49hU3rHmErg== +"@aztec/stdlib@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/stdlib/-/stdlib-4.1.0-rc.2.tgz#4aebe8ada9d3bc25ed0ad9ce18209a80d2536abe" + integrity sha512-zxDC94XhsIBko4LXPQSN/wO9lEhoAEZe8+5Y4lHRJ1SuuBOqaAO0yvQ73GDQgFxKUEJ/UYQQ2fczhYfSzKhf7Q== dependencies: "@aws-sdk/client-s3" "^3.892.0" - "@aztec/bb.js" "4.0.0-devnet.2-patch.1" - "@aztec/blob-lib" "4.0.0-devnet.2-patch.1" - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/ethereum" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/l1-artifacts" "4.0.0-devnet.2-patch.1" - "@aztec/noir-noirc_abi" "4.0.0-devnet.2-patch.1" - "@aztec/validator-ha-signer" "4.0.0-devnet.2-patch.1" + "@aztec/bb.js" "4.1.0-rc.2" + "@aztec/blob-lib" "4.1.0-rc.2" + "@aztec/constants" "4.1.0-rc.2" + "@aztec/ethereum" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/l1-artifacts" "4.1.0-rc.2" + "@aztec/noir-noirc_abi" "4.1.0-rc.2" + "@aztec/validator-ha-signer" "4.1.0-rc.2" "@google-cloud/storage" "^7.15.0" - axios "^1.12.0" + axios "^1.13.5" json-stringify-deterministic "1.0.12" lodash.chunk "^4.2.0" lodash.isequal "^4.5.0" @@ -916,13 +916,13 @@ viem "npm:@aztec/viem@2.38.2" zod "^3.23.8" -"@aztec/telemetry-client@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/telemetry-client/-/telemetry-client-4.0.0-devnet.2-patch.1.tgz#e5c601c5eeb766ce5d87d495b9b080c0c9290d65" - integrity sha512-hrLHKcUYP9p4/5OzQxYhD9fUrywalOn/WwxladNICc4AoAkirbvS8cC6I03JfuQXVe5fR6GhEpr3J2nI7/dVtA== +"@aztec/telemetry-client@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/telemetry-client/-/telemetry-client-4.1.0-rc.2.tgz#1c43e7cd1377ba05c3a261f2b4202f94a6fbca66" + integrity sha512-8yWXsXV+15aymTIeH0+90O+FTxoF68t+VNuYkSK8yHDXSty7WYB9FW1P50Kos6akd5RCJ+AoFZlxQDaMzvMsag== dependencies: - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" "@opentelemetry/api" "^1.9.0" "@opentelemetry/api-logs" "^0.55.0" "@opentelemetry/core" "^1.28.0" @@ -940,58 +940,58 @@ prom-client "^15.1.3" viem "npm:@aztec/viem@2.38.2" -"@aztec/validator-ha-signer@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/validator-ha-signer/-/validator-ha-signer-4.0.0-devnet.2-patch.1.tgz#c81ea2d08d5d60870e36cd20fe3b5a9cfafe3074" - integrity sha512-vp9dMqK5RzDzpKwnXSb99XNosOExDBUsjCAFDPoRz5RJZlEvgHOptPKB45YiQlHkWxZGLXKQil26DP+LcxALeA== +"@aztec/validator-ha-signer@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/validator-ha-signer/-/validator-ha-signer-4.1.0-rc.2.tgz#529e0e9a987decd7dd43269454be5462a0250391" + integrity sha512-iOzHvH5rq48n/ydYvl/6tTLUo/R0gAHsOdb4+wQnJX+nTLRIHaaFmIUpV0K557AIT74+mJvgAhTY5NhVoMDzCQ== dependencies: - "@aztec/ethereum" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" + "@aztec/ethereum" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" node-pg-migrate "^8.0.4" pg "^8.11.3" tslib "^2.4.0" zod "^3.23.8" -"@aztec/wallet-sdk@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/wallet-sdk/-/wallet-sdk-4.0.0-devnet.2-patch.1.tgz#9d8dcb3828c8de8378a54b22c17bfbc36f9e8b41" - integrity sha512-Hmp/Dz/Pt0c8+h231LRTwUAt7MiKa94q3KTsTQir9xIz+ZyJKTnvrWBIzgCbLAUZQy/XpOSWrHsLk99FOX2EKg== - dependencies: - "@aztec/aztec.js" "4.0.0-devnet.2-patch.1" - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/entrypoints" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/pxe" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" - -"@aztec/wallets@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/wallets/-/wallets-4.0.0-devnet.2-patch.1.tgz#af858fd4673279fe84758e41fa9198caf04c397b" - integrity sha512-g34ULDFovIVmXv2VpkydAFkmp8mmDkHd94/+8BFwKzieg7omlIwQqSvGaClki7nxWBeLJ6r71OD8PK8PV54qpQ== - dependencies: - "@aztec/accounts" "4.0.0-devnet.2-patch.1" - "@aztec/aztec.js" "4.0.0-devnet.2-patch.1" - "@aztec/entrypoints" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/kv-store" "4.0.0-devnet.2-patch.1" - "@aztec/protocol-contracts" "4.0.0-devnet.2-patch.1" - "@aztec/pxe" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" - "@aztec/wallet-sdk" "4.0.0-devnet.2-patch.1" - -"@aztec/world-state@4.0.0-devnet.2-patch.1": - version "4.0.0-devnet.2-patch.1" - resolved "https://registry.yarnpkg.com/@aztec/world-state/-/world-state-4.0.0-devnet.2-patch.1.tgz#9c3c7c02e58f6e1b156e930a1292e7d49826e4ff" - integrity sha512-3NqI9Y8rhWp4pWD5qTO3QGoXTIajuTwoz3Up2/Sif7q/blBfnqfU5fiImiZgXER7waxDtJkBzeji02KhJip0uA== - dependencies: - "@aztec/constants" "4.0.0-devnet.2-patch.1" - "@aztec/foundation" "4.0.0-devnet.2-patch.1" - "@aztec/kv-store" "4.0.0-devnet.2-patch.1" - "@aztec/merkle-tree" "4.0.0-devnet.2-patch.1" - "@aztec/native" "4.0.0-devnet.2-patch.1" - "@aztec/protocol-contracts" "4.0.0-devnet.2-patch.1" - "@aztec/stdlib" "4.0.0-devnet.2-patch.1" - "@aztec/telemetry-client" "4.0.0-devnet.2-patch.1" +"@aztec/wallet-sdk@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/wallet-sdk/-/wallet-sdk-4.1.0-rc.2.tgz#d7b19f2f627bce6576995d1461ba3bfe4a67c6dd" + integrity sha512-OKyFvEcI5+gU4do1b3sBEyC7yb0u3ldJ5vaUdgsZWS7YUFV04zyN7x1cpLFaW+ftx9q9loUtNYyl5kO1eGD4Lw== + dependencies: + "@aztec/aztec.js" "4.1.0-rc.2" + "@aztec/constants" "4.1.0-rc.2" + "@aztec/entrypoints" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/pxe" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" + +"@aztec/wallets@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/wallets/-/wallets-4.1.0-rc.2.tgz#90d891916bedea604e2b5cb1e6e172741e4bda5b" + integrity sha512-+vVEGXjEmgnGgUyYk7rlN4dGP076w1xMyJOPJRiJeC7k+VYQ73mgwYYbXDbYxNP5CeWPqJPwwyk95Nc/ka0LbA== + dependencies: + "@aztec/accounts" "4.1.0-rc.2" + "@aztec/aztec.js" "4.1.0-rc.2" + "@aztec/entrypoints" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/kv-store" "4.1.0-rc.2" + "@aztec/protocol-contracts" "4.1.0-rc.2" + "@aztec/pxe" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" + "@aztec/wallet-sdk" "4.1.0-rc.2" + +"@aztec/world-state@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@aztec/world-state/-/world-state-4.1.0-rc.2.tgz#b09beb50d5b8dee1ba0d902aff4f0f29e0bd069e" + integrity sha512-rmQl5lImH+CLVeX8P2GXy4tGCfy1nE12urscZVQTVK+DG8NwUm35w+ORP43dv+qPSrwXsnPWfax1L1RE8u4TQw== + dependencies: + "@aztec/constants" "4.1.0-rc.2" + "@aztec/foundation" "4.1.0-rc.2" + "@aztec/kv-store" "4.1.0-rc.2" + "@aztec/merkle-tree" "4.1.0-rc.2" + "@aztec/native" "4.1.0-rc.2" + "@aztec/protocol-contracts" "4.1.0-rc.2" + "@aztec/stdlib" "4.1.0-rc.2" + "@aztec/telemetry-client" "4.1.0-rc.2" tslib "^2.4.0" zod "^3.23.8" @@ -3050,13 +3050,13 @@ atomic-sleep@^1.0.0: resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== -axios@^1.12.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.1.tgz#45b62dc8fe04e0e92274e08b98e910ba3d7963a7" - integrity sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw== +axios@^1.13.5: + version "1.13.6" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.6.tgz#c3f92da917dc209a15dd29936d20d5089b6b6c98" + integrity sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ== dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.4" + follow-redirects "^1.15.11" + form-data "^4.0.5" proxy-from-env "^1.1.0" babel-jest@^29.7.0: @@ -3989,10 +3989,10 @@ follow-redirects@^1.0.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== -follow-redirects@^1.15.6: - version "1.15.8" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.8.tgz#ae67b97ae32e0a7b36066a5448938374ec18d13d" - integrity sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig== +follow-redirects@^1.15.11: + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== foreground-child@^3.1.0, foreground-child@^3.3.1: version "3.3.1" @@ -4013,10 +4013,10 @@ form-data@^2.5.0: mime-types "^2.1.35" safe-buffer "^5.2.1" -form-data@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" - integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== +form-data@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8"