diff --git a/.github/workflows/recursive-verification-tests.yml b/.github/workflows/recursive-verification-tests.yml new file mode 100644 index 0000000..577c966 --- /dev/null +++ b/.github/workflows/recursive-verification-tests.yml @@ -0,0 +1,115 @@ +name: Recursive Verification Tests + +on: + push: + branches: + - main + pull_request: + branches: + - main + paths: + - "recursive_verification/**" + - ".github/workflows/recursive-verification-tests.yml" + workflow_dispatch: + +jobs: + recursive-verification-tests: + name: Recursive Verification Tests + runs-on: ubuntu-latest + env: + AZTEC_ENV: sandbox + AZTEC_VERSION: 3.0.0-devnet.4 + + steps: + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: 1.1.36 + + - name: Set up Docker + uses: docker/setup-buildx-action@v3 + + - name: Install Aztec CLI + run: | + curl -s https://install.aztec.network > tmp.sh + NON_INTERACTIVE=1 bash tmp.sh + rm tmp.sh + + - name: Update path + run: echo "$HOME/.aztec/bin" >> $GITHUB_PATH + + - name: Set Aztec version and start sandbox + run: | + aztec-up ${{ env.AZTEC_VERSION }} + aztec start --sandbox & + + - name: Wait for sandbox to be ready + run: | + echo "Waiting for sandbox to start..." + MAX_RETRIES=60 + for i in $(seq 1 $MAX_RETRIES); do + if curl -s http://localhost:8080/status >/dev/null 2>&1; then + echo "✅ Sandbox is ready!" + break + fi + if [ $i -eq $MAX_RETRIES ]; then + echo "❌ Sandbox failed to start after $MAX_RETRIES attempts" + exit 1 + fi + echo "Waiting... ($i/$MAX_RETRIES)" + sleep 2 + done + + - name: Install project dependencies + working-directory: recursive_verification + run: bun install + + - name: Compile Noir circuit + working-directory: recursive_verification/circuit + run: aztec-nargo compile + + - name: Compile contract and generate artifacts + working-directory: recursive_verification + run: bun ccc + + - name: Generate proof data + working-directory: recursive_verification + env: + BB_SINGLE_THREADED: "1" + HARDWARE_CONCURRENCY: "1" + NODE_OPTIONS: "--max-old-space-size=6144" + run: | + echo "Generating proof data with memory optimizations..." + bun data + timeout-minutes: 30 + + - name: Run recursive verification script + working-directory: recursive_verification + run: bun recursion + timeout-minutes: 15 + + - name: Upload test results if failed + if: failure() + uses: actions/upload-artifact@v4 + with: + name: test-logs + path: | + recursive_verification/tests/**/*.log + recursive_verification/data.json + retention-days: 7 + + - name: Cleanup + if: always() + run: | + echo "Stopping Aztec sandbox..." + pkill -f "aztec" || true + docker stop $(docker ps -q) || true + docker rm $(docker ps -a -q) || true diff --git a/.github/workflows/test-examples.yml b/.github/workflows/test-examples.yml deleted file mode 100644 index 41cc61e..0000000 --- a/.github/workflows/test-examples.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Test examples - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build-and-test: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Install dependencies - run: | - # Install aztec - NON_INTERACTIVE=1 bash -i <(curl -s https://install.aztec.network) - echo "$HOME/.aztec/bin" >> $GITHUB_PATH - - - name: Build+Test Hello - run: | - cd hello - make - aztec test diff --git a/.gitignore b/.gitignore index 6ec4261..e47eed6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ target -.DS_Store \ No newline at end of file +.DS_Store +ivc \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..682c8ed --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,316 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Repository Overview + +This is a collection of Aztec smart contract examples written in Noir, designed for learning Aztec development hands-on. The repository contains multiple example projects showcasing different aspects of Aztec's zero-knowledge smart contract platform. + +## Key Technologies + +- **Aztec**: A privacy-first Layer 2 on Ethereum using zero-knowledge proofs +- **Noir**: A domain-specific language for writing zero-knowledge circuits +- **aztec-nargo**: Aztec's fork of the Noir compiler for compiling Aztec contracts +- **aztec-wallet**: CLI tool for interacting with Aztec contracts +- **Bun**: Fast JavaScript runtime (used in recursive_verification example) +- **Node.js/npm**: JavaScript runtime (used in starter-token example) + +## Project Structure + +``` +aztec-examples/ +├── recursive_verification/ # Noir proof verification in Aztec contracts example +│ ├── circuit/ # Noir circuit that generates proofs (proves x ≠ y) +│ ├── contract/ # Aztec contract that verifies Noir proofs +│ ├── scripts/ # TypeScript utilities for proof generation and deployment +│ ├── tests/ # Integration test suite +│ ├── data.json # Generated proof data (created by `bun data`) +│ ├── README.md # Comprehensive documentation +│ ├── CLAUDE.md # Project-specific AI guidance +│ ├── EXPLAINER.md # Technical deep-dive explanation +│ └── run-tests.sh # Local test runner script +├── starter-token/ # Token contract example with start-here and reference implementations +│ ├── start-here/ # Template for implementing a token +│ │ ├── contract/ # Noir contract code +│ │ ├── external-call-contract/ # Cross-contract calls +│ │ └── ts/ # TypeScript client code +│ └── reference/ # Complete reference implementation +│ ├── contract/ # Full token implementation +│ ├── external-call-contract/ # Cross-contract example +│ └── ts/ # TypeScript client +└── .github/ # CI/CD configuration + └── workflows/ + └── recursive-verification-tests.yml # Automated testing workflow +``` + +## Development Commands + +### Prerequisites + +```bash +# Install Aztec tools (required) +bash -i <(curl -s https://install.aztec.network) + +# Set specific version (examples may require different versions) +aztec-up 3.0.0-devnet.4 # For recursive_verification +aztec-up 2.0.2 # For starter-token +``` + +### Building Contracts + +From a contract directory containing `Nargo.toml`: + +```bash +# Compile an Aztec contract +aztec-nargo compile + +# For recursive_verification example (using Bun) +bun ccc # Compiles contract, post-processes, and generates TypeScript bindings +``` + +### Running Local Development Environment + +```bash +# Start Aztec sandbox (node + PXE) +aztec start --sandbox + +# Start without PXE (when using aztec-wallet) +NO_PXE=true aztec start --sandbox + +# Import test accounts to aztec-wallet +aztec-wallet import-test-accounts +``` + +### Testing + +```bash +# Run tests (starts TXE automatically) +aztec test + +# Or manually with TXE for debug output: +# Terminal 1: Start Testing Execution Environment +aztec start --txe --port=8081 + +# Terminal 2: Run tests with output +nargo test --oracle-resolver http://127.0.0.1:8081 --show-output + +# Run integration tests (recursive_verification) +cd recursive_verification +bun test + +# Run full test suite with compilation +./run-tests.sh +``` + +### Deploying and Interacting with Contracts + +```bash +# Deploy a contract (without constructor) +aztec-wallet deploy --no-init target/.json --from test0 --alias + +# Call a contract function +aztec-wallet send --args --contract-address -f test0 + +# Simulate a function call (read-only) +aztec-wallet simulate --args --contract-address -f test0 + +# Profile gas/gates for a function +aztec-wallet profile --args --contract-address -f test0 +``` + +### Performance Analysis + +```bash +# Generate gate flamegraph for private functions +SERVE=1 aztec flamegraph target/.json + +# Profile gate count for deployed contract +aztec-wallet profile --args --contract-address -f test0 +``` + +## Example-Specific Workflows + +### Recursive Verification Example + +Complete workflow for the proof verification example: + +```bash +# 1. Install dependencies (requires Bun) +cd recursive_verification +bun install + +# 2. Compile the Noir circuit +cd circuit && aztec-nargo compile && cd .. + +# 3. Compile the Aztec contract +bun ccc # Runs: aztec-nargo compile && aztec-postprocess-contract && aztec codegen + +# 4. Generate proof data (UltraHonk proof, verification key, public inputs) +bun data # Creates data.json with proof for x=1, y=2 + +# 5. Start Aztec sandbox (in separate terminal) +aztec start --sandbox + +# 6. Deploy contract and verify proof on-chain +bun recursion # Deploys ValueNotEqual contract and verifies proof + +# 7. Run tests +bun test + +# Optional: Run circuit tests +cd circuit && nargo test +``` + +### Starter Token Example + +```bash +# Navigate to reference implementation +cd starter-token/reference + +# Build the contract +cd contract && aztec-nargo compile && cd .. + +# Build and run TypeScript client +cd ts +npm install +npm run build +npm start +``` + +## Contract Architecture + +### Aztec Contract Structure + +Aztec contracts use the `#[aztec]` macro and define functions as either: + +- `#[private]`: Executed client-side with zero-knowledge proofs +- `#[public]`: Executed on-chain by the protocol +- `#[initializer]`: Constructor-like functions for setup +- `#[unconstrained]`: View functions that don't modify state + +Key considerations: + +- **Private functions**: Optimize for circuit size (gates), unconstrained functions don't add gates +- **Public functions**: Optimize for gas cost, unconstrained functions do add cost +- **Unconstrained functions**: Used for computation that doesn't need proving, must verify results in constrained context + +### Proof Verification Pattern (recursive_verification) + +The recursive verification example demonstrates: + +- **Off-chain proof generation**: Noir circuits compiled and executed with Barretenberg +- **On-chain verification**: Using `std::verify_proof_with_type` in Aztec contracts +- **UltraHonk proving system**: Generates proofs with 457 field elements, verification keys with 115 fields +- **Private state management**: Using `EasyPrivateUint` for private counters + +### Token Pattern (starter-token) + +The token example showcases: + +- **Dual balance system**: Public and private token balances +- **State management**: Using `PublicMutable` and `Map` for storage +- **Access control**: Owner-based permissions for minting +- **Cross-contract calls**: External contract interactions + +### Testing Pattern + +Tests use the Testing Execution Environment (TXE): + +```noir +use dep::aztec::test::helpers::test_environment::TestEnvironment; + +#[test] +unconstrained fn test_function() { + let mut env = TestEnvironment::new(); + let user = env.create_account_contract(1); + env.impersonate(user); + + // Deploy and interact with contracts + let contract = env.deploy_self("ContractName").without_initializer(); + // Test contract functions +} +``` + +## Dependencies + +### Aztec Contract Dependencies + +Aztec contracts specify dependencies in `Nargo.toml`: + +```toml +[dependencies] +aztec = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "vX.X.X", directory = "noir-projects/aztec-nr/aztec" } +easy_private_state = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "vX.X.X", directory = "noir-projects/aztec-nr/easy-private-state" } +``` + +**Version Compatibility**: Different examples may use different Aztec versions: + +- `recursive_verification`: v3.0.0-devnet.4 + +### JavaScript/TypeScript Dependencies + +TypeScript projects use: + +- `@aztec/aztec.js`: Aztec SDK for contract deployment and interaction +- `@aztec/accounts`: Account management for Aztec +- `@aztec/bb.js`: Barretenberg backend for proof generation (recursive_verification) +- `@aztec/noir-noir_js`: Noir.js for circuit execution (recursive_verification) + +### Runtime Requirements + +- **Node.js/npm**: For starter-token TypeScript examples (v20+) +- **Bun**: Required for recursive_verification example (faster alternative to Node.js) +- **Docker**: Required for running Aztec sandbox +- **Memory**: 8GB+ RAM recommended for proof generation + +## CI/CD + +The repository includes GitHub Actions workflows for automated testing: + +### recursive-verification-tests.yml + +Runs on: + +- Push to main branch +- Pull requests modifying `recursive_verification/**` +- Manual workflow dispatch + +Steps: + +1. Sets up Node.js (v22) and Bun +2. Installs Aztec CLI +3. Starts Aztec sandbox +4. Compiles circuits and contracts +5. Generates proof data +6. Runs integration tests +7. Uploads test artifacts on failure + +## Common Issues and Solutions + +### Issue: "Cannot find module './contract/artifacts/'" + +**Solution**: Run `bun ccc` or `aztec-nargo compile` to generate contract artifacts + +### Issue: "Failed to connect to PXE" + +**Solution**: Ensure Aztec sandbox is running with `aztec start --sandbox` + +### Issue: "Proof verification failed" + +**Solution**: Regenerate proof data after circuit changes with `bun data` + +### Issue: Memory issues during proof generation + +**Solution**: Close other applications or use a machine with more RAM (8GB+ recommended) + +### Issue: Version compatibility errors + +**Solution**: Check the Aztec version required for each example and set with `aztec-up ` + +## Best Practices + +1. **Version Management**: Always check and set the correct Aztec version for each example +2. **Testing**: Run tests locally before pushing changes +3. **Documentation**: Update READMEs when modifying examples +4. **Clean Builds**: When encountering issues, try removing `target/`, `artifacts/`, and `node_modules/` directories +5. **Sandbox Management**: Always ensure sandbox is running when deploying/testing contracts diff --git a/README.md b/README.md index f73fa53..caac00e 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,145 @@ -# aztec-examples +# Aztec Examples -A place for example Aztec contracts to learn in a hands-on way. +A collection of example Aztec smart contracts and circuits written in Noir, designed for hands-on learning of the Aztec privacy-first Layer 2 blockchain. -## Documentation +## Overview -See raw markdown [here](./docs/docs/index.md), or serve locally. +This repository contains practical examples demonstrating various features of Aztec's zero-knowledge smart contract platform, from basic token implementations to advanced proof verification patterns. -- [Install mkdocs](https://www.mkdocs.org/getting-started/#installation) -- Serve locally: `mkdocs serve-docs` +You can find additional examples in the Aztec monorepo [docs examples folder](https://github.com/AztecProtocol/aztec-packages/tree/next/docs/examples), including: + +- Counter contract example +- A simple token example +- An NFT bridge contract example + +## Examples + +### 1. [Recursive Verification](./recursive_verification) + +**Aztec Version**: 3.0.0-devnet.4 + +Demonstrates how to verify Noir circuit proofs within Aztec smart contracts using the UltraHonk proving system. This example showcases: + +- Zero-knowledge proof generation from Noir circuits +- On-chain proof verification in private smart contracts +- Private state management using `EasyPrivateUint` +- Integration between off-chain proving and on-chain verification + +**Key features**: + +- Circuit that proves two values are not equal (x ≠ y) +- Smart contract that verifies proofs and maintains private counters +- Comprehensive test suite and GitHub Actions CI/CD pipeline +- TypeScript utilities for proof generation and contract deployment + +[View README](./recursive_verification/README.md) + +## Quick Start + +### Install Aztec Tools + +```bash +# Install the Aztec CLI and tools +bash -i <(curl -s https://install.aztec.network) + +# Set specific Aztec version (if needed) +aztec-up 3.0.0-devnet.4 +``` + +### Run the Examples + +#### Recursive Verification + +```bash +cd recursive_verification +bun install +bun ccc # Compile contracts +bun data # Generate proof data +aztec start --sandbox # Start local network (in new terminal) +bun recursion # Deploy and verify proof +``` + +#### Starter Token + +```bash +cd starter-token/reference +# Follow the specific setup instructions in the token example +``` + +## Repository Structure + +``` +aztec-examples/ +├── recursive_verification/ # Proof verification in contracts +│ ├── circuit/ # Noir circuit implementation +│ ├── contract/ # Aztec smart contract +│ ├── scripts/ # TypeScript utilities +│ ├── tests/ # Integration test suite +│ └── README.md # Detailed documentation +└── .github/ # CI/CD workflows + └── workflows/ + └── recursive-verification-tests.yml +``` + +## Development Workflow + +### Common Commands + +```bash +# Compile Aztec contracts +aztec-nargo compile + +# Start local Aztec network +aztec start --sandbox + +# Run tests with Testing Execution Environment (TXE) +aztec test + +# Deploy contracts (using aztec-wallet) +aztec-wallet deploy --no-init target/.json --from test0 --alias + +# Interact with contracts +aztec-wallet send --args --contract-address -f test0 + +# Profile gas/gates usage +aztec-wallet profile --args --contract-address -f test0 +``` + +## Testing + +### Continuous Integration + +The repository includes GitHub Actions workflows that automatically test examples on pull requests and pushes to the main branch. + +### Local Testing + +Each example includes its own test suite: + +```bash +# Recursive Verification tests +cd recursive_verification +bun test + +# Run with CI-like environment +./run-tests.sh +``` + +## Resources + +- [Aztec Documentation](https://docs.aztec.network/) +- [Noir Language Documentation](https://noir-lang.org/) +- [Aztec GitHub Repository](https://github.com/AztecProtocol/aztec-packages) +- [Barretenberg Proving System](https://github.com/AztecProtocol/barretenberg) + +## Contributing + +We welcome contributions! Please feel free to submit issues or pull requests with: + +- New example contracts +- Improvements to existing examples +- Documentation enhancements +- Test coverage improvements + +## License + +[Apache License 2.0](LICENSE) diff --git a/docs/docs/hello.md b/docs/docs/hello.md deleted file mode 120000 index 0c4d072..0000000 --- a/docs/docs/hello.md +++ /dev/null @@ -1 +0,0 @@ -../../hello/hello.md \ No newline at end of file diff --git a/docs/docs/index.md b/docs/docs/index.md deleted file mode 100644 index 0d0cf48..0000000 --- a/docs/docs/index.md +++ /dev/null @@ -1,19 +0,0 @@ -# Contents - -## Using examples - -To see all commands from within an example directory use: `make help` - -On linux, if you do not have `make`, you will need the package `build-essential`. - -Note: Examples assume you have aztec tools installed: `bash -i <(curl -s https://install.aztec.network)` - -Some commands require having a local network running (without its PXE): `NO_PXE=true aztec start --sandbox` -The Private eXecution Environment (PXE) within the `aztec-wallet` will be used. - - -## Contributions - -Examples in this repo are heavily curated to showcase and explain atomic functionality of Aztec, as well as slightly larger examples for broader concepts. - -Developers: Pull requests containing examples with code AND documentation that fit the brief will be considered. diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml deleted file mode 100644 index ecdcf24..0000000 --- a/docs/mkdocs.yml +++ /dev/null @@ -1,5 +0,0 @@ -site_name: My Docs -nav: - - Home: index.md - - Hello: hello.md -theme: readthedocs diff --git a/hello/Makefile b/hello/Makefile deleted file mode 100644 index 1d6d577..0000000 --- a/hello/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -.PHONY: all build gate-flamegraph clean - -# Default target -all: build - -# Build the project -build: - aztec-nargo compile - -# Generate gate flamegraph of a private function -gate-flamegraph: - @echo "Building gates flamegraph of $(filter-out $@,$(MAKECMDGOALS)) ..." - SERVE=1 aztec flamegraph target/hello-Hello.json $(filter-out $@,$(MAKECMDGOALS)) - -# Clean build artifacts -clean: - rm -rf target/ - -# Help command -help: - @echo "Available commands:" - @echo " make build - Compile the project" - @echo " make clean - Remove build artifacts" - @echo " make gate-flamegraph - Generate gate flamegraph for the given private function" - @echo " make help - Show this help message" diff --git a/hello/Nargo.toml b/hello/Nargo.toml deleted file mode 100644 index b43c9db..0000000 --- a/hello/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "hello" -type = "contract" -authors = [""] - -[dependencies] -aztec = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v0.87.9", directory = "noir-projects/aztec-nr/aztec" } diff --git a/hello/hello.md b/hello/hello.md deleted file mode 100644 index a1ea252..0000000 --- a/hello/hello.md +++ /dev/null @@ -1,249 +0,0 @@ -# Coding for Execution vs Proving - -In this intro example you will: - -- Create an Aztec contract from scratch -- Add Aztec dependencies and macros -- Appreciate different function types/considerations -- Measure proving cost -- Run a local node, deploy/interact with contract - -## Self Setup - -The steps in this section explain how to recreate a project like this from scratch. - -### Create project files and first contract - -The flow with Noir is much like that of Rust. - -```bash -# Create project dir and boilerplate files -aztec-nargo new --contract hello -``` - -```bash -# Add Aztec dependency to `hello/Nargo.toml` -cd hello -echo 'aztec = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v0.87.9", directory = "noir-projects/aztec-nr/aztec" }' >> Nargo.toml -``` - -```bash -# Replace src/main.nr with empty Aztec contract -echo 'use dep::aztec::macros::aztec; // import aztec macro for use - -#[aztec] // use macro for contract -pub contract Hello { - // imports, storage struct, and functions go here -}' > src/main.nr -``` - -### Division example - -For demonstration purposes we'll show an implementation of division that is efficient for proving in private, but has an extra cost in public. - -Inside the empty contract, we'll add the same function as public and private; outside will have the helper function. - -```rust -#[aztec] -pub contract Hello { - use crate::divide; // Noir helper function outside of contract - - // import function types - use dep::aztec::macros::functions::{private, public}; - - #[private] // use macro to wrap for private execution - fn div_prv(dividend: u32, divisor: u32) -> u32 { - //Safety: constrain after - let (quotient, remainder) = unsafe { divide(dividend, divisor) }; - assert(quotient * divisor + remainder == dividend); - quotient - } - - #[public] // use macro to wrap for public execution - fn div_exe(dividend: u32, divisor: u32) -> u32 { - let (quotient, remainder) = divide(dividend, divisor); - quotient - } -} // contract Hello - -// iterative divide function -pub unconstrained fn divide(dividend: u32, divisor: u32) -> (u32, u32) { - let mut quotient: u32 = 0; - let mut remainder: u32 = dividend; - if divisor == 0 { - (0, 0) - } else { - while remainder >= divisor { - remainder = remainder - divisor; - quotient = quotient + 1; - } - (quotient, remainder) - } -} -``` - -## Understanding performance - -Since private functions are executed client side and the proof of execution is used to advance private state, the size of the circuit is important. The size of a circuit is measured in gates. - -Public functions are executed as part of the protocol, so the total cost of operations is important, which is measured in gas. - -We can compile and then calculate the gates required for the private function, `div_prv`. To see gas for the public function, we will deploy the contract and call `div_exe`. - -## Building the project -### Compile the contract - -For simplicity this project uses make, where `make build` calls `aztec-nargo compile`. Build is the default make target so for convenience simply compile the contract with: - -```bash -# From directory with Markefile & Nargo.toml -make -``` - -### Showing gate counts in a flamegraph - -The gate flamegraph of a specific function can be calculate and presented by passing the function name to: - -```bash -make gate-flamegraph div_prv -``` - -In the terminal you'll see: `Opcode count: 775, Total gates by opcodes: 5197, Circuit size: 5962` - -Also go to the URL in the command output to see the gate count total, and of each sub-section. The exported .svg file is in the `target` directory. - -### Unconstrained cost in private - -To assess the cost of the unconstrained function in private, lets replace its call with a result directly, eg `(2, 2)` - -```rust - #[private] // use macro to wrap for private execution - fn div_prv(dividend: u32, divisor: u32) -> u32 { - //Safety: constrain after - let (quotient, remainder) = (2, 2); //unsafe { divide(dividend, divisor) }; - assert(quotient * divisor + remainder == dividend); - quotient - } - -``` - -Now calculating the gates flamegraph again: -```bash -make gate-flamegraph div_prv -``` - -In the terminal you'll see the same counts: `Opcode count: 775, Total gates by opcodes: 5197, Circuit size: 5962` - -That is, the unconstrained function does NOT contribute to gate count in the private function. So the result from this unconstrained function must then be verified in the calling constrained function (via `assert`). - -## Using the project -### Deploy contract to Aztec dev node - -First we'll run a local dev environment, aka "sandbox", which includes: - -- an Aztec dev node -- a Private eXecution Environment (PXE) - -Both can be started together in a terminal with: `aztec start --sandbox` - -We will now use the `aztec-wallet` to interact with them. - -```bash -# Register test account contract addresses from sandbox, into the pxe -aztec-wallet import-test-accounts -aztec-wallet get-alias accounts # show account contract aliases -> addresses -``` - -Use the test account aliased to, `test0`, to deploy the compiled contract: - -```bash -aztec-wallet deploy --no-init target/hello-Hello.json --from test0 --alias hello -``` - -Note: - -- `no-init` is specified because we do not have or need a constructor/`initializer` for this example -- The last param requests the deployed contract address be aliased to `hello` - -### Command summary script - -For convenience/reference, these commands are consolidated in a script. To see them: -```bash -./run.sh --help -``` - -### Showing gas cost for a transaction - -With the sandbox running and contract deployed (see earlier section), we can now interact with the public function: - -```bash -./run.sh hello-fn div_exe 8 3 -``` - -```bash -Transaction has been mined - Tx fee: 39680550 - ... -``` - -Lets assess the cost of the unconstrained function in public by replacing the call with a result: - -```rust - let (quotient, remainder) = (2, 2); // divide(dividend, divisor); -``` - -Compiling, deploying, then calling: - -```bash -make -./run.sh hello-deploy -./run.sh hello-fn div_exe 8 3 -``` - -The result will show a lower gas cost: -```bash -Transaction has been mined - Tx fee: 33770160 -``` - -That is, the unconstrained function call from public contributes to the cost. - -### Comparison - -The above example highlights that coding things well in private may have unexpected costs if used in public. - -Another example of this is in the use of memory. This is cheaper in private circuits (witness values) and expensive in public (operations to read across different memory locations). - -## Further use - -### Testing output - -For a quick sneak peak into testing, see the functions after the Noir divide function: `setup()` and `test_funcs()`. Notice the more explicity way of calling a function from a private or public context. - -Tests are simply run with the command: `aztec test` - -Under the hood this does two things: -- Starts a Testing eXecution Environment - `aztec start --txe --port=8081` -- Runs nargo tests pointing to the txe as an oracle - `nargo test --silence-warnings --pedantic-solving --oracle-resolver http://127.0.0.1:8081` - -We'll modify the second command to show the `println` output: -- Start TXE - `aztec start --txe --port=8081` (in a separate terminal) -- Test - `nargo test --oracle-resolver http://127.0.0.1:8081 --show-output` - -### Profile gate count - -To see a breakdown of proving times and gate counts per inner-circuit: - -```bash -./run.sh gate-profile div_prv 8 3 -``` - -This command expects the contract in `hello.nr` to be deployed, and the contract address aliased to `hello`. - -This uses the deployed contract to provide a breakdown of time and gates for each inner function. This will become useful when comparing calls into contexts. - - -## Further reading - -- For more about optimisation, see [Thinking in Circuits](https://noir-lang.org/docs/explainers/explainer-writing-noir), and [aztec-examples](). -- To see a side-by-side comparison with Rust, see [noir_by_example](https://github.com/noir-lang/noir-examples/tree/master/noir_by_example#readme). diff --git a/hello/run.sh b/hello/run.sh deleted file mode 100755 index 4a99ee0..0000000 --- a/hello/run.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env bash - -usage() { - cat < [options] - -Commands: - Setup: - sandbox Run Aztec node + pxe locally - import-test-accounts Import test accounts into aztec-wallet - deploy-hello Deploy the hello contract without initialization - gate-flamegraph Generate gate flamegraph for the specified private function - gate-profile [args...] Show total gates for the specified private function with optional arguments - hello-sim-fn [args...] Simulate a function call on deployed hello contract - hello-fn [args...] Call a function on deployed hello contract - -h, --help Show this help message - -Examples: - $0 sandbox - $0 import-test-accounts - $0 deploy-hello - $0 gate-flamegraph myFunction - $0 gate-profile myFunction 1 2 3 - $0 hello-sim-fn myFunction 1 2 3 - $0 hello-fn myFunction 1 2 3 -EOF -} - -if [[ $# -lt 1 ]] || [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then - usage - exit 0 -fi - -COMMAND="$1" -shift - -case "$COMMAND" in - sandbox) - aztec start --sandbox - ;; - import-test-accounts) - aztec-wallet import-test-accounts - ;; - deploy-hello) - aztec-wallet deploy --no-init target/hello-Hello.json --from test0 --alias hello - ;; - gate-flamegraph) - if [[ $# -lt 1 ]]; then - echo "Error: function_name required for flamegraph" - usage - exit 1 - fi - SERVE=1 aztec flamegraph target/hello-Hello.json "$1" - ;; - gate-profile) - if [[ $# -lt 1 ]]; then - echo "Error: function_name required for profile" - usage - exit 1 - fi - fn="$1"; shift - aztec-wallet profile "$fn" --args "$@" --contract-address hello -f test0 - ;; - hello-sim-fn) - if [[ $# -lt 1 ]]; then - echo "Error: function_name required for call" - usage - exit 1 - fi - fn="$1"; shift - aztec-wallet simulate "$fn" --args "$@" --contract-address hello -f test0 - ;; - hello-fn) - if [[ $# -lt 1 ]]; then - echo "Error: function_name required for call" - usage - exit 1 - fi - fn="$1"; shift - aztec-wallet send "$fn" --args "$@" --contract-address hello -f test0 - ;; - *) - echo "Unknown command: $COMMAND" - usage - exit 1 - ;; -esac diff --git a/hello/src/main.nr b/hello/src/main.nr deleted file mode 100644 index f6b1b69..0000000 --- a/hello/src/main.nr +++ /dev/null @@ -1,72 +0,0 @@ -use dep::aztec::macros::aztec; - -#[aztec] -pub contract Hello { - use crate::divide; - - // import function types - use dep::aztec::macros::functions::{private, public}; - - #[private] // use macro to wrap for private execution - fn div_prv(dividend: u32, divisor: u32) -> u32 { - //Safety: constrain after - let (quotient, remainder) = unsafe { divide(dividend, divisor) }; - assert(quotient * divisor + remainder == dividend); - quotient - } // tx fee: 567952000 (with unconstrained divide) - - #[public] // use macro to wrap for public execution - fn div_exe(dividend: u32, divisor: u32) -> u32 { - let (quotient, remainder) = divide(dividend, divisor); - quotient - } // tx fee: 1945438440 (with unconstrained divide) - -} - -pub unconstrained fn divide(dividend: u32, divisor: u32) -> (u32, u32) { - let mut quotient: u32 = 0; - let mut remainder: u32 = dividend; - if divisor == 0 { - (0, 0) - } else { - while remainder >= divisor { - remainder = remainder - divisor; - quotient = quotient + 1; - } - (quotient, remainder) - } -} - -//////TESTING////// -use dep::aztec::prelude::AztecAddress; -use dep::aztec::test::helpers::test_environment::TestEnvironment; - -#[test] -unconstrained fn test_funcs() { - let (env, hello_contract_address, user) = setup(); - env.advance_block_by(1); - - // let result = env.call_private(contract_address, Hello::interface().math_ops_3_prv(8)); - let result = Hello::at(hello_contract_address).div_prv(8, 3).call(&mut env.private()); - println(result); // can use println in txe tests, but not aztec functions called by tests. debug_log doesn't work. - assert(result == 2, "Expected 2 but got {result}"); - - let result = Hello::at(hello_contract_address).div_exe(8, 3).call(&mut env.public()); - println(result); // can use println in txe tests, but not aztec functions called by tests. debug_log doesn't work. - assert(result == 2, "Expected 2 but got {result}"); -} - -pub unconstrained fn setup() -> (&mut TestEnvironment, AztecAddress, AztecAddress) { - // Setup env, generate keys - let mut env = TestEnvironment::new(); - let user = env.create_account_contract(1); - - // Start the test in the account contract address - env.impersonate(user); - - // Deploy token contract - let hello_contract = env.deploy_self("Hello").without_initializer(); - let hello_contract_address = hello_contract.to_address(); - - (&mut env, hello_contract_address, user) -} diff --git a/recursive_verification/.gitignore b/recursive_verification/.gitignore new file mode 100644 index 0000000..ac99b00 --- /dev/null +++ b/recursive_verification/.gitignore @@ -0,0 +1,8 @@ +node_modules +**/target/ +**/codegenCache.json +**/artifacts/ +store/ +pxe/ +barretenberg-debug.* +recursive_verification/pxe \ No newline at end of file diff --git a/recursive_verification/CLAUDE.md b/recursive_verification/CLAUDE.md new file mode 100644 index 0000000..a46307c --- /dev/null +++ b/recursive_verification/CLAUDE.md @@ -0,0 +1,107 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +This is an Aztec-Noir project that demonstrates proof verification in Aztec contracts. It uses Aztec version 3.0.0-devnet.4 to verify Noir proofs within smart contracts on the Aztec network. + +The project consists of: + +- A Noir circuit (`hello_circuit`) that proves x ≠ y +- An Aztec smart contract (`ValueNotEqual`) that verifies the proof on-chain +- Scripts to generate proof data and deploy/interact with the contract + +## Common Development Commands + +### Environment Setup + +```bash +# Install dependencies +bun install + +# Install/update Aztec tools +aztec-up + +# Start Aztec Sandbox (required for contract deployment) +aztec start --sandbox +``` + +### Circuit Development + +```bash +# Compile the Noir circuit +cd circuit && aztec-nargo compile + +# Execute the circuit (generate witness) +cd circuit && nargo execute + +# Run circuit tests +cd circuit && nargo test +``` + +### Contract Development + +```bash +# Compile contract, postprocess, and generate TypeScript bindings +bun ccc +# This runs: cd contract && aztec-nargo compile && aztec-postprocess-contract && aztec codegen target -o artifacts + +# Generate proof data (vk, proof, public inputs) for contract verification +bun data +# This runs: bun run scripts/generate_data.ts + +# Deploy contract and run proof verification +bun recursion +# This runs: bun run scripts/run_recursion.ts +``` + +## Architecture + +### Circuit (`circuit/`) + +- **`src/main.nr`**: Simple circuit that asserts two field values are not equal +- **`target/hello_circuit.json`**: Compiled circuit bytecode and ABI +- Uses UltraHonk proving system for proof generation + +### Contract (`contract/`) + +- **`src/main.nr`**: Aztec smart contract with: + - `initialize()`: Sets up counter with initial value for an owner + - `increment()`: Verifies a Noir proof and increments the counter + - `get_counter()`: Reads current counter value for an owner +- Uses Honk proof verification (457 field elements for proof, 115 for verification key) +- Stores private counters using `EasyPrivateUint` from Aztec-nr libraries + +### Scripts (`scripts/`) + +- **`generate_data.ts`**: + + - Executes the circuit with inputs (x=1, y=2) + - Generates UltraHonk proof using Barretenberg backend + - Serializes proof, verification key, and public inputs to `data.json` + +- **`run_recursion.ts`**: + - Connects to Aztec PXE at localhost:8080 + - Deploys the ValueNotEqual contract + - Calls `increment()` with the generated proof data + - Verifies the proof on-chain and updates the counter + +### Data Flow + +1. Circuit compilation produces bytecode (`hello_circuit.json`) +2. `generate_data.ts` creates proof data from circuit execution +3. Contract compilation produces Aztec contract artifact and TypeScript bindings +4. `run_recursion.ts` deploys contract and submits proof for on-chain verification + +## Key Dependencies + +- `@aztec/aztec.js`: Aztec SDK for contract deployment and interaction +- `@aztec/bb.js`: Barretenberg backend for proof generation +- `@aztec/noir-noir_js`: Noir.js for circuit execution +- `bun`: JavaScript runtime and package manager + +## Testing + +- Circuit tests: Use `nargo test` in the circuit directory +- Contract verification: Run the full flow with `bun recursion` after starting the sandbox diff --git a/recursive_verification/EXPLAINER.md b/recursive_verification/EXPLAINER.md new file mode 100644 index 0000000..ac7862d --- /dev/null +++ b/recursive_verification/EXPLAINER.md @@ -0,0 +1,252 @@ +# Aztec-Noir Proof Verification: Complete Code Explanation + +## 🔍 Code Complexity Analysis + +**Project Type**: Zero-Knowledge Proof Verification System +**Complexity Level**: Intermediate-Advanced +**Key Technologies**: Noir (ZK DSL), Aztec (Private Smart Contracts), Barretenberg (Proving System) + +### Core Concepts Used: + +- Zero-knowledge proofs (ZK-SNARKs) +- Private smart contract execution +- Cryptographic proof generation and verification +- Cross-system integration (off-chain proving → on-chain verification) + +## 📊 Visual Architecture Diagram + +### System Flow Visualization + +```mermaid + +flowchart TB + subgraph "1. Circuit Definition" + NC[Noir Circuit
circuit/src/main.nr] + NC -->|Proves x ≠ y| PROOF_LOGIC[Assertion Logic] + end + + subgraph "2. Compilation Phase" + NC -->|aztec-nargo compile| BYTECODE[Circuit Bytecode
hello_circuit.json] + end + + subgraph "3. Proof Generation" + BYTECODE -->|Barretenberg| PROVER[UltraHonk Prover] + INPUTS[Inputs: x=1, y=2] --> PROVER + PROVER -->|Generates| PROOF_DATA[Proof Data
- Proof: 457 fields
- VK: 115 fields
- Public inputs] + PROOF_DATA -->|Saved to| JSON[data.json] + end + + subgraph "4. Smart Contract" + CONTRACT[ValueNotEqual Contract
contract/src/main.nr] + CONTRACT -->|Contains| VERIFY[verify_proof_with_type] + CONTRACT -->|Manages| STATE[Private Counter State] + end + + subgraph "5. On-chain Verification" + JSON -->|Submitted to| CONTRACT + VERIFY -->|Verifies| RESULT{Valid?} + RESULT -->|Yes| INCREMENT[Increment Counter] + RESULT -->|No| FAIL[Transaction Reverts] + end + + subgraph "6. Aztec Network" + SANDBOX[Aztec Sandbox
localhost:8080] + PXE[Private Execution
Environment] + SANDBOX --> PXE + CONTRACT -->|Deployed to| SANDBOX + end + + style NC fill:#e1f5fe + style CONTRACT fill:#c8e6c9 + style PROOF_DATA fill:#fff9c4 + style SANDBOX fill:#f3e5f5 +``` + +### Data Flow Sequence + +```mermaid +sequenceDiagram + participant Dev as Developer + participant Circuit as Noir Circuit + participant BB as Barretenberg + participant Contract as Aztec Contract + participant Sandbox as Aztec Sandbox + + Dev->>Circuit: 1. Define proof logic (x ≠ y) + Dev->>Circuit: 2. Compile circuit + Circuit->>Circuit: Generate bytecode + + Dev->>BB: 3. Execute circuit with inputs + BB->>BB: Generate UltraHonk proof + BB->>Dev: Return proof, VK, public inputs + + Dev->>Contract: 4. Compile smart contract + Dev->>Sandbox: 5. Start local network + + Dev->>Sandbox: 6. Deploy contract + Sandbox-->>Dev: Contract address + + Dev->>Contract: 7. Call increment() with proof + Contract->>Contract: Verify proof on-chain + Contract->>Contract: Update private state + Contract-->>Dev: Transaction success +``` + +## 🎓 Core Concepts Explained + +### 1. Zero-Knowledge Proofs (Simple Analogy) + +**Think of it like**: Proving you know a password without revealing the password itself. + +**In this project**: The circuit proves that two numbers are different (x ≠ y) without revealing what x is. Only y is public. + +``` +Regular Proof: "x is 1 and y is 2, so they're different" +Zero-Knowledge Proof: "I can prove x ≠ 2, but I won't tell you x" +``` + +### 2. Noir Circuit (The Proof Logic) + +**File**: `circuit/src/main.nr` + +```rust +fn main(x: Field, y: pub Field) { + assert(x != y); // This is the statement we're proving +} +``` + +**Key Points**: + +- `x: Field` - Private input (hidden) +- `y: pub Field` - Public input (visible to everyone) +- `assert(x != y)` - The condition that must be true + +**How it works**: + +1. Prover knows both x and y +2. Prover generates proof that x ≠ y +3. Verifier only sees y and the proof +4. Verifier confirms the proof is valid without learning x + +### 3. Aztec Smart Contract (The Verifier) + +**File**: `contract/src/main.nr` + +The contract has three main functions: + +```rust +// 1. Initialize with a starting counter value +fn initialize(headstart: u64, owner: AztecAddress) + +// 2. Verify proof and increment counter +fn increment( + owner: AztecAddress, + verification_key: [Field; 115], + proof: [Field; 457], + public_inputs: [Field; 1] +) + +// 3. Read current counter value +fn get_counter(owner: AztecAddress) -> Field +``` + +### 4. UltraHonk Proving System + +**What is it?** A high-performance proof generation system that creates compact, verifiable proofs. + +**Size breakdown**: + +- **Verification Key**: 115 field elements (~3.7KB) +- **Proof**: 457 field elements (~14.6KB) +- **Public Inputs**: 1 field element (the value of y) + +## 📝 Step-by-Step Code Breakdown + +### Step 1: Circuit Execution (`scripts/generate_data.ts`) + +```typescript +// 1. Load the compiled circuit +const helloWorld = new Noir(circuitJson); + +// 2. Execute circuit with specific inputs +const { witness } = await helloWorld.execute({ + x: 1, // Private: only prover knows + y: 2, // Public: everyone can see +}); + +// 3. Generate the proof +const backend = new UltraHonkBackend(circuitJson.bytecode); +const proofData = await backend.generateProof(witness); + +// 4. Extract verification key +const vk = await backend.getVerificationKey(); + +// 5. Convert to field elements for on-chain use +const proofAsFields = deflattenFields(new RawBuffer(proofData.proof)); +const vkAsFields = await barretenbergAPI.acirVkAsFieldsUltraHonk(vk); +``` + +**What happens here**: + +1. Circuit proves "1 ≠ 2" is true +2. Barretenberg creates cryptographic proof +3. Proof is serialized for blockchain storage + +### Step 2: Contract Verification (`contract/src/main.nr`) + +```rust +#[private] +fn increment( + owner: AztecAddress, + verification_key: [Field; HONK_VK_SIZE], // 115 elements + proof: [Field; HONK_PROOF_SIZE], // 457 elements + public_inputs: [Field; 1], // Just 'y' value +) { + // This is the magic line - on-chain proof verification! + std::verify_proof_with_type( + verification_key, + proof, + public_inputs, + 0x0, // Key hash (0 for self-verification) + HONK_IDENTIFIER // Proof system type (1 = UltraHonk) + ); + + // If proof is valid, increment the counter + let counters = storage.counters; + counters.at(owner).add(1, owner); +} +``` + +### Step 3: Deployment & Interaction (`scripts/run_recursion.ts`) + +```typescript +// 1. Connect to Aztec network +const pxe = await createPXEClient("http://localhost:8080"); + +// 2. Deploy the contract with initial counter = 10 +const contract = await Contract.deploy( + wallets.owner, + ValueNotEqualContractArtifact, + [10, wallets.owner.getAddress()], // Constructor args + "initialize" +) + .send() + .deployed(); + +// 3. Submit proof for verification +const tx = await contract.methods + .increment( + wallets.owner.getAddress(), + data.vkAsFields, // Verification key + data.proofAsFields, // The proof + data.publicInputs // Public input (y=2) + ) + .send() + .wait(); + +// 4. Check the counter increased +const counter = await contract.methods + .get_counter(wallets.owner.getAddress()) + .simulate(); +// Counter is now 11 (10 + 1) +``` diff --git a/recursive_verification/README.md b/recursive_verification/README.md new file mode 100644 index 0000000..b02a15a --- /dev/null +++ b/recursive_verification/README.md @@ -0,0 +1,275 @@ +# Verify Noir Proof in Aztec Contracts + +A demonstration of verifying Noir circuit proofs within Aztec smart contracts using the UltraHonk proving system. This project showcases how to generate zero-knowledge proofs off-chain with Noir and verify them on-chain in an Aztec private smart contract. + +## Overview + +This project implements: + +- **Noir Circuit**: A simple circuit that proves two field elements are not equal (x ≠ y) +- **Aztec Contract**: A private smart contract that verifies Noir proofs and maintains a counter +- **Proof Generation**: Scripts to generate UltraHonk proofs using Barretenberg +- **On-chain Verification**: Deployment and interaction scripts for proof verification on Aztec + +**Aztec Version**: `3.0.0-devnet.4` + +## Prerequisites + +- [Bun](https://bun.sh/) runtime (v1.0 or higher) +- [Aztec CLI](https://docs.aztec.network/getting_started/quickstart) (version 3.0.0-devnet.4) +- Linux/macOS (Windows users can use WSL2) +- 8GB+ RAM recommended for proof generation + +## Project Structure + +``` +. +├── circuit/ # Noir circuit that generates proofs +│ ├── src/main.nr # Circuit logic: proves x ≠ y +│ └── Nargo.toml # Circuit configuration +├── contract/ # Aztec smart contract +│ ├── src/main.nr # Contract that verifies Noir proofs +│ ├── artifacts/ # Generated TypeScript bindings +│ └── Nargo.toml # Contract configuration +├── scripts/ # TypeScript utilities +│ ├── generate_data.ts # Generates proof, VK, and public inputs +│ └── run_recursion.ts # Deploys contract and verifies proof +├── tests/ # Integration tests +│ └── recursive_verification.test.ts # Comprehensive test suite +├── CLAUDE.md # Instructions for Claude AI assistants +├── EXPLAINER.md # Detailed technical explanation of the project +├── package.json # Node.js package configuration +├── tsconfig.json # TypeScript configuration +├── data.json # Generated proof data (created by `bun data`) +└── run-tests.sh # Local test runner script +``` + +## Installation + +### Install dependencies: + +```bash +bun install +``` + +### Install Aztec CLI: + +```bash +bash -i <(curl -s https://install.aztec.network) +``` + +### Set Aztec to the correct version: + +```bash +aztec-up 3.0.0-devnet.4 +``` + +This ensures compatibility with the contract dependencies. + +## Build & Compile + +### 1. Compile the Noir Circuit + +```bash +cd circuit && aztec-nargo compile +``` + +This compiles `circuit/src/main.nr` and generates `target/hello_circuit.json` containing the circuit bytecode. + +### 2. Execute the Circuit + +```bash +cd circuit && aztec-nargo execute +``` + +Generates a witness for testing the circuit with default inputs (defined in `circuit/Prover.toml`). + +### 3. Compile the Aztec Contract + +```bash +bun ccc +``` + +This command: + +- Compiles the Aztec contract (`contract/src/main.nr`) +- Post-processes for Aztec deployment +- Generates TypeScript bindings in `contract/artifacts/` + +## Generate Proof Data + +Generate the verification key, proof, and public inputs: + +```bash +bun data +``` + +This runs `scripts/generate_data.ts` which: + +- Executes the circuit with inputs x=1, y=2 +- Generates an UltraHonk proof using Barretenberg +- Saves proof data to `data.json` (457 field elements for proof, 115 for VK) + +## Deploy and Verify On-Chain + +### 1. Start Aztec Sandbox + +Start the local Aztec network: + +```bash +aztec start --sandbox +``` + +Keep this running in a separate terminal. The sandbox runs at `http://localhost:8080`. + +### 2. Deploy Contract and Verify Proof + +```bash +bun recursion +``` + +This runs `scripts/run_recursion.ts` which: + +- Connects to the Aztec PXE (Private eXecution Environment) +- Deploys the `ValueNotEqual` contract +- Submits the proof from `data.json` for on-chain verification +- Increments the counter if verification succeeds +- Displays the final counter value + +Expected output: + +``` +Contract Deployed at address 0x... +Tx hash: 0x... +Counter value: 11 +``` + +## Complete Workflow + +For a fresh setup, run these commands in order: + +```bash +# 1. Install dependencies +bun install + +# 2. Setup Aztec +aztec-up 3.0.0-devnet.4 + +# 3. Compile circuit +cd circuit && aztec-nargo compile && cd .. + +# 4. Compile contract +bun ccc + +# 5. Generate proof data +bun data + +# 6. Start sandbox (in a new terminal) +aztec start --sandbox + +# 7. Deploy and verify (in original terminal) +bun recursion +``` + +## Testing + +### Run All Tests + +The project includes a comprehensive test suite for contract deployment and proof verification: + +```bash +# Run all tests +bun test + +# Run tests in watch mode for development +bun test:watch + +# Run full test suite locally (includes compilation) +./run-tests.sh +``` + +### Test the Circuit + +```bash +cd circuit && nargo test +``` + +This runs the tests defined in `circuit/src/main.nr`. The test verifies that the circuit correctly proves x ≠ y. + +### Integration Tests + +The test suite (`tests/recursive_verification.test.ts`) includes: + +- Contract deployment verification +- Proof verification and counter increment tests +- Multi-user counter management +- Multiple proof verification rounds + +## Troubleshooting + +### Common Issues + +1. **"Cannot find module './contract/artifacts/ValueNotEqual'"** + + - Run `bun ccc` to generate the contract artifacts + +2. **"Cannot find module './data.json'"** + + - Run `bun data` to generate the proof data + +3. **"Failed to connect to PXE"** + + - Ensure the Aztec sandbox is running: `aztec start --sandbox` + - Check it's accessible at `http://localhost:8080` + +4. **"Proof verification failed"** + + - Ensure you've run `bun data` after any circuit changes + - Verify the circuit was compiled with `cd circuit && aztec-nargo compile` + +5. **Memory issues during proof generation** + + - The Barretenberg prover requires significant RAM + - Close other applications or use a machine with more memory + +6. **TypeScript/Linting errors with TxStatus** + - Ensure you're importing `TxStatus` from `@aztec/aztec.js` + - Use `TxStatus.SUCCESS` instead of string literal `"success"` + +### Clean Rebuild + +If you encounter issues, try a clean rebuild: + +```bash +# Remove generated files +rm -rf circuit/target contract/target contract/artifacts data.json + +# Rebuild everything +cd circuit && aztec-nargo compile && cd .. +bun ccc +bun data +``` + +## How It Works + +1. **Circuit**: The Noir circuit in `circuit/src/main.nr` creates a zero-knowledge proof that two values are not equal +2. **Proof Generation**: Barretenberg generates an UltraHonk proof from the circuit execution +3. **Contract**: The Aztec contract uses `std::verify_proof_with_type` to verify the proof on-chain +4. **Privacy**: The contract uses private state (`EasyPrivateUint`) to maintain counters secretly + +## Additional Scripts + +- `bun ccc`: Compile contract and generate TypeScript artifacts +- `bun data`: Generate proof data (verification key, proof, public inputs) +- `bun recursion`: Deploy contract and verify proof on-chain +- `bun test`: Run integration test suite +- `bun test:watch`: Run tests in watch mode for development +- `./run-tests.sh`: Run full test suite locally (includes compilation) + +## Resources + +- [Aztec Documentation](https://docs.aztec.network/) +- [Noir Language Documentation](https://noir-lang.org/) +- [Barretenberg Proving System](https://github.com/AztecProtocol/barretenberg) + +h/t @satyambnsal for the initial implementation. diff --git a/recursive_verification/bun.lockb b/recursive_verification/bun.lockb new file mode 100755 index 0000000..f5a4534 Binary files /dev/null and b/recursive_verification/bun.lockb differ diff --git a/recursive_verification/circuit/Nargo.toml b/recursive_verification/circuit/Nargo.toml new file mode 100644 index 0000000..c5275a7 --- /dev/null +++ b/recursive_verification/circuit/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "hello_circuit" +type = "bin" +authors = [""] + +[dependencies] \ No newline at end of file diff --git a/recursive_verification/circuit/Prover.toml b/recursive_verification/circuit/Prover.toml new file mode 100644 index 0000000..c55f1b4 --- /dev/null +++ b/recursive_verification/circuit/Prover.toml @@ -0,0 +1,2 @@ +x = "1" +y = "5" diff --git a/recursive_verification/circuit/src/main.nr b/recursive_verification/circuit/src/main.nr new file mode 100644 index 0000000..3c30bf0 --- /dev/null +++ b/recursive_verification/circuit/src/main.nr @@ -0,0 +1,11 @@ +fn main(x: Field, y: pub Field) { + assert(x != y); +} + +#[test] +fn test_main() { + main(1, 2); + + // Uncomment to make test fail + // main(1, 1); +} diff --git a/recursive_verification/contract/Nargo.toml b/recursive_verification/contract/Nargo.toml new file mode 100644 index 0000000..f8e6ea2 --- /dev/null +++ b/recursive_verification/contract/Nargo.toml @@ -0,0 +1,9 @@ +[package] +name = "ValueNotEqual" +type = "contract" +authors = ["Satyam Bansal"] + +[dependencies] +aztec = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v3.0.0-devnet.4", directory = "noir-projects/aztec-nr/aztec" } +value_note = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v3.0.0-devnet.4", directory = "noir-projects/aztec-nr/value-note" } +easy_private_state = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v3.0.0-devnet.4", directory = "noir-projects/aztec-nr/easy-private-state" } diff --git a/recursive_verification/contract/src/main.nr b/recursive_verification/contract/src/main.nr new file mode 100644 index 0000000..71aeb33 --- /dev/null +++ b/recursive_verification/contract/src/main.nr @@ -0,0 +1,53 @@ +use aztec::macros::aztec; + +#[aztec] +pub contract ValueNotEqual { + global HONK_VK_SIZE: u32 = 115; + global HONK_PROOF_SIZE: u32 = 492 + 16; + global HONK_IDENTIFIER: u32 = 7; + + use aztec::{ + macros::{functions::{external, initializer}, storage::storage}, + oracle::debug_log::debug_log_format, + protocol_types::{address::AztecAddress, traits::ToField}, + state_vars::Map, + }; + use easy_private_state::EasyPrivateUint; + + #[storage] + struct Storage { + counters: Map, Context>, + } + + #[initializer] + #[external("private")] + fn initialize(headstart: u64, owner: AztecAddress) { + let counters = storage.counters; + counters.at(owner).add(headstart, owner); + } + + #[external("private")] + fn increment( + owner: AztecAddress, + verification_key: [Field; HONK_VK_SIZE], + proof: [Field; HONK_PROOF_SIZE], + public_inputs: [Field; 1], + vk_hash: Field + ) { + debug_log_format("Incrementing counter for owner {0}", [owner.to_field()]); + std::verify_proof_with_type(verification_key, proof, public_inputs, vk_hash, HONK_IDENTIFIER); + ValueNotEqual::at(context.this_address()).emit_in_public(12345).enqueue(&mut context); + let counters = storage.counters; + counters.at(owner).add(1, owner); + } + + #[external("public")] + fn emit_in_public(n: Field) { + context.push_note_hash(n); + } + + #[external("utility")] + unconstrained fn get_counter(owner: AztecAddress) -> Field { + storage.counters.at(owner).get_value() + } +} diff --git a/recursive_verification/data.json b/recursive_verification/data.json new file mode 100644 index 0000000..5815770 --- /dev/null +++ b/recursive_verification/data.json @@ -0,0 +1,633 @@ +{ + "proofAsFields": [ + "0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf", + "0x00000000000000000000000000000000000000000000000b75c020998797da78", + "0x0000000000000000000000000000000000000000000000005a107acb64952eca", + "0x000000000000000000000000000000000000000000000000000031e97a575e9d", + "0x00000000000000000000000000000000000000000000000b5666547acf8bd5a4", + "0x00000000000000000000000000000000000000000000000c410db10a01750aeb", + "0x00000000000000000000000000000000000000000000000d722669117f9758a4", + "0x000000000000000000000000000000000000000000000000000178cbf4206471", + "0x000000000000000000000000000000000000000000000000e91b8a11e7842c38", + "0x000000000000000000000000000000000000000000000007fd51009034b3357f", + "0x000000000000000000000000000000000000000000000009889939f81e9c7402", + "0x0000000000000000000000000000000000000000000000000000f94656a2ca48", + "0x000000000000000000000000000000000000000000000006fb128b46c1ddb67f", + "0x0000000000000000000000000000000000000000000000093fe27776f50224bd", + "0x000000000000000000000000000000000000000000000004a0c80c0da527a081", + "0x0000000000000000000000000000000000000000000000000001b52c2020d746", + "0x0000000000000000000000000000007da35ee71f093e8a686fb63afc293d3340", + "0x0000000000000000000000000000000000118c0bdfb52290472f7227208b0e03", + "0x0000000000000000000000000000008e0249748fb305ae568630c5c5f89e133f", + "0x0000000000000000000000000000000000082b40a4a8f0fbb0656c7d9da5a63d", + "0x00000000000000000000000000000016a1777219b13f0eddd5e1575181ddb480", + "0x0000000000000000000000000000000000238b943c5eed4d57ef1c39e4e01274", + "0x000000000000000000000000000000e6f9d5aefdaf69607c51311d9a4fcfbc66", + "0x00000000000000000000000000000000001183840ad47b9355f2785863a1bea1", + "0x0000000000000000000000000000003247f79675516135f50116bea04e377728", + "0x00000000000000000000000000000000000dd319bc0d6f75ed1a0ce01b091083", + "0x00000000000000000000000000000016d5c6c1ff3e9e8640790450fb7b18e9fc", + "0x0000000000000000000000000000000000147bf280dea77d3840c16f4aaa48aa", + "0x000000000000000000000000000000fbb88f412b793a8a096ebb5aa4182f2c6c", + "0x000000000000000000000000000000000020efc14052cf7c48604ad20fb21b1b", + "0x000000000000000000000000000000d7831d83cfc5acda1d86824ca5f9120ff3", + "0x000000000000000000000000000000000008ec0aa734083c765833e90c06ef88", + "0x0000000000000000000000000000004011b5671e32c5a9f8e5b34f1d70c40675", + "0x00000000000000000000000000000000001905e56da53a561a801f6d98efdd43", + "0x000000000000000000000000000000690dd31a14a50190fb40f4539b876839e0", + "0x0000000000000000000000000000000000151234623fe83369173c7aba368139", + "0x000000000000000000000000000000bfcad0267150620dcb1d61eaba5db4289e", + "0x00000000000000000000000000000000001f13e7e07e3e93b78f2b19f169acb6", + "0x00000000000000000000000000000003d203d8ea874488366c0fded9fbb9833a", + "0x00000000000000000000000000000000000f8f2d1266894d305a120b6e53c77e", + "0x0000000000000000000000000000001251e7510eaa1e2f72bb74ec1ebf98a41c", + "0x000000000000000000000000000000000028aa685d48860af7134378954559cf", + "0x000000000000000000000000000000a68e5edb40273c5cc9f41beafc1ca28f33", + "0x000000000000000000000000000000000016a9eb9b599e06be73b678727bf643", + "0x0000000000000000000000000000008ef642f2f2c9a28c9c6acf4074dd334f4e", + "0x00000000000000000000000000000000000ebc1b94cb1d3ae29bf84a252e680f", + "0x0000000000000000000000000000000f2e4f98d73e3d631ca270a372fc43221e", + "0x000000000000000000000000000000000003eca95b7b464717fe10806825d729", + "0x000000000000000000000000000000baf007a4122cc019c3b9f0a75a6acd06b7", + "0x0000000000000000000000000000000000156a76a8b7b39ac6eacf31b5d0dcd8", + "0x000000000000000000000000000000ae46131b14d6aa85d1feb546b9634036dd", + "0x0000000000000000000000000000000000106592dd589732d1fc3db20ac8e393", + "0x0015a0dd83160cca11aed7996f89204dc78a2c7530eeac82051ab6feb1207bf8", + "0x0cba72a697c7b5f18411f934d839b70c84e9b84d491d8bdf9dbc767d16ca717a", + "0x1013fcf37ba5be20df871b31e7a51feff363b58a0b25742ed34bab85886cfb63", + "0x2483b96a35add82cf095fb2dd851ef91b59194ed7ceaa487a11d00b066754287", + "0x089ba062d6bffb00bd5a1d48ef65833ab526665a3676ae087cf0f74a81c62fb0", + "0x30006c8bbdbaf04096b222a63714e340c79ae786058398cf05ed1dcc85861fba", + "0x279431ce4ff3eb1bb285b3fc4e6af7e20cea19e5e1cec472e5be0faff9f147b2", + "0x1673af3be72c8a5b6e61479f9ea464ddbc33d9aecdfbdb7ebff0afed9af8fe60", + "0x03313d6bebf9ad9e2480acfff9e4286ebf8e6397a7206d7867cd7cc3f118e29e", + "0x2638a13e2771a8a6052eb4211afd0de326a8fff4241c6a9d3a2b7783dd70de80", + "0x193de64af33012c2665b0ff2d5d12b4e8da8141aa394f2ca565db077aca74c89", + "0x00bb7a8360a3f0fc92a24be7740633c459aaef7abeb9f4f0fb3873f6112689bf", + "0x2cbc3372f19ffd7f64f1c585f2f2c491e6de8f37a76642c6f106b5f578f9c6cd", + "0x18fe8b960e4be354faf85950275d1fa94658f5de9ba006a4090222344e794d14", + "0x20141ab47582df0e1460bb92c4522150126750acf3515697c42f6626160f9392", + "0x2f68b247b4a92f0be18bf03923851dc9ddf78e42e511423cd644110be76c518c", + "0x1b3904f5fdbc974c2542438e6cfc8bbe9acb7335b8f6fa6076788e7bc3b91fcc", + "0x2678f3abe28b515f57a2b7f4878a395e59ec94058d8bc75566401bf90ed65298", + "0x2b2616dc348e6d366402966661ad2bfd29abfaad01726b7f7b6d187e63494aa4", + "0x2b2cd73144694012a71be830387e9c561f29334b81a393e5d60671597d07a8ae", + "0x2506c90f400292dfa35c40a32af459df853bc8ed620ce02e88cba6db950feba3", + "0x1bbe61277e74bd4e9b763c0f7ba86571844815f0d11b2161c8c6526d909dcf09", + "0x225b416518af0485608b6fc4d6b56db214976a0a13f186274c67c5cefe96e8a6", + "0x133c437ea2d693d8202cf2fa01953b967c4972da68f2ac295abc9f1e0a46f4ea", + "0x08bf7dd9dcba4733cd9187899bb826b650bb232a8191be50b15e5bec2fa4375c", + "0x1769f43092b9b54bdea9b56bff0821779904d98dff8830b302f8225a7a854d30", + "0x04f77a3ca0e22158677393c6d5b5e368330dba485118472c39f1cb064e8636ee", + "0x2f8b4f863de520e28db83eaa43610d9b0ed1811516c9d6913e5c7e1cbeb440ac", + "0x264124f810b7ac7b528dc029638a16bfcad4510072c2a170bbc40482a1eab4bd", + "0x2df0a296d9ac1ebf59e30b65f8d0978db256177eff78db9b9ddfe424430376d9", + "0x17f8baf2a78dfaa4dfbf349a01d05773e9e621465110cb707d1c1a9c0e09ff99", + "0x1f6302a445a0b6d53e8ac12b152fa6aa9771ffe13fb6bb18d51221716c144c28", + "0x26872d7e96f5693b067c5ae4491429a8b0bb2ac8b2f3d6fab914384eeb441f19", + "0x2854ad86f46dff7c372a8b56c32761ef4c523410de7c6406f53b843a461a8317", + "0x0e4cb3685f3be2de6ebfbc1e7fa0b57f4866cc2b7091c8018abaf78693e77a81", + "0x1b83d02e975058732cee923bbefb6bdc8bd4950dac27e9594ca0b24f5facdee9", + "0x0ade28ddb36c69db4e2de6d2233a31283389df12844ee55e5b9180b9da69872d", + "0x1efa64859a01c8c88617d66eaae0b3053487d871022904be7a7f9d314e6d83f1", + "0x284fc2a55882b6442c2c9244019989e50a5f3ddc2d23bde7bcb8c417a80b2d7b", + "0x21f28c46655005a7d5bdfd8ac3bb9370a32bd1f493a9363e1ba9c06f274c5d72", + "0x243f7c8327f11837b9cfaa8d5c3bbdb45b67e04ca89e4274c36d3f22742c7803", + "0x207f574ab247b4bff47799451acf428f103246797b4dea8e6a01731c203a7fa1", + "0x10a5b739e7b340c4d8cd4db28f82a308cdc0f10e659f6f7ef1de367477181dc0", + "0x22c730ac611323bb1c9be31759248756243ac02c8c47bac5f0e8c953072719cb", + "0x18f8365143a2876c7e8d7ac0b9886c46b8540225228c0ecb62f2e81b29a3d3e4", + "0x2ff1c391d162f3243d4087cfdfa102b38bff5677e63b90befb1bf84f0f6eec67", + "0x09b528184417c9e638d6750ef5ae386056f00e607eb7dfd551b3ec1d3829ac43", + "0x2f366049a13bc41caa5159ce7aa2a7c57844f3069ebc7216698948abae2b07f3", + "0x29130d59d89dbe8c01f64b0a32310f5ee1021ac45442f778bd432936554546ab", + "0x224301e05de8f1aacd0046e4c456af64b5ef930be0debdbb9a9c4d15d8a1c705", + "0x262f3596c5856e4ab353c2c8bb7250ef832e291cc9d0c9d0b344bc59cbfe9e53", + "0x02b6661850c0c839331b54df7ca3d21723cfd2f121dce2b8874ba9153bc021ce", + "0x1095578a8ca3d1879a8628cfcd62661299132a2070296f2045f2473329a54ebf", + "0x1debefe212c78497f49693df515dc849bcb861a10292971ecfa3452e0db298d7", + "0x24dc05e5f1ffe0886d7ea532e70f77ab067fd1d01967ef7308de29641723343f", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x25e666f9bf6c6620847e372379a5a34ef6c2307e89e5cfee21277808f7a12862", + "0x230f362c2e6655052e21638c775341d6ad763217a31c1d1439ec80c464a30a0c", + "0x2834fb1c14bd9f7cc60a95d5b00dffcdda051f816b8dc97ef2654e65ebf8811c", + "0x2c2c3875ee79f7440d4b7bc1bfd06dd5e9d75c174f18f9091be67c10df0107f0", + "0x277b50117215ca93a24f36cf5ff8b662c8e99dcd6d2ab7c77d9d196d8cb784c8", + "0x1e3351da5560646b1d647e3c16e6bd296bb3a023d2a3d3513a541a5cc00eb77b", + "0x1b55898141641950c28efaee355e5e22e0a5957483d53838feecd2476bc548c5", + "0x2d062650294bc9feb938d47ec2b69aa40bfb355a0639b1acce5e0929b78e1ff2", + "0x2202c338275fb0e69facdea810407db28b731047d8287b8e459543cce6ca651d", + "0x23b81f93dff90e51c04976db97e315399ffd785b4abd7e07de65edb06fd82ea4", + "0x05285385df0c4ba869d50d852d5753ed85ccd95b8af6e24f23fae89bf4e9de56", + "0x122603e5b20cad6e28c3837aaa759f2e0b79485ad97238f2b5384cd30206bb46", + "0x2937e1d1c86fd2e492aeee4ffb47344c8c5f16a33c861a5212cf523ff34ba80c", + "0x0b44c33af931bb7d6a1069788636aa3c2b5416114e72dac6653239fea216198a", + "0x2c124d721b9450da44d29072b5e2e3e4499e9597121613761ea437cf1b1b760c", + "0x0812ac3f77950562a57d0102a31aaf6404c5a1a6a800b1cefcae9d73b68ddfc3", + "0x132833e4f679c418c78d7098317094c732a805d6db8c418cf406cf34de5e6140", + "0x237828774cc2144e3752d22485bf994bbf122a20cdcc47da83c25a9375ab5d52", + "0x0f72ee1596a4e6e329c21492ccadc586061cc02a3c2edcff72722d2dda26711e", + "0x13de05b7e80e13f33e6476e8af339f014a00d2396d6aa9eee9fb34a8dac5d2ce", + "0x10dc91a9be51eda8f0c721418b48ac66f4d1ababf55d0efced47199253abfb04", + "0x2d80bd8022077fbf7937c22e603bd2f313fd731025f12992fa8b5b9666d5bce2", + "0x203dca9ff43fbb542755667740b737383245de97288d372aad1c75ae689254b3", + "0x205d4e65731a6ecea7257ae262314942e407fc2a4faa48f8958ed95039dcab9a", + "0x1d90fc5d0977df29f5496bff70310f478cbe09b3bee47ec1a46adf477eafd287", + "0x06d808bc75fab95de4b678904cd39576c89ac1983a5d01b97fc28528f514e911", + "0x27e69aa121a30cd3998771549ace5082fc36ab51af55e70904f82b0674b98120", + "0x0ee4ac59d9984f0b85f1fbd0dd79e8ec1275251fde9c23dba2da88901742b7e0", + "0x261a072d012f94cfe81c2294ec35dd16de2b2b70f15187bf037c336b95c1f713", + "0x1baef56d9dfa8b6a80647a5746a6aa0bb97c076d449fd97797ca80a217e105c8", + "0x0b85db7191a4738f847879ee5e415e9eefe8fabe237fe031844759fb97d0bbef", + "0x276fafdf1cc5df690031c0dee3a11cdeab84e193cd5b0893c042a01298008a42", + "0x02483619dc78d723f054ef6d1fea4583d1166b637f2b83d756d1f71455cfc000", + "0x232fe82203791429ae1671c6a4629c23bee2a3b89e3cadb6eae7dd0240796199", + "0x1acc20c0176e2b6aa39ec9869798d62fb8d0b04e03517b5d4549733fd5fc9525", + "0x0ac25158b159ad41f1382433a2fe3140e1e959045c530967c2f26c362355d4b1", + "0x2ed4201a1b2d10c05a6bd464e9aab5e8522cf61dd1ddb43b42b4298fbfde4ae0", + "0x123059eb11eb5291029cc9c4ae6805ee8260ac6b6a6001de8e0d3a01996b54d8", + "0x219a91d5069702ca16a66eb4ab95d93578ec1aae0a9f2898652caad7866b7b62", + "0x1e456aadecdf8e1e2dbe4f12c96d708565878ba2d336a07e39687414be63b86f", + "0x2cbd90b82282aa05870c82e7e991159f8e3d66befdc42ade35114013a96bf7cf", + "0x01946494dc70a4d04426cadaf3b69bf08cb1c39c7ba36bf4ab449a3fe141a443", + "0x0000000000000000000000000000009dbf588713e6c1beec75b75a59415eed9e", + "0x00000000000000000000000000000000002ef1b5b92d3b6ead064836399dfe1a", + "0x0000000000000000000000000000005aeda262299b4f0e5254f5add280f0189d", + "0x000000000000000000000000000000000004f456ea09ba4e3c79c68d5ab9fd67", + "0x00000000000000000000000000000010a913c27027bcaee936498724c3fc22c5", + "0x00000000000000000000000000000000000bb9a02ed6e3761ff0096495cd29b4", + "0x00000000000000000000000000000096cafca3b5e3f45dc8b9bb4b72ecdf4c44", + "0x0000000000000000000000000000000000130bc0b83fa6788bb506b2a1147cc6", + "0x00000000000000000000000000000017c121ba26c268177d2b5f66f2555438e4", + "0x000000000000000000000000000000000007aaaeb8ae54e9c8cd4d2fdbfecb2e", + "0x000000000000000000000000000000235eaa9dde3057c044fc4a3da3c3fa8862", + "0x00000000000000000000000000000000000a208da4fff3841731ec250be8b969", + "0x147e96a18632ac1d1e0de083b2a9aeb338645c3f154b96e4a7af6eb5b1f153c4", + "0x00000000000000000000000000000042f03bb9dec28a91553ca889551d70ce23", + "0x00000000000000000000000000000000002b1cef3182242e4b540a725a38dbcc", + "0x000000000000000000000000000000d075b1cfb6fbd3684a85162480decc97fb", + "0x00000000000000000000000000000000001024211a9d91fa9382e683b70c947d", + "0x0000000000000000000000000000001f8134e717d0e68ab497d70da253380874", + "0x00000000000000000000000000000000000033abce2d06579156008ab808faa4", + "0x000000000000000000000000000000b7a54404cd2ebd403464c2a3d6a36f3c31", + "0x00000000000000000000000000000000002d353edb5b62fe421cc3cb0f6dfcd3", + "0x000000000000000000000000000000ef05825e0a53f9da354e7f5a1b2c6faa69", + "0x000000000000000000000000000000000012c4fbd830ff88ce3db137b4cd2641", + "0x000000000000000000000000000000fe89befd1e0ba858b37b7b6ee9dbce7836", + "0x0000000000000000000000000000000000024ba6fa786dfbabe1da474e5be127", + "0x000000000000000000000000000000b3f67684d59a8642b8522db5c017f48a06", + "0x000000000000000000000000000000000001be61c87bb9f2a9fab10822396753", + "0x00000000000000000000000000000067726edc30c8e21e00b916294f7b7d04a7", + "0x00000000000000000000000000000000001e1108f4128df29608e16eef14b237", + "0x00000000000000000000000000000009b4100769505d9fbb355d32efb9caf4a5", + "0x000000000000000000000000000000000014b1ebc0be478ee0ba0e9c00cabfd2", + "0x000000000000000000000000000000025755b6fdb279846a0c4df06e98fba2cb", + "0x00000000000000000000000000000000000f0ba88bdf0879986b0a0991de5a3b", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0aa1f61d762d56a759501f2622cb146d49e4c42fdf3565e99090af3e48c1bae2", + "0x07d69367dc2862f2905bb620e35b00eb0cd697359d15940c0c0a1a973fc11940", + "0x2ad880174ad13ecc05c2f0f96e01b8da8b16d8078fca5876a38b1599206139ec", + "0x100e5f56ed5d727942c7e8b82307e4ef6d28acdb86581d73b179dc70da0b584e", + "0x233adc6792b9b400ca5b99e6ee4f9f83b5d52fdf3f9229de1a09177a4ffcb3ae", + "0x2b73fa7f1d3c5681f7b27a914c1261b2c53a068964ca839f4d70900214f95fda", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x18ebd81885a0412d1d3dfab05494aa49fe09b752f8435abf17a50d6ff237a3aa", + "0x198e58c3124434167e49dc6738fa6bb1a67fe79498acdc6bc0257246a02a2db8", + "0x01eed9c370ade9ded9ce7e38c7f273ec09ce40ebc4b1e6c6ff40df2509995e56", + "0x00a5cae3b504f5816e58319da868ef508be79ce83ffe9639d2fa18321ae4e307", + "0x000000000000000000000000000000ba5fbf9efa91012112a3ab3a1ddf7add94", + "0x00000000000000000000000000000000000569e796165bc70bde9c2815fec95e", + "0x000000000000000000000000000000cf229d07cd4d0a91142ff87fb085288ee1", + "0x00000000000000000000000000000000002e92b58c2163690a3b6e6bf9124fe7", + "0x0000000000000000000000000000005b93372f0cea6494ee8301cb67e60c3214", + "0x000000000000000000000000000000000005104dd2686d16b5630a80c6d733c2", + "0x000000000000000000000000000000f2bc890c4db91fca6fb2e1d667a3750b5b", + "0x0000000000000000000000000000000000056d78e2f79ebce1c00919f0e30533" + ], + "vkAsFields": [ + "0x0000000000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000011", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000003ec71e4b90dedbd1190774d9599b00f475", + "0x000000000000000000000000000000000018832ef6f861939f145f0e30582413", + "0x0000000000000000000000000000007404f9c77e8701acbdfb9c2f660c9f74f3", + "0x00000000000000000000000000000000001bb29fb6cf49e364a9c42046f71cd9", + "0x00000000000000000000000000000038fff81623196318453bde436af9cae19e", + "0x000000000000000000000000000000000028d59ee562547ba540a0c4b7356e25", + "0x000000000000000000000000000000254a188fa8363b8cd8d018dfa7849655c1", + "0x00000000000000000000000000000000000cf529ae9f0a3093580caf6c164303", + "0x000000000000000000000000000000840a04914baeba45c69f384565706d50d4", + "0x00000000000000000000000000000000000d1fd4a7c87b98a07b0d858143929d", + "0x000000000000000000000000000000a266812d302f56488b4ad779eea34ac08d", + "0x00000000000000000000000000000000002e6740e7868accd81d6b795013f4b7", + "0x00000000000000000000000000000083a3fd9f6c1842aa9e1a7a78337a70f132", + "0x00000000000000000000000000000000000d3b5a36d122996a68eaeefe816e88", + "0x0000000000000000000000000000006a487f2289768ce23203d7a034664b63c7", + "0x00000000000000000000000000000000000ec84d0ac7d782263c67330da3247e", + "0x000000000000000000000000000000087abaff44376a4df96fb6926b793e63fd", + "0x00000000000000000000000000000000000a0ae04d2d1bb2e3cd7b6fad07bf7c", + "0x00000000000000000000000000000075e02009c1caf2d2ab15b1191f58a4ee63", + "0x00000000000000000000000000000000001dcfebc7dda1cfebd47d6415491ad5", + "0x0000000000000000000000000000007aa9f7482e16fe534fddd80e18b0c27b71", + "0x000000000000000000000000000000000010b29cedac5b8ab080b332d463a754", + "0x0000000000000000000000000000009a5575740654296236221d2e4b8ce03564", + "0x00000000000000000000000000000000002f5328da71c0492eb821671303b366", + "0x000000000000000000000000000000bc3661650d53f9b24d923d8f404cb0bbc9", + "0x00000000000000000000000000000000000c4032c3079594eb75a8449d3d5ce8", + "0x00000000000000000000000000000054eb5fe796a0ca89441369b7c24301f851", + "0x00000000000000000000000000000000001084d709650356d40f0158fd6da81f", + "0x00000000000000000000000000000081d43b93567d1c04085a7c730f3fbab0b4", + "0x0000000000000000000000000000000000239440033bf69ad10f0e7f7b3827b0", + "0x00000000000000000000000000000070f7eb59afb67d46049060182b3a3031e0", + "0x00000000000000000000000000000000002a7b208916cd55d7851ad2cb5f37d1", + "0x0000000000000000000000000000003168c6122c62eb140d44ec7b828670ed21", + "0x000000000000000000000000000000000003d729623f750c109946571fe91602", + "0x000000000000000000000000000000628f597c7ffdd7f3db8aebf06ad997121b", + "0x000000000000000000000000000000000016acec73b66d0718cd8fa55e28230e", + "0x0000000000000000000000000000003c9ccaed6c818aec016564b9d20546420e", + "0x000000000000000000000000000000000009ae89a66d21b3935a35a9121b585d", + "0x0000000000000000000000000000004f49608b8dabdb5bae42e49d7dc87718fc", + "0x0000000000000000000000000000000000238885874b51e624f461a53d13ddd9", + "0x000000000000000000000000000000cc09514245ea3d51b5e0cfb9d03f716176", + "0x0000000000000000000000000000000000111978f82f6799416bb74536d26ba4", + "0x0000000000000000000000000000004d9d41c63032ee2c53652fb7bbe7f46b59", + "0x00000000000000000000000000000000001ce3b1e6a9295a10d0762b2a15a0a2", + "0x00000000000000000000000000000031884d3aea9395868530b6ff1d43cf4c9f", + "0x0000000000000000000000000000000000060a5821477f45e5418aa349cce9bd", + "0x00000000000000000000000000000087766b7ab4ceca193af8e929ad4559f779", + "0x00000000000000000000000000000000002e63113a251f8dd080b2707f376f0d", + "0x00000000000000000000000000000065c1a15e08a3d43232b80252c02ef2a945", + "0x00000000000000000000000000000000000e919ca69175aa7eff56dab325133f", + "0x000000000000000000000000000000c2f0341e07ad101c562bececd18eea336b", + "0x00000000000000000000000000000000002fb5b2bbb32e603a93e5863eac3e03", + "0x000000000000000000000000000000389a81af3d4853e510d9df4e8c36d54e45", + "0x00000000000000000000000000000000001d3ed367550f1206a37b3a3c4b2106", + "0x000000000000000000000000000000b8b47e46126e62e19638c3e6dc0d5e0d50", + "0x00000000000000000000000000000000001f8dcb80dc997ddc21831957ea610d", + "0x0000000000000000000000000000007910474fb9ca8f5331e3b5b4b23585ced4", + "0x00000000000000000000000000000000000b5824becf112e94e0dbd88091185f", + "0x0000000000000000000000000000001549abbbd367c3baf70ae56954086bb8a4", + "0x00000000000000000000000000000000002d3c9dfbb86071ded41f2978b8b731", + "0x0000000000000000000000000000007dbb016d01b957e3d6c353b1029c746896", + "0x0000000000000000000000000000000000298600784f5f4f96be815e80a49090", + "0x0000000000000000000000000000008b3e2c1136cb92ddae1f5dfaa54eae1742", + "0x00000000000000000000000000000000002f1e377138205c42164e56683e9374", + "0x00000000000000000000000000000091c16a7cffb9872695bceb3e04d1fc0fff", + "0x00000000000000000000000000000000001f6b20cd95f8cfc27358d2ccc7c458", + "0x00000000000000000000000000000085fce595b83d0a7e070d0e6bf619b2a933", + "0x00000000000000000000000000000000002c741c698b4b115aa4aded9843f7bf", + "0x0000000000000000000000000000004cced4953efd905b73895c4089bfd63c05", + "0x00000000000000000000000000000000001f1349a17dac1dc782ef684fad18f4", + "0x000000000000000000000000000000a2a35ef10d25a652c4da5cc6706de36b50", + "0x00000000000000000000000000000000002620429f62f3d2062cfcf2937c739b", + "0x000000000000000000000000000000c3b50098dc535000ceb7f97c0fe011f1b7", + "0x0000000000000000000000000000000000154073b5c8d8573c535fdd70cac403", + "0x000000000000000000000000000000dcae1e51ed39b5f4d3bc812833e1513872", + "0x00000000000000000000000000000000001cc961299d32d871567d0a05a9c6a2", + "0x0000000000000000000000000000006729469d309b6b4f9df489bafacb0fe597", + "0x000000000000000000000000000000000012f640195ef6e0f68f46a1a731c1b3", + "0x000000000000000000000000000000bbd49623feabb3f7d09958e3c35c1933ef", + "0x00000000000000000000000000000000001e845fdb9f608005e8b8cfb62d889e", + "0x0000000000000000000000000000001b98622ec08e1c413c8c733b91efff73d8", + "0x00000000000000000000000000000000001e10a1cdbbfd06aa48ce2d95f6d31a", + "0x00000000000000000000000000000034ca14f21dda2707e7b56232980b8d7612", + "0x00000000000000000000000000000000000778ec6511854ff00c2b4c0637235d", + "0x000000000000000000000000000000f7a9b7201a5f06d9074f1319c18d3277b1", + "0x00000000000000000000000000000000002590288b9781049afa72dbbe093e84", + "0x000000000000000000000000000000c86742c123b916ef3ae23b7252531625df", + "0x0000000000000000000000000000000000231a49544e5bd18b4b6bbfd586ac6f", + "0x0000000000000000000000000000002b1c1c2637db3f8fecd9d8bb38442cc468", + "0x00000000000000000000000000000000000450f8716810dff987300c3bc10a89", + "0x0000000000000000000000000000005db2bf83f8a194086a4cca39916b578faf", + "0x000000000000000000000000000000000010005567f9eb3d3a97098baa0d71c6", + "0x00000000000000000000000000000031e12e1ce3a444583203ea04c16ec69eb2", + "0x0000000000000000000000000000000000103bcf2cf468d53c71d57b5c0ab312", + "0x0000000000000000000000000000004207277f4116e0af5a9268b38a5d34910b", + "0x00000000000000000000000000000000000c5d6e7a8b0b14d4ed8f51217ae8af", + "0x00000000000000000000000000000083c120acb66ce414b5147c31531392c530", + "0x00000000000000000000000000000000000924c2d3fa7bd443b6244e3f291798", + "0x00000000000000000000000000000098a8086106f1eaaf33ee0b012cbd77066f", + "0x000000000000000000000000000000000007e5e59aa353dc977d4e0822141799", + "0x000000000000000000000000000000eb0ab515191143e5a3c8bd587526486628", + "0x0000000000000000000000000000000000132b76a71278e567595f3aaf837a72", + "0x0000000000000000000000000000002c37ccc495848c2887f98bfbaca776ca39", + "0x00000000000000000000000000000000002c6b2a0de0a3fefdfc4fb4f3b8381d", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000008ac3a6c421670e38c0dc3c25a2bc1c99a3", + "0x00000000000000000000000000000000002b16bf789b403ccfa9eaec709ef0a5", + "0x0000000000000000000000000000009f99442369ad6471141935f624091e00ce", + "0x0000000000000000000000000000000000003e32265330f4df92da33dcba259d" + ], + "vkHash": "0x03944d02e28ed29fce7397ca67913e98c379da3171880e2ffff1159172d96894", + "publicInputs": [ + "0x0000000000000000000000000000000000000000000000000000000000000002" + ] +} \ No newline at end of file diff --git a/recursive_verification/debug.sh b/recursive_verification/debug.sh new file mode 100755 index 0000000..62b0060 --- /dev/null +++ b/recursive_verification/debug.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +rm -rf contract/artifacts contract/codegenCache.json ~/.bb/00000000.00000000.00000000/vk_cache ivc +bun install +bash -i <(curl -s https://install.aztec.network) +aztec-up 3.0.0-devnet.4 +docker tag aztecprotocol/aztec:3.0.0-devnet.4 aztecprotocol/aztec:latest +cd circuit && aztec-nargo compile && aztec-nargo execute && cd .. +bun data +bun ccc \ No newline at end of file diff --git a/recursive_verification/package.json b/recursive_verification/package.json new file mode 100644 index 0000000..d2394c4 --- /dev/null +++ b/recursive_verification/package.json @@ -0,0 +1,33 @@ +{ + "name": "bb_gen_proof_inputs", + "module": "index.ts", + "type": "module", + "scripts": { + "clean": "rm -rf store", + "cli": "bun run cli.ts", + "ccc": "cd contract && aztec-nargo compile && aztec-postprocess-contract && aztec codegen target -o artifacts", + "data": "bun run scripts/generate_data.ts", + "recursion": "tsx scripts/run_recursion.ts", + "test": "bun clean && bun test", + "test:watch": "bun test --watch" + }, + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "dependencies": { + "@aztec/accounts": "3.0.0-devnet.4", + "@aztec/aztec.js": "3.0.0-devnet.4", + "@aztec/bb.js": "3.0.0-devnet.4", + "@aztec/kv-store": "3.0.0-devnet.4", + "@aztec/noir-contracts.js": "3.0.0-devnet.4", + "@aztec/noir-noir_js": "3.0.0-devnet.4", + "@aztec/pxe": "3.0.0-devnet.4", + "@aztec/test-wallet": "3.0.0-devnet.4", + "add": "^2.0.6", + "tsx": "^4.20.6" + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" +} diff --git a/recursive_verification/run-tests.sh b/recursive_verification/run-tests.sh new file mode 100755 index 0000000..3139efd --- /dev/null +++ b/recursive_verification/run-tests.sh @@ -0,0 +1,50 @@ +#!/bin/bash +# Script to run the full test suite for recursive verification + +set -e # Exit on error + +echo "=========================================" +echo "Recursive Verification Test Runner" +echo "=========================================" + +# Check if Aztec sandbox is running +echo "" +echo "Checking Aztec sandbox status..." +if ! curl -s http://localhost:8080/status > /dev/null 2>&1; then + echo "❌ Aztec sandbox is not running!" + echo "Please start it with: aztec start --sandbox" + exit 1 +else + echo "✅ Aztec sandbox is running" +fi + +# Compile the Noir circuit +echo "" +echo "Compiling Noir circuit..." +cd circuit && aztec-nargo compile && cd .. +echo "✅ Circuit compiled" + +# Compile the Aztec contract +echo "" +echo "Compiling Aztec contract and generating TypeScript bindings..." +bun ccc +echo "✅ Contract compiled and bindings generated" + +# Generate proof data +echo "" +echo "Generating proof data..." +bun data +echo "✅ Proof data generated (data.json)" + +# Run the tests +echo "" +echo "=========================================" +echo "Running test suite..." +echo "=========================================" +echo "" +bun test + +echo "" +echo "=========================================" +echo "✅ All tests completed!" +echo "=========================================" \ No newline at end of file diff --git a/recursive_verification/scripts/generate_data.ts b/recursive_verification/scripts/generate_data.ts new file mode 100644 index 0000000..6ef1858 --- /dev/null +++ b/recursive_verification/scripts/generate_data.ts @@ -0,0 +1,26 @@ +import { Noir } from '@aztec/noir-noir_js'; +import circuitJson from '../circuit/target/hello_circuit.json' with { type: "json" } +import { Barretenberg, deflattenFields, UltraHonkBackend } from '@aztec/bb.js'; +import fs from 'fs' +import { exit } from 'process'; + +const helloWorld = new Noir(circuitJson as any) + +const { witness: mainWitness } = await helloWorld.execute({ x: 1, y: 2 }) + +const mainBackend = new UltraHonkBackend(circuitJson.bytecode, { threads: 1 }) +const mainProofData = await mainBackend.generateProof(mainWitness) + +let recursiveProofArtifacts = await mainBackend.generateRecursiveProofArtifacts(mainProofData.proof, 1) + +const isValid = await mainBackend.verifyProof(mainProofData) +console.log(`Proof verification: ${isValid ? 'SUCCESS' : 'FAILED'}`) + +const proofAsFields = deflattenFields(mainProofData.proof) +const barretenbergAPI = await Barretenberg.new({ threads: 1 }); + +// write recursive proof artifacts and public inputs to file, add pu +fs.writeFileSync('data.json', JSON.stringify({ ...recursiveProofArtifacts, proofAsFields, publicInputs: mainProofData.publicInputs }, null, 2)) +await barretenbergAPI.destroy() +console.log("Done") +exit() diff --git a/recursive_verification/scripts/run_recursion.ts b/recursive_verification/scripts/run_recursion.ts new file mode 100644 index 0000000..5642256 --- /dev/null +++ b/recursive_verification/scripts/run_recursion.ts @@ -0,0 +1,126 @@ +import { createAztecNodeClient } from "@aztec/aztec.js/node"; +import { SponsoredFeePaymentMethod } from "@aztec/aztec.js/fee"; +import type { FieldLike } from "@aztec/aztec.js/abi"; +import { getSponsoredFPCInstance } from "./sponsored_fpc.js"; +import { SponsoredFPCContract } from "@aztec/noir-contracts.js/SponsoredFPC"; +import { ValueNotEqualContract } from "../contract/artifacts/ValueNotEqual"; +import data from "../data.json"; +import { getPXEConfig } from "@aztec/pxe/config"; +import { TestWallet } from "@aztec/test-wallet/server"; +import { AztecAddress } from "@aztec/aztec.js/addresses"; +import { rm } from "node:fs/promises"; +import { join } from "node:path"; +import { mkdir, writeFile } from "node:fs/promises"; +import { serializePrivateExecutionSteps } from "@aztec/stdlib/kernel"; +import type { + ContractFunctionInteraction, + DeployMethod, + DeployOptions, + SendInteractionOptions, +} from "@aztec/aztec.js/contracts"; +import assert from "node:assert"; + +export const NODE_URL = "http://localhost:8080"; + +const sponsoredFPC = await getSponsoredFPCInstance(); +const sponsoredPaymentMethod = new SponsoredFeePaymentMethod( + sponsoredFPC.address +); + +async function captureProfile( + interaction: ContractFunctionInteraction | DeployMethod, + opts: SendInteractionOptions | DeployOptions, + label: string +) { + const result = await interaction.profile({ + ...opts, + profileMode: "full", + skipProofGeneration: true, + }); + const ivcFolder = process.env.CAPTURE_IVC_FOLDER ?? "ivc"; + const resultsDirectory = join(ivcFolder, label); + await mkdir(resultsDirectory, { recursive: true }); + const ivcInputsPath = join(resultsDirectory, "ivc-inputs.msgpack"); + await writeFile( + ivcInputsPath, + serializePrivateExecutionSteps(result.executionSteps) + ); +} + +export const setupWallet = async (): Promise => { + try { + const aztecNode = await createAztecNodeClient(NODE_URL); + const config = getPXEConfig(); + await rm("pxe", { recursive: true, force: true }); + config.dataDirectory = "pxe"; + config.proverEnabled = true; + let wallet = await TestWallet.create(aztecNode, config); + await wallet.registerContract({ + instance: sponsoredFPC, + artifact: SponsoredFPCContract.artifact, + }); + + return wallet; + } catch (error) { + console.error("Failed to setup sandbox:", error); + throw error; + } +}; + +async function main() { + const testWallet = await setupWallet(); + const account = await testWallet.createAccount(); + const manager = await account.getDeployMethod(); + await manager + .send({ + from: AztecAddress.ZERO, + fee: { paymentMethod: sponsoredPaymentMethod }, + }) + .deployed(); + const accounts = await testWallet.getAccounts(); + + const valueNotEqual = await ValueNotEqualContract.deploy( + testWallet, + 10, + accounts[0].item + ) + .send({ + from: accounts[0].item, + fee: { paymentMethod: sponsoredPaymentMethod }, + }) + .deployed(); + + const opts = { + from: accounts[0].item, + fee: { paymentMethod: sponsoredPaymentMethod }, + }; + + const interaction = await valueNotEqual.methods.increment( + accounts[0].item, + data.vkAsFields as unknown as FieldLike[], + data.proofAsFields as unknown as FieldLike[], + data.publicInputs as unknown as FieldLike[], + data.vkHash as unknown as FieldLike + ); + + await captureProfile(interaction, opts, "recursion"); + + let counterValue = await valueNotEqual.methods + .get_counter(accounts[0].item) + .simulate({ from: accounts[0].item }); + console.log(`Counter value: ${counterValue}`); + + await interaction.send(opts).wait(); + + counterValue = await valueNotEqual.methods + .get_counter(accounts[0].item) + .simulate({ from: accounts[0].item }); + console.log(`Counter value: ${counterValue}`); + + assert(counterValue === 11n); +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/recursive_verification/scripts/sponsored_fpc.ts b/recursive_verification/scripts/sponsored_fpc.ts new file mode 100644 index 0000000..58ee137 --- /dev/null +++ b/recursive_verification/scripts/sponsored_fpc.ts @@ -0,0 +1,26 @@ +import { type ContractInstanceWithAddress, getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts'; +import { Fr } from '@aztec/aztec.js/fields'; +import type { Wallet } from '@aztec/aztec.js/wallet'; +import type { LogFn } from '@aztec/foundation/log'; +import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC'; + +const SPONSORED_FPC_SALT = new Fr(BigInt(0)); + +export async function getSponsoredFPCInstance(): Promise { + return await getContractInstanceFromInstantiationParams(SponsoredFPCContract.artifact, { + salt: SPONSORED_FPC_SALT, + }); +} + +export async function getSponsoredFPCAddress() { + return (await getSponsoredFPCInstance()).address; +} + +export async function setupSponsoredFPC(wallet: Wallet) { + const instance = await getContractInstanceFromInstantiationParams(SponsoredFPCContract.artifact, { + salt: new Fr(SPONSORED_FPC_SALT), + }); + + await wallet.registerContract({ instance, artifact: SponsoredFPCContract.artifact }); + return instance; +} diff --git a/recursive_verification/tests/README.md b/recursive_verification/tests/README.md new file mode 100644 index 0000000..f84481c --- /dev/null +++ b/recursive_verification/tests/README.md @@ -0,0 +1,74 @@ +# Recursive Verification Tests + +This directory contains tests for the recursive verification proof system using Bun's built-in test runner. + +## Prerequisites + +1. Ensure the Aztec sandbox is running: +```bash +aztec start --sandbox +``` + +2. Compile the contracts and generate proof data: +```bash +# Compile the Noir circuit +cd ../circuit && aztec-nargo compile && cd .. + +# Compile contract and generate TypeScript bindings +bun ccc + +# Generate proof data (creates data.json) +bun data +``` + +## Running Tests + +Run all tests: +```bash +bun test +``` + +Run tests in watch mode (re-runs on file changes): +```bash +bun test:watch +``` + +Run a specific test file: +```bash +bun test recursive_verification.test.ts +``` + +## Test Coverage + +The test suite covers: + +1. **Contract Deployment**: Verifies the ValueNotEqual contract deploys successfully +2. **Proof Verification**: Tests that valid proofs are accepted and counter increments +3. **Counter State**: Ensures counter values persist and update correctly +4. **Multiple Increments**: Verifies the contract can process multiple proofs +5. **User Isolation**: Tests that different users maintain separate counters +6. **Invalid Proof Rejection**: Ensures invalid proofs are rejected + +## Test Structure + +Each test case: +- Uses a 60-second timeout to accommodate proof verification time +- Includes proper assertions using Bun's expect API +- Logs important information for debugging +- Handles async operations properly + +## Debugging + +If tests fail: + +1. Check the Aztec sandbox is running: `aztec status` +2. Verify proof data exists: `ls ../data.json` +3. Ensure contracts are compiled: `ls ../contract/artifacts/` +4. Check PXE connection at http://localhost:8080 + +## Notes + +- Tests require the Aztec sandbox to be running at `http://localhost:8080` +- Proof verification can take 10-30 seconds depending on system resources +- The test suite uses the same proof data (`data.json`) as the original script +- Each test is independent and can be run in isolation \ No newline at end of file diff --git a/recursive_verification/tests/recursive_verification.test.ts b/recursive_verification/tests/recursive_verification.test.ts new file mode 100644 index 0000000..97ef2f8 --- /dev/null +++ b/recursive_verification/tests/recursive_verification.test.ts @@ -0,0 +1,137 @@ +import { describe, expect, test, beforeAll } from "bun:test" +import { AccountWalletWithSecretKey, Contract, createPXEClient, waitForPXE, type FieldLike, type PXE, TxStatus } from "@aztec/aztec.js" +import { getInitialTestAccountsWallets } from '@aztec/accounts/testing' +import { ValueNotEqualContract, ValueNotEqualContractArtifact } from '../contract/artifacts/ValueNotEqual' +import data from '../data.json' + +const PXE_URL = 'http://localhost:8080' + +// Test timeout - proof verification can take some time +const TEST_TIMEOUT = 60000 // 60 seconds + +describe("Recursive Verification", () => { + let pxe: PXE + let owner: AccountWalletWithSecretKey + let user1: AccountWalletWithSecretKey + let user2: AccountWalletWithSecretKey + let valueNotEqualContract: ValueNotEqualContract + + beforeAll(async () => { + // Setup PXE client + console.log(`Connecting to PXE at ${PXE_URL}`) + pxe = await createPXEClient(PXE_URL) + await waitForPXE(pxe) + console.log('PXE client connected') + + // Setup wallets + const wallets = await getInitialTestAccountsWallets(pxe) + owner = wallets[0] + user1 = wallets[1] + user2 = wallets[2] + + console.log('Test wallets configured') + console.info('Owner address:', owner.getAddress().toString()) + console.info('User1 address:', user1.getAddress().toString()) + console.info('User2 address:', user2.getAddress().toString()) + }, TEST_TIMEOUT) + + test("should deploy ValueNotEqual contract", async () => { + const initialValue = 10 + + valueNotEqualContract = await Contract.deploy( + owner, + ValueNotEqualContractArtifact, + [initialValue, owner.getAddress()], + 'initialize' + ).send({ from: owner.getAddress() }).deployed() as ValueNotEqualContract + + expect(valueNotEqualContract.address).toBeDefined() + expect(valueNotEqualContract.address.toString()).not.toBe("") + + console.log("Contract deployed at address:", valueNotEqualContract.address.toString()) + }, TEST_TIMEOUT) + + test("should verify proof and increment counter", async () => { + // Call increment with proof data + const tx = await valueNotEqualContract.methods.increment( + owner.getAddress(), + data.vkAsFields as unknown as FieldLike[], + data.proofAsFields as unknown as FieldLike[], + data.publicInputs as unknown as FieldLike[], + data.vkHash as unknown as FieldLike, + ).send({ from: owner.getAddress() }).wait() + + expect(tx).toBeDefined() + expect(tx.txHash).toBeDefined() + expect(tx.status).toBe(TxStatus.SUCCESS) + + console.log(`Transaction hash: ${tx.txHash.toString()}`) + console.log(`Transaction status: ${tx.status}`) + }, TEST_TIMEOUT) + + test("should read incremented counter value", async () => { + const counterValue = await valueNotEqualContract.methods.get_counter( + owner.getAddress() + ).simulate({ from: owner.getAddress() }) + + // Initial value was 10, after increment should be 11 + expect(counterValue).toBe(11n) + + console.log(`Counter value after increment: ${counterValue}`) + }, TEST_TIMEOUT) + + test("should verify proof and increment counter again", async () => { + // Second increment to verify the contract works multiple times + const tx = await valueNotEqualContract.methods.increment( + owner.getAddress(), + data.vkAsFields as unknown as FieldLike[], + data.proofAsFields as unknown as FieldLike[], + data.publicInputs as unknown as FieldLike[], + data.vkHash as unknown as FieldLike + ).send({ from: owner.getAddress() }).wait() + + expect(tx).toBeDefined() + expect(tx.txHash).toBeDefined() + expect(tx.status).toBe(TxStatus.SUCCESS) + + // Check counter value is now 12 + const counterValue = await valueNotEqualContract.methods.get_counter( + owner.getAddress() + ).simulate({ from: owner.getAddress() }) + + expect(counterValue).toBe(12n) + + console.log(`Counter value after second increment: ${counterValue}`) + }, TEST_TIMEOUT) + + test("should maintain separate counters for different users", async () => { + const initialValue = 5 + + // Deploy a new contract instance for user1 + const user1Contract = await Contract.deploy( + user1, + ValueNotEqualContractArtifact, + [initialValue, user1.getAddress()], + 'initialize' + ).send({ from: user1.getAddress() }).deployed() as ValueNotEqualContract + + // Increment user1's counter + await user1Contract.methods.increment( + user1.getAddress(), + data.vkAsFields as unknown as FieldLike[], + data.proofAsFields as unknown as FieldLike[], + data.publicInputs as unknown as FieldLike[], + data.vkHash as unknown as FieldLike + ).send({ from: user1.getAddress() }).wait() + + // Check user1's counter + const user1Counter = await user1Contract.methods.get_counter( + user1.getAddress() + ).simulate({ from: user1.getAddress() }) + + expect(user1Counter).toBe(6n) // 5 + 1 + + console.log(`User1 counter value: ${user1Counter}`) + }, TEST_TIMEOUT) + +}) \ No newline at end of file diff --git a/recursive_verification/tsconfig.json b/recursive_verification/tsconfig.json new file mode 100644 index 0000000..d202670 --- /dev/null +++ b/recursive_verification/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "lib": ["ESNext"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/starter-token/.gitignore b/starter-token/.gitignore deleted file mode 100644 index b240469..0000000 --- a/starter-token/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -dist -artifacts -codegenCache.json diff --git a/starter-token/reference/contract/Nargo.toml b/starter-token/reference/contract/Nargo.toml deleted file mode 100644 index 5061f5f..0000000 --- a/starter-token/reference/contract/Nargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "starter_token_contract" -authors = [""] -compiler_version = ">=1.0.0" -type = "contract" - -[dependencies] -aztec = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v2.0.2", directory = "noir-projects/aztec-nr/aztec" } -easy_private_state = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v2.0.2", directory = "noir-projects/aztec-nr/easy-private-state" } diff --git a/starter-token/reference/contract/src/main.nr b/starter-token/reference/contract/src/main.nr deleted file mode 100644 index 7f8cb34..0000000 --- a/starter-token/reference/contract/src/main.nr +++ /dev/null @@ -1,85 +0,0 @@ -use aztec::macros::aztec; - -#[aztec] -pub contract StarterToken { - use aztec::macros::{ - functions::{initializer, private, public, utility, internal}, - storage::storage, - }; - use aztec::state_vars::{PublicMutable, Map}; - use aztec::protocol_types::address::AztecAddress; - - use easy_private_state::EasyPrivateUint; - - #[storage] - struct Storage { - owner: PublicMutable, - balances: Map, Context>, - // =============== - private_balances: Map, Context> - } - - #[initializer] - #[public] - fn setup() { - // The deployer becomes the owner - storage.owner.write(context.msg_sender()); - } - - #[public] - fn mint(to: AztecAddress, amount: u128) { - assert_eq(context.msg_sender(), storage.owner.read()); - - let recipient_balance = storage.balances.at(to).read(); - storage.balances.at(to).write(recipient_balance + amount); - } - - #[public] - fn transfer(to: AztecAddress, amount: u128) { - let sender = context.msg_sender(); - let sender_balance = storage.balances.at(sender).read(); - - assert(sender_balance >= amount, "Insufficient balance"); - - storage.balances.at(sender).write(sender_balance - amount); - - let recipient_balance = storage.balances.at(to).read(); - storage.balances.at(to).write(recipient_balance + amount); - } - - #[public] - fn transfer_ownership(new_owner: AztecAddress) { - assert_eq(context.msg_sender(), storage.owner.read()); - storage.owner.write(new_owner); - } - - // =============== - - #[private] - fn mint_private(to: AztecAddress, amount: u64) { - // Enqueue public validation - StarterToken::at(context.this_address())._assert_is_owner(context.msg_sender()).enqueue(&mut context); - - storage.private_balances.at(to).add(amount, to); - } - - #[private] - fn transfer_private(to: AztecAddress, amount: u64) { - let sender = context.msg_sender(); - - storage.private_balances.at(sender).sub(amount, sender); - - storage.private_balances.at(to).add(amount, to); - } - - #[utility] - unconstrained fn view_private_balance(owner: AztecAddress) -> Field { - storage.private_balances.at(owner).get_value() - } - - #[public] - #[internal] - fn _assert_is_owner(maybe_owner: AztecAddress) { - assert_eq(maybe_owner, storage.owner.read()); - } -} diff --git a/starter-token/reference/external-call-contract/Nargo.toml b/starter-token/reference/external-call-contract/Nargo.toml deleted file mode 100644 index f2b7135..0000000 --- a/starter-token/reference/external-call-contract/Nargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "external_call_contract" -authors = [""] -compiler_version = ">=1.0.0" -type = "contract" - -[dependencies] -aztec = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v2.0.2", directory = "noir-projects/aztec-nr/aztec" } -starter_token = { path = "../nr" } diff --git a/starter-token/reference/external-call-contract/src/main.nr b/starter-token/reference/external-call-contract/src/main.nr deleted file mode 100644 index ae65ba7..0000000 --- a/starter-token/reference/external-call-contract/src/main.nr +++ /dev/null @@ -1,16 +0,0 @@ -use aztec::macros::aztec; - -#[aztec] -pub contract ExternalCall { - use aztec::{ - macros::functions::private, - protocol_types::address::AztecAddress, - }; - - use dep::starter_token::StarterToken; - - #[private] - fn call_mint_on_other_contract(contract_address: AztecAddress, to: AztecAddress, amount: u64) { - StarterToken::at(contract_address).mint_private(to, amount).call(&mut context); - } -} diff --git a/starter-token/reference/ts/package.json b/starter-token/reference/ts/package.json deleted file mode 100644 index ac11526..0000000 --- a/starter-token/reference/ts/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "getting-started", - "version": "1.0.0", - "description": "", - "license": "ISC", - "author": "", - "type": "module", - "scripts": { - "build": "npx tsc", - "start": "npm run build && node dist/src/index.js" - }, - "dependencies": { - "@aztec/accounts": "2.0.2", - "@aztec/aztec.js": "2.0.2" - }, - "devDependencies": { - "typescript": "^5.8.3" - } -} diff --git a/starter-token/reference/ts/src/index.ts b/starter-token/reference/ts/src/index.ts deleted file mode 100644 index 5f20276..0000000 --- a/starter-token/reference/ts/src/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { createPXEClient, waitForPXE } from '@aztec/aztec.js'; -import { StarterTokenContract } from '../artifacts/StarterToken.js'; -import { getInitialTestAccountsWallets } from '@aztec/accounts/testing'; - -const pxe = createPXEClient('http://localhost:8080'); -await waitForPXE(pxe); - -const wallets = await getInitialTestAccountsWallets(pxe); -const deployerWallet = wallets[0]; -const deployerAddress = deployerWallet.getAddress(); - -const starterTokenContract = await StarterTokenContract - .deploy(deployerWallet) - .send({ - from: deployerAddress - }).wait(); - -console.log(starterTokenContract.contract.address); diff --git a/starter-token/reference/ts/tsconfig.json b/starter-token/reference/ts/tsconfig.json deleted file mode 100644 index 2580288..0000000 --- a/starter-token/reference/ts/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "target": "esnext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - "module": "nodenext", /* Specify what module code is generated. */ - "moduleResolution": "nodenext", /* Specify how TypeScript looks up a file from a given module specifier. */ - "resolveJsonModule": true, /* Enable importing .json files. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - "strict": true, /* Enable all strict type-checking options. */ - "skipLibCheck": true, /* Skip type checking all .d.ts files. */ - "outDir": "./dist" - } -} diff --git a/starter-token/start-here/contract/Nargo.toml b/starter-token/start-here/contract/Nargo.toml deleted file mode 100644 index 5061f5f..0000000 --- a/starter-token/start-here/contract/Nargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "starter_token_contract" -authors = [""] -compiler_version = ">=1.0.0" -type = "contract" - -[dependencies] -aztec = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v2.0.2", directory = "noir-projects/aztec-nr/aztec" } -easy_private_state = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v2.0.2", directory = "noir-projects/aztec-nr/easy-private-state" } diff --git a/starter-token/start-here/contract/src/main.nr b/starter-token/start-here/contract/src/main.nr deleted file mode 100644 index 08bcca9..0000000 --- a/starter-token/start-here/contract/src/main.nr +++ /dev/null @@ -1,6 +0,0 @@ -use aztec::macros::aztec; - -#[aztec] -pub contract StarterToken { - // Start here ! -} diff --git a/starter-token/start-here/external-call-contract/Nargo.toml b/starter-token/start-here/external-call-contract/Nargo.toml deleted file mode 100644 index f2b7135..0000000 --- a/starter-token/start-here/external-call-contract/Nargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "external_call_contract" -authors = [""] -compiler_version = ">=1.0.0" -type = "contract" - -[dependencies] -aztec = { git = "https://github.com/AztecProtocol/aztec-packages/", tag = "v2.0.2", directory = "noir-projects/aztec-nr/aztec" } -starter_token = { path = "../nr" } diff --git a/starter-token/start-here/external-call-contract/src/main.nr b/starter-token/start-here/external-call-contract/src/main.nr deleted file mode 100644 index ae65ba7..0000000 --- a/starter-token/start-here/external-call-contract/src/main.nr +++ /dev/null @@ -1,16 +0,0 @@ -use aztec::macros::aztec; - -#[aztec] -pub contract ExternalCall { - use aztec::{ - macros::functions::private, - protocol_types::address::AztecAddress, - }; - - use dep::starter_token::StarterToken; - - #[private] - fn call_mint_on_other_contract(contract_address: AztecAddress, to: AztecAddress, amount: u64) { - StarterToken::at(contract_address).mint_private(to, amount).call(&mut context); - } -} diff --git a/starter-token/start-here/ts/package.json b/starter-token/start-here/ts/package.json deleted file mode 100644 index 526c9a0..0000000 --- a/starter-token/start-here/ts/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "getting-started", - "version": "1.0.0", - "description": "", - "license": "ISC", - "author": "", - "type": "module", - "scripts": { - "build": "npx tsc", - "start": "npm run build && node dist/ts/src/index.js" - }, - "dependencies": { - "@aztec/accounts": "2.0.2", - "@aztec/aztec.js": "2.0.2" - }, - "devDependencies": { - "typescript": "^5.8.3" - } -} diff --git a/starter-token/start-here/ts/src/index.ts b/starter-token/start-here/ts/src/index.ts deleted file mode 100644 index 20c7cc5..0000000 --- a/starter-token/start-here/ts/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { StarterTokenContract } from '../artifacts/StarterToken.js'; - -// Start here ! \ No newline at end of file diff --git a/starter-token/start-here/ts/tsconfig.json b/starter-token/start-here/ts/tsconfig.json deleted file mode 100644 index 2580288..0000000 --- a/starter-token/start-here/ts/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "target": "esnext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - "module": "nodenext", /* Specify what module code is generated. */ - "moduleResolution": "nodenext", /* Specify how TypeScript looks up a file from a given module specifier. */ - "resolveJsonModule": true, /* Enable importing .json files. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - "strict": true, /* Enable all strict type-checking options. */ - "skipLibCheck": true, /* Skip type checking all .d.ts files. */ - "outDir": "./dist" - } -} diff --git a/starter-token/start-here/ts/yarn.lock b/starter-token/start-here/ts/yarn.lock deleted file mode 100644 index 6369e3b..0000000 --- a/starter-token/start-here/ts/yarn.lock +++ /dev/null @@ -1,1932 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@adraffy/ens-normalize@^1.10.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz#6c2d657d4b2dfb37f8ea811dcb3e60843d4ac24a" - integrity sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ== - -"@aztec/accounts@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aztec/accounts/-/accounts-2.0.2.tgz#37986b54968324bc711211d471b81e006869627d" - integrity sha512-BZFQuRBCAJe+IZtlfASRk7Ae0x8B8decq+EhFvd258ShkVqw9uKoH4AKEQqQ3W1hJnJ/mnXRrpgt9Kdl/D67NA== - dependencies: - "@aztec/aztec.js" "2.0.2" - "@aztec/entrypoints" "2.0.2" - "@aztec/ethereum" "2.0.2" - "@aztec/foundation" "2.0.2" - "@aztec/stdlib" "2.0.2" - tslib "^2.4.0" - -"@aztec/aztec.js@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aztec/aztec.js/-/aztec.js-2.0.2.tgz#12428a0b100ea22b06e36c477377631a98683bc1" - integrity sha512-BF6ua53EpERew9EMRONw8zuFRCTgqMk8WYI2rAJs/uMkYaQfkP5VFiZA69X3FYhnhHhYUf60sfGfCNXeNVTHDA== - dependencies: - "@aztec/constants" "2.0.2" - "@aztec/entrypoints" "2.0.2" - "@aztec/ethereum" "2.0.2" - "@aztec/foundation" "2.0.2" - "@aztec/l1-artifacts" "2.0.2" - "@aztec/protocol-contracts" "2.0.2" - "@aztec/stdlib" "2.0.2" - axios "^1.8.2" - tslib "^2.4.0" - viem "2.23.7" - -"@aztec/bb.js@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aztec/bb.js/-/bb.js-2.0.2.tgz#ffc72a1926437243c45ff75c9c9be96feea094fa" - integrity sha512-pBQLGU3aHKBXRGdbxwIBRUxAoTOR8x5WcVTB+Z4Ea/pE0cxlOsEK2ZeiBODev26ChvY/asQ663ZyBvJJM4JbGw== - dependencies: - comlink "^4.4.1" - commander "^12.1.0" - idb-keyval "^6.2.1" - msgpackr "^1.11.2" - pako "^2.1.0" - pino "^9.5.0" - tslib "^2.4.0" - -"@aztec/blob-lib@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aztec/blob-lib/-/blob-lib-2.0.2.tgz#fdd011dfab4de6ff7428166ff858ddf29c08653e" - integrity sha512-v5n2QmsaRDZpIOIhI0zcNF5SxdkzmEiX6EvuW5s2Dal279jAGQ+LzCOhB+Z0/Albc1/7D8fRKaRV4a3uWMSzuA== - dependencies: - "@aztec/constants" "2.0.2" - "@aztec/foundation" "2.0.2" - c-kzg "4.0.0-alpha.1" - tslib "^2.4.0" - -"@aztec/constants@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aztec/constants/-/constants-2.0.2.tgz#e7c761d523327b06f5bc97992eeb10408378252f" - integrity sha512-fztICMy/1N9pBkpxAeaExEsX4buC1M03P4PbjSMkuw5UIk4z8fs01sF2kvHdSMngs3LA36AWcsCHXt2wfSJw4A== - dependencies: - tslib "^2.4.0" - -"@aztec/entrypoints@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aztec/entrypoints/-/entrypoints-2.0.2.tgz#e196f4283ef5a2fee29766e106bc01247b57c1e8" - integrity sha512-nj9Y94OB/VYBNlOvGGvGFBrXCmBFHtJppwmMg4zEHx9IKzmLZCyX0xQx9CfKFuEoW2dkmgqj5dwngP6cyAmNTw== - dependencies: - "@aztec/constants" "2.0.2" - "@aztec/foundation" "2.0.2" - "@aztec/protocol-contracts" "2.0.2" - "@aztec/stdlib" "2.0.2" - tslib "^2.4.0" - -"@aztec/ethereum@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aztec/ethereum/-/ethereum-2.0.2.tgz#05925c9c7d38584b6b6a81d9088a1f09890c50ce" - integrity sha512-3cIs9j+TzCacuJ0yZYaw6Ts8uAztaEEQfiOnwrmcyFdyYZrDYe52eBIWluzUO3MQBES0VBf0POSKFYIACuXhqA== - dependencies: - "@aztec/blob-lib" "2.0.2" - "@aztec/constants" "2.0.2" - "@aztec/foundation" "2.0.2" - "@aztec/l1-artifacts" "2.0.2" - "@viem/anvil" "^0.0.10" - dotenv "^16.0.3" - lodash.chunk "^4.2.0" - lodash.pickby "^4.5.0" - tslib "^2.4.0" - viem "2.23.7" - zod "^3.23.8" - -"@aztec/foundation@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aztec/foundation/-/foundation-2.0.2.tgz#bd606aeadfc03705466be1264d9b829bbd3c9ee5" - integrity sha512-A48UexNylbOdtx71T5st1UmcF0PGR+7DutHBd3cnkxT6zApiuWoCrhJmXtUp4ld7ZdskZMjgcJr4ACtwQPXdhg== - dependencies: - "@aztec/bb.js" "2.0.2" - "@koa/cors" "^5.0.0" - "@noble/curves" "=1.7.0" - bn.js "^5.2.1" - colorette "^2.0.20" - detect-node "^2.1.0" - hash.js "^1.1.7" - koa "^2.16.1" - koa-bodyparser "^4.4.0" - koa-compress "^5.1.0" - koa-router "^12.0.0" - leveldown "^6.1.1" - lodash.chunk "^4.2.0" - lodash.clonedeepwith "^4.5.0" - pako "^2.1.0" - pino "^9.5.0" - pino-pretty "^13.0.0" - sha3 "^2.1.4" - undici "^5.28.5" - zod "^3.23.8" - -"@aztec/l1-artifacts@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aztec/l1-artifacts/-/l1-artifacts-2.0.2.tgz#8598d4d7352d4cc1675e52602a0612fa998da8d7" - integrity sha512-CclFsNxN5kuvQZkY2ZD5ZHjHo+JdzSBvK4c5NuBWrrzSuoUv6D6b03ZXnSbcAI2yO0urE+u4g9jm0/ln7kum3Q== - dependencies: - tslib "^2.4.0" - -"@aztec/noir-noirc_abi@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aztec/noir-noirc_abi/-/noir-noirc_abi-2.0.2.tgz#86c7fdf6a920bca87558bb07ee81bcbc17d5a392" - integrity sha512-5WCQyaPGGsGslB35OylhbKUc0SUqpy9WxoVZhyDzpiB/zJ2qbTKsLNP50SQeD1vSth1qZgbIeRP1fjss/knoMQ== - dependencies: - "@aztec/noir-types" "2.0.2" - -"@aztec/noir-types@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aztec/noir-types/-/noir-types-2.0.2.tgz#ab997738183dd2aea2a6b4ecc915db85516d858c" - integrity sha512-eZoOaYVAcC34/xb42TglCESdBzBl2+Pc+dh9vQqrhsBsgFeD5CkYiYZ9JhwtWU0pxjdqz7b4fP1Z8QdeWxh/zA== - -"@aztec/protocol-contracts@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aztec/protocol-contracts/-/protocol-contracts-2.0.2.tgz#c5ebdbd68b9a54e488710c00f82659960aaffdd6" - integrity sha512-FTwvPLug3Eae9Y+olYB+ssvyzeXe7n247JS1dADjoKEwc3PC/tGlfn9vSzQtPswTrorFXVjE9DdIjMKZokV1Kg== - dependencies: - "@aztec/constants" "2.0.2" - "@aztec/foundation" "2.0.2" - "@aztec/stdlib" "2.0.2" - lodash.chunk "^4.2.0" - lodash.omit "^4.5.0" - tslib "^2.4.0" - -"@aztec/stdlib@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aztec/stdlib/-/stdlib-2.0.2.tgz#b3114a0b139e7d0057cb81532e95e9c03695ca69" - integrity sha512-nsOZJwz2v+rzHUrGE2e6a+qRerK5EYaqX8IqJOngi6e5Uq1oTFhsthgYV45H2jM5aNYsf2WgU69zlFKgODXCXQ== - dependencies: - "@aztec/bb.js" "2.0.2" - "@aztec/blob-lib" "2.0.2" - "@aztec/constants" "2.0.2" - "@aztec/ethereum" "2.0.2" - "@aztec/foundation" "2.0.2" - "@aztec/l1-artifacts" "2.0.2" - "@aztec/noir-noirc_abi" "2.0.2" - "@google-cloud/storage" "^7.15.0" - axios "^1.9.0" - json-stringify-deterministic "1.0.12" - lodash.chunk "^4.2.0" - lodash.isequal "^4.5.0" - lodash.omit "^4.5.0" - lodash.times "^4.3.2" - msgpackr "^1.11.2" - pako "^2.1.0" - tslib "^2.4.0" - viem "2.23.7" - zod "^3.23.8" - -"@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== - -"@google-cloud/paginator@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-5.0.2.tgz#86ad773266ce9f3b82955a8f75e22cd012ccc889" - integrity sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg== - dependencies: - arrify "^2.0.0" - extend "^3.0.2" - -"@google-cloud/projectify@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-4.0.0.tgz#d600e0433daf51b88c1fa95ac7f02e38e80a07be" - integrity sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA== - -"@google-cloud/promisify@<4.1.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-4.0.0.tgz#a906e533ebdd0f754dca2509933334ce58b8c8b1" - integrity sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g== - -"@google-cloud/storage@^7.15.0": - version "7.17.1" - resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-7.17.1.tgz#4f998c4b63e0537272ac44f5e7751e046ecaca1d" - integrity sha512-2FMQbpU7qK+OtBPaegC6n+XevgZksobUGo6mGKnXNmeZpvLiAo1gTAE3oTKsrMGDV4VtL8Zzpono0YsK/Q7Iqg== - dependencies: - "@google-cloud/paginator" "^5.0.0" - "@google-cloud/projectify" "^4.0.0" - "@google-cloud/promisify" "<4.1.0" - abort-controller "^3.0.0" - async-retry "^1.3.3" - duplexify "^4.1.3" - fast-xml-parser "^4.4.1" - gaxios "^6.0.2" - google-auth-library "^9.6.3" - html-entities "^2.5.2" - mime "^3.0.0" - p-limit "^3.0.1" - retry-request "^7.0.0" - teeny-request "^9.0.0" - uuid "^8.0.0" - -"@hapi/bourne@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-3.0.0.tgz#f11fdf7dda62fe8e336fa7c6642d9041f30356d7" - integrity sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w== - -"@koa/cors@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@koa/cors/-/cors-5.0.0.tgz#0029b5f057fa0d0ae0e37dd2c89ece315a0daffd" - integrity sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw== - dependencies: - vary "^1.1.2" - -"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz#9edec61b22c3082018a79f6d1c30289ddf3d9d11" - integrity sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw== - -"@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz#33677a275204898ad8acbf62734fc4dc0b6a4855" - integrity sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw== - -"@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz#19edf7cdc2e7063ee328403c1d895a86dd28f4bb" - integrity sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg== - -"@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz#94fb0543ba2e28766c3fc439cabbe0440ae70159" - integrity sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw== - -"@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz#4a0609ab5fe44d07c9c60a11e4484d3c38bbd6e3" - integrity sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg== - -"@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz#0aa5502d547b57abfc4ac492de68e2006e417242" - integrity sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ== - -"@noble/curves@1.8.1": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" - integrity sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ== - dependencies: - "@noble/hashes" "1.7.1" - -"@noble/curves@=1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.7.0.tgz#0512360622439256df892f21d25b388f52505e45" - integrity sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw== - dependencies: - "@noble/hashes" "1.6.0" - -"@noble/curves@^1.6.0", "@noble/curves@~1.9.0": - version "1.9.7" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.7.tgz#79d04b4758a43e4bca2cbdc62e7771352fa6b951" - integrity sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw== - dependencies: - "@noble/hashes" "1.8.0" - -"@noble/curves@~1.8.1": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.2.tgz#8f24c037795e22b90ae29e222a856294c1d9ffc7" - integrity sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g== - dependencies: - "@noble/hashes" "1.7.2" - -"@noble/hashes@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.0.tgz#d4bfb516ad6e7b5111c216a5cc7075f4cf19e6c5" - integrity sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ== - -"@noble/hashes@1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" - integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== - -"@noble/hashes@1.7.2", "@noble/hashes@~1.7.1": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.2.tgz#d53c65a21658fb02f3303e7ee3ba89d6754c64b4" - integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== - -"@noble/hashes@1.8.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.8.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" - integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== - -"@scure/base@~1.2.2", "@scure/base@~1.2.4", "@scure/base@~1.2.5": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.6.tgz#ca917184b8231394dd8847509c67a0be522e59f6" - integrity sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg== - -"@scure/bip32@1.6.2": - version "1.6.2" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.2.tgz#093caa94961619927659ed0e711a6e4bf35bffd0" - integrity sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw== - dependencies: - "@noble/curves" "~1.8.1" - "@noble/hashes" "~1.7.1" - "@scure/base" "~1.2.2" - -"@scure/bip32@^1.5.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.7.0.tgz#b8683bab172369f988f1589640e53c4606984219" - integrity sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw== - dependencies: - "@noble/curves" "~1.9.0" - "@noble/hashes" "~1.8.0" - "@scure/base" "~1.2.5" - -"@scure/bip39@1.5.4": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.4.tgz#07fd920423aa671be4540d59bdd344cc1461db51" - integrity sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA== - dependencies: - "@noble/hashes" "~1.7.1" - "@scure/base" "~1.2.4" - -"@scure/bip39@^1.4.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.6.0.tgz#475970ace440d7be87a6086cbee77cb8f1a684f9" - integrity sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A== - dependencies: - "@noble/hashes" "~1.8.0" - "@scure/base" "~1.2.5" - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@types/caseless@*": - version "0.12.5" - resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.5.tgz#db9468cb1b1b5a925b8f34822f1669df0c5472f5" - integrity sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg== - -"@types/node@*": - version "24.5.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.5.2.tgz#52ceb83f50fe0fcfdfbd2a9fab6db2e9e7ef6446" - integrity sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ== - dependencies: - undici-types "~7.12.0" - -"@types/request@^2.48.8": - version "2.48.13" - resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.13.tgz#abdf4256524e801ea8fdda54320f083edb5a6b80" - integrity sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg== - dependencies: - "@types/caseless" "*" - "@types/node" "*" - "@types/tough-cookie" "*" - form-data "^2.5.5" - -"@types/tough-cookie@*": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" - integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== - -"@viem/anvil@^0.0.10": - version "0.0.10" - resolved "https://registry.yarnpkg.com/@viem/anvil/-/anvil-0.0.10.tgz#aa64fd96017d6875c9e8bebc223d394a55bc3a72" - integrity sha512-9PzYXBRikfSUhhm8Bd0avv07agwcbMJ5FaSu2D2vbE0cxkvXGtolL3fW5nz2yefMqOqVQL4XzfM5nwY81x3ytw== - dependencies: - execa "^7.1.1" - get-port "^6.1.2" - http-proxy "^1.18.1" - ws "^8.13.0" - -abitype@1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" - integrity sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg== - -abitype@^1.0.6: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.1.1.tgz#b50ed400f8bfca5452eb4033445c309d3e1117c8" - integrity sha512-Loe5/6tAgsBukY95eGaPSDmQHIjRZYQq8PB1MpsNccDIK8WiV+Uw6WzaIXipvaxTEL2yEB0OpEaQv3gs8pkS9Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -abstract-leveldown@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" - integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== - dependencies: - buffer "^6.0.3" - catering "^2.0.0" - is-buffer "^2.0.5" - level-concat-iterator "^3.0.0" - level-supports "^2.0.1" - queue-microtask "^1.2.3" - -accepts@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agent-base@^7.1.2: - version "7.1.4" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" - integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== - -arrify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -async-retry@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" - integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== - dependencies: - retry "0.13.1" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -atomic-sleep@^1.0.0: - version "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.8.2, axios@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.12.2.tgz#6c307390136cf7a2278d09cec63b136dfc6e6da7" - integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.4" - proxy-from-env "^1.1.0" - -base64-js@^1.3.0, base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bignumber.js@^9.0.0: - version "9.3.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.1.tgz#759c5aaddf2ffdc4f154f7b493e1c8770f88c4d7" - integrity sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bn.js@^5.2.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.2.tgz#82c09f9ebbb17107cd72cb7fd39bd1f9d0aaa566" - integrity sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw== - -buffer-equal-constant-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer@6.0.3, buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bytes@3.1.2, bytes@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -c-kzg@4.0.0-alpha.1: - version "4.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/c-kzg/-/c-kzg-4.0.0-alpha.1.tgz#1fa4bd388cd69763e0199085938c77d683bccf89" - integrity sha512-I8S9+c6OEaF6mD5OQJ/PylPk8C3TENQqvMomzV4u+NyOTdVOwF/VFj/z2o5OOPt930qkms0AbzXZ+Qu4qQCYxg== - dependencies: - bindings "^1.5.0" - node-addon-api "^5.0.0" - -cache-content-type@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" - integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== - dependencies: - mime-types "^2.1.18" - ylru "^1.2.0" - -call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -call-bound@^1.0.2, call-bound@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" - integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - dependencies: - call-bind-apply-helpers "^1.0.2" - get-intrinsic "^1.3.0" - -catering@^2.0.0, catering@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - -co-body@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/co-body/-/co-body-6.2.0.tgz#afd776d60e5659f4eee862df83499698eb1aea1b" - integrity sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA== - dependencies: - "@hapi/bourne" "^3.0.0" - inflation "^2.0.0" - qs "^6.5.2" - raw-body "^2.3.3" - type-is "^1.6.16" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -colorette@^2.0.20, colorette@^2.0.7: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -comlink@^4.4.1: - version "4.4.2" - resolved "https://registry.yarnpkg.com/comlink/-/comlink-4.4.2.tgz#cbbcd82742fbebc06489c28a183eedc5c60a2bca" - integrity sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g== - -commander@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" - integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== - -compressible@^2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -content-disposition@~0.5.2: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -cookies@~0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.9.1.tgz#3ffed6f60bb4fb5f146feeedba50acc418af67e3" - integrity sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw== - dependencies: - depd "~2.0.0" - keygrip "~1.1.0" - -copy-to@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" - integrity sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w== - -cross-spawn@^7.0.3: - version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -dateformat@^4.6.3: - version "4.6.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" - integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== - -debug@4, debug@^4.3.2, debug@^4.3.4: - version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== - dependencies: - ms "^2.1.3" - -deep-equal@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -depd@2.0.0, depd@^2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -destroy@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-libc@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.0.tgz#3ca811f60a7b504b0480e5008adacc660b0b8c4f" - integrity sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg== - -detect-node@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -dotenv@^16.0.3: - version "16.6.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" - integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== - -dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - -duplexify@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f" - integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.2" - -ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -encodeurl@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.5" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" - integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== - dependencies: - once "^1.4.0" - -es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -escape-html@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -execa@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" - integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - -extend@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -fast-copy@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.2.tgz#59c68f59ccbcac82050ba992e0d5c389097c9d35" - integrity sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ== - -fast-redact@^3.1.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" - integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== - -fast-safe-stringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - -fast-xml-parser@^4.4.1: - version "4.5.3" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz#c54d6b35aa0f23dc1ea60b6c884340c006dc6efb" - integrity sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig== - dependencies: - strnum "^1.1.1" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -follow-redirects@^1.0.0, follow-redirects@^1.15.6: - version "1.15.11" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" - integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== - -form-data@^2.5.5: - version "2.5.5" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.5.tgz#a5f6364ad7e4e67e95b4a07e2d8c6f711c74f624" - integrity sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" - hasown "^2.0.2" - 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== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" - hasown "^2.0.2" - mime-types "^2.1.12" - -fresh@~0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -gaxios@^6.0.0, gaxios@^6.0.2, gaxios@^6.1.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-6.7.1.tgz#ebd9f7093ede3ba502685e73390248bb5b7f71fb" - integrity sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ== - dependencies: - extend "^3.0.2" - https-proxy-agent "^7.0.1" - is-stream "^2.0.0" - node-fetch "^2.6.9" - uuid "^9.0.1" - -gcp-metadata@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-6.1.1.tgz#f65aa69f546bc56e116061d137d3f5f90bdec494" - integrity sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A== - dependencies: - gaxios "^6.1.1" - google-logging-utils "^0.0.2" - json-bigint "^1.0.0" - -get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" - integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - function-bind "^1.1.2" - get-proto "^1.0.1" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - -get-port@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-6.1.2.tgz#c1228abb67ba0e17fb346da33b15187833b9c08a" - integrity sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw== - -get-proto@^1.0.0, get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - -get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -google-auth-library@^9.6.3: - version "9.15.1" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-9.15.1.tgz#0c5d84ed1890b2375f1cd74f03ac7b806b392928" - integrity sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng== - dependencies: - base64-js "^1.3.0" - ecdsa-sig-formatter "^1.0.11" - gaxios "^6.1.1" - gcp-metadata "^6.1.0" - gtoken "^7.0.0" - jws "^4.0.0" - -google-logging-utils@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/google-logging-utils/-/google-logging-utils-0.0.2.tgz#5fd837e06fa334da450433b9e3e1870c1594466a" - integrity sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ== - -gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -gtoken@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-7.1.0.tgz#d61b4ebd10132222817f7222b1e6064bd463fc26" - integrity sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw== - dependencies: - gaxios "^6.0.0" - jws "^4.0.0" - -has-symbols@^1.0.3, has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -help-me@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/help-me/-/help-me-5.0.0.tgz#b1ebe63b967b74060027c2ac61f9be12d354a6f6" - integrity sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg== - -html-entities@^2.5.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.6.0.tgz#7c64f1ea3b36818ccae3d3fb48b6974208e984f8" - integrity sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ== - -http-assert@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.5.0.tgz#c389ccd87ac16ed2dfa6246fd73b926aa00e6b8f" - integrity sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w== - dependencies: - deep-equal "~1.0.1" - http-errors "~1.8.0" - -http-errors@2.0.0, http-errors@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-errors@^1.6.3, http-errors@^1.8.1, http-errors@~1.8.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^7.0.1: - version "7.0.6" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" - integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== - dependencies: - agent-base "^7.1.2" - debug "4" - -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -idb-keyval@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.2.tgz#b0171b5f73944854a3291a5cdba8e12768c4854a" - integrity sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg== - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -inflation@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.1.0.tgz#9214db11a47e6f756d111c4f9df96971c60f886c" - integrity sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ== - -inherits@2.0.4, inherits@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-buffer@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-generator-function@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" - integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== - dependencies: - call-bound "^1.0.3" - get-proto "^1.0.0" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-regex@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" - integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== - dependencies: - call-bound "^1.0.2" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isows@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" - integrity sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw== - -joycon@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" - integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== - -json-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" - integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== - dependencies: - bignumber.js "^9.0.0" - -json-stringify-deterministic@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/json-stringify-deterministic/-/json-stringify-deterministic-1.0.12.tgz#aaa3f907466ed01e3afd77b898d0a2b3b132820a" - integrity sha512-q3PN0lbUdv0pmurkBNdJH3pfFvOTL/Zp0lquqpvcjfKzt6Y0j49EPHAmVHCAS4Ceq/Y+PejWTzyiVpoY71+D6g== - -jwa@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.1.tgz#bf8176d1ad0cd72e0f3f58338595a13e110bc804" - integrity sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg== - dependencies: - buffer-equal-constant-time "^1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" - integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== - dependencies: - jwa "^2.0.0" - safe-buffer "^5.0.1" - -keygrip@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" - integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ== - dependencies: - tsscmp "1.0.6" - -koa-bodyparser@^4.4.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-4.4.1.tgz#a908d848e142cc57d9eece478e932bf00dce3029" - integrity sha512-kBH3IYPMb+iAXnrxIhXnW+gXV8OTzCu8VPDqvcDHW9SQrbkHmqPQtiZwrltNmSq6/lpipHnT7k7PsjlVD7kK0w== - dependencies: - co-body "^6.0.0" - copy-to "^2.0.1" - type-is "^1.6.18" - -koa-compose@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" - integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== - -koa-compress@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/koa-compress/-/koa-compress-5.1.1.tgz#4f1599cfcaab23de1cd97d0a0ff9b5d05b0ffa52" - integrity sha512-UgMIN7ZoEP2DuoSQmD6CYvFSLt0NReGlc2qSY4bO4Oq0L56OiD9pDG41Kj/zFmVY/A3Wvmn4BqKcfq5H30LGIg== - dependencies: - bytes "^3.1.2" - compressible "^2.0.18" - http-errors "^1.8.1" - koa-is-json "^1.0.0" - -koa-convert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-2.0.0.tgz#86a0c44d81d40551bae22fee6709904573eea4f5" - integrity sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA== - dependencies: - co "^4.6.0" - koa-compose "^4.1.0" - -koa-is-json@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" - integrity sha512-+97CtHAlWDx0ndt0J8y3P12EWLwTLMXIfMnYDev3wOTwH/RpBGMlfn4bDXlMEg1u73K6XRE9BbUp+5ZAYoRYWw== - -koa-router@^12.0.0: - version "12.0.1" - resolved "https://registry.yarnpkg.com/koa-router/-/koa-router-12.0.1.tgz#a3c1c331032d442da786f0631d23e74d51b6882e" - integrity sha512-gaDdj3GtzoLoeosacd50kBBTnnh3B9AYxDThQUo4sfUyXdOhY6ku1qyZKW88tQCRgc3Sw6ChXYXWZwwgjOxE0w== - dependencies: - debug "^4.3.4" - http-errors "^2.0.0" - koa-compose "^4.1.0" - methods "^1.1.2" - path-to-regexp "^6.2.1" - -koa@^2.16.1: - version "2.16.2" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.16.2.tgz#1292a3b415a9b9f3dd6872c1835229630a4ecae3" - integrity sha512-+CCssgnrWKx9aI3OeZwroa/ckG4JICxvIFnSiOUyl2Uv+UTI+xIw0FfFrWS7cQFpoePpr9o8csss7KzsTzNL8Q== - dependencies: - accepts "^1.3.5" - cache-content-type "^1.0.0" - content-disposition "~0.5.2" - content-type "^1.0.4" - cookies "~0.9.0" - debug "^4.3.2" - delegates "^1.0.0" - depd "^2.0.0" - destroy "^1.0.4" - encodeurl "^1.0.2" - escape-html "^1.0.3" - fresh "~0.5.2" - http-assert "^1.3.0" - http-errors "^1.6.3" - is-generator-function "^1.0.7" - koa-compose "^4.1.0" - koa-convert "^2.0.0" - on-finished "^2.3.0" - only "~0.0.2" - parseurl "^1.3.2" - statuses "^1.5.0" - type-is "^1.6.16" - vary "^1.1.2" - -level-concat-iterator@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" - integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== - dependencies: - catering "^2.1.0" - -level-supports@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" - integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== - -leveldown@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.1.tgz#0f0e480fa88fd807abf94c33cb7e40966ea4b5ce" - integrity sha512-88c+E+Eizn4CkQOBHwqlCJaTNEjGpaEIikn1S+cINc5E9HEvJ77bqY4JY/HxT5u0caWqsc3P3DcFIKBI1vHt+A== - dependencies: - abstract-leveldown "^7.2.0" - napi-macros "~2.0.0" - node-gyp-build "^4.3.0" - -lodash.chunk@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" - integrity sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w== - -lodash.clonedeepwith@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeepwith/-/lodash.clonedeepwith-4.5.0.tgz#6ee30573a03a1a60d670a62ef33c10cf1afdbdd4" - integrity sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA== - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - -lodash.omit@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" - integrity sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg== - -lodash.pickby@^4.5.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" - integrity sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q== - -lodash.times@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.times/-/lodash.times-4.3.2.tgz#3e1f2565c431754d54ab57f2ed1741939285ca1d" - integrity sha512-FfaJzl0SA35CRPDh5SWe2BTght6y5KSK7yJv166qIp/8q7qOwBDCvuDZE2RUSMRpBkLF6rZKbLEUoTmaP3qg6A== - -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -methods@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -"mime-db@>= 1.43.0 < 2": - version "1.54.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" - integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== - -mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.35, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -msgpackr-extract@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz#e9d87023de39ce714872f9e9504e3c1996d61012" - integrity sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA== - dependencies: - node-gyp-build-optional-packages "5.2.2" - optionalDependencies: - "@msgpackr-extract/msgpackr-extract-darwin-arm64" "3.0.3" - "@msgpackr-extract/msgpackr-extract-darwin-x64" "3.0.3" - "@msgpackr-extract/msgpackr-extract-linux-arm" "3.0.3" - "@msgpackr-extract/msgpackr-extract-linux-arm64" "3.0.3" - "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.3" - "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.3" - -msgpackr@^1.11.2: - version "1.11.5" - resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.11.5.tgz#edf0b9d9cb7d8ed6897dd0e42cfb865a2f4b602e" - integrity sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA== - optionalDependencies: - msgpackr-extract "^3.0.2" - -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -node-addon-api@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" - integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== - -node-fetch@^2.6.9: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build-optional-packages@5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz#522f50c2d53134d7f3a76cd7255de4ab6c96a3a4" - integrity sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw== - dependencies: - detect-libc "^2.0.1" - -node-gyp-build@^4.3.0: - version "4.8.4" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" - integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== - -npm-run-path@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" - integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== - dependencies: - path-key "^4.0.0" - -object-inspect@^1.13.3: - version "1.13.4" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" - integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== - -on-exit-leak-free@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" - integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== - -on-finished@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -only@~0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" - integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ== - -ox@0.6.7: - version "0.6.7" - resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.7.tgz#afd53f2ecef68b8526660e9d29dee6e6b599a832" - integrity sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA== - dependencies: - "@adraffy/ens-normalize" "^1.10.1" - "@noble/curves" "^1.6.0" - "@noble/hashes" "^1.5.0" - "@scure/bip32" "^1.5.0" - "@scure/bip39" "^1.4.0" - abitype "^1.0.6" - eventemitter3 "5.0.1" - -p-limit@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -pako@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" - integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== - -parseurl@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -path-to-regexp@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" - integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== - -pino-abstract-transport@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz#de241578406ac7b8a33ce0d77ae6e8a0b3b68a60" - integrity sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw== - dependencies: - split2 "^4.0.0" - -pino-pretty@^13.0.0: - version "13.1.1" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-13.1.1.tgz#70130b9ff3737c8757f53e42d69e9f96835142b8" - integrity sha512-TNNEOg0eA0u+/WuqH0MH0Xui7uqVk9D74ESOpjtebSQYbNWJk/dIxCXIxFsNfeN53JmtWqYHP2OrIZjT/CBEnA== - dependencies: - colorette "^2.0.7" - dateformat "^4.6.3" - fast-copy "^3.0.2" - fast-safe-stringify "^2.1.1" - help-me "^5.0.0" - joycon "^3.1.1" - minimist "^1.2.6" - on-exit-leak-free "^2.1.0" - pino-abstract-transport "^2.0.0" - pump "^3.0.0" - secure-json-parse "^4.0.0" - sonic-boom "^4.0.1" - strip-json-comments "^5.0.2" - -pino-std-serializers@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz#7c625038b13718dbbd84ab446bd673dc52259e3b" - integrity sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA== - -pino@^9.5.0: - version "9.11.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-9.11.0.tgz#7fc383f815cf6bf5979b4d791eafd2f2496c42a6" - integrity sha512-+YIodBB9sxcWeR8PrXC2K3gEDyfkUuVEITOcbqrfcj+z5QW4ioIcqZfYFbrLTYLsmAwunbS7nfU/dpBB6PZc1g== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.1.1" - on-exit-leak-free "^2.1.0" - pino-abstract-transport "^2.0.0" - pino-std-serializers "^7.0.0" - process-warning "^5.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.2.0" - safe-stable-stringify "^2.3.1" - sonic-boom "^4.0.1" - thread-stream "^3.0.0" - -process-warning@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-5.0.0.tgz#566e0bf79d1dff30a72d8bbbe9e8ecefe8d378d7" - integrity sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA== - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pump@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d" - integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -qs@^6.5.2: - version "6.14.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" - integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== - dependencies: - side-channel "^1.1.0" - -queue-microtask@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-format-unescaped@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - -raw-body@^2.3.3: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -readable-stream@^3.1.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -real-require@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" - integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -retry-request@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-7.0.2.tgz#60bf48cfb424ec01b03fca6665dee91d06dd95f3" - integrity sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w== - dependencies: - "@types/request" "^2.48.8" - extend "^3.0.2" - teeny-request "^9.0.0" - -retry@0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" - integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-regex "^1.2.1" - -safe-stable-stringify@^2.3.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" - integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -secure-json-parse@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-4.0.0.tgz#2ee1b7581be38ab348bab5a3e49280ba80a89c85" - integrity sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha3@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/sha3/-/sha3-2.1.4.tgz#000fac0fe7c2feac1f48a25e7a31b52a6492cc8f" - integrity sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg== - dependencies: - buffer "6.0.3" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel-list@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" - integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - -side-channel-map@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" - integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - -side-channel-weakmap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" - integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - side-channel-map "^1.0.1" - -side-channel@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" - integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - side-channel-list "^1.0.0" - side-channel-map "^1.0.1" - side-channel-weakmap "^1.0.2" - -signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sonic-boom@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.2.0.tgz#e59a525f831210fa4ef1896428338641ac1c124d" - integrity sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww== - dependencies: - atomic-sleep "^1.0.0" - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.5.0 < 2", statuses@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -stream-events@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" - integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== - dependencies: - stubs "^3.0.0" - -stream-shift@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" - integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-json-comments@^5.0.2: - version "5.0.3" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-5.0.3.tgz#b7304249dd402ee67fd518ada993ab3593458bcf" - integrity sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw== - -strnum@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" - integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== - -stubs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" - integrity sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw== - -teeny-request@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-9.0.0.tgz#18140de2eb6595771b1b02203312dfad79a4716d" - integrity sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g== - dependencies: - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - node-fetch "^2.6.9" - stream-events "^1.0.5" - uuid "^9.0.0" - -thread-stream@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1" - integrity sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A== - dependencies: - real-require "^0.2.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tslib@^2.4.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -tsscmp@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" - integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== - -type-is@^1.6.16, type-is@^1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typescript@^5.8.3: - version "5.9.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" - integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== - -undici-types@~7.12.0: - version "7.12.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.12.0.tgz#15c5c7475c2a3ba30659529f5cdb4674b622fafb" - integrity sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ== - -undici@^5.28.5: - version "5.29.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3" - integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg== - dependencies: - "@fastify/busboy" "^2.0.0" - -unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@^8.0.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^9.0.0, uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -vary@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -viem@2.23.7: - version "2.23.7" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.7.tgz#6955206c36e9f4ba7fc65790167699178de697a7" - integrity sha512-Gbyz0uE3biWDPxECrEyzILWPsnIgDREgfRMuLSWHSSnM6ktefSC/lqQNImnxESdDEixa8/6EWXjmf2H6L9VV0A== - dependencies: - "@noble/curves" "1.8.1" - "@noble/hashes" "1.7.1" - "@scure/bip32" "1.6.2" - "@scure/bip39" "1.5.4" - abitype "1.0.8" - isows "1.0.6" - ox "0.6.7" - ws "8.18.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@8.18.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== - -ws@^8.13.0: - version "8.18.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== - -ylru@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.4.0.tgz#0cf0aa57e9c24f8a2cbde0cc1ca2c9592ac4e0f6" - integrity sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zod@^3.23.8: - version "3.25.76" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" - integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==