diff --git a/.github/workflows/check-bittensor-e2e-tests.yml.yml b/.github/workflows/check-bittensor-e2e-tests.yml.yml
index 1a574eb1d8..f204f870a2 100644
--- a/.github/workflows/check-bittensor-e2e-tests.yml.yml
+++ b/.github/workflows/check-bittensor-e2e-tests.yml.yml
@@ -213,11 +213,34 @@ jobs:
- name: Load Docker Image
run: docker load -i subtensor-localnet.tar
- - name: Run tests
+# - name: Run tests
+# working-directory: ${{ github.workspace }}/btcli
+# run: |
+# source ${{ github.workspace }}/venv/bin/activate
+# uv run pytest ${{ matrix.test-file }} -s
+
+ - name: Run with retry
working-directory: ${{ github.workspace }}/btcli
run: |
source ${{ github.workspace }}/venv/bin/activate
- uv run pytest ${{ matrix.test-file }} -s
+ set +e
+ for i in 1 2; do
+ echo "🔁 Attempt $i: Running tests"
+ uv run pytest ${{ matrix.test-file }} -s
+ status=$?
+ if [ $status -eq 0 ]; then
+ echo "✅ Tests passed on attempt $i"
+ break
+ else
+ echo "❌ Tests failed on attempt $i"
+ if [ $i -eq 2 ]; then
+ echo "🔥 Tests failed after 2 attempts"
+ exit 1
+ fi
+ echo "🕒 Retrying..."
+ sleep 5
+ fi
+ done
# main sdk job
run-sdk-e2e-tests:
@@ -285,8 +308,31 @@ jobs:
- name: Load Docker Image
run: docker load -i subtensor-localnet.tar
- - name: Run tests
+# - name: Run tests
+# working-directory: ${{ github.workspace }}/bittensor
+# run: |
+# source ${{ github.workspace }}/venv/bin/activate
+# uv run pytest ${{ matrix.test-file }} -s
+
+ - name: Run with retry
working-directory: ${{ github.workspace }}/bittensor
run: |
source ${{ github.workspace }}/venv/bin/activate
- uv run pytest ${{ matrix.test-file }} -s
\ No newline at end of file
+ set +e
+ for i in 1 2; do
+ echo "🔁 Attempt $i: Running tests"
+ uv run pytest ${{ matrix.test-file }} -s
+ status=$?
+ if [ $status -eq 0 ]; then
+ echo "✅ Tests passed on attempt $i"
+ break
+ else
+ echo "❌ Tests failed on attempt $i"
+ if [ $i -eq 2 ]; then
+ echo "🔥 Tests failed after 2 attempts"
+ exit 1
+ fi
+ echo "🕒 Retrying..."
+ sleep 5
+ fi
+ done
\ No newline at end of file
diff --git a/.github/workflows/docker-localnet.yml b/.github/workflows/docker-localnet.yml
index c2afccae66..01de6eece8 100644
--- a/.github/workflows/docker-localnet.yml
+++ b/.github/workflows/docker-localnet.yml
@@ -57,6 +57,11 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
+ - name: Patch non-fast-block node
+ run: |
+ chmod +x ./scripts/localnet_patch.sh
+ ./scripts/localnet_patch.sh
+
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
diff --git a/.github/workflows/evm-tests.yml b/.github/workflows/evm-tests.yml
new file mode 100644
index 0000000000..355e2b873f
--- /dev/null
+++ b/.github/workflows/evm-tests.yml
@@ -0,0 +1,44 @@
+name: EVM E2E Tests
+
+on:
+ pull_request:
+
+ ## Allow running workflow manually from the Actions tab
+ workflow_dispatch:
+ inputs:
+ verbose:
+ description: "Output more information when triggered manually"
+ required: false
+ default: ""
+
+env:
+ CARGO_TERM_COLOR: always
+ VERBOSE: ${{ github.events.input.verbose }}
+
+jobs:
+ run:
+ runs-on: SubtensorCI
+ env:
+ RUST_BACKTRACE: full
+ steps:
+ - name: Check-out repository under $GITHUB_WORKSPACE
+ uses: actions/checkout@v4
+
+ - name: Utilize Shared Rust Cache
+ uses: Swatinem/rust-cache@v2
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v2
+ with:
+ node-version: "22"
+
+ - name: Install dependencies
+ run: |
+ sudo apt-get update &&
+ sudo apt-get install -y clang curl libssl-dev llvm libudev-dev protobuf-compiler nodejs
+
+ - name: Run tests
+ working-directory: ${{ github.workspace }}
+ run: |
+ npm install --global yarn
+ ./evm-tests/run-ci.sh
diff --git a/.github/workflows/label-triggers.yml b/.github/workflows/label-triggers.yml
index f3c330f85c..bcf43e4c23 100644
--- a/.github/workflows/label-triggers.yml
+++ b/.github/workflows/label-triggers.yml
@@ -25,4 +25,4 @@ jobs:
owner: context.repo.owner,
repo: context.repo.repo,
body: '@opentensor/cerebrum / @opentensor/gyrus / @opentensor/cortex breaking change detected! Please prepare accordingly!'
- })
+ })
\ No newline at end of file
diff --git a/.github/workflows/run-benchmarks.yml b/.github/workflows/run-benchmarks.yml
new file mode 100644
index 0000000000..6040485eca
--- /dev/null
+++ b/.github/workflows/run-benchmarks.yml
@@ -0,0 +1,118 @@
+# .github/workflows/benchmarks.yml
+name: Validate-Benchmarks
+
+on:
+ pull_request:
+ types:
+ - opened
+ - synchronize
+ workflow_dispatch:
+
+concurrency:
+ group: run-benchmarks-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ validate-benchmarks:
+ runs-on: Benchmarking
+
+ env:
+ SKIP_BENCHMARKS: '0'
+
+ steps:
+ - name: Check out PR branch
+ if: ${{ env.SKIP_BENCHMARKS != '1' }}
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.head_ref }}
+ fetch-depth: 0
+
+ - name: Install GitHub CLI
+ if: ${{ env.SKIP_BENCHMARKS != '1' }}
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y gh
+ echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token
+
+ - name: Check skip label
+ if: ${{ env.SKIP_BENCHMARKS != '1' }}
+ run: |
+ labels=$(gh pr view ${{ github.event.pull_request.number }} --json labels --jq '.labels[].name')
+ if echo "$labels" | grep -q "skip-validate-benchmarks"; then
+ echo "skip-validate-benchmarks label found — skipping benchmarks."
+ echo "SKIP_BENCHMARKS=1" >> "$GITHUB_ENV"
+ fi
+
+ - name: Install system dependencies
+ if: ${{ env.SKIP_BENCHMARKS != '1' }}
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y clang curl libssl-dev llvm libudev-dev protobuf-compiler
+
+ - name: Check skip label
+ if: ${{ env.SKIP_BENCHMARKS != '1' }}
+ run: |
+ labels=$(gh pr view ${{ github.event.pull_request.number }} --json labels --jq '.labels[].name')
+ if echo "$labels" | grep -q "skip-validate-benchmarks"; then
+ echo "skip-validate-benchmarks label found — skipping benchmarks."
+ echo "SKIP_BENCHMARKS=1" >> "$GITHUB_ENV"
+ fi
+
+ - name: Install Rust toolchain
+ if: ${{ env.SKIP_BENCHMARKS != '1' }}
+ uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+
+ - name: Check skip label
+ if: ${{ env.SKIP_BENCHMARKS != '1' }}
+ run: |
+ labels=$(gh pr view ${{ github.event.pull_request.number }} --json labels --jq '.labels[].name')
+ if echo "$labels" | grep -q "skip-validate-benchmarks"; then
+ echo "skip-validate-benchmarks label found — skipping benchmarks."
+ echo "SKIP_BENCHMARKS=1" >> "$GITHUB_ENV"
+ fi
+
+ - name: Cache Rust build
+ if: ${{ env.SKIP_BENCHMARKS != '1' }}
+ uses: Swatinem/rust-cache@v2
+ with:
+ key: bench-${{ hashFiles('**/Cargo.lock') }}
+
+ - name: Check skip label
+ if: ${{ env.SKIP_BENCHMARKS != '1' }}
+ run: |
+ labels=$(gh pr view ${{ github.event.pull_request.number }} --json labels --jq '.labels[].name')
+ if echo "$labels" | grep -q "skip-validate-benchmarks"; then
+ echo "skip-validate-benchmarks label found — skipping benchmarks."
+ echo "SKIP_BENCHMARKS=1" >> "$GITHUB_ENV"
+ fi
+
+ - name: Build node with benchmarks
+ if: ${{ env.SKIP_BENCHMARKS != '1' }}
+ run: |
+ cargo build --profile production -p node-subtensor --features runtime-benchmarks
+
+ - name: Check skip label
+ if: ${{ env.SKIP_BENCHMARKS != '1' }}
+ run: |
+ labels=$(gh pr view ${{ github.event.pull_request.number }} --json labels --jq '.labels[].name')
+ if echo "$labels" | grep -q "skip-validate-benchmarks"; then
+ echo "skip-validate-benchmarks label found — skipping benchmarks."
+ echo "SKIP_BENCHMARKS=1" >> "$GITHUB_ENV"
+ fi
+
+ - name: Run & validate benchmarks
+ if: ${{ env.SKIP_BENCHMARKS != '1' }}
+ run: |
+ chmod +x scripts/benchmark_action.sh
+ ./scripts/benchmark_action.sh
+
+ - name: Check skip label after run
+ if: ${{ env.SKIP_BENCHMARKS != '1' }}
+ run: |
+ labels=$(gh pr view ${{ github.event.pull_request.number }} --json labels --jq '.labels[].name')
+ if echo "$labels" | grep -q "skip-validate-benchmarks"; then
+ echo "skip-validate-benchmarks label was found — but benchmarks already ran."
+ fi
diff --git a/.github/workflows/rustdocs.yml b/.github/workflows/rustdocs.yml
new file mode 100644
index 0000000000..a58a3a8c2a
--- /dev/null
+++ b/.github/workflows/rustdocs.yml
@@ -0,0 +1,60 @@
+name: Publish rustdocs
+
+on:
+ push:
+ branches:
+ - main
+ workflow_dispatch:
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ build:
+ runs-on: SubtensorCI
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+
+ - name: Install rustup
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+
+ - name: Generate documentation
+ uses: actions-rs/cargo@v1
+ with:
+ command: doc
+ args: --document-private-items
+
+ - name: Fix file permissions
+ shell: sh
+ run: |
+ chmod -c -R +rX "target/doc" |
+ while read line; do
+ echo "::warning title=Invalid file permissions automatically fixed::$line"
+ done
+ - name: Generate index.html file
+ run: |
+ echo "" > target/doc/index.html
+ - name: Upload documentation
+ uses: actions/upload-pages-artifact@v1
+ with:
+ path: ./target/doc
+
+ deploy:
+ needs: build
+ runs-on: SubtensorCI
+
+ permissions:
+ pages: write
+ id-token: write
+ environment:
+ name: github-pages
+ url: ${{ steps.pages.outputs.page_url }}
+
+ steps:
+ - name: Deploy documentation
+ id: pages
+ uses: actions/deploy-pages@v2
diff --git a/Cargo.lock b/Cargo.lock
index ce6924d7b4..b0c56ffb2e 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2364,7 +2364,7 @@ checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6"
[[package]]
name = "fc-api"
version = "1.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"async-trait",
"fp-storage",
@@ -2373,10 +2373,26 @@ dependencies = [
"sp-runtime",
]
+[[package]]
+name = "fc-aura"
+version = "1.0.0-dev"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
+dependencies = [
+ "fc-rpc",
+ "fp-storage",
+ "sc-client-api",
+ "sc-consensus-aura",
+ "sp-api",
+ "sp-consensus-aura",
+ "sp-inherents",
+ "sp-runtime",
+ "sp-timestamp",
+]
+
[[package]]
name = "fc-consensus"
version = "2.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"async-trait",
"fp-consensus",
@@ -2392,7 +2408,7 @@ dependencies = [
[[package]]
name = "fc-db"
version = "2.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"async-trait",
"ethereum",
@@ -2422,7 +2438,7 @@ dependencies = [
[[package]]
name = "fc-mapping-sync"
version = "2.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"fc-db",
"fc-storage",
@@ -2445,7 +2461,7 @@ dependencies = [
[[package]]
name = "fc-rpc"
version = "2.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"ethereum",
"ethereum-types",
@@ -2468,7 +2484,6 @@ dependencies = [
"rand",
"rlp",
"sc-client-api",
- "sc-consensus-aura",
"sc-network",
"sc-network-sync",
"sc-rpc",
@@ -2482,7 +2497,6 @@ dependencies = [
"sp-block-builder",
"sp-blockchain",
"sp-consensus",
- "sp-consensus-aura",
"sp-core",
"sp-externalities 0.29.0",
"sp-inherents",
@@ -2490,7 +2504,6 @@ dependencies = [
"sp-runtime",
"sp-state-machine",
"sp-storage 21.0.0",
- "sp-timestamp",
"substrate-prometheus-endpoint",
"thiserror",
"tokio",
@@ -2499,7 +2512,7 @@ dependencies = [
[[package]]
name = "fc-rpc-core"
version = "1.1.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"ethereum",
"ethereum-types",
@@ -2508,13 +2521,13 @@ dependencies = [
"rustc-hex",
"serde",
"serde_json",
- "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
]
[[package]]
name = "fc-storage"
version = "1.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"ethereum",
"ethereum-types",
@@ -2670,7 +2683,7 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
[[package]]
name = "fork-tree"
version = "13.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"parity-scale-codec",
]
@@ -2697,7 +2710,7 @@ dependencies = [
[[package]]
name = "fp-account"
version = "1.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"hex",
"impl-serde",
@@ -2716,7 +2729,7 @@ dependencies = [
[[package]]
name = "fp-consensus"
version = "2.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"ethereum",
"parity-scale-codec",
@@ -2727,7 +2740,7 @@ dependencies = [
[[package]]
name = "fp-ethereum"
version = "1.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"ethereum",
"ethereum-types",
@@ -2739,7 +2752,7 @@ dependencies = [
[[package]]
name = "fp-evm"
version = "3.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"evm",
"frame-support",
@@ -2754,7 +2767,7 @@ dependencies = [
[[package]]
name = "fp-rpc"
version = "3.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"ethereum",
"ethereum-types",
@@ -2770,7 +2783,7 @@ dependencies = [
[[package]]
name = "fp-self-contained"
version = "1.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"frame-support",
"parity-scale-codec",
@@ -2782,7 +2795,7 @@ dependencies = [
[[package]]
name = "fp-storage"
version = "2.0.0"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"parity-scale-codec",
"serde",
@@ -2797,7 +2810,7 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa"
[[package]]
name = "frame-benchmarking"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-support",
"frame-support-procedural",
@@ -2821,7 +2834,7 @@ dependencies = [
[[package]]
name = "frame-benchmarking-cli"
version = "43.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"Inflector",
"array-bytes",
@@ -2871,7 +2884,7 @@ dependencies = [
[[package]]
name = "frame-executive"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"aquamarine",
"frame-support",
@@ -2901,7 +2914,7 @@ dependencies = [
[[package]]
name = "frame-metadata-hash-extension"
version = "0.6.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"docify",
@@ -2915,8 +2928,8 @@ dependencies = [
[[package]]
name = "frame-support"
-version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "38.2.0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"aquamarine",
"array-bytes",
@@ -2939,7 +2952,7 @@ dependencies = [
"sp-arithmetic",
"sp-core",
"sp-crypto-hashing-proc-macro",
- "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-genesis-builder",
"sp-inherents",
"sp-io",
@@ -2947,7 +2960,7 @@ dependencies = [
"sp-runtime",
"sp-staking",
"sp-state-machine",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-tracing 17.0.1",
"sp-weights",
"static_assertions",
@@ -2956,8 +2969,8 @@ dependencies = [
[[package]]
name = "frame-support-procedural"
-version = "30.0.3"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "30.0.6"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"Inflector",
"cfg-expr",
@@ -2970,7 +2983,7 @@ dependencies = [
"proc-macro-warning 1.0.2",
"proc-macro2",
"quote",
- "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"syn 2.0.90",
]
@@ -2990,7 +3003,7 @@ dependencies = [
[[package]]
name = "frame-support-procedural-tools"
version = "13.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-support-procedural-tools-derive 12.0.0",
"proc-macro-crate 3.2.0",
@@ -3013,7 +3026,7 @@ dependencies = [
[[package]]
name = "frame-support-procedural-tools-derive"
version = "12.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"proc-macro2",
"quote",
@@ -3023,7 +3036,7 @@ dependencies = [
[[package]]
name = "frame-system"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"cfg-if",
"docify",
@@ -3035,7 +3048,7 @@ dependencies = [
"sp-core",
"sp-io",
"sp-runtime",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-version",
"sp-weights",
]
@@ -3043,7 +3056,7 @@ dependencies = [
[[package]]
name = "frame-system-benchmarking"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-benchmarking",
"frame-support",
@@ -3057,7 +3070,7 @@ dependencies = [
[[package]]
name = "frame-system-rpc-runtime-api"
version = "34.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"docify",
"parity-scale-codec",
@@ -3067,7 +3080,7 @@ dependencies = [
[[package]]
name = "frame-try-runtime"
version = "0.44.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-support",
"parity-scale-codec",
@@ -4236,9 +4249,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "libc"
-version = "0.2.159"
+version = "0.2.171"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5"
+checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
[[package]]
name = "libloading"
@@ -5526,6 +5539,7 @@ dependencies = [
"async-trait",
"clap",
"fc-api",
+ "fc-aura",
"fc-consensus",
"fc-db",
"fc-mapping-sync",
@@ -5628,6 +5642,7 @@ dependencies = [
"pallet-base-fee",
"pallet-collective",
"pallet-commitments",
+ "pallet-crowdloan",
"pallet-drand",
"pallet-ethereum",
"pallet-evm",
@@ -5668,7 +5683,7 @@ dependencies = [
"sp-offchain",
"sp-runtime",
"sp-session",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-storage 21.0.0",
"sp-tracing 17.0.1",
"sp-transaction-pool",
@@ -6003,7 +6018,7 @@ dependencies = [
"sp-core",
"sp-io",
"sp-runtime",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-tracing 17.0.1",
"sp-weights",
"substrate-fixed",
@@ -6013,7 +6028,7 @@ dependencies = [
[[package]]
name = "pallet-aura"
version = "37.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-support",
"frame-system",
@@ -6029,7 +6044,7 @@ dependencies = [
[[package]]
name = "pallet-authorship"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-support",
"frame-system",
@@ -6041,8 +6056,8 @@ dependencies = [
[[package]]
name = "pallet-balances"
-version = "39.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "39.0.1"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"docify",
"frame-benchmarking",
@@ -6057,7 +6072,7 @@ dependencies = [
[[package]]
name = "pallet-base-fee"
version = "1.0.0"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"fp-evm",
"frame-support",
@@ -6081,7 +6096,7 @@ dependencies = [
"sp-core",
"sp-io",
"sp-runtime",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"subtensor-macros",
]
@@ -6106,12 +6121,31 @@ dependencies = [
"sp-core",
"sp-io",
"sp-runtime",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"subtensor-macros",
"tle",
"w3f-bls",
]
+[[package]]
+name = "pallet-crowdloan"
+version = "0.1.0"
+dependencies = [
+ "frame-benchmarking",
+ "frame-support",
+ "frame-system",
+ "log",
+ "pallet-balances",
+ "pallet-preimage",
+ "parity-scale-codec",
+ "scale-info",
+ "sp-core",
+ "sp-io",
+ "sp-runtime",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
+ "subtensor-macros",
+]
+
[[package]]
name = "pallet-drand"
version = "0.0.1"
@@ -6148,7 +6182,7 @@ dependencies = [
[[package]]
name = "pallet-ethereum"
version = "4.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"ethereum",
"ethereum-types",
@@ -6170,7 +6204,7 @@ dependencies = [
[[package]]
name = "pallet-evm"
version = "6.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"environmental",
"evm",
@@ -6193,7 +6227,7 @@ dependencies = [
[[package]]
name = "pallet-evm-chain-id"
version = "1.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"frame-support",
"frame-system",
@@ -6204,7 +6238,7 @@ dependencies = [
[[package]]
name = "pallet-evm-precompile-modexp"
version = "2.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"fp-evm",
"num",
@@ -6213,7 +6247,7 @@ dependencies = [
[[package]]
name = "pallet-evm-precompile-sha3fips"
version = "2.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"fp-evm",
"tiny-keccak",
@@ -6222,7 +6256,7 @@ dependencies = [
[[package]]
name = "pallet-evm-precompile-simple"
version = "2.0.0-dev"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"fp-evm",
"ripemd",
@@ -6232,7 +6266,7 @@ dependencies = [
[[package]]
name = "pallet-grandpa"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-benchmarking",
"frame-support",
@@ -6254,7 +6288,7 @@ dependencies = [
[[package]]
name = "pallet-hotfix-sufficients"
version = "1.0.0"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"frame-benchmarking",
"frame-support",
@@ -6269,7 +6303,7 @@ dependencies = [
[[package]]
name = "pallet-insecure-randomness-collective-flip"
version = "26.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-support",
"frame-system",
@@ -6282,7 +6316,7 @@ dependencies = [
[[package]]
name = "pallet-membership"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-benchmarking",
"frame-support",
@@ -6298,7 +6332,7 @@ dependencies = [
[[package]]
name = "pallet-multisig"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-benchmarking",
"frame-support",
@@ -6313,7 +6347,7 @@ dependencies = [
[[package]]
name = "pallet-preimage"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-benchmarking",
"frame-support",
@@ -6346,7 +6380,7 @@ dependencies = [
[[package]]
name = "pallet-proxy"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-benchmarking",
"frame-support",
@@ -6370,14 +6404,14 @@ dependencies = [
"sp-core",
"sp-io",
"sp-runtime",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"subtensor-macros",
]
[[package]]
name = "pallet-root-testing"
version = "14.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-support",
"frame-system",
@@ -6391,15 +6425,15 @@ dependencies = [
[[package]]
name = "pallet-safe-mode"
version = "19.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"docify",
"frame-benchmarking",
"frame-support",
"frame-system",
"pallet-balances",
- "pallet-proxy 38.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
- "pallet-utility 38.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "pallet-proxy 38.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
+ "pallet-utility 38.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"parity-scale-codec",
"scale-info",
"sp-arithmetic",
@@ -6409,7 +6443,7 @@ dependencies = [
[[package]]
name = "pallet-scheduler"
version = "39.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"docify",
"frame-benchmarking",
@@ -6426,7 +6460,7 @@ dependencies = [
[[package]]
name = "pallet-session"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-support",
"frame-system",
@@ -6484,7 +6518,7 @@ dependencies = [
"sp-core",
"sp-io",
"sp-runtime",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-tracing 17.0.1",
"sp-version",
"substrate-fixed",
@@ -6496,7 +6530,7 @@ dependencies = [
[[package]]
name = "pallet-sudo"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"docify",
"frame-benchmarking",
@@ -6511,7 +6545,7 @@ dependencies = [
[[package]]
name = "pallet-timestamp"
version = "37.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"docify",
"frame-benchmarking",
@@ -6529,8 +6563,8 @@ dependencies = [
[[package]]
name = "pallet-transaction-payment"
-version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "38.0.2"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-support",
"frame-system",
@@ -6545,7 +6579,7 @@ dependencies = [
[[package]]
name = "pallet-transaction-payment-rpc"
version = "41.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"jsonrpsee",
"pallet-transaction-payment-rpc-runtime-api",
@@ -6561,7 +6595,7 @@ dependencies = [
[[package]]
name = "pallet-transaction-payment-rpc-runtime-api"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"pallet-transaction-payment",
"parity-scale-codec",
@@ -6592,7 +6626,7 @@ dependencies = [
[[package]]
name = "pallet-utility"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-benchmarking",
"frame-support",
@@ -7056,7 +7090,7 @@ dependencies = [
[[package]]
name = "precompile-utils"
version = "0.1.0"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"environmental",
"evm",
@@ -7080,14 +7114,14 @@ dependencies = [
[[package]]
name = "precompile-utils-macro"
version = "0.1.0"
-source = "git+https://github.com/opentensor/frontier?rev=635bdac882#635bdac882333afed827053f31ef56ab739f7a2e"
+source = "git+https://github.com/opentensor/frontier?rev=cd6bca14a3#cd6bca14a366cc7cb1c3b1b1d7bc8213667e4126"
dependencies = [
"case",
"num_enum",
"prettyplease 0.2.22",
"proc-macro2",
"quote",
- "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"syn 1.0.109",
]
@@ -8072,7 +8106,7 @@ name = "safe-math"
version = "0.1.0"
dependencies = [
"num-traits",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"substrate-fixed",
]
@@ -8106,7 +8140,7 @@ dependencies = [
[[package]]
name = "sc-allocator"
version = "29.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"log",
"sp-core",
@@ -8117,7 +8151,7 @@ dependencies = [
[[package]]
name = "sc-basic-authorship"
version = "0.45.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"futures",
"futures-timer",
@@ -8139,7 +8173,7 @@ dependencies = [
[[package]]
name = "sc-block-builder"
version = "0.42.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"parity-scale-codec",
"sp-api",
@@ -8154,7 +8188,7 @@ dependencies = [
[[package]]
name = "sc-chain-spec"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"docify",
@@ -8170,7 +8204,7 @@ dependencies = [
"serde_json",
"sp-blockchain",
"sp-core",
- "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-genesis-builder",
"sp-io",
"sp-runtime",
@@ -8181,7 +8215,7 @@ dependencies = [
[[package]]
name = "sc-chain-spec-derive"
version = "12.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"proc-macro-crate 3.2.0",
"proc-macro2",
@@ -8192,7 +8226,7 @@ dependencies = [
[[package]]
name = "sc-cli"
version = "0.47.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"chrono",
@@ -8233,7 +8267,7 @@ dependencies = [
[[package]]
name = "sc-client-api"
version = "37.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"fnv",
"futures",
@@ -8259,8 +8293,8 @@ dependencies = [
[[package]]
name = "sc-client-db"
-version = "0.44.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "0.44.1"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"hash-db",
"kvdb",
@@ -8286,7 +8320,7 @@ dependencies = [
[[package]]
name = "sc-consensus"
version = "0.44.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"futures",
@@ -8310,7 +8344,7 @@ dependencies = [
[[package]]
name = "sc-consensus-aura"
version = "0.45.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"futures",
@@ -8339,7 +8373,7 @@ dependencies = [
[[package]]
name = "sc-consensus-babe"
version = "0.45.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"fork-tree",
@@ -8364,7 +8398,7 @@ dependencies = [
"sp-consensus-babe",
"sp-consensus-slots",
"sp-core",
- "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-inherents",
"sp-keystore",
"sp-runtime",
@@ -8375,7 +8409,7 @@ dependencies = [
[[package]]
name = "sc-consensus-epochs"
version = "0.44.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"fork-tree",
"parity-scale-codec",
@@ -8388,7 +8422,7 @@ dependencies = [
[[package]]
name = "sc-consensus-grandpa"
version = "0.30.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"ahash 0.8.11",
"array-bytes",
@@ -8422,7 +8456,7 @@ dependencies = [
"sp-consensus",
"sp-consensus-grandpa",
"sp-core",
- "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-keystore",
"sp-runtime",
"substrate-prometheus-endpoint",
@@ -8432,7 +8466,7 @@ dependencies = [
[[package]]
name = "sc-consensus-grandpa-rpc"
version = "0.30.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"finality-grandpa",
"futures",
@@ -8452,7 +8486,7 @@ dependencies = [
[[package]]
name = "sc-consensus-manual-seal"
version = "0.46.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"assert_matches",
"async-trait",
@@ -8487,7 +8521,7 @@ dependencies = [
[[package]]
name = "sc-consensus-slots"
version = "0.44.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"futures",
@@ -8510,7 +8544,7 @@ dependencies = [
[[package]]
name = "sc-executor"
version = "0.40.1"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"parity-scale-codec",
"parking_lot 0.12.3",
@@ -8533,7 +8567,7 @@ dependencies = [
[[package]]
name = "sc-executor-common"
version = "0.35.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"polkavm",
"sc-allocator",
@@ -8546,7 +8580,7 @@ dependencies = [
[[package]]
name = "sc-executor-polkavm"
version = "0.32.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"log",
"polkavm",
@@ -8557,7 +8591,7 @@ dependencies = [
[[package]]
name = "sc-executor-wasmtime"
version = "0.35.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"anyhow",
"cfg-if",
@@ -8575,7 +8609,7 @@ dependencies = [
[[package]]
name = "sc-informant"
version = "0.44.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"console",
"futures",
@@ -8592,7 +8626,7 @@ dependencies = [
[[package]]
name = "sc-keystore"
version = "33.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"parking_lot 0.12.3",
@@ -8606,7 +8640,7 @@ dependencies = [
[[package]]
name = "sc-mixnet"
version = "0.15.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"arrayvec",
@@ -8634,8 +8668,8 @@ dependencies = [
[[package]]
name = "sc-network"
-version = "0.45.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "0.45.6"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"async-channel",
@@ -8686,7 +8720,7 @@ dependencies = [
[[package]]
name = "sc-network-common"
version = "0.44.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"bitflags 1.3.2",
@@ -8704,7 +8738,7 @@ dependencies = [
[[package]]
name = "sc-network-gossip"
version = "0.45.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"ahash 0.8.11",
"futures",
@@ -8722,8 +8756,8 @@ dependencies = [
[[package]]
name = "sc-network-light"
-version = "0.44.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "0.44.1"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"async-channel",
@@ -8743,8 +8777,8 @@ dependencies = [
[[package]]
name = "sc-network-sync"
-version = "0.44.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "0.44.1"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"async-channel",
@@ -8780,8 +8814,8 @@ dependencies = [
[[package]]
name = "sc-network-transactions"
-version = "0.44.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "0.44.1"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"futures",
@@ -8800,7 +8834,7 @@ dependencies = [
[[package]]
name = "sc-network-types"
version = "0.12.1"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"bs58 0.5.1",
"ed25519-dalek",
@@ -8817,7 +8851,7 @@ dependencies = [
[[package]]
name = "sc-offchain"
version = "40.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"bytes",
@@ -8851,7 +8885,7 @@ dependencies = [
[[package]]
name = "sc-proposer-metrics"
version = "0.18.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"log",
"substrate-prometheus-endpoint",
@@ -8860,7 +8894,7 @@ dependencies = [
[[package]]
name = "sc-rpc"
version = "40.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"futures",
"jsonrpsee",
@@ -8892,7 +8926,7 @@ dependencies = [
[[package]]
name = "sc-rpc-api"
version = "0.44.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"jsonrpsee",
"parity-scale-codec",
@@ -8911,8 +8945,8 @@ dependencies = [
[[package]]
name = "sc-rpc-server"
-version = "17.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "17.1.2"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"dyn-clone",
"forwarded-header-value",
@@ -8936,7 +8970,7 @@ dependencies = [
[[package]]
name = "sc-rpc-spec-v2"
version = "0.45.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"futures",
@@ -8968,7 +9002,7 @@ dependencies = [
[[package]]
name = "sc-service"
version = "0.46.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"directories",
@@ -9032,7 +9066,7 @@ dependencies = [
[[package]]
name = "sc-state-db"
version = "0.36.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"log",
"parity-scale-codec",
@@ -9043,7 +9077,7 @@ dependencies = [
[[package]]
name = "sc-sysinfo"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"derive_more",
"futures",
@@ -9056,15 +9090,15 @@ dependencies = [
"serde",
"serde_json",
"sp-core",
- "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-io",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
]
[[package]]
name = "sc-telemetry"
version = "25.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"chrono",
"futures",
@@ -9084,7 +9118,7 @@ dependencies = [
[[package]]
name = "sc-tracing"
version = "37.0.1"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"chrono",
"console",
@@ -9113,7 +9147,7 @@ dependencies = [
[[package]]
name = "sc-tracing-proc-macro"
version = "11.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"proc-macro-crate 3.2.0",
"proc-macro2",
@@ -9124,7 +9158,7 @@ dependencies = [
[[package]]
name = "sc-transaction-pool"
version = "37.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"futures",
@@ -9140,7 +9174,7 @@ dependencies = [
"sp-api",
"sp-blockchain",
"sp-core",
- "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-runtime",
"sp-tracing 17.0.1",
"sp-transaction-pool",
@@ -9151,7 +9185,7 @@ dependencies = [
[[package]]
name = "sc-transaction-pool-api"
version = "37.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"futures",
@@ -9167,7 +9201,7 @@ dependencies = [
[[package]]
name = "sc-utils"
version = "17.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-channel",
"futures",
@@ -9613,7 +9647,7 @@ name = "share-pool"
version = "0.1.0"
dependencies = [
"safe-math",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"substrate-fixed",
]
@@ -9759,7 +9793,7 @@ dependencies = [
[[package]]
name = "sp-api"
version = "34.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"docify",
"hash-db",
@@ -9781,7 +9815,7 @@ dependencies = [
[[package]]
name = "sp-api-proc-macro"
version = "20.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"Inflector",
"blake2 0.10.6",
@@ -9795,7 +9829,7 @@ dependencies = [
[[package]]
name = "sp-application-crypto"
version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"parity-scale-codec",
"scale-info",
@@ -9807,7 +9841,7 @@ dependencies = [
[[package]]
name = "sp-arithmetic"
version = "26.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"docify",
"integer-sqrt",
@@ -9830,7 +9864,7 @@ dependencies = [
[[package]]
name = "sp-block-builder"
version = "34.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"sp-api",
"sp-inherents",
@@ -9840,7 +9874,7 @@ dependencies = [
[[package]]
name = "sp-blockchain"
version = "37.0.1"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"futures",
"parity-scale-codec",
@@ -9859,7 +9893,7 @@ dependencies = [
[[package]]
name = "sp-consensus"
version = "0.40.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"futures",
@@ -9874,7 +9908,7 @@ dependencies = [
[[package]]
name = "sp-consensus-aura"
version = "0.40.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"parity-scale-codec",
@@ -9890,7 +9924,7 @@ dependencies = [
[[package]]
name = "sp-consensus-babe"
version = "0.40.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"parity-scale-codec",
@@ -9908,7 +9942,7 @@ dependencies = [
[[package]]
name = "sp-consensus-grandpa"
version = "21.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"finality-grandpa",
"log",
@@ -9925,7 +9959,7 @@ dependencies = [
[[package]]
name = "sp-consensus-slots"
version = "0.40.1"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"parity-scale-codec",
"scale-info",
@@ -9936,7 +9970,7 @@ dependencies = [
[[package]]
name = "sp-core"
version = "34.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"bitflags 1.3.2",
@@ -9965,11 +9999,11 @@ dependencies = [
"secp256k1",
"secrecy",
"serde",
- "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
- "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
+ "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-externalities 0.29.0",
"sp-runtime-interface 28.0.0",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-storage 21.0.0",
"ss58-registry",
"substrate-bip39",
@@ -10002,7 +10036,7 @@ dependencies = [
[[package]]
name = "sp-crypto-ec-utils"
version = "0.14.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"ark-bls12-377",
"ark-bls12-377-ext",
@@ -10036,7 +10070,7 @@ dependencies = [
[[package]]
name = "sp-crypto-hashing"
version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"blake2b_simd",
"byteorder",
@@ -10049,17 +10083,17 @@ dependencies = [
[[package]]
name = "sp-crypto-hashing-proc-macro"
version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"quote",
- "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"syn 2.0.90",
]
[[package]]
name = "sp-database"
version = "10.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"kvdb",
"parking_lot 0.12.3",
@@ -10068,7 +10102,7 @@ dependencies = [
[[package]]
name = "sp-debug-derive"
version = "14.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"proc-macro2",
"quote",
@@ -10098,7 +10132,7 @@ dependencies = [
[[package]]
name = "sp-externalities"
version = "0.29.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"environmental",
"parity-scale-codec",
@@ -10108,7 +10142,7 @@ dependencies = [
[[package]]
name = "sp-genesis-builder"
version = "0.15.1"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"parity-scale-codec",
"scale-info",
@@ -10120,7 +10154,7 @@ dependencies = [
[[package]]
name = "sp-inherents"
version = "34.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"impl-trait-for-tuples",
@@ -10132,8 +10166,8 @@ dependencies = [
[[package]]
name = "sp-io"
-version = "38.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "38.0.2"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"bytes",
"docify",
@@ -10145,7 +10179,7 @@ dependencies = [
"rustversion",
"secp256k1",
"sp-core",
- "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-externalities 0.29.0",
"sp-keystore",
"sp-runtime-interface 28.0.0",
@@ -10159,7 +10193,7 @@ dependencies = [
[[package]]
name = "sp-keyring"
version = "39.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"sp-core",
"sp-runtime",
@@ -10169,7 +10203,7 @@ dependencies = [
[[package]]
name = "sp-keystore"
version = "0.40.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"parity-scale-codec",
"parking_lot 0.12.3",
@@ -10180,7 +10214,7 @@ dependencies = [
[[package]]
name = "sp-maybe-compressed-blob"
version = "11.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"thiserror",
"zstd 0.12.4",
@@ -10189,7 +10223,7 @@ dependencies = [
[[package]]
name = "sp-metadata-ir"
version = "0.7.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"frame-metadata",
"parity-scale-codec",
@@ -10199,7 +10233,7 @@ dependencies = [
[[package]]
name = "sp-mixnet"
version = "0.12.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"parity-scale-codec",
"scale-info",
@@ -10210,7 +10244,7 @@ dependencies = [
[[package]]
name = "sp-offchain"
version = "34.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"sp-api",
"sp-core",
@@ -10220,7 +10254,7 @@ dependencies = [
[[package]]
name = "sp-panic-handler"
version = "13.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"backtrace",
"lazy_static",
@@ -10230,7 +10264,7 @@ dependencies = [
[[package]]
name = "sp-rpc"
version = "32.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"rustc-hash 1.1.0",
"serde",
@@ -10239,8 +10273,8 @@ dependencies = [
[[package]]
name = "sp-runtime"
-version = "39.0.1"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "39.0.5"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"docify",
"either",
@@ -10258,7 +10292,7 @@ dependencies = [
"sp-arithmetic",
"sp-core",
"sp-io",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-weights",
"tracing",
]
@@ -10285,7 +10319,7 @@ dependencies = [
[[package]]
name = "sp-runtime-interface"
version = "28.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"bytes",
"impl-trait-for-tuples",
@@ -10294,7 +10328,7 @@ dependencies = [
"primitive-types",
"sp-externalities 0.29.0",
"sp-runtime-interface-proc-macro 18.0.0",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-storage 21.0.0",
"sp-tracing 17.0.1",
"sp-wasm-interface 21.0.1",
@@ -10317,7 +10351,7 @@ dependencies = [
[[package]]
name = "sp-runtime-interface-proc-macro"
version = "18.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"Inflector",
"expander",
@@ -10330,7 +10364,7 @@ dependencies = [
[[package]]
name = "sp-session"
version = "36.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"parity-scale-codec",
"scale-info",
@@ -10344,7 +10378,7 @@ dependencies = [
[[package]]
name = "sp-staking"
version = "36.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"impl-trait-for-tuples",
"parity-scale-codec",
@@ -10357,7 +10391,7 @@ dependencies = [
[[package]]
name = "sp-state-machine"
version = "0.43.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"hash-db",
"log",
@@ -10377,7 +10411,7 @@ dependencies = [
[[package]]
name = "sp-statement-store"
version = "18.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"aes-gcm",
"curve25519-dalek",
@@ -10390,7 +10424,7 @@ dependencies = [
"sp-api",
"sp-application-crypto",
"sp-core",
- "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-externalities 0.29.0",
"sp-runtime",
"sp-runtime-interface 28.0.0",
@@ -10401,7 +10435,7 @@ dependencies = [
[[package]]
name = "sp-std"
version = "14.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
[[package]]
name = "sp-std"
@@ -10423,19 +10457,19 @@ dependencies = [
[[package]]
name = "sp-storage"
version = "21.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"impl-serde",
"parity-scale-codec",
"ref-cast",
"serde",
- "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
]
[[package]]
name = "sp-timestamp"
version = "34.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"parity-scale-codec",
@@ -10458,7 +10492,7 @@ dependencies = [
[[package]]
name = "sp-tracing"
version = "17.0.1"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"parity-scale-codec",
"tracing",
@@ -10469,7 +10503,7 @@ dependencies = [
[[package]]
name = "sp-transaction-pool"
version = "34.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"sp-api",
"sp-runtime",
@@ -10478,7 +10512,7 @@ dependencies = [
[[package]]
name = "sp-transaction-storage-proof"
version = "34.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"async-trait",
"parity-scale-codec",
@@ -10492,7 +10526,7 @@ dependencies = [
[[package]]
name = "sp-trie"
version = "37.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"ahash 0.8.11",
"hash-db",
@@ -10515,7 +10549,7 @@ dependencies = [
[[package]]
name = "sp-version"
version = "37.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"impl-serde",
"parity-scale-codec",
@@ -10524,7 +10558,7 @@ dependencies = [
"serde",
"sp-crypto-hashing-proc-macro",
"sp-runtime",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"sp-version-proc-macro",
"thiserror",
]
@@ -10532,7 +10566,7 @@ dependencies = [
[[package]]
name = "sp-version-proc-macro"
version = "14.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"parity-scale-codec",
"proc-macro2",
@@ -10554,7 +10588,7 @@ dependencies = [
[[package]]
name = "sp-wasm-interface"
version = "21.0.1"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"anyhow",
"impl-trait-for-tuples",
@@ -10566,7 +10600,7 @@ dependencies = [
[[package]]
name = "sp-weights"
version = "31.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"bounded-collections",
"parity-scale-codec",
@@ -10574,7 +10608,7 @@ dependencies = [
"serde",
"smallvec",
"sp-arithmetic",
- "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
]
[[package]]
@@ -10754,8 +10788,8 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "staging-xcm"
-version = "14.2.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "14.2.2"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"bounded-collections",
@@ -10875,7 +10909,7 @@ dependencies = [
[[package]]
name = "substrate-bip39"
version = "0.6.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"hmac 0.12.1",
"pbkdf2",
@@ -10887,7 +10921,7 @@ dependencies = [
[[package]]
name = "substrate-build-script-utils"
version = "11.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
[[package]]
name = "substrate-fixed"
@@ -10903,7 +10937,7 @@ dependencies = [
[[package]]
name = "substrate-frame-rpc-system"
version = "39.0.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"docify",
"frame-system-rpc-runtime-api",
@@ -10923,7 +10957,7 @@ dependencies = [
[[package]]
name = "substrate-prometheus-endpoint"
version = "0.17.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"http-body-util",
"hyper 1.5.0",
@@ -10936,8 +10970,8 @@ dependencies = [
[[package]]
name = "substrate-wasm-builder"
-version = "24.0.1"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+version = "24.0.2"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"array-bytes",
"build-helper",
@@ -11044,7 +11078,7 @@ dependencies = [
"precompile-utils",
"sp-core",
"sp-runtime",
- "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409)",
+ "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7)",
"subtensor-runtime-common",
]
@@ -11337,9 +11371,9 @@ dependencies = [
[[package]]
name = "tokio"
-version = "1.40.0"
+version = "1.44.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998"
+checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48"
dependencies = [
"backtrace",
"bytes",
@@ -11355,9 +11389,9 @@ dependencies = [
[[package]]
name = "tokio-macros"
-version = "2.4.0"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
+checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
dependencies = [
"proc-macro2",
"quote",
@@ -12688,7 +12722,7 @@ dependencies = [
[[package]]
name = "xcm-procedural"
version = "10.1.0"
-source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409#87971b3e92721bdf10bf40b410eaae779d494ca0"
+source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-stable2409-7#0c9644766f02c872f51e5b72adf1051189fe9126"
dependencies = [
"Inflector",
"proc-macro2",
diff --git a/Cargo.toml b/Cargo.toml
index b1456c6eff..548bc5af63 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -46,6 +46,7 @@ pallet-admin-utils = { default-features = false, path = "pallets/admin-utils" }
pallet-collective = { default-features = false, path = "pallets/collective" }
pallet-commitments = { default-features = false, path = "pallets/commitments" }
pallet-registry = { default-features = false, path = "pallets/registry" }
+pallet-crowdloan = { default-features = false, path = "pallets/crowdloan" }
pallet-subtensor = { default-features = false, path = "pallets/subtensor" }
subtensor-custom-rpc = { default-features = false, path = "pallets/subtensor/rpc" }
subtensor-custom-rpc-runtime-api = { default-features = false, path = "pallets/subtensor/runtime-api" }
@@ -99,127 +100,128 @@ approx = "0.5"
subtensor-macros = { path = "support/macros" }
-frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-frame-executive = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-frame-metadata-hash-extension = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-frame-support = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-frame-system = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-frame-system-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
+frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+frame-executive = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+frame-metadata-hash-extension = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+frame-support = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+frame-system = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+frame-system-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
-pallet-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-pallet-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-pallet-insecure-randomness-collective-flip = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-pallet-membership = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-pallet-multisig = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-pallet-preimage = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
+pallet-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+pallet-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+pallet-insecure-randomness-collective-flip = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+pallet-membership = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+pallet-multisig = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+pallet-preimage = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
pallet-proxy = { path = "pallets/proxy", default-features = false }
-pallet-safe-mode = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-pallet-scheduler = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
+pallet-safe-mode = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+pallet-scheduler = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
pallet-utility = { path = "pallets/utility", default-features = false }
-pallet-root-testing = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
+pallet-root-testing = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
-sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-consensus-grandpa-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-chain-spec-derive = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-chain-spec = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-consensus-slots = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-executor = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-keystore = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-network = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-offchain = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-rpc-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-service = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sc-transaction-pool-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
+sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-consensus-grandpa-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-chain-spec-derive = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-chain-spec = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-consensus-slots = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-executor = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-keystore = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-network = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-offchain = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-rpc-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-service = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sc-transaction-pool-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
-sp-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-consensus = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sp-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-core = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-io = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-session = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-std = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-storage = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-sp-tracing = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-version = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sp-weights = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
+sp-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-consensus = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sp-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-core = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-io = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-session = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-std = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-storage = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+sp-tracing = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-version = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sp-weights = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
-substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
+substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
substrate-fixed = { git = "https://github.com/opentensor/substrate-fixed.git", tag = "v0.5.9" }
-substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
-substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409" }
+substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
+substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7" }
-sc-consensus-manual-seal = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-sc-network-sync = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
-substrate-prometheus-endpoint = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
+sc-consensus-manual-seal = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+sc-network-sync = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
+substrate-prometheus-endpoint = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
# Frontier
-fp-evm = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-fp-rpc = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-fp-self-contained = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false, features = [
+fp-evm = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+fp-rpc = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+fp-self-contained = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false, features = [
"serde",
] }
-fp-account = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-fc-storage = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-fc-db = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-fc-consensus = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-fp-consensus = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-fp-dynamic-fee = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-fc-api = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-fc-rpc = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false, features = [
+fp-account = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+fc-storage = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+fc-db = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+fc-consensus = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+fp-consensus = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+fp-dynamic-fee = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+fc-api = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+fc-rpc = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false, features = [
"rpc-binary-search-estimate",
] }
-fc-rpc-core = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-fc-mapping-sync = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-precompile-utils = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
+fc-rpc-core = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+fc-aura = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+fc-mapping-sync = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+precompile-utils = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
# Frontier FRAME
-pallet-base-fee = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-pallet-dynamic-fee = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-pallet-ethereum = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-pallet-evm = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-pallet-evm-chain-id = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-pallet-evm-precompile-modexp = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-pallet-evm-precompile-sha3fips = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-pallet-evm-precompile-simple = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
-pallet-hotfix-sufficients = { git = "https://github.com/opentensor/frontier", rev = "635bdac882", default-features = false }
+pallet-base-fee = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+pallet-dynamic-fee = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+pallet-ethereum = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+pallet-evm = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+pallet-evm-chain-id = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+pallet-evm-precompile-modexp = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+pallet-evm-precompile-sha3fips = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+pallet-evm-precompile-simple = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
+pallet-hotfix-sufficients = { git = "https://github.com/opentensor/frontier", rev = "cd6bca14a3", default-features = false }
#DRAND
pallet-drand = { path = "pallets/drand", default-features = false }
-sp-crypto-ec-utils = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", features = [
+sp-crypto-ec-utils = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", features = [
"bls12-381",
] }
getrandom = { version = "0.2.15", features = [
"custom",
], default-features = false }
-sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409", default-features = false }
+sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2409-7", default-features = false }
w3f-bls = { version = "=0.1.3", default-features = false }
ark-crypto-primitives = { version = "0.4.0", default-features = false, features = [
"r1cs",
@@ -267,3 +269,4 @@ runtime-benchmarks = [
"node-subtensor-runtime/runtime-benchmarks",
]
metadata-hash = ["node-subtensor-runtime/metadata-hash"]
+pow-faucet = []
diff --git a/Dockerfile b/Dockerfile
index 35e1e20b56..447ed98b5e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,14 @@
-ARG BASE_IMAGE=rust:1.83
-FROM $BASE_IMAGE AS base_builder
+# ------------------------------------------------------------------------------
+# Subtensor Dockerfile (hardened)
+# – Builds production and local binaries
+# – Final runtime images run as non-root `subtensor` user (UID/GID 10001)
+# ------------------------------------------------------------------------------
+
+###############################################################################
+# ---------- 1. Common build environment -------------------------------------
+###############################################################################
+ARG BASE_IMAGE=rust:latest
+FROM ${BASE_IMAGE} AS base_builder
LABEL ai.opentensor.image.authors="operations@opentensor.ai" \
ai.opentensor.image.vendor="Opentensor Foundation" \
@@ -7,56 +16,88 @@ LABEL ai.opentensor.image.authors="operations@opentensor.ai" \
ai.opentensor.image.description="Opentensor Subtensor Blockchain" \
ai.opentensor.image.documentation="https://docs.bittensor.com"
-RUN rustup update stable
-RUN rustup target add wasm32-unknown-unknown --toolchain stable
-
+# Rust targets
+RUN rustup update stable && \
+ rustup target add wasm32-unknown-unknown --toolchain stable
-# Set up Rust environment
+# Build prerequisites
ENV RUST_BACKTRACE=1
-RUN apt-get update && apt-get install -y curl build-essential protobuf-compiler clang git pkg-config libssl-dev
-RUN rm -rf /var/lib/apt/lists/*
+RUN apt-get update && \
+ apt-get install -y --no-install-recommends \
+ curl build-essential protobuf-compiler clang git pkg-config libssl-dev && \
+ rm -rf /var/lib/apt/lists/*
-# Copy entire repository
+# Copy entire repository once for all build stages (maximises cache hits)
COPY . /build
WORKDIR /build
-#
-# Image for building prod
-#
+###############################################################################
+# ---------- 2. Production build stage ---------------------------------------
+###############################################################################
FROM base_builder AS prod_builder
-# Build the project
-RUN cargo build -p node-subtensor --profile production --features="metadata-hash" --locked
-# Verify the binary was produced
-RUN test -e /build/target/production/node-subtensor
-EXPOSE 30333 9933 9944
-#
-# Final prod image
-#
-FROM $BASE_IMAGE AS subtensor
-# Copy all chainspec files
-COPY --from=prod_builder /build/*.json /
-# Copy final binary
-COPY --from=prod_builder /build/target/production/node-subtensor /usr/local/bin
+# Build the production binary (profile defined in Cargo.toml)
+RUN cargo build -p node-subtensor --profile production --features "metadata-hash" --locked \
+ && test -e /build/target/production/node-subtensor # sanity-check
+###############################################################################
+# ---------- 3. Final production image (hardened) ----------------------------
+###############################################################################
+FROM ${BASE_IMAGE} AS subtensor
+
+# ---- security hardening: create least-privilege user ----
+RUN addgroup --system --gid 10001 subtensor && \
+ adduser --system --uid 10001 --gid 10001 --home /home/subtensor --disabled-password subtensor
+
+# Writable data directory to be used as --base-path
+RUN mkdir -p /data && chown -R subtensor:subtensor /data
+
+# Workdir for the non-root user
+WORKDIR /home/subtensor
+
+# Copy chainspecs and binary with correct ownership
+COPY --chown=subtensor:subtensor --from=prod_builder /build/*.json ./
+COPY --chown=subtensor:subtensor --from=prod_builder /build/chainspecs/*.json ./chainspecs/
+COPY --from=prod_builder /build/target/production/node-subtensor /usr/local/bin/
+RUN chown subtensor:subtensor /usr/local/bin/node-subtensor
-#
-# Image for building local
-#
-FROM base_builder AS local_builder
-# Build the project
-RUN cargo build --workspace --profile release --features="pow-faucet"
-# Verify the binary was produced
-RUN test -e /build/target/release/node-subtensor
EXPOSE 30333 9933 9944
+USER subtensor
+ENTRYPOINT ["node-subtensor"]
+CMD ["--base-path","/data"]
+###############################################################################
+# ---------- 4. Local build stage --------------------------------------------
+###############################################################################
+FROM base_builder AS local_builder
+
+# Build the workspace in release mode with the pow-faucet feature
+RUN cargo build --workspace --profile release --features "pow-faucet" \
+ && test -e /build/target/release/node-subtensor # sanity-check
+
+###############################################################################
+# ---------- 5. Final local image (hardened) ----------------------------------
+###############################################################################
+FROM ${BASE_IMAGE} AS subtensor-local
+
+# Least-privilege user
+RUN addgroup --system --gid 10001 subtensor && \
+ adduser --system --uid 10001 --gid 10001 --home /home/subtensor --disabled-password subtensor
-#
-# Final local image
-#
-FROM $BASE_IMAGE AS subtensor-local
-# Copy all chainspec files
-COPY --from=local_builder /build/*.json /
-# Copy final binary
-COPY --from=local_builder /build/target/release/node-subtensor /usr/local/bin
-RUN "node-subtensor" build-spec --disable-default-bootnode --raw --chain local > /localnet.json
+RUN mkdir -p /data && chown -R subtensor:subtensor /data
+WORKDIR /home/subtensor
+
+# Copy artifacts
+COPY --chown=subtensor:subtensor --from=local_builder /build/*.json ./
+COPY --chown=subtensor:subtensor --from=local_builder /build/chainspecs/*.json ./chainspecs/
+COPY --from=local_builder /build/target/release/node-subtensor /usr/local/bin/
+RUN chown subtensor:subtensor /usr/local/bin/node-subtensor
+
+# Generate a local chainspec for convenience (run as root before user switch)
+RUN node-subtensor build-spec --disable-default-bootnode --raw --chain local > /localnet.json \
+ && chown subtensor:subtensor /localnet.json
+
+EXPOSE 30333 9933 9944
+USER subtensor
+ENTRYPOINT ["node-subtensor"]
+CMD ["--base-path","/data","--chain","/localnet.json"]
diff --git a/README.md b/README.md
index 4d1cdf645a..c5c53b5d65 100644
--- a/README.md
+++ b/README.md
@@ -9,6 +9,7 @@
```
# **Subtensor**
+[](https://github.com/opentensor/subtensor/actions)
[](https://discord.gg/bittensor)
[](https://opensource.org/licenses/MIT)
@@ -272,7 +273,7 @@ blocks and executing the state changes they define. The Substrate project in thi
[FRAME](https://docs.substrate.io/main-docs/fundamentals/runtime-intro/#frame) to construct a
blockchain runtime. FRAME allows runtime developers to declare domain-specific logic in modules
called "pallets". At the heart of FRAME is a helpful
-[macro language](https://docs.substrate.io/reference/frame-macros/) that makes it easy to
+[macro language](https://docs.polkadot.com/develop/parachains/customize-parachain/overview/#pallet-structure) that makes it easy to
create pallets and flexibly compose them to create blockchains that can address
[a variety of needs](https://substrate.io/ecosystem/projects/).
diff --git a/docs/consensus.md b/docs/consensus.md
index 881b465b48..c3a04c380f 100644
--- a/docs/consensus.md
+++ b/docs/consensus.md
@@ -17,6 +17,8 @@ Community oversight (as in Steemit) must identify wrongful downvoting, but only
High-volume, on-demand generative content (as in Bittensor) demands automated evaluation and divide-and-conquer validation, but introduces subjectivity both in the automated value measures and mutually exclusive task subsets across subnet validators. A coalition of validators can collude to skew scoring of subnet servers in their favour, which is harder to detect because of the inherent subjectivity. Existing consensus mechanisms will fail to deter reward manipulation for such high-volume subjective utility networks, so the need for a more sophisticated consensus arises.
+---
+
### Consensus Mechanism
Yuma Consensus guarantees long-term network honesty despite persistent adversarial presence in high-volume subjective utility networks. It directly penalizes selfish scoring by down-correction to the majority consensus and slashing of cabal voting stake, and also penalizes low-scoring of honest servers via forfeited validator rewards when cabals don’t score at consensus.
@@ -31,6 +33,8 @@ Yuma Consensus is adversarially-resilient when majority stake is honest, via sta
**Cabal sets high self-weight**: Cabal servers with poor utility will receive low weights from majority stake, and high self-weight from minority cabals will then get reduced to the low consensus. This means that minority cabals lose voting power as penalty for unfair voting while still receiving low consensus weight despite high self-weight. This consensus mechanism thus protects against selfish weighting if the majority stake is honest.
+---
+
### Game-theoretic framework
#### Preliminaries
@@ -112,6 +116,64 @@ let mut ema_bonds: Vec> = mat_ema( &bonds_delta, &bonds, alpha ); /
let mut dividends: Vec = inplace_normalize(matmul_transpose( &ema_bonds, &incentive )); // Validator reward
```
+---
+
+### Monte Carlo simulations
+
+We consider a two-team game between (protagonist) honest stake ($0.5< S_H\le 1$) and (adversarial) cabal stake ($1 - S_H$), with $|H|$ honest and $|C|$ cabal players, that have $S_H = \sum_{i\in H}S_i$ honest stake and $1-S_H = \sum_{i\in C}S_i$ cabal stake.
+
+#### Network sizing
+
+A network size of $N=|H|+|C|=(|H_V|+|H_S|)+(|C_V|+|C_S|)=512$ and validator count of $|H_V|+|C_V|=64$ is considered for consensus guarantee experiments, and the honest/cabal ratio $|H|/N=S_H$ reflects the honest stake ratio $S_H$, but modifying extremes to ensure that each subset has at least one validator and at least one server.
+
+#### Stake sampling
+
+For the Monte Carlo simulations we use Gaussian distributions for stake and weight assignments, and ensure that the honest/cabal ratios are met. Note that stake is only assigned to validator nodes $H_V$ and $C_V$ and not servers.
+
+Firstly, we sample initial validator ($i\in H_V\cup C_V$) stake values $S'_i \sim \mathcal{N}(1,\sigma_S^{2})$ with a typical $\sigma_S=0.3$ standard deviation, followed by clamping to avoid negative stake:
+
+$$S'_i = \begin{cases}
+x & \text{if } x \sim \mathcal{N}(1, \sigma_S^2), x \ge 0 \\
+0 & \text{if } x \sim \mathcal{N}(1, \sigma_S^2), x < 0
+\end{cases}$$
+
+Then we normalize each honest/cabal subset and multiply by its stake proportion, which thus gives an overall normalized stake and the correct stake ratio for each subset:
+
+$$S_{i\in H_V} = S_H \cdot S'\_i \left/ \sum_{k\in H_V} S'\_k\right.\qquad\qquad S_{i\in C_V} = (1-S_H)\cdot S'\_i \left/ \sum_{k\in C_V}S'\_k\right.$$
+
+#### Weight sampling
+
+Similarly, we randomize the weights that validators $H_V,C_V$ set on servers $H_S,C_S$.
+Specifically, honest players $i\in H$ set $W_H = \sum_{j\in H}W_{ij}$ self-weight and $1-W_H = \sum_{j\in C}W_{ij}$ weight on cabal players, while cabal players $i\in C$ set $W_C = \sum_{j\in C}W_{ij}$ self-weight and $1-W_C = \sum_{j\in H}W_{ij}$ weight on honest players.
+
+We firstly sample initial weights $W'_{ij} \sim \mathcal{N}(1,\sigma_W^{2})$ with various standard deviations ranging in $0\ge\sigma_W\ge0.4$, but then clamping to avoid negative weights:
+
+$$W'_{ij} = \begin{cases}
+x & \text{if } x \sim \mathcal{N}(1, \sigma_S^2), x \geq 0 \\
+0 & \text{if } x \sim \mathcal{N}(1, \sigma_S^2), x < 0
+\end{cases}$$
+
+Weight setting between the two subsets forms quadrants $H_V\rightarrow H_S$, $H_V\rightarrow C_S$, $C_V\rightarrow H_S$, and $C_V\rightarrow C_S$, so we ensure those weight ratios are met by normalizing each weight subset and multiplying by the corresponding quadrant ratio:
+
+$$W_{i\in H_V, j\in H_S} = W_H\cdot W'\_{ij} \left/ \sum_{k\in H_S}W'\_{ik}\right.\qquad\qquad W_{i\in H_V, j\in C_S} = (1-W_H)\cdot W'\_{ij} \left/ \sum_{k\in C_S}W'\_{ik}\right.$$
+
+$$W_{i\in C_V, j\in H_S} = (1-W_C)\cdot W'\_{ij} \left/ \sum_{k\in H_S}W'\_{ik}\right.\qquad\qquad W_{i\in C_V, j\in C_S} = W_C\cdot W'\_{ij} \left/ \sum_{k\in C_S}W'\_{ik}\right.$$
+
+#### Emission calculation
+
+Given the simulation parameters of the network size, validator count, a defined major/honest stake $S_H$, a defined major/honest utility $W_H$, and a defined minor/cabal self-weight $W_C$, we have now instantiated the network with randomly sampled stake and weights and can proceed with an emission calculation.
+
+We calculate the consensus $\overline{W_j} = \arg \max_w \left( \sum_i S_i \cdot \left\lbrace W_{ij} \ge w \right\rbrace \ge \kappa \right)$ for each server $j$, and calculate consensus-clipped weights $\overline{W_{ij}} = \min( W_{ij}, \overline{W_j} )$. This then gives us the adjusted weights that offers a measure of protection against reward manipulation.
+
+To calculate emissions for this epoch, we firstly calculate server rank $R_j = \sum_i S_i \cdot \overline{W_{ij}}$ then incentive $I_j = R_j / \sum_k R_k$, as well as validator bonds $\Delta B_{ij} = S_i \cdot \widetilde{W_{ij}} \left/ \left( \sum_k S_k \cdot \widetilde{W_{kj}} \right) \right.$ and rewards $D_i = \sum_j B_{ij} \cdot I_j$.
+
+Then we add up server incentive and validator bonds over honest nodes to obtain honest emission $E_H = \xi \cdot D_{i\in H} + (1-\xi) \cdot I_{i\in H}$ with a typical validator reward ratio of $\xi=0.5$.
+The objective is to prove major stake retention $S_H\ge E_H$ for a single epoch, which by extension proves retention over many epochs due to additive nature of EMA bonds, so we do not bother with validator EMA bonds in these experiments.
+
+The honest objective $S_H\le E_H$ at least retains scoring power $S_H$ over all action transitions in the game, otherwise when $E_H\le S_H$ honest emission will erode to 0 over time, despite a starting condition of $0.5\lt S_H$.
+
+---
+
### Consensus guarantees
Yuma Consensus guarantees honest majority stake retention $S_H\le E_H$ even under worst-case adversarial attacks, given sufficiently large honest utility $W_H$. The specific honest stake and utility pairs that delineate the guarantees are complicated by natural variances inside large realistic networks.
Therefore, we use extensive random sampling simulations (Monte Carlo studies) of large realistic networks and subject them to varying degrees of adversarial attacks, and calculate comprehensive consensus guarantees under representative conditions.
@@ -124,9 +186,9 @@ The x-axis is major self-weight and the y-axis is minor self-weight, and each co
Major/honest self-weight $W_H$ is the true honest utility, while minor/cabal self-weight $W_C$ is an arbitrary value a self-serving coalition may self-report.
-
-
-
+
+
+
To understand how we construct these plots, let us first consider contour plot for a single major/honest stake setting $S_H=0.6$. Here each contour value is the honest emission $E_H$, and we highlight at (1) the specific contour $E_H=0.6$ that matches the honest stake. This means that any weight setting on contour $E_H=S_H=0.6$ will retain honest stake, while any setting to the right of it will grow honest stake.
@@ -138,18 +200,20 @@ A compound plot then combines all the highlighted $S_H=E_H$ contours from indivi
Retention graphs like these comprehensively capture consensus guarantees across all primary conditions, and we utilize these to analyze the effect of consensus hyperparameters.
Subtensor integration tests run Monte Carlo simulations of large realistic networks under adversarial conditions, and constructs retention profiles to confirm consensus guarantees of the actual blockchain implementation.
-Retention profiles are reproducible by running [`_map_consensus_guarantees`](../pallets/subtensor/tests/epoch.rs) (decorate with `#[test]`).
+Retention profiles are reproducible by running test [`map_consensus_guarantees()`](../pallets/subtensor/src/tests/consensus.rs) and plotting with [`map_consensus.py`](../scripts/map_consensus.py).
```bash
-RUST_BACKTRACE=1 SKIP_WASM_BUILD=1 cargo test -- _map_consensus_guarantees --exact --nocapture > consensus.txt
+RUST_BACKTRACE=1 SKIP_WASM_BUILD=1 RUSTFLAGS="-C opt-level=3" cargo test --manifest-path=pallets/subtensor/Cargo.toml -- tests::consensus::map_consensus_guarantees --exact --nocapture > consensus.txt
+
+python scripts/map_consensus.py consensus.txt
```
#### Subjectivity variance
Yuma Consensus corrects reward manipulation in subjective utility networks, but the extent of subjectivity influences the exact consensus guarantees. In particular, we expect lower subjectivity to offer improved guarantees since there is stronger consensus. However, for higher variance in assigned weights it is easier to hide reward manipulation, we then expect poorer guarantees.
-
-
-
+
+
+
We assume normally distributed weights originating from a particular side, either honest or cabal, then we modify the weight deviation magnitude $\sigma(W)$ in terms of the mean weight $\mu(W)$.
@@ -167,9 +231,9 @@ Increasing $\kappa$ demands greater honest stake, e.g. when $\kappa=0.6$ there i
Hence $\kappa=0.5$ is typically the most sensible setting.
-
-
-
+
+
+
#### Bonds penalty (β)
@@ -179,9 +243,9 @@ Lower-stake validators may experience lower service priority, which can result i
Full bonds penalty $\beta=1$ may not be desired, due to the presence of non-adversarial cases like these.
-
-
-
+
+
+
We expect that greater bonds penalty will penalize out-of-consensus validators more, which means less emission going to cabals. Comprehensive simulation with $\beta = 0$, $0.5$, and $1$ respectively show 78%, 76%, and 73% honest utility requirement. This confirms the expectation, that greater bonds penalty means greater inflation going to the honest majority.
@@ -191,10 +255,110 @@ Subnet servers need incentive to deliver high utility, and subnet validators nee
We expect that more emission going to validators will improve security guarantees, since self-serving validation can then be economically disincentivized.
-
-
-
+
+
+
We set validation reward ratio at $\xi=0$, $0.25$, and $0.5$ and respectively observe 82%, 78%, 73% honest utility requirement for 60% honest stake preservation.
-This means that network security improves as the validation reward ratio is increased, although a significant server incentive ratio still needs to be maintained to ensure overall high utility.
\ No newline at end of file
+This means that network security improves as the validation reward ratio is increased, although a significant server incentive ratio still needs to be maintained to ensure overall high utility.
+
+---
+
+### Reproduce Consensus Plots (Runpod)
+
+This guide demonstrates how to reproduce consensus retention profile plots on a minimal Runpod CPU instance.
+
+#### 1. Deploy Runpod Instance
+
+Navigate to https://www.runpod.io/console/deploy and select the following:
+
+* **Pod Type:** CPU Pod, CPU5 (5.7 GHz • DDR5 RAM • NVMe) or equivalent.
+* **Instance Configuration:** Compute-Optimized ($0.07/hr, 2 vCPUs, 4GB RAM).
+
+**Important:** Edit the template and set "Container Disk (Temporary)" to 20GB. This ensures sufficient disk space for the process.
+
+Retrieve the connection details, including the SSH command and port, under "Connect" -> "SSH over exposed TCP". You can optionally enable Jupyter access (`8888:localhost:8888`) if desired. Connect to your instance via SSH:
+
+```bash
+ssh -L 8888:localhost:8888 root@ -p -i ~/.ssh/id_ed25519 # Replace placeholders
+```
+
+#### 2. Set up the Environment
+
+1. **Start a `tmux` session for persistence:**
+
+ ```bash
+ tmux
+ ```
+
+2. **Update system packages and install prerequisites (Python, Rust, and dependencies):**
+
+ ```bash
+ sudo apt-get update && sudo apt install -y build-essential clang curl git make libssl-dev llvm libudev-dev protobuf-compiler python3 python3-pip \
+ && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
+ && source ~/.cargo/env && rustup default stable && rustup update \
+ && rustup target add wasm32-unknown-unknown \
+ && rustup toolchain install nightly \
+ && rustup target add --toolchain nightly wasm32-unknown-unknown
+
+ ```
+
+3. **Clone the Subtensor repository and checkout the relevant branch:**
+
+ ```bash
+ git clone https://github.com/opentensor/subtensor.git
+ cd subtensor
+ git checkout main
+
+ ```
+
+
+#### 3. Simulate Networks and Generate Data
+
+The Subtensor integration tests simulate large, realistic networks under adversarial conditions to generate retention profiles that validate the blockchain's consensus guarantees. Building takes about 10 minutes, and the actual test itself another 15 minutes approximately.
+
+
+```bash
+RUST_BACKTRACE=1 SKIP_WASM_BUILD=1 RUSTFLAGS="-C opt-level=3" cargo test --manifest-path=pallets/subtensor/Cargo.toml -- tests::consensus::map_consensus_guarantees --exact --nocapture > consensus.txt
+```
+This command runs the `map_consensus_guarantees` test and saves the output to `consensus.txt`. Replace `` with a float e.g. 1.0 (100% bonds penalty).
+
+#### 4. Generate Contour Plots
+
+1. **Create a Python virtual environment and install necessary libraries:**
+
+ ```bash
+ python3 -m venv .venv
+ source .venv/bin/activate
+ pip install numpy matplotlib jupyterlab
+
+ ```
+
+2. **Run the plotting script:**
+
+ ```bash
+ python3 scripts/map_consensus.py consensus.txt
+ ```
+ This generates an SVG file named `consensus_plot.svg` in the current directory.
+
+
+#### 5. Explore and Modify (Optional)
+
+You can use Jupyter-lab to interactively explore and modify the generated plots:
+
+1. **Start Jupyter-lab (on VPS):**
+ ```bash
+ jupyter-lab --allow-root --port=8888
+ ```
+
+2. **Connect to Jupyter:** Open the provided URL (e.g., `http://localhost:8888/tree?token=...`) in your local workstation web browser.
+
+3. **Modify the plotting script:** Edit `scripts/map_consensus.py` to customize the plots, otherwise download the SVG file.
+
+
+#### Disclaimer
+
+> This reproduction procedure is provided as a guide and may require adjustments depending on your specific VPS environment and configuration. While every effort has been made to ensure accuracy and completeness, variations in system setup, software versions, or network conditions could affect the results.
+>
+> Please exercise caution when executing commands with root privileges and ensure you understand the potential implications before proceeding. The author assumes no responsibility for any issues arising from the use of this procedure. If you encounter problems or have suggestions for improvement, please open an issue on this repository.
diff --git a/docs/rust-setup.md b/docs/rust-setup.md
index 346b424a08..fedff7b381 100644
--- a/docs/rust-setup.md
+++ b/docs/rust-setup.md
@@ -2,7 +2,7 @@
title: Installation
---
This guide is for reference only, please check the latest information on getting starting with Substrate
-[here](https://docs.substrate.io/main-docs/install/).
+[here](https://docs.polkadot.com/main-docs/install/).
This page will guide you through the **2 steps** needed to prepare a computer for **Substrate** development.
Since Substrate is built with [the Rust programming language](https://www.rust-lang.org/), the first
@@ -14,7 +14,7 @@ Unix-based operating systems.
## Build dependencies
Substrate development is easiest on Unix-based operating systems like macOS or Linux. The examples
-in the [Substrate Docs](https://docs.substrate.io) use Unix-style terminals to demonstrate how to
+in the [Substrate Docs](https://docs.polkadot.com) use Unix-style terminals to demonstrate how to
interact with Substrate from the command line.
### Ubuntu/Debian
@@ -76,7 +76,7 @@ brew install openssl
recommend to use [Windows Subsystem Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10)
(WSL) and follow the instructions for [Ubuntu/Debian](#ubuntudebian).
Please refer to the separate
-[guide for native Windows development](https://docs.substrate.io/main-docs/install/windows/).
+[guide for native Windows development](https://docs.polkadot.com/main-docs/install/windows/).
## Rust developer environment
@@ -102,7 +102,7 @@ rustup target add wasm32-unknown-unknown --toolchain nightly
## Test your set-up
Now the best way to ensure that you have successfully prepared a computer for Substrate
-development is to follow the steps in [our first Substrate tutorial](https://docs.substrate.io/tutorials/v3/create-your-first-substrate-chain/).
+development is to follow the steps in [our first Substrate tutorial](https://docs.polkadot.com/tutorials/v3/create-your-first-substrate-chain/).
## Troubleshooting Substrate builds
diff --git a/evm-tests/README.md b/evm-tests/README.md
index 7d01034bd8..83dc8f326f 100644
--- a/evm-tests/README.md
+++ b/evm-tests/README.md
@@ -1,15 +1,30 @@
# type-test
-test with ts
+The evm-tests folder includes all typescript code to test the basic EVM function
+like token transfer, and all precompile contracts in Subtensor. It is
+implemented in typescript, use both ethers and viem lib to interact with
+contracts. The polkadot API is used to call extrinsic, get storage in Subtensor
+. The developers can use it to verify the code change in precompile contracts.
+
+It is also included in the CI process, all test cases are executed for new
+commit. CI flow can get catch any failed test cases. The polkadot API get the
+latest metadata from the runtime, the case also can find out any incompatibility
+between runtime and precompile contracts.
## polkadot api
+To get the metadata, you need start the localnet via run
+`./scripts/localnet.sh`. then run following command to get metadata, a folder
+name .papi will be created, which include the metadata and type definitions.
+
```bash
-npx papi add devnet -w ws://10.0.0.11:9944
+npx papi add devnet -w ws://localhost:9944
```
## get the new metadata
+If the runtime is upgrade, need to get the metadata again.
+
```bash
sh get-metadata.sh
```
diff --git a/evm-tests/local.test.ts b/evm-tests/local.test.ts
deleted file mode 100644
index 9eb24d4327..0000000000
--- a/evm-tests/local.test.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import * as assert from "assert";
-import { getAliceSigner, getClient, getDevnetApi, getRandomSubstrateKeypair } from "../src/substrate"
-import { SUB_LOCAL_URL, } from "../src/config";
-import { devnet } from "@polkadot-api/descriptors"
-import { PolkadotSigner, TypedApi } from "polkadot-api";
-import { convertPublicKeyToSs58, convertH160ToSS58 } from "../src/address-utils"
-import { ethers } from "ethers"
-import { INEURON_ADDRESS, INeuronABI } from "../src/contracts/neuron"
-import { generateRandomEthersWallet } from "../src/utils"
-import { forceSetBalanceToEthAddress, forceSetBalanceToSs58Address, addNewSubnetwork, burnedRegister } from "../src/subtensor"
-
-describe("Test neuron precompile Serve Axon Prometheus", () => {
- // init eth part
- // const wallet1 = generateRandomEthersWallet();
- // const wallet2 = generateRandomEthersWallet();
- // const wallet3 = generateRandomEthersWallet();
-
- // init substrate part
-
- // const coldkey = getRandomSubstrateKeypair();
-
- let api: TypedApi
-
- // sudo account alice as signer
- let alice: PolkadotSigner;
- before(async () => {
- // init variables got from await and async
- const subClient = await getClient(SUB_LOCAL_URL)
- api = await getDevnetApi()
- // alice = await getAliceSigner();
-
- // await forceSetBalanceToSs58Address(api, convertPublicKeyToSs58(coldkey.publicKey))
- // await forceSetBalanceToEthAddress(api, wallet1.address)
- // await forceSetBalanceToEthAddress(api, wallet2.address)
- // await forceSetBalanceToEthAddress(api, wallet3.address)
-
-
- let index = 0;
- while (index < 30) {
- const hotkey = getRandomSubstrateKeypair();
- const coldkey = getRandomSubstrateKeypair();
- await forceSetBalanceToSs58Address(api, convertPublicKeyToSs58(hotkey.publicKey))
- await forceSetBalanceToSs58Address(api, convertPublicKeyToSs58(coldkey.publicKey))
- let netuid = await addNewSubnetwork(api, hotkey, coldkey)
- }
-
-
- })
-
- it("Serve Axon", async () => {
-
- });
-});
\ No newline at end of file
diff --git a/evm-tests/package-lock.json b/evm-tests/package-lock.json
new file mode 100644
index 0000000000..ce2766fb4e
--- /dev/null
+++ b/evm-tests/package-lock.json
@@ -0,0 +1,5815 @@
+{
+ "name": "evm-tests",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "license": "ISC",
+ "dependencies": {
+ "@polkadot-labs/hdkd": "^0.0.10",
+ "@polkadot-labs/hdkd-helpers": "^0.0.11",
+ "@polkadot/api": "15.1.1",
+ "@types/mocha": "^10.0.10",
+ "crypto": "^1.0.1",
+ "dotenv": "16.4.7",
+ "ethers": "^6.13.5",
+ "mocha": "^11.1.0",
+ "polkadot-api": "^1.9.5",
+ "scale-ts": "^1.6.1",
+ "viem": "2.23.4"
+ },
+ "devDependencies": {
+ "@types/bun": "^1.1.13",
+ "@types/chai": "^5.0.1",
+ "assert": "^2.1.0",
+ "chai": "^5.2.0",
+ "prettier": "^3.3.3",
+ "ts-node": "^10.9.2",
+ "typescript": "^5.7.2",
+ "vite": "^5.4.8"
+ }
+ },
+ ".papi/descriptors": {
+ "name": "@polkadot-api/descriptors",
+ "version": "0.1.0-autogenerated.7914363913476982777",
+ "extraneous": true,
+ "peerDependencies": {
+ "polkadot-api": "*"
+ }
+ },
+ "node_modules/@adraffy/ens-normalize": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz",
+ "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==",
+ "license": "MIT"
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+ "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@commander-js/extra-typings": {
+ "version": "13.1.0",
+ "resolved": "https://registry.npmjs.org/@commander-js/extra-typings/-/extra-typings-13.1.0.tgz",
+ "integrity": "sha512-q5P52BYb1hwVWE6dtID7VvuJWrlfbCv4klj7BjUUOqMz4jbSZD4C9fJ9lRjL2jnBGTg+gDDlaXN51rkWcLk4fg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "commander": "~13.1.0"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz",
+ "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz",
+ "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz",
+ "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz",
+ "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz",
+ "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz",
+ "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz",
+ "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz",
+ "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz",
+ "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz",
+ "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz",
+ "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz",
+ "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz",
+ "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==",
+ "cpu": [
+ "mips64el"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz",
+ "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz",
+ "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz",
+ "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz",
+ "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz",
+ "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz",
+ "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz",
+ "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz",
+ "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz",
+ "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz",
+ "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz",
+ "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz",
+ "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "license": "MIT"
+ },
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "node_modules/@noble/curves": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz",
+ "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "1.7.1"
+ },
+ "engines": {
+ "node": "^14.21.3 || >=16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@noble/hashes": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz",
+ "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "^14.21.3 || >=16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@polkadot-api/cli": {
+ "version": "0.11.9",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/cli/-/cli-0.11.9.tgz",
+ "integrity": "sha512-5Qt+YRf/kOCZGiFoWzgyxoZYA9OpN28AFE4jQ4nZI33lty8oH4FR62IF2iLF+KdafhgF9k9l1Kj24zuBFH3Vrw==",
+ "license": "MIT",
+ "dependencies": {
+ "@commander-js/extra-typings": "^13.1.0",
+ "@polkadot-api/codegen": "0.13.3",
+ "@polkadot-api/ink-contracts": "0.2.6",
+ "@polkadot-api/json-rpc-provider": "0.0.4",
+ "@polkadot-api/known-chains": "0.7.3",
+ "@polkadot-api/metadata-compatibility": "0.2.0",
+ "@polkadot-api/observable-client": "0.8.6",
+ "@polkadot-api/polkadot-sdk-compat": "2.3.2",
+ "@polkadot-api/sm-provider": "0.1.7",
+ "@polkadot-api/smoldot": "0.3.8",
+ "@polkadot-api/substrate-bindings": "0.11.1",
+ "@polkadot-api/substrate-client": "0.3.0",
+ "@polkadot-api/utils": "0.1.2",
+ "@polkadot-api/wasm-executor": "^0.1.2",
+ "@polkadot-api/ws-provider": "0.4.0",
+ "@types/node": "^22.14.0",
+ "commander": "^13.1.0",
+ "execa": "^9.5.2",
+ "fs.promises.exists": "^1.1.4",
+ "ora": "^8.2.0",
+ "read-pkg": "^9.0.1",
+ "rxjs": "^7.8.2",
+ "tsc-prog": "^2.3.0",
+ "tsup": "^8.4.0",
+ "typescript": "^5.8.3",
+ "write-package": "^7.1.0"
+ },
+ "bin": {
+ "papi": "dist/main.js",
+ "polkadot-api": "dist/main.js"
+ }
+ },
+ "node_modules/@polkadot-api/codegen": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/codegen/-/codegen-0.13.3.tgz",
+ "integrity": "sha512-+8mp9k5L9myFSLv6Ad5r63JSIeq80/tKbk67rczDq6Co0PlJHqxult+wZHohHuyJSdtu8dHW9JQktTtM2RZT1w==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-api/ink-contracts": "0.2.6",
+ "@polkadot-api/metadata-builders": "0.10.2",
+ "@polkadot-api/metadata-compatibility": "0.2.0",
+ "@polkadot-api/substrate-bindings": "0.11.1",
+ "@polkadot-api/utils": "0.1.2"
+ }
+ },
+ "node_modules/@polkadot-api/ink-contracts": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/ink-contracts/-/ink-contracts-0.2.6.tgz",
+ "integrity": "sha512-76oHO/rKRa48w1i4DEmB/9e/FmxKuhMJq7l1OhdnX6mbVO+bAif7FkRUHLfIgsWqCdhCdfLe5J474HRudKhU/A==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-api/metadata-builders": "0.10.2",
+ "@polkadot-api/substrate-bindings": "0.11.1",
+ "@polkadot-api/utils": "0.1.2"
+ }
+ },
+ "node_modules/@polkadot-api/json-rpc-provider": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.4.tgz",
+ "integrity": "sha512-9cDijLIxzHOBuq6yHqpqjJ9jBmXrctjc1OFqU+tQrS96adQze3mTIH6DTgfb/0LMrqxzxffz1HQGrIlEH00WrA==",
+ "license": "MIT"
+ },
+ "node_modules/@polkadot-api/json-rpc-provider-proxy": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.2.4.tgz",
+ "integrity": "sha512-nuGoY9QpBAiRU7xmXN3nugFvPcnSu3IxTLm1OWcNTGlZ1LW5bvdQHz3JLk56+Jlyb3GJ971hqdg2DJsMXkKCOg==",
+ "license": "MIT"
+ },
+ "node_modules/@polkadot-api/known-chains": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/known-chains/-/known-chains-0.7.3.tgz",
+ "integrity": "sha512-yBRVbOLn0e36+EGWE2/hX8mhTKvfdZtbk2VCgTM9djkz28eDFfiDjEl6biQA8Q0Kd7t3iRzoNbBzpzyBwTMXUg==",
+ "license": "MIT"
+ },
+ "node_modules/@polkadot-api/logs-provider": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/logs-provider/-/logs-provider-0.0.6.tgz",
+ "integrity": "sha512-4WgHlvy+xee1ADaaVf6+MlK/+jGMtsMgAzvbQOJZnP4PfQuagoTqaeayk8HYKxXGphogLlPbD06tANxcb+nvAg==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-api/json-rpc-provider": "0.0.4"
+ }
+ },
+ "node_modules/@polkadot-api/metadata-builders": {
+ "version": "0.10.2",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.10.2.tgz",
+ "integrity": "sha512-rtdihBFd25oT9/71Q+EOR9q6E6mCl1pPe/2He/LtlY0TyHiYqO2KpMZNXkoGcw1RHvrV+CAtDFMvK1j3n8aW8w==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-api/substrate-bindings": "0.11.1",
+ "@polkadot-api/utils": "0.1.2"
+ }
+ },
+ "node_modules/@polkadot-api/metadata-compatibility": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-compatibility/-/metadata-compatibility-0.2.0.tgz",
+ "integrity": "sha512-ZvHj4KDQy/JFqV51UN6Gk5xnG0qt/BUS4kjYosLWT9y6p5bHg/4ge7QF5lMloInQqV3Rul9NQo4cKUz3SlSQMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-api/metadata-builders": "0.10.2",
+ "@polkadot-api/substrate-bindings": "0.11.1"
+ }
+ },
+ "node_modules/@polkadot-api/observable-client": {
+ "version": "0.8.6",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.8.6.tgz",
+ "integrity": "sha512-ci5HC8TYjGxoTG/QM+LLuGrfIsn+dtR7BBQz483c/ML8K/Hxl9v+evgZzPi9xNMwZ25mytn9lhA5dovYSEauSA==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-api/metadata-builders": "0.10.2",
+ "@polkadot-api/substrate-bindings": "0.11.1",
+ "@polkadot-api/utils": "0.1.2"
+ },
+ "peerDependencies": {
+ "@polkadot-api/substrate-client": "0.3.0",
+ "rxjs": ">=7.8.0"
+ }
+ },
+ "node_modules/@polkadot-api/pjs-signer": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/pjs-signer/-/pjs-signer-0.6.5.tgz",
+ "integrity": "sha512-RQJtvuX8jNR77h9PFTNQPjC4ii0g0uGrfyu5cbTujojg2QboU/6ny26Ty45rzkSOL0GaBLsS7Uf+/7Vf9hCxig==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-api/metadata-builders": "0.10.2",
+ "@polkadot-api/polkadot-signer": "0.1.6",
+ "@polkadot-api/signers-common": "0.1.6",
+ "@polkadot-api/substrate-bindings": "0.11.1",
+ "@polkadot-api/utils": "0.1.2"
+ }
+ },
+ "node_modules/@polkadot-api/polkadot-sdk-compat": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/polkadot-sdk-compat/-/polkadot-sdk-compat-2.3.2.tgz",
+ "integrity": "sha512-rLCveP3a6Xd0r218yRqVY34lJ8bXVmE12cArbU4JFp9p8e8Jbb6xdqOdu7bQtjlZUsahhcmfIHYQSXKziST7PA==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-api/json-rpc-provider": "0.0.4"
+ }
+ },
+ "node_modules/@polkadot-api/polkadot-signer": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/polkadot-signer/-/polkadot-signer-0.1.6.tgz",
+ "integrity": "sha512-X7ghAa4r7doETtjAPTb50IpfGtrBmy3BJM5WCfNKa1saK04VFY9w+vDn+hwEcM4p0PcDHt66Ts74hzvHq54d9A==",
+ "license": "MIT"
+ },
+ "node_modules/@polkadot-api/signer": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/signer/-/signer-0.1.15.tgz",
+ "integrity": "sha512-FUFlHrICB4dGlFa6FeFju/ySr8kTAkhTE/aSmfSxW0rl/cTeDO2fbUS9WmIl8wLB0jsI14I2r5J/p13FvIe1BA==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "^1.7.1",
+ "@polkadot-api/polkadot-signer": "0.1.6",
+ "@polkadot-api/signers-common": "0.1.6",
+ "@polkadot-api/substrate-bindings": "0.11.1",
+ "@polkadot-api/utils": "0.1.2"
+ }
+ },
+ "node_modules/@polkadot-api/signers-common": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/signers-common/-/signers-common-0.1.6.tgz",
+ "integrity": "sha512-OEzqpu/AlZIHbvpvwQJ7dhoRIRTXI2D7wYEoT5j0COpAvt3A1L53smECb3xWzkzlb82gINuqpUW5dfhhJ5tQFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-api/metadata-builders": "0.10.2",
+ "@polkadot-api/polkadot-signer": "0.1.6",
+ "@polkadot-api/substrate-bindings": "0.11.1",
+ "@polkadot-api/utils": "0.1.2"
+ }
+ },
+ "node_modules/@polkadot-api/sm-provider": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/sm-provider/-/sm-provider-0.1.7.tgz",
+ "integrity": "sha512-BhNKVeIFZdawpPVadXszLl8IP4EDjcLHe/GchfRRFkvoNFuwS2nNv/npYIqCviXV+dd2R8VnEELxwScsf380Og==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-api/json-rpc-provider": "0.0.4",
+ "@polkadot-api/json-rpc-provider-proxy": "0.2.4"
+ },
+ "peerDependencies": {
+ "@polkadot-api/smoldot": ">=0.3"
+ }
+ },
+ "node_modules/@polkadot-api/smoldot": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/smoldot/-/smoldot-0.3.8.tgz",
+ "integrity": "sha512-dbJSMRFtELDW+rZIWRwKE/K8oy7+gYaGl+DvaOjARoBW2n80rJ7RAMOCCu+b5h2zgl3elftFBwMNAuAWgHT/Zg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "^22.9.0",
+ "smoldot": "2.0.34"
+ }
+ },
+ "node_modules/@polkadot-api/smoldot/node_modules/smoldot": {
+ "version": "2.0.34",
+ "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.34.tgz",
+ "integrity": "sha512-mw9tCbGEhEp0koMqLL0jBEixVY1MIN/xI3pE6ZY1TuOPU+LnYy8FloODVyzkvzQPaBYrETXJdRlmA/+k6g3gow==",
+ "license": "GPL-3.0-or-later WITH Classpath-exception-2.0",
+ "dependencies": {
+ "ws": "^8.8.1"
+ }
+ },
+ "node_modules/@polkadot-api/substrate-bindings": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.11.1.tgz",
+ "integrity": "sha512-+oqAZB7y18KrP/DqKmU2P3nNmRzjCY7edtW7tyA1g1jPouF7HhRr/Q13lJseDX9sdE2FZGrKZtivzsw8XeXBng==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "^1.7.1",
+ "@polkadot-api/utils": "0.1.2",
+ "@scure/base": "^1.2.4",
+ "scale-ts": "^1.6.1"
+ }
+ },
+ "node_modules/@polkadot-api/substrate-client": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.3.0.tgz",
+ "integrity": "sha512-0hEvQLKH2zhaFzE8DPkWehvJilec8u2O2wbIEUStm0OJ8jIFtJ40MFjXQfB01dXBWUz1KaVBqS6xd3sZA90Dpw==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-api/json-rpc-provider": "0.0.4",
+ "@polkadot-api/utils": "0.1.2"
+ }
+ },
+ "node_modules/@polkadot-api/utils": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.2.tgz",
+ "integrity": "sha512-yhs5k2a8N1SBJcz7EthZoazzLQUkZxbf+0271Xzu42C5AEM9K9uFLbsB+ojzHEM72O5X8lPtSwGKNmS7WQyDyg==",
+ "license": "MIT"
+ },
+ "node_modules/@polkadot-api/wasm-executor": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/wasm-executor/-/wasm-executor-0.1.2.tgz",
+ "integrity": "sha512-a5wGenltB3EFPdf72u8ewi6HsUg2qubUAf3ekJprZf24lTK3+w8a/GUF/y6r08LJF35MALZ32SAtLqtVTIOGnQ==",
+ "license": "MIT"
+ },
+ "node_modules/@polkadot-api/ws-provider": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/ws-provider/-/ws-provider-0.4.0.tgz",
+ "integrity": "sha512-ZurjUHHAlQ1Ux8HiZz7mtkg1qjq6LmqxcHljcZxne0U7foCZrXdWHsohwlV8kUQUir5kXuDsNvdZN/MFCUMaVw==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-api/json-rpc-provider": "0.0.4",
+ "@polkadot-api/json-rpc-provider-proxy": "0.2.4",
+ "ws": "^8.18.1"
+ }
+ },
+ "node_modules/@polkadot-labs/hdkd": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/@polkadot-labs/hdkd/-/hdkd-0.0.10.tgz",
+ "integrity": "sha512-jD8l+Ls/kZjvZja4T2Y0G6Be3rfGn0qNs3hvcNeV2CmOMtI7yRkkWPXI7WiJ8AyEoBwBuZt0rm6yzGla6o2HXQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-labs/hdkd-helpers": "0.0.10"
+ }
+ },
+ "node_modules/@polkadot-labs/hdkd-helpers": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/@polkadot-labs/hdkd-helpers/-/hdkd-helpers-0.0.11.tgz",
+ "integrity": "sha512-qPlWqC3NNV/2NYc5GEy+Ovi4UBAgkMGvMfyiYuj2BQN4lW59Q1T9coNx0Yp6XzsnJ1ddaF9PWaUtxj3LdM0IDw==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/curves": "^1.8.1",
+ "@noble/hashes": "^1.7.1",
+ "@scure/base": "^1.2.4",
+ "micro-sr25519": "^0.1.0",
+ "scale-ts": "^1.6.1"
+ }
+ },
+ "node_modules/@polkadot-labs/hdkd/node_modules/@polkadot-labs/hdkd-helpers": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/@polkadot-labs/hdkd-helpers/-/hdkd-helpers-0.0.10.tgz",
+ "integrity": "sha512-wBKenhN7TjNiMXxBvQWzFf+su8xTaRGqyOKAlAfpyY9oWTOt3G05yMvDHEZ4g/NRLoE4P3fQYQ0bdcMKl7KkDw==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/curves": "^1.7.0",
+ "@noble/hashes": "^1.6.1",
+ "@scure/base": "^1.2.1",
+ "micro-sr25519": "^0.1.0",
+ "scale-ts": "^1.6.1"
+ }
+ },
+ "node_modules/@polkadot/api": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-15.1.1.tgz",
+ "integrity": "sha512-n3QeQ1CXlzjqyh2eFbEQPcnkXO3J4QYNTIj0Lnz/XFUpzKimHPDA2iUfaXuy5dXjnzS21jFANGSUFoZ+XKi/8g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/api-augment": "15.1.1",
+ "@polkadot/api-base": "15.1.1",
+ "@polkadot/api-derive": "15.1.1",
+ "@polkadot/keyring": "^13.2.3",
+ "@polkadot/rpc-augment": "15.1.1",
+ "@polkadot/rpc-core": "15.1.1",
+ "@polkadot/rpc-provider": "15.1.1",
+ "@polkadot/types": "15.1.1",
+ "@polkadot/types-augment": "15.1.1",
+ "@polkadot/types-codec": "15.1.1",
+ "@polkadot/types-create": "15.1.1",
+ "@polkadot/types-known": "15.1.1",
+ "@polkadot/util": "^13.2.3",
+ "@polkadot/util-crypto": "^13.2.3",
+ "eventemitter3": "^5.0.1",
+ "rxjs": "^7.8.1",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/api-augment": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-15.1.1.tgz",
+ "integrity": "sha512-tYASON7vVLz7FGcXVX9dWSd/9pR6FckayEkc08Z6RyjH7HfjtCZ3/Dz7MlGRNql4SnPi4+xpjSD6rwrZcETU1g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/api-base": "15.1.1",
+ "@polkadot/rpc-augment": "15.1.1",
+ "@polkadot/types": "15.1.1",
+ "@polkadot/types-augment": "15.1.1",
+ "@polkadot/types-codec": "15.1.1",
+ "@polkadot/util": "^13.2.3",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/api-base": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-15.1.1.tgz",
+ "integrity": "sha512-OXLZ7/k2RXLIA8hKA8oyii6o8MuGlqujIDcLVaMdtWnQsBg26h8pv/mujT2YSz2OguLxrfdvD+lUGtwZC8kw4A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/rpc-core": "15.1.1",
+ "@polkadot/types": "15.1.1",
+ "@polkadot/util": "^13.2.3",
+ "rxjs": "^7.8.1",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/api-derive": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-15.1.1.tgz",
+ "integrity": "sha512-UPcKr9FplfYKPaP7FYEF917Sm1rKnQFX4AzQJn3f8ySp7DDf6EYiHrNICtGifPEAoANTSW+YHlSchhtnvfSIhw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/api": "15.1.1",
+ "@polkadot/api-augment": "15.1.1",
+ "@polkadot/api-base": "15.1.1",
+ "@polkadot/rpc-core": "15.1.1",
+ "@polkadot/types": "15.1.1",
+ "@polkadot/types-codec": "15.1.1",
+ "@polkadot/util": "^13.2.3",
+ "@polkadot/util-crypto": "^13.2.3",
+ "rxjs": "^7.8.1",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/keyring": {
+ "version": "13.4.3",
+ "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.4.3.tgz",
+ "integrity": "sha512-2ePNcvBTznDN2luKbZM5fdxgAnj7V8m276qSTgrHlqKVvg9FsQpRCR6CAU+AjhnHzpe7uiZO+UH+jlXWefI3AA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/util": "13.4.3",
+ "@polkadot/util-crypto": "13.4.3",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@polkadot/util": "13.4.3",
+ "@polkadot/util-crypto": "13.4.3"
+ }
+ },
+ "node_modules/@polkadot/networks": {
+ "version": "13.4.3",
+ "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.4.3.tgz",
+ "integrity": "sha512-Z+YZkltBt//CtkVH8ZYJ1z66qYxdI0yPamzkzZAqw6gj3gjgSxKtxB4baA/rcAw05QTvN2R3dLkkmKr2mnHovQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/util": "13.4.3",
+ "@substrate/ss58-registry": "^1.51.0",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/rpc-augment": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-15.1.1.tgz",
+ "integrity": "sha512-s6i4nTy7/1Q5svIMT4TR55GLRv9asG7xbJcntHEsQ2nDs8zZV/mvPWfEUxgup0xVO8sDgyrf6KTTVRKJjySjUg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/rpc-core": "15.1.1",
+ "@polkadot/types": "15.1.1",
+ "@polkadot/types-codec": "15.1.1",
+ "@polkadot/util": "^13.2.3",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/rpc-core": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-15.1.1.tgz",
+ "integrity": "sha512-KErbVgPChps7NsxcGch5JCArZHNqs81fDEzs+XoHnD05nzuxcO38v4Yu+M04lHLax2m8ky8K6o3gurBglJENlA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/rpc-augment": "15.1.1",
+ "@polkadot/rpc-provider": "15.1.1",
+ "@polkadot/types": "15.1.1",
+ "@polkadot/util": "^13.2.3",
+ "rxjs": "^7.8.1",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/rpc-provider": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-15.1.1.tgz",
+ "integrity": "sha512-9OWV1dyX+vmAbKkhMU8J7Q0sCaovPrkwZqo2ejmEpZ/Lr12Hw5JAk4gdvB869QEVP7zj0gH3HuYVajmsxesYKg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/keyring": "^13.2.3",
+ "@polkadot/types": "15.1.1",
+ "@polkadot/types-support": "15.1.1",
+ "@polkadot/util": "^13.2.3",
+ "@polkadot/util-crypto": "^13.2.3",
+ "@polkadot/x-fetch": "^13.2.3",
+ "@polkadot/x-global": "^13.2.3",
+ "@polkadot/x-ws": "^13.2.3",
+ "eventemitter3": "^5.0.1",
+ "mock-socket": "^9.3.1",
+ "nock": "^13.5.5",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@substrate/connect": "0.8.11"
+ }
+ },
+ "node_modules/@polkadot/types": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-15.1.1.tgz",
+ "integrity": "sha512-n6lg/quhLp3Zmt/6gHAg2uoSmMmXk3NR19I7qCyeDJ30pP1UhOjtmuWOQDl6SwSEwuHtudLp3p2nCJsymXjgsw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/keyring": "^13.2.3",
+ "@polkadot/types-augment": "15.1.1",
+ "@polkadot/types-codec": "15.1.1",
+ "@polkadot/types-create": "15.1.1",
+ "@polkadot/util": "^13.2.3",
+ "@polkadot/util-crypto": "^13.2.3",
+ "rxjs": "^7.8.1",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/types-augment": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-15.1.1.tgz",
+ "integrity": "sha512-6v/FsN/JYCupyGYW+MbS0iOCiWvf6PXJ5+m8ORYYYDPFgQqaQPxKMKWJpnO0s9cCR33QcyNYhErPGuZ62UMJjw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/types": "15.1.1",
+ "@polkadot/types-codec": "15.1.1",
+ "@polkadot/util": "^13.2.3",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/types-codec": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-15.1.1.tgz",
+ "integrity": "sha512-cm99CFvDf4UXmw7DeMkRqa/hf7wEgjJZoZZW/B12Js0ObwRmSXMk/gDbyiT6hqPnQ81sU726E72p39DolaEatQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/util": "^13.2.3",
+ "@polkadot/x-bigint": "^13.2.3",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/types-create": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-15.1.1.tgz",
+ "integrity": "sha512-AOgz+UsUqsGSENrc+p/dHyXH2TC9qVtUTAxlqaHfOnwqjMWfEqc78mc5a1mk0a+RqxmIHw8nQNSdBdhv+UdtyQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/types-codec": "15.1.1",
+ "@polkadot/util": "^13.2.3",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/types-known": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-15.1.1.tgz",
+ "integrity": "sha512-L934pYxXdHB3GHlVu57ihO6llhxuggSuQZuJ9kHunG0I6tezXLIgAhwaPgACMVbmBYlkJPqm4Nr6pC3kpIsGow==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/networks": "^13.2.3",
+ "@polkadot/types": "15.1.1",
+ "@polkadot/types-codec": "15.1.1",
+ "@polkadot/types-create": "15.1.1",
+ "@polkadot/util": "^13.2.3",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/types-support": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-15.1.1.tgz",
+ "integrity": "sha512-uyn5N7XERHosVq0+aCpEwYnkUroOr7OX8B8/00UkgmfVOXskp/cukEVcGlmI/YGAS+9+V2BZN2GBX7Lz0eeKmw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/util": "^13.2.3",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/util": {
+ "version": "13.4.3",
+ "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.4.3.tgz",
+ "integrity": "sha512-6v2zvg8l7W22XvjYf7qv9tPQdYl2E6aXY94M4TZKsXZxmlS5BoG+A9Aq0+Gw8zBUjupjEmUkA6Y//msO8Zisug==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/x-bigint": "13.4.3",
+ "@polkadot/x-global": "13.4.3",
+ "@polkadot/x-textdecoder": "13.4.3",
+ "@polkadot/x-textencoder": "13.4.3",
+ "@types/bn.js": "^5.1.6",
+ "bn.js": "^5.2.1",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/util-crypto": {
+ "version": "13.4.3",
+ "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.4.3.tgz",
+ "integrity": "sha512-Ml0mjhKVetMrRCIosmVNMa6lbFPa3fSAeOggf34NsDIIQOKt9FL644iGz1ZSMOnBwN9qk2qHYmcFMTDXX2yKVQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@noble/curves": "^1.3.0",
+ "@noble/hashes": "^1.3.3",
+ "@polkadot/networks": "13.4.3",
+ "@polkadot/util": "13.4.3",
+ "@polkadot/wasm-crypto": "^7.4.1",
+ "@polkadot/wasm-util": "^7.4.1",
+ "@polkadot/x-bigint": "13.4.3",
+ "@polkadot/x-randomvalues": "13.4.3",
+ "@scure/base": "^1.1.7",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@polkadot/util": "13.4.3"
+ }
+ },
+ "node_modules/@polkadot/wasm-bridge": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.4.1.tgz",
+ "integrity": "sha512-tdkJaV453tezBxhF39r4oeG0A39sPKGDJmN81LYLf+Fihb7astzwju+u75BRmDrHZjZIv00un3razJEWCxze6g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/wasm-util": "7.4.1",
+ "tslib": "^2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@polkadot/util": "*",
+ "@polkadot/x-randomvalues": "*"
+ }
+ },
+ "node_modules/@polkadot/wasm-crypto": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz",
+ "integrity": "sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/wasm-bridge": "7.4.1",
+ "@polkadot/wasm-crypto-asmjs": "7.4.1",
+ "@polkadot/wasm-crypto-init": "7.4.1",
+ "@polkadot/wasm-crypto-wasm": "7.4.1",
+ "@polkadot/wasm-util": "7.4.1",
+ "tslib": "^2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@polkadot/util": "*",
+ "@polkadot/x-randomvalues": "*"
+ }
+ },
+ "node_modules/@polkadot/wasm-crypto-asmjs": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.4.1.tgz",
+ "integrity": "sha512-pwU8QXhUW7IberyHJIQr37IhbB6DPkCG5FhozCiNTq4vFBsFPjm9q8aZh7oX1QHQaiAZa2m2/VjIVE+FHGbvHQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@polkadot/util": "*"
+ }
+ },
+ "node_modules/@polkadot/wasm-crypto-init": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.4.1.tgz",
+ "integrity": "sha512-AVka33+f7MvXEEIGq5U0dhaA2SaXMXnxVCQyhJTaCnJ5bRDj0Xlm3ijwDEQUiaDql7EikbkkRtmlvs95eSUWYQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/wasm-bridge": "7.4.1",
+ "@polkadot/wasm-crypto-asmjs": "7.4.1",
+ "@polkadot/wasm-crypto-wasm": "7.4.1",
+ "@polkadot/wasm-util": "7.4.1",
+ "tslib": "^2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@polkadot/util": "*",
+ "@polkadot/x-randomvalues": "*"
+ }
+ },
+ "node_modules/@polkadot/wasm-crypto-wasm": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.4.1.tgz",
+ "integrity": "sha512-PE1OAoupFR0ZOV2O8tr7D1FEUAwaggzxtfs3Aa5gr+yxlSOaWUKeqsOYe1KdrcjmZVV3iINEAXxgrbzCmiuONg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/wasm-util": "7.4.1",
+ "tslib": "^2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@polkadot/util": "*"
+ }
+ },
+ "node_modules/@polkadot/wasm-util": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz",
+ "integrity": "sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.7.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@polkadot/util": "*"
+ }
+ },
+ "node_modules/@polkadot/x-bigint": {
+ "version": "13.4.3",
+ "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.4.3.tgz",
+ "integrity": "sha512-8NbjF5Q+5lflhvDFve58wULjCVcvXa932LKFtI5zL2gx5VDhMgyfkNcYRjHB18Ecl21963JuGzvGVTZNkh/i6g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/x-global": "13.4.3",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/x-fetch": {
+ "version": "13.4.3",
+ "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.4.3.tgz",
+ "integrity": "sha512-EwhcwROqWa7mvNTbLVNH71Hbyp5PW5j9lV2UpII5MZzRO95eYwV4oP/xgtTxC+60nC8lrvzAw0JxEHrmNzmtlg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/x-global": "13.4.3",
+ "node-fetch": "^3.3.2",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/x-global": {
+ "version": "13.4.3",
+ "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.4.3.tgz",
+ "integrity": "sha512-6c98kxZdoGRct3ua9Dz6/qz8wb3XFRUkaY+4+RzIgehKMPhu19pGWTrzmbJSyY9FtIpThuWKuDaBEvd5KgSxjA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/x-randomvalues": {
+ "version": "13.4.3",
+ "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.4.3.tgz",
+ "integrity": "sha512-pskXP/S2jROZ6aASExsUFlNp7GbJvQikKogvyvMMCzNIbUYLxpLuquLRa3MOORx2c0SNsENg90cx/zHT+IjPRQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/x-global": "13.4.3",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@polkadot/util": "13.4.3",
+ "@polkadot/wasm-util": "*"
+ }
+ },
+ "node_modules/@polkadot/x-textdecoder": {
+ "version": "13.4.3",
+ "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.4.3.tgz",
+ "integrity": "sha512-k7Wg6csAPxfNtpBt3k5yUuPHYmRl/nl7H2OMr40upMjbZXbQ1RJW9Z3GBkLmQczG7NwwfAXHwQE9FYOMUtbuRQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/x-global": "13.4.3",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/x-textencoder": {
+ "version": "13.4.3",
+ "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.4.3.tgz",
+ "integrity": "sha512-byl2LbN1rnEXKmnsCzEDaIjSIHAr+1ciSe2yj3M0K+oWEEcaFZEovJaf/uoyzkcjn+/l8rDv3nget6mPuQ/DSw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/x-global": "13.4.3",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@polkadot/x-ws": {
+ "version": "13.4.3",
+ "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.4.3.tgz",
+ "integrity": "sha512-GS0I6MYLD/xNAAjODZi/pbG7Ba0e/5sbvDIrT01iKH3SPGN+PZoyAsc04t2IOXA6QmPa1OBHnaU3N4K8gGmJ+w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@polkadot/x-global": "13.4.3",
+ "tslib": "^2.8.0",
+ "ws": "^8.18.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.34.8",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz",
+ "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.34.8",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz",
+ "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rx-state/core": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/@rx-state/core/-/core-0.1.4.tgz",
+ "integrity": "sha512-Z+3hjU2xh1HisLxt+W5hlYX/eGSDaXXP+ns82gq/PLZpkXLu0uwcNUh9RLY3Clq4zT+hSsA3vcpIGt6+UAb8rQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "rxjs": ">=7"
+ }
+ },
+ "node_modules/@scure/base": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.4.tgz",
+ "integrity": "sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip32": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.2.tgz",
+ "integrity": "sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/curves": "~1.8.1",
+ "@noble/hashes": "~1.7.1",
+ "@scure/base": "~1.2.2"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip39": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.4.tgz",
+ "integrity": "sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "~1.7.1",
+ "@scure/base": "~1.2.4"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@sec-ant/readable-stream": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
+ "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
+ "license": "MIT"
+ },
+ "node_modules/@sindresorhus/merge-streams": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
+ "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@substrate/connect": {
+ "version": "0.8.11",
+ "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.11.tgz",
+ "integrity": "sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw==",
+ "license": "GPL-3.0-only",
+ "optional": true,
+ "dependencies": {
+ "@substrate/connect-extension-protocol": "^2.0.0",
+ "@substrate/connect-known-chains": "^1.1.5",
+ "@substrate/light-client-extension-helpers": "^1.0.0",
+ "smoldot": "2.0.26"
+ }
+ },
+ "node_modules/@substrate/connect-extension-protocol": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.2.tgz",
+ "integrity": "sha512-t66jwrXA0s5Goq82ZtjagLNd7DPGCNjHeehRlE/gcJmJ+G56C0W+2plqOMRicJ8XGR1/YFnUSEqUFiSNbjGrAA==",
+ "license": "GPL-3.0-only",
+ "optional": true
+ },
+ "node_modules/@substrate/connect-known-chains": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.9.2.tgz",
+ "integrity": "sha512-uEmm+rKJQQhhbforvmcg74TsDHKFVBkstjPwblGT1RdHMxUKR7Gq7F8vbkGnr5ce9tMK2Ylil760Z7vtX013hw==",
+ "license": "GPL-3.0-only",
+ "optional": true
+ },
+ "node_modules/@substrate/light-client-extension-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz",
+ "integrity": "sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@polkadot-api/json-rpc-provider": "^0.0.1",
+ "@polkadot-api/json-rpc-provider-proxy": "^0.1.0",
+ "@polkadot-api/observable-client": "^0.3.0",
+ "@polkadot-api/substrate-client": "^0.1.2",
+ "@substrate/connect-extension-protocol": "^2.0.0",
+ "@substrate/connect-known-chains": "^1.1.5",
+ "rxjs": "^7.8.1"
+ },
+ "peerDependencies": {
+ "smoldot": "2.x"
+ }
+ },
+ "node_modules/@substrate/light-client-extension-helpers/node_modules/@polkadot-api/json-rpc-provider": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz",
+ "integrity": "sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA==",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/@substrate/light-client-extension-helpers/node_modules/@polkadot-api/json-rpc-provider-proxy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz",
+ "integrity": "sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg==",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/@substrate/light-client-extension-helpers/node_modules/@polkadot-api/metadata-builders": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz",
+ "integrity": "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@polkadot-api/substrate-bindings": "0.6.0",
+ "@polkadot-api/utils": "0.1.0"
+ }
+ },
+ "node_modules/@substrate/light-client-extension-helpers/node_modules/@polkadot-api/observable-client": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz",
+ "integrity": "sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@polkadot-api/metadata-builders": "0.3.2",
+ "@polkadot-api/substrate-bindings": "0.6.0",
+ "@polkadot-api/utils": "0.1.0"
+ },
+ "peerDependencies": {
+ "@polkadot-api/substrate-client": "0.1.4",
+ "rxjs": ">=7.8.0"
+ }
+ },
+ "node_modules/@substrate/light-client-extension-helpers/node_modules/@polkadot-api/substrate-bindings": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz",
+ "integrity": "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@noble/hashes": "^1.3.1",
+ "@polkadot-api/utils": "0.1.0",
+ "@scure/base": "^1.1.1",
+ "scale-ts": "^1.6.0"
+ }
+ },
+ "node_modules/@substrate/light-client-extension-helpers/node_modules/@polkadot-api/substrate-client": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz",
+ "integrity": "sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@polkadot-api/json-rpc-provider": "0.0.1",
+ "@polkadot-api/utils": "0.1.0"
+ }
+ },
+ "node_modules/@substrate/light-client-extension-helpers/node_modules/@polkadot-api/utils": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz",
+ "integrity": "sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA==",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/@substrate/ss58-registry": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz",
+ "integrity": "sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
+ "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/bn.js": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz",
+ "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/bun": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.2.3.tgz",
+ "integrity": "sha512-054h79ipETRfjtsCW9qJK8Ipof67Pw9bodFWmkfkaUaRiIQ1dIV2VTlheshlBx3mpKr0KeK8VqnMMCtgN9rQtw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bun-types": "1.2.3"
+ }
+ },
+ "node_modules/@types/chai": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.0.1.tgz",
+ "integrity": "sha512-5T8ajsg3M/FOncpLYW7sdOcD6yf4+722sze/tc4KQV0P8Z2rAr3SAuHCIkYmYpt8VbcQlnz8SxlOlPQYefe4cA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/deep-eql": "*"
+ }
+ },
+ "node_modules/@types/deep-eql": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
+ "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/mocha": {
+ "version": "10.0.10",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz",
+ "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==",
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "22.14.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz",
+ "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==",
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/ws": {
+ "version": "8.5.14",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz",
+ "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/abitype": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.8.tgz",
+ "integrity": "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/wevm"
+ },
+ "peerDependencies": {
+ "typescript": ">=5.0.4",
+ "zod": "^3 >=3.22.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ },
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
+ "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/aes-js": {
+ "version": "4.0.0-beta.5",
+ "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz",
+ "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==",
+ "license": "MIT"
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "license": "MIT"
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "license": "Python-2.0"
+ },
+ "node_modules/assert": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
+ "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-nan": "^1.3.2",
+ "object-is": "^1.1.5",
+ "object.assign": "^4.1.4",
+ "util": "^0.12.5"
+ }
+ },
+ "node_modules/assertion-error": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
+ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/bn.js": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
+ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
+ "license": "MIT"
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "license": "ISC"
+ },
+ "node_modules/bun-types": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.2.3.tgz",
+ "integrity": "sha512-P7AeyTseLKAvgaZqQrvp3RqFM3yN9PlcLuSTe7SoJOfZkER73mLdT2vEQi8U64S1YvM/ldcNiQjn0Sn7H9lGgg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "@types/ws": "~8.5.10"
+ }
+ },
+ "node_modules/bundle-require": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz",
+ "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==",
+ "license": "MIT",
+ "dependencies": {
+ "load-tsconfig": "^0.2.3"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "esbuild": ">=0.18"
+ }
+ },
+ "node_modules/cac": {
+ "version": "6.7.14",
+ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+ "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
+ "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
+ "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/chai": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz",
+ "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assertion-error": "^2.0.1",
+ "check-error": "^2.1.1",
+ "deep-eql": "^5.0.1",
+ "loupe": "^3.1.0",
+ "pathval": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz",
+ "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/check-error": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
+ "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
+ "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
+ "license": "MIT",
+ "dependencies": {
+ "restore-cursor": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-spinners": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/commander": {
+ "version": "13.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz",
+ "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/consola": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
+ "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^14.18.0 || >=16.10.0"
+ }
+ },
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/crypto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz",
+ "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==",
+ "license": "ISC"
+ },
+ "node_modules/data-uri-to-buffer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
+ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/deep-eql": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
+ "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/deepmerge-ts": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz",
+ "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/detect-indent": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz",
+ "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
+ }
+ },
+ "node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/dotenv": {
+ "version": "16.4.7",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
+ "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "license": "MIT"
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz",
+ "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.2",
+ "@esbuild/android-arm": "0.25.2",
+ "@esbuild/android-arm64": "0.25.2",
+ "@esbuild/android-x64": "0.25.2",
+ "@esbuild/darwin-arm64": "0.25.2",
+ "@esbuild/darwin-x64": "0.25.2",
+ "@esbuild/freebsd-arm64": "0.25.2",
+ "@esbuild/freebsd-x64": "0.25.2",
+ "@esbuild/linux-arm": "0.25.2",
+ "@esbuild/linux-arm64": "0.25.2",
+ "@esbuild/linux-ia32": "0.25.2",
+ "@esbuild/linux-loong64": "0.25.2",
+ "@esbuild/linux-mips64el": "0.25.2",
+ "@esbuild/linux-ppc64": "0.25.2",
+ "@esbuild/linux-riscv64": "0.25.2",
+ "@esbuild/linux-s390x": "0.25.2",
+ "@esbuild/linux-x64": "0.25.2",
+ "@esbuild/netbsd-arm64": "0.25.2",
+ "@esbuild/netbsd-x64": "0.25.2",
+ "@esbuild/openbsd-arm64": "0.25.2",
+ "@esbuild/openbsd-x64": "0.25.2",
+ "@esbuild/sunos-x64": "0.25.2",
+ "@esbuild/win32-arm64": "0.25.2",
+ "@esbuild/win32-ia32": "0.25.2",
+ "@esbuild/win32-x64": "0.25.2"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ethers": {
+ "version": "6.13.5",
+ "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.5.tgz",
+ "integrity": "sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/ethers-io/"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@adraffy/ens-normalize": "1.10.1",
+ "@noble/curves": "1.2.0",
+ "@noble/hashes": "1.3.2",
+ "@types/node": "22.7.5",
+ "aes-js": "4.0.0-beta.5",
+ "tslib": "2.7.0",
+ "ws": "8.17.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/ethers/node_modules/@noble/curves": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz",
+ "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "1.3.2"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/ethers/node_modules/@noble/hashes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
+ "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/ethers/node_modules/@types/node": {
+ "version": "22.7.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+ "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.19.2"
+ }
+ },
+ "node_modules/ethers/node_modules/tslib": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
+ "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
+ "license": "0BSD"
+ },
+ "node_modules/ethers/node_modules/undici-types": {
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "license": "MIT"
+ },
+ "node_modules/ethers/node_modules/ws": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
+ "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+ "license": "MIT"
+ },
+ "node_modules/execa": {
+ "version": "9.5.2",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz",
+ "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/merge-streams": "^4.0.0",
+ "cross-spawn": "^7.0.3",
+ "figures": "^6.1.0",
+ "get-stream": "^9.0.0",
+ "human-signals": "^8.0.0",
+ "is-plain-obj": "^4.1.0",
+ "is-stream": "^4.0.1",
+ "npm-run-path": "^6.0.0",
+ "pretty-ms": "^9.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^4.0.0",
+ "yoctocolors": "^2.0.0"
+ },
+ "engines": {
+ "node": "^18.19.0 || >=20.5.0"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/fetch-blob": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "node-domexception": "^1.0.0",
+ "web-streams-polyfill": "^3.0.3"
+ },
+ "engines": {
+ "node": "^12.20 || >= 14.13"
+ }
+ },
+ "node_modules/figures": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz",
+ "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-unicode-supported": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "license": "BSD-3-Clause",
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/formdata-polyfill": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+ "license": "MIT",
+ "dependencies": {
+ "fetch-blob": "^3.1.2"
+ },
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/fs.promises.exists": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/fs.promises.exists/-/fs.promises.exists-1.1.4.tgz",
+ "integrity": "sha512-lJzUGWbZn8vhGWBedA+RYjB/BeJ+3458ljUfmplqhIeb6ewzTFWNPCR1HCiYCkXV9zxcHz9zXkJzMsEgDLzh3Q==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/fs.promises.exists?sponsor=1"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-east-asian-width": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz",
+ "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
+ "license": "MIT",
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
+ "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+ "license": "MIT",
+ "dependencies": {
+ "@sec-ant/readable-stream": "^0.4.1",
+ "is-stream": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "license": "MIT",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^10.0.1"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz",
+ "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/index-to-position": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz",
+ "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/is-arguments": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz",
+ "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
+ "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.0",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-interactive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
+ "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-nan": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
+ "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
+ "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
+ "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/isows": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.6.tgz",
+ "integrity": "sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/wevm"
+ }
+ ],
+ "license": "MIT",
+ "peerDependencies": {
+ "ws": "*"
+ }
+ },
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/joycon": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+ "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+ "license": "ISC"
+ },
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "license": "MIT"
+ },
+ "node_modules/load-tsconfig": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
+ "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==",
+ "license": "MIT"
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/log-symbols/node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/loupe": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz",
+ "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
+ },
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/micro-sr25519": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/micro-sr25519/-/micro-sr25519-0.1.0.tgz",
+ "integrity": "sha512-at5zfxiKNhh07v4GPb8Sc6wCW+jd18FMMgPM0ACIQMcgvMfB9a34mfOlXr5B04J4yFZ6imlvJfRaFbOxMA7ytw==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/curves": "~1.7.0",
+ "@noble/hashes": "~1.6.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/micro-sr25519/node_modules/@noble/curves": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.7.0.tgz",
+ "integrity": "sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==",
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "1.6.0"
+ },
+ "engines": {
+ "node": "^14.21.3 || >=16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/micro-sr25519/node_modules/@noble/curves/node_modules/@noble/hashes": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.0.tgz",
+ "integrity": "sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "^14.21.3 || >=16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/micro-sr25519/node_modules/@noble/hashes": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz",
+ "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==",
+ "license": "MIT",
+ "engines": {
+ "node": "^14.21.3 || >=16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/mimic-function": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
+ "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/mocha": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz",
+ "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^4.1.3",
+ "browser-stdout": "^1.3.1",
+ "chokidar": "^3.5.3",
+ "debug": "^4.3.5",
+ "diff": "^5.2.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-up": "^5.0.0",
+ "glob": "^10.4.5",
+ "he": "^1.2.0",
+ "js-yaml": "^4.1.0",
+ "log-symbols": "^4.1.0",
+ "minimatch": "^5.1.6",
+ "ms": "^2.1.3",
+ "serialize-javascript": "^6.0.2",
+ "strip-json-comments": "^3.1.1",
+ "supports-color": "^8.1.1",
+ "workerpool": "^6.5.1",
+ "yargs": "^17.7.2",
+ "yargs-parser": "^21.1.1",
+ "yargs-unparser": "^2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/mocha/node_modules/diff": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
+ "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/mock-socket": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz",
+ "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
+ "devOptional": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/nock": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz",
+ "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.1.0",
+ "json-stringify-safe": "^5.0.1",
+ "propagate": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13"
+ }
+ },
+ "node_modules/node-domexception": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "github",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.5.0"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
+ "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
+ "license": "MIT",
+ "dependencies": {
+ "data-uri-to-buffer": "^4.0.0",
+ "fetch-blob": "^3.1.4",
+ "formdata-polyfill": "^4.0.10"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/node-fetch"
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
+ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^7.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz",
+ "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^4.0.0",
+ "unicorn-magic": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm-run-path/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-is": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
+ "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
+ "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0",
+ "has-symbols": "^1.1.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
+ "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "mimic-function": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz",
+ "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==",
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "cli-cursor": "^5.0.0",
+ "cli-spinners": "^2.9.2",
+ "is-interactive": "^2.0.0",
+ "is-unicode-supported": "^2.0.0",
+ "log-symbols": "^6.0.0",
+ "stdin-discarder": "^0.2.2",
+ "string-width": "^7.2.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ora/node_modules/emoji-regex": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
+ "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
+ "license": "MIT"
+ },
+ "node_modules/ora/node_modules/log-symbols": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz",
+ "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==",
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "is-unicode-supported": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
+ "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/ox": {
+ "version": "0.6.7",
+ "resolved": "https://registry.npmjs.org/ox/-/ox-0.6.7.tgz",
+ "integrity": "sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/wevm"
+ }
+ ],
+ "license": "MIT",
+ "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"
+ },
+ "peerDependencies": {
+ "typescript": ">=5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ox/node_modules/@adraffy/ens-normalize": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz",
+ "integrity": "sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==",
+ "license": "MIT"
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/parse-json": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
+ "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.26.2",
+ "index-to-position": "^1.1.0",
+ "type-fest": "^4.39.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-ms": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
+ "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/pathval": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz",
+ "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.16"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/polkadot-api": {
+ "version": "1.9.12",
+ "resolved": "https://registry.npmjs.org/polkadot-api/-/polkadot-api-1.9.12.tgz",
+ "integrity": "sha512-gYhpef5YnLEPZ3Uxeha5sHIIejINONSGBXTgFyEWsYi4y2DEUlv2ISlNZ9/0AGG6b6ZFDd56mLop/Fohl8vA4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@polkadot-api/cli": "0.11.9",
+ "@polkadot-api/ink-contracts": "0.2.6",
+ "@polkadot-api/json-rpc-provider": "0.0.4",
+ "@polkadot-api/known-chains": "0.7.3",
+ "@polkadot-api/logs-provider": "0.0.6",
+ "@polkadot-api/metadata-builders": "0.10.2",
+ "@polkadot-api/metadata-compatibility": "0.2.0",
+ "@polkadot-api/observable-client": "0.8.6",
+ "@polkadot-api/pjs-signer": "0.6.5",
+ "@polkadot-api/polkadot-sdk-compat": "2.3.2",
+ "@polkadot-api/polkadot-signer": "0.1.6",
+ "@polkadot-api/signer": "0.1.15",
+ "@polkadot-api/sm-provider": "0.1.7",
+ "@polkadot-api/smoldot": "0.3.8",
+ "@polkadot-api/substrate-bindings": "0.11.1",
+ "@polkadot-api/substrate-client": "0.3.0",
+ "@polkadot-api/utils": "0.1.2",
+ "@polkadot-api/ws-provider": "0.4.0",
+ "@rx-state/core": "^0.1.4"
+ },
+ "bin": {
+ "papi": "bin/cli.mjs",
+ "polkadot-api": "bin/cli.mjs"
+ },
+ "peerDependencies": {
+ "rxjs": ">=7.8.0"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
+ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.3",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
+ "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+ "devOptional": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.8",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
+ "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "lilconfig": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "jiti": ">=1.21.0",
+ "postcss": ">=8.0.9",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz",
+ "integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/pretty-ms": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz",
+ "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==",
+ "license": "MIT",
+ "dependencies": {
+ "parse-ms": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/propagate": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz",
+ "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
+ "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.3",
+ "normalize-package-data": "^6.0.0",
+ "parse-json": "^8.0.0",
+ "type-fest": "^4.6.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg/node_modules/unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
+ "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^7.0.0",
+ "signal-exit": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.34.8",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz",
+ "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.6"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.34.8",
+ "@rollup/rollup-android-arm64": "4.34.8",
+ "@rollup/rollup-darwin-arm64": "4.34.8",
+ "@rollup/rollup-darwin-x64": "4.34.8",
+ "@rollup/rollup-freebsd-arm64": "4.34.8",
+ "@rollup/rollup-freebsd-x64": "4.34.8",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.34.8",
+ "@rollup/rollup-linux-arm-musleabihf": "4.34.8",
+ "@rollup/rollup-linux-arm64-gnu": "4.34.8",
+ "@rollup/rollup-linux-arm64-musl": "4.34.8",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.34.8",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8",
+ "@rollup/rollup-linux-riscv64-gnu": "4.34.8",
+ "@rollup/rollup-linux-s390x-gnu": "4.34.8",
+ "@rollup/rollup-linux-x64-gnu": "4.34.8",
+ "@rollup/rollup-linux-x64-musl": "4.34.8",
+ "@rollup/rollup-win32-arm64-msvc": "4.34.8",
+ "@rollup/rollup-win32-ia32-msvc": "4.34.8",
+ "@rollup/rollup-win32-x64-msvc": "4.34.8",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rxjs": {
+ "version": "7.8.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
+ "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/scale-ts": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-1.6.1.tgz",
+ "integrity": "sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g==",
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/smoldot": {
+ "version": "2.0.26",
+ "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.26.tgz",
+ "integrity": "sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig==",
+ "license": "GPL-3.0-or-later WITH Classpath-exception-2.0",
+ "optional": true,
+ "dependencies": {
+ "ws": "^8.8.1"
+ }
+ },
+ "node_modules/sort-keys": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz",
+ "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-obj": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.8.0-beta.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
+ "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "whatwg-url": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "devOptional": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "license": "CC-BY-3.0"
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.21",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",
+ "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/stdin-discarder": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz",
+ "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
+ "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/sucrase/node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "license": "MIT",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tinyexec": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
+ "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
+ "license": "MIT"
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
+ "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.4.3",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.4.3",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
+ "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "license": "MIT",
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/ts-node": {
+ "version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
+ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "peerDependencies": {
+ "@swc/core": ">=1.2.50",
+ "@swc/wasm": ">=1.2.50",
+ "@types/node": "*",
+ "typescript": ">=2.7"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/wasm": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tsc-prog": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tsc-prog/-/tsc-prog-2.3.0.tgz",
+ "integrity": "sha512-ycET2d75EgcX7y8EmG4KiZkLAwUzbY4xRhA6NU0uVbHkY4ZjrAAuzTMxXI85kOwATqPnBI5C/7y7rlpY0xdqHA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
+ "node_modules/tsup": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.4.0.tgz",
+ "integrity": "sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==",
+ "license": "MIT",
+ "dependencies": {
+ "bundle-require": "^5.1.0",
+ "cac": "^6.7.14",
+ "chokidar": "^4.0.3",
+ "consola": "^3.4.0",
+ "debug": "^4.4.0",
+ "esbuild": "^0.25.0",
+ "joycon": "^3.1.1",
+ "picocolors": "^1.1.1",
+ "postcss-load-config": "^6.0.1",
+ "resolve-from": "^5.0.0",
+ "rollup": "^4.34.8",
+ "source-map": "0.8.0-beta.0",
+ "sucrase": "^3.35.0",
+ "tinyexec": "^0.3.2",
+ "tinyglobby": "^0.2.11",
+ "tree-kill": "^1.2.2"
+ },
+ "bin": {
+ "tsup": "dist/cli-default.js",
+ "tsup-node": "dist/cli-node.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@microsoft/api-extractor": "^7.36.0",
+ "@swc/core": "^1",
+ "postcss": "^8.4.12",
+ "typescript": ">=4.5.0"
+ },
+ "peerDependenciesMeta": {
+ "@microsoft/api-extractor": {
+ "optional": true
+ },
+ "@swc/core": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tsup/node_modules/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/tsup/node_modules/readdirp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "4.40.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.40.0.tgz",
+ "integrity": "sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
+ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "license": "MIT"
+ },
+ "node_modules/unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/viem": {
+ "version": "2.23.4",
+ "resolved": "https://registry.npmjs.org/viem/-/viem-2.23.4.tgz",
+ "integrity": "sha512-UQquuolKlS1w5H5e0Fd1KKoUlIPJryIEBzY5AUhGyV1ka+9O6+3uYVhUzj6RbvGK0PtsMKn2ddwPZFwjNDVU/A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/wevm"
+ }
+ ],
+ "license": "MIT",
+ "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"
+ },
+ "peerDependencies": {
+ "typescript": ">=5.0.4"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/viem/node_modules/ws": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.4.14",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz",
+ "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vite/node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/web-streams-polyfill": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/whatwg-url": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
+ "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
+ "license": "MIT",
+ "dependencies": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.18",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz",
+ "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/workerpool": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
+ "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/write-file-atomic": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/write-json-file": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-6.0.0.tgz",
+ "integrity": "sha512-MNHcU3f9WxnNyR6MxsYSj64Jz0+dwIpisWKWq9gqLj/GwmA9INg3BZ3vt70/HB3GEwrnDQWr4RPrywnhNzmUFA==",
+ "license": "MIT",
+ "dependencies": {
+ "detect-indent": "^7.0.1",
+ "is-plain-obj": "^4.1.0",
+ "sort-keys": "^5.0.0",
+ "write-file-atomic": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/write-package": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/write-package/-/write-package-7.1.0.tgz",
+ "integrity": "sha512-DqUx8GI3r9BFWwU2DPKddL1E7xWfbFED82mLVhGXKlFEPe8IkBftzO7WfNwHtk7oGDHDeuH/o8VMpzzfMwmLUA==",
+ "license": "MIT",
+ "dependencies": {
+ "deepmerge-ts": "^7.1.0",
+ "read-pkg": "^9.0.1",
+ "sort-keys": "^5.0.0",
+ "type-fest": "^4.23.0",
+ "write-json-file": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ws": {
+ "version": "8.18.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz",
+ "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "license": "MIT",
+ "dependencies": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-unparser/node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/yoctocolors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz",
+ "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/evm-tests/package.json b/evm-tests/package.json
index a96a2c4a0c..0e90cdb976 100644
--- a/evm-tests/package.json
+++ b/evm-tests/package.json
@@ -1,28 +1,28 @@
{
"scripts": {
- "test": "mocha --timeout 999999 --require ts-node/register test/*test.ts"
+ "test": "mocha --timeout 999999 --retries 3 --file src/setup.ts --require ts-node/register test/*test.ts"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
- "@polkadot-api/descriptors": "file:.papi/descriptors",
"@polkadot-labs/hdkd": "^0.0.10",
"@polkadot-labs/hdkd-helpers": "^0.0.11",
"@polkadot/api": "15.1.1",
+ "@types/mocha": "^10.0.10",
"crypto": "^1.0.1",
"dotenv": "16.4.7",
"ethers": "^6.13.5",
+ "mocha": "^11.1.0",
"polkadot-api": "^1.9.5",
+ "scale-ts": "^1.6.1",
"viem": "2.23.4"
},
"devDependencies": {
"@types/bun": "^1.1.13",
"@types/chai": "^5.0.1",
- "@types/mocha": "^10.0.10",
"assert": "^2.1.0",
"chai": "^5.2.0",
- "mocha": "^11.1.0",
"prettier": "^3.3.3",
"ts-node": "^10.9.2",
"typescript": "^5.7.2",
diff --git a/evm-tests/run-ci.sh b/evm-tests/run-ci.sh
new file mode 100755
index 0000000000..cd7acb14af
--- /dev/null
+++ b/evm-tests/run-ci.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+
+echo "start run-ci.sh"
+
+scripts/localnet.sh &>/dev/null &
+
+i=1
+while [ $i -le 1000 ]; do
+ if nc -z localhost 9944; then
+ echo "node subtensor is running after $i seconds"
+ break
+ fi
+ sleep 1
+ i=$((i + 1))
+done
+
+# port not available exit with error
+if [ "$i" -eq 1000 ]; then
+ exit 1
+fi
+
+cd evm-tests
+
+yarn
+
+bash get-metadata.sh
+
+sleep 5
+
+yarn run test
+TEST_EXIT_CODE=$?
+
+if [ $TEST_EXIT_CODE -ne 0 ]; then
+ echo "Tests failed with exit code $TEST_EXIT_CODE"
+ pkill node-subtensor
+ exit $TEST_EXIT_CODE
+fi
+
+pkill node-subtensor
+
+exit 0
\ No newline at end of file
diff --git a/evm-tests/src/contracts/staking.ts b/evm-tests/src/contracts/staking.ts
index af4422ca96..0ba37c5a94 100644
--- a/evm-tests/src/contracts/staking.ts
+++ b/evm-tests/src/contracts/staking.ts
@@ -287,5 +287,71 @@ export const IStakingV2ABI = [
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
- }
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "hotkey",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "limit_price",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "allow_partial",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "netuid",
+ "type": "uint256"
+ }
+ ],
+ "name": "addStakeLimit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "hotkey",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "limit_price",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "allow_partial",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "netuid",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeStakeLimit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
];
\ No newline at end of file
diff --git a/evm-tests/src/contracts/subnet.ts b/evm-tests/src/contracts/subnet.ts
index 9b6fe00596..eacdaf3aca 100644
--- a/evm-tests/src/contracts/subnet.ts
+++ b/evm-tests/src/contracts/subnet.ts
@@ -572,6 +572,43 @@ export const ISubnetABI = [
stateMutability: "view",
type: "function",
},
+ {
+ inputs: [
+ {
+ internalType: "uint16",
+ name: "netuid",
+ type: "uint16",
+ },
+ ],
+ name: "getYuma3Enabled",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint16",
+ name: "netuid",
+ type: "uint16",
+ },
+ {
+ internalType: "bool",
+ name: "yuma3Enabled",
+ type: "bool",
+ },
+ ],
+ name: "setYuma3Enabled",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
{
inputs: [
{
@@ -886,4 +923,4 @@ export const ISubnetABI = [
stateMutability: "payable",
type: "function"
},
-];
\ No newline at end of file
+];
diff --git a/evm-tests/src/contracts/uidLookup.ts b/evm-tests/src/contracts/uidLookup.ts
new file mode 100644
index 0000000000..06c68805e6
--- /dev/null
+++ b/evm-tests/src/contracts/uidLookup.ts
@@ -0,0 +1,45 @@
+export const IUID_LOOKUP_ADDRESS = "0x0000000000000000000000000000000000000806";
+
+export const IUIDLookupABI = [
+ {
+ inputs: [
+ {
+ internalType: "uint16",
+ name: "netuid",
+ type: "uint16"
+ },
+ {
+ internalType: "address",
+ name: "evm_address",
+ type: "address"
+ },
+ {
+ internalType: "uint16",
+ name: "limit",
+ type: "uint16"
+ }
+ ],
+ name: "uidLookup",
+ outputs: [
+ {
+ components: [
+ {
+ internalType: "uint16",
+ name: "uid",
+ type: "uint16"
+ },
+ {
+ internalType: "uint64",
+ name: "block_associated",
+ type: "uint64"
+ }
+ ],
+ internalType: "struct LookupItem[]",
+ name: "",
+ type: "tuple[]"
+ }
+ ],
+ stateMutability: "view",
+ type: "function"
+ }
+];
diff --git a/evm-tests/src/eth.ts b/evm-tests/src/eth.ts
index ea3ebb9976..a34e33bc2d 100644
--- a/evm-tests/src/eth.ts
+++ b/evm-tests/src/eth.ts
@@ -13,5 +13,4 @@ export async function estimateTransactionCost(provider: Provider, tx: Transactio
export function getContract(contractAddress: string, abi: {}[], wallet: Wallet) {
const contract = new ethers.Contract(contractAddress, abi, wallet);
return contract
-
-}
\ No newline at end of file
+}
diff --git a/evm-tests/src/setup.ts b/evm-tests/src/setup.ts
new file mode 100644
index 0000000000..1ef872cd5a
--- /dev/null
+++ b/evm-tests/src/setup.ts
@@ -0,0 +1,19 @@
+
+import { createClient, TypedApi, PolkadotClient, Binary } from 'polkadot-api';
+import { SUB_LOCAL_URL } from "./config"
+import { getWsProvider } from 'polkadot-api/ws-provider/web';
+
+let client: PolkadotClient | undefined = undefined
+
+export async function getClient() {
+ if (client === undefined) {
+ const provider = getWsProvider(SUB_LOCAL_URL);
+ client = createClient(provider);
+ }
+ return client;
+}
+
+after(() => {
+ client?.destroy()
+});
+
diff --git a/evm-tests/src/substrate.ts b/evm-tests/src/substrate.ts
index ddfdfb626d..bd6d725d48 100644
--- a/evm-tests/src/substrate.ts
+++ b/evm-tests/src/substrate.ts
@@ -9,22 +9,16 @@ import { getPolkadotSigner } from "polkadot-api/signer"
import { randomBytes } from 'crypto';
import { Keyring } from '@polkadot/keyring';
import { SS58_PREFIX, TX_TIMEOUT } from "./config";
-
+import { getClient } from "./setup"
let api: TypedApi | undefined = undefined
// define url string as type to extend in the future
// export type ClientUrlType = 'ws://localhost:9944' | 'wss://test.finney.opentensor.ai:443' | 'wss://dev.chain.opentensor.ai:443' | 'wss://archive.chain.opentensor.ai';
export type ClientUrlType = 'ws://localhost:9944'
-export async function getClient(url: ClientUrlType) {
- const provider = getWsProvider(url);
- const client = createClient(provider);
- return client
-}
-
export async function getDevnetApi() {
if (api === undefined) {
- let client = await getClient('ws://localhost:9944')
+ let client = await getClient()
api = client.getTypedApi(devnet)
}
return api
@@ -126,6 +120,29 @@ export function convertPublicKeyToMultiAddress(publicKey: Uint8Array, ss58Format
return MultiAddress.Id(address);
}
+export async function waitForTransactionWithRetry(
+ api: TypedApi,
+ tx: Transaction<{}, string, string, void>,
+ signer: PolkadotSigner,
+ ) {
+ let success = false;
+ let retries = 0;
+
+ // set max retries times
+ while (!success && retries < 5) {
+ await waitForTransactionCompletion(api, tx, signer)
+ .then(() => {success = true})
+ .catch((error) => {
+ console.log(`transaction error ${error}`);
+ });
+ await new Promise((resolve) => setTimeout(resolve, 1000));
+ retries += 1;
+ }
+
+ if (!success) {
+ console.log("Transaction failed after 5 retries");
+ }
+ }
export async function waitForTransactionCompletion(api: TypedApi, tx: Transaction<{}, string, string, void>, signer: PolkadotSigner,) {
const transactionPromise = await getTransactionWatchPromise(tx, signer)
@@ -156,6 +173,9 @@ export async function getTransactionWatchPromise(tx: Transaction<{}, string, str
if (value.type === "finalized") {
console.log("Transaction is finalized in block:", value.txHash);
subscription.unsubscribe();
+ if (!value.ok) {
+ console.log("Transaction threw an error:", value.dispatchError)
+ }
// Resolve the promise when the transaction is finalized
resolve();
diff --git a/evm-tests/src/subtensor.ts b/evm-tests/src/subtensor.ts
index 48dc5c83c7..3111d90544 100644
--- a/evm-tests/src/subtensor.ts
+++ b/evm-tests/src/subtensor.ts
@@ -2,9 +2,10 @@ import * as assert from "assert";
import { devnet, MultiAddress } from '@polkadot-api/descriptors';
import { TypedApi, TxCallData } from 'polkadot-api';
import { KeyPair } from "@polkadot-labs/hdkd-helpers"
-import { getAliceSigner, waitForTransactionCompletion, getSignerFromKeypair } from './substrate'
+import { getAliceSigner, waitForTransactionCompletion, getSignerFromKeypair, waitForTransactionWithRetry } from './substrate'
import { convertH160ToSS58, convertPublicKeyToSs58 } from './address-utils'
import { tao } from './balance-math'
+import internal from "stream";
// create a new subnet and return netuid
export async function addNewSubnetwork(api: TypedApi, hotkey: KeyPair, coldkey: KeyPair) {
@@ -15,18 +16,16 @@ export async function addNewSubnetwork(api: TypedApi, hotkey: Key
if (rateLimit !== BigInt(0)) {
const internalCall = api.tx.AdminUtils.sudo_set_network_rate_limit({ rate_limit: BigInt(0) })
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, alice)
}
const signer = getSignerFromKeypair(coldkey)
const registerNetworkTx = api.tx.SubtensorModule.register_network({ hotkey: convertPublicKeyToSs58(hotkey.publicKey) })
- await waitForTransactionCompletion(api, registerNetworkTx, signer)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, registerNetworkTx, signer)
- assert.equal(totalNetworks + 1, await api.query.SubtensorModule.TotalNetworks.getValue())
+ const newTotalNetworks = await api.query.SubtensorModule.TotalNetworks.getValue()
+ // could create multiple subnetworks during retry, just return the first created one
+ assert.ok(newTotalNetworks > totalNetworks)
return totalNetworks
}
@@ -37,9 +36,7 @@ export async function forceSetBalanceToSs58Address(api: TypedApi,
const internalCall = api.tx.Balances.force_set_balance({ who: MultiAddress.Id(ss58Address), new_free: balance })
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, alice)
const balanceOnChain = (await api.query.System.Account.getValue(ss58Address)).data.free
// check the balance except for sudo account becasue of tx fee
@@ -64,9 +61,7 @@ export async function setCommitRevealWeightsEnabled(api: TypedApi
const internalCall = api.tx.AdminUtils.sudo_set_commit_reveal_weights_enabled({ netuid: netuid, enabled: enabled })
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, alice)
assert.equal(enabled, await api.query.SubtensorModule.CommitRevealWeightsEnabled.getValue(netuid))
}
@@ -80,9 +75,7 @@ export async function setWeightsSetRateLimit(api: TypedApi, netui
const internalCall = api.tx.AdminUtils.sudo_set_weights_set_rate_limit({ netuid: netuid, weights_set_rate_limit: rateLimit })
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, alice)
assert.equal(rateLimit, await api.query.SubtensorModule.WeightsSetRateLimit.getValue(netuid))
}
@@ -98,9 +91,7 @@ export async function setTempo(api: TypedApi, netuid: number, tem
const internalCall = api.tx.AdminUtils.sudo_set_tempo({ netuid: netuid, tempo: tempo })
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, alice)
assert.equal(tempo, await api.query.SubtensorModule.Tempo.getValue(netuid))
}
@@ -114,9 +105,7 @@ export async function setCommitRevealWeightsInterval(api: TypedApi { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, alice)
assert.equal(interval, await api.query.SubtensorModule.RevealPeriodEpochs.getValue(netuid))
}
@@ -131,9 +120,7 @@ export async function forceSetChainID(api: TypedApi, chainId: big
const internalCall = api.tx.AdminUtils.sudo_set_evm_chain_id({ chain_id: chainId })
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, alice)
assert.equal(chainId, await api.query.EVMChainId.ChainId.getValue())
}
@@ -147,19 +134,23 @@ export async function disableWhiteListCheck(api: TypedApi, disabl
const internalCall = api.tx.EVM.disable_whitelist({ disabled: disabled })
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, alice)
assert.equal(disabled, await api.query.EVM.DisableWhitelistCheck.getValue())
}
export async function burnedRegister(api: TypedApi, netuid: number, ss58Address: string, keypair: KeyPair) {
+ const registered = await api.query.SubtensorModule.Uids.getValue(netuid, ss58Address);
+ // just return if already registered
+ if (registered !== undefined) {
+ console.log("hotkey ", ss58Address, " already registered in netuid ", netuid)
+ return;
+ }
+
+ await new Promise((resolve) => setTimeout(resolve, 1000));
const uids = await api.query.SubtensorModule.SubnetworkN.getValue(netuid)
const signer = getSignerFromKeypair(keypair)
const tx = api.tx.SubtensorModule.burned_register({ hotkey: ss58Address, netuid: netuid })
- await waitForTransactionCompletion(api, tx, signer)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, signer)
assert.equal(uids + 1, await api.query.SubtensorModule.SubnetworkN.getValue(netuid))
}
@@ -171,9 +162,7 @@ export async function sendProxyCall(api: TypedApi, calldata: TxCa
real: MultiAddress.Id(ss58Address),
force_proxy_type: undefined
});
- await waitForTransactionCompletion(api, tx, signer)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, signer)
}
@@ -188,10 +177,7 @@ export async function setTxRateLimit(api: TypedApi, txRateLimit:
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
- assert.equal(txRateLimit, await api.query.SubtensorModule.TxRateLimit.getValue())
+ await waitForTransactionWithRetry(api, tx, alice)
}
export async function setMaxAllowedValidators(api: TypedApi, netuid: number, maxAllowedValidators: number) {
@@ -208,9 +194,7 @@ export async function setMaxAllowedValidators(api: TypedApi, netu
})
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, alice)
assert.equal(maxAllowedValidators, await api.query.SubtensorModule.MaxAllowedValidators.getValue(netuid))
}
@@ -227,9 +211,7 @@ export async function setSubnetOwnerCut(api: TypedApi, subnetOwne
})
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, alice)
assert.equal(subnetOwnerCut, await api.query.SubtensorModule.SubnetOwnerCut.getValue())
}
@@ -247,9 +229,7 @@ export async function setActivityCutoff(api: TypedApi, netuid: nu
})
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, alice)
assert.equal(activityCutoff, await api.query.SubtensorModule.ActivityCutoff.getValue(netuid))
}
@@ -267,9 +247,7 @@ export async function setMaxAllowedUids(api: TypedApi, netuid: nu
})
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, alice)
assert.equal(maxAllowedUids, await api.query.SubtensorModule.MaxAllowedUids.getValue(netuid))
}
@@ -286,39 +264,32 @@ export async function setMinDelegateTake(api: TypedApi, minDelega
})
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, alice)
assert.equal(minDelegateTake, await api.query.SubtensorModule.MinDelegateTake.getValue())
}
export async function becomeDelegate(api: TypedApi, ss58Address: string, keypair: KeyPair) {
- const singer = getSignerFromKeypair(keypair)
+ const signer = getSignerFromKeypair(keypair)
const tx = api.tx.SubtensorModule.become_delegate({
hotkey: ss58Address
})
- await waitForTransactionCompletion(api, tx, singer)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, signer)
}
export async function addStake(api: TypedApi, netuid: number, ss58Address: string, amount_staked: bigint, keypair: KeyPair) {
- const singer = getSignerFromKeypair(keypair)
+ const signer = getSignerFromKeypair(keypair)
let tx = api.tx.SubtensorModule.add_stake({
netuid: netuid,
hotkey: ss58Address,
amount_staked: amount_staked
})
- await waitForTransactionCompletion(api, tx, singer)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
-
+ await waitForTransactionWithRetry(api, tx, signer)
}
export async function setWeight(api: TypedApi, netuid: number, dests: number[], weights: number[], version_key: bigint, keypair: KeyPair) {
- const singer = getSignerFromKeypair(keypair)
+ const signer = getSignerFromKeypair(keypair)
let tx = api.tx.SubtensorModule.set_weights({
netuid: netuid,
dests: dests,
@@ -326,20 +297,50 @@ export async function setWeight(api: TypedApi, netuid: number, de
version_key: version_key
})
- await waitForTransactionCompletion(api, tx, singer)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
-
+ await waitForTransactionWithRetry(api, tx, signer)
}
export async function rootRegister(api: TypedApi, ss58Address: string, keypair: KeyPair) {
- const singer = getSignerFromKeypair(keypair)
+ const signer = getSignerFromKeypair(keypair)
let tx = api.tx.SubtensorModule.root_register({
hotkey: ss58Address
})
- await waitForTransactionCompletion(api, tx, singer)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, signer)
+}
+
+export async function setSubtokenEnable(api: TypedApi, netuid: number, subtokenEnable: boolean) {
+ const signer = getAliceSigner()
+ let internalTx = api.tx.AdminUtils.sudo_set_subtoken_enabled({
+ netuid: netuid,
+ subtoken_enabled: subtokenEnable
+ })
+ let tx = api.tx.Sudo.sudo({ call: internalTx.decodedCall })
+
+ await waitForTransactionWithRetry(api, tx, signer)
+}
+
+export async function startCall(api: TypedApi, netuid: number, keypair: KeyPair) {
+ const registerBlock = Number(await api.query.SubtensorModule.NetworkRegisteredAt.getValue(netuid))
+ let currentBlock = await api.query.System.Number.getValue()
+ const duration = Number(await api.constants.SubtensorModule.DurationOfStartCall)
+
+ while (currentBlock - registerBlock <= duration) {
+ await new Promise((resolve) => setTimeout(resolve, 2000));
+ currentBlock = await api.query.System.Number.getValue()
+ }
+ // wait for chain to run coinbase
+ await new Promise((resolve) => setTimeout(resolve, 2000));
+
+ const signer = getSignerFromKeypair(keypair)
+ let tx = api.tx.SubtensorModule.start_call({
+ netuid: netuid,
+ })
+
+ await waitForTransactionWithRetry(api, tx, signer)
+ await new Promise((resolve) => setTimeout(resolve, 1000));
+ const callStarted = await api.query.SubtensorModule.FirstEmissionBlockNumber
+ .getValue(netuid);
+ assert.notEqual(callStarted, undefined);
}
\ No newline at end of file
diff --git a/evm-tests/src/utils.ts b/evm-tests/src/utils.ts
index 36e922b49e..1ba191d833 100644
--- a/evm-tests/src/utils.ts
+++ b/evm-tests/src/utils.ts
@@ -2,6 +2,8 @@ import { defineChain, http, publicActions, createPublicClient } from "viem"
import { privateKeyToAccount, generatePrivateKey } from 'viem/accounts'
import { ethers } from "ethers"
import { ETH_LOCAL_URL } from "./config"
+import { FixedSizeBinary } from "polkadot-api";
+import { hexToU8a } from "@polkadot/util";
export type ClientUrlType = 'http://localhost:9944';
@@ -52,4 +54,16 @@ export function generateRandomEthersWallet() {
const wallet = new ethers.Wallet(account.privateKey, provider);
return wallet;
-}
\ No newline at end of file
+}
+
+export function convertToFixedSizeBinary(hexString: string, size: T): FixedSizeBinary {
+ // Convert hex string to a byte array
+ const byteArray = hexToU8a(hexString);
+
+ // Ensure the byte array is exactly the specified size
+ if (byteArray.length !== size) {
+ throw new Error(`The provided string "${hexString}" does not convert to exactly ${size} bytes.`);
+ }
+
+ return new FixedSizeBinary(byteArray);
+}
diff --git a/evm-tests/test/eth.chain-id.test.ts b/evm-tests/test/eth.chain-id.test.ts
index 09174c1212..2e1c18d3d4 100644
--- a/evm-tests/test/eth.chain-id.test.ts
+++ b/evm-tests/test/eth.chain-id.test.ts
@@ -2,7 +2,7 @@
import * as assert from "assert";
import * as chai from "chai";
-import { getDevnetApi, waitForTransactionCompletion, getRandomSubstrateKeypair } from "../src/substrate"
+import { getDevnetApi, waitForTransactionWithRetry, getRandomSubstrateKeypair } from "../src/substrate"
import { generateRandomEthWallet, getPublicClient } from "../src/utils";
import { convertPublicKeyToSs58 } from "../src/address-utils"
import { ETH_LOCAL_URL } from "../src/config";
@@ -64,9 +64,7 @@ describe("Test the EVM chain ID", () => {
)
let tx = api.tx.AdminUtils.sudo_set_evm_chain_id({ chain_id: BigInt(100) })
- await waitForTransactionCompletion(api, tx, signer)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, signer)
// extrinsic should be failed and chain ID not updated.
chainId = await ethClient.getChainId();
diff --git a/evm-tests/test/eth.incremental.deploy.test.ts b/evm-tests/test/eth.incremental.deploy.test.ts
index c22187538d..49571b508a 100644
--- a/evm-tests/test/eth.incremental.deploy.test.ts
+++ b/evm-tests/test/eth.incremental.deploy.test.ts
@@ -14,7 +14,7 @@ import { toViemAddress } from "../src/address-utils";
import { ethers } from "ethers"
import { disableWhiteListCheck, forceSetBalanceToEthAddress } from "../src/subtensor";
-describe("bridge token contract deployment", () => {
+describe("incremental smart contract deployment", () => {
// init eth part
const wallet = generateRandomEthersWallet();
let publicClient: PublicClient;
diff --git a/evm-tests/test/eth.substrate-transfer.test.ts b/evm-tests/test/eth.substrate-transfer.test.ts
index 9e3a2b2050..f039120114 100644
--- a/evm-tests/test/eth.substrate-transfer.test.ts
+++ b/evm-tests/test/eth.substrate-transfer.test.ts
@@ -1,6 +1,6 @@
import * as assert from "assert";
-import { getDevnetApi, waitForTransactionCompletion, getRandomSubstrateSigner, } from "../src/substrate"
+import { getDevnetApi, waitForTransactionCompletion, getRandomSubstrateSigner, waitForTransactionWithRetry} from "../src/substrate"
import { getPublicClient } from "../src/utils";
import { ETH_LOCAL_URL, IBALANCETRANSFER_ADDRESS, IBalanceTransferABI } from "../src/config";
import { devnet, MultiAddress } from "@polkadot-api/descriptors"
@@ -66,10 +66,7 @@ describe("Balance transfers between substrate and EVM", () => {
const transferBalance = tao(1)
const tx = api.tx.Balances.transfer_keep_alive({ value: transferBalance, dest: MultiAddress.Id(ss58Address) })
- await waitForTransactionCompletion(api, tx, signer)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
-
+ await waitForTransactionWithRetry(api, tx, signer)
const senderBalanceAfterTransfer = (await api.query.System.Account.getValue(ss58Address)).data.free
const receiverBalanceAfterTranser = await publicClient.getBalance({ address: toViemAddress(wallet.address) })
@@ -112,9 +109,7 @@ describe("Balance transfers between substrate and EVM", () => {
const tx = api.tx.EVM.withdraw({ address: ethAddresss, value: tao(1) })
const txFee = (await tx.getPaymentInfo(ss58Address)).partial_fee
- await waitForTransactionCompletion(api, tx, signer)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
+ await waitForTransactionWithRetry(api, tx, signer)
const senderBalanceAfterWithdraw = (await api.query.System.Account.getValue(ss58Address)).data.free
@@ -155,10 +150,7 @@ describe("Balance transfers between substrate and EVM", () => {
// txFee not accurate
const txFee = (await tx.getPaymentInfo(ss58Address)).partial_fee
- await waitForTransactionCompletion(api, tx, signer)
- .then(() => { })
- .catch((error) => { console.log(`transaction error ${error}`) });
-
+ await waitForTransactionWithRetry(api, tx, signer)
const receiverBalanceAfterCall = await publicClient.getBalance({ address: toViemAddress(wallet.address) })
assert.equal(receiverBalanceAfterCall, receiverBalance + raoToEth(tao(1)))
diff --git a/evm-tests/test/metagraph.precompile.test.ts b/evm-tests/test/metagraph.precompile.test.ts
index 94c0df8861..18ab4bd421 100644
--- a/evm-tests/test/metagraph.precompile.test.ts
+++ b/evm-tests/test/metagraph.precompile.test.ts
@@ -1,15 +1,15 @@
import * as assert from "assert";
-import { getAliceSigner, getClient, getDevnetApi, waitForTransactionCompletion, convertPublicKeyToMultiAddress, getRandomSubstrateKeypair, getSignerFromKeypair } from "../src/substrate"
+import { getAliceSigner, getDevnetApi, convertPublicKeyToMultiAddress, getRandomSubstrateKeypair, getSignerFromKeypair, waitForTransactionWithRetry } from "../src/substrate"
import { getPublicClient, } from "../src/utils";
-import { ETH_LOCAL_URL, SUB_LOCAL_URL, } from "../src/config";
+import { ETH_LOCAL_URL } from "../src/config";
import { devnet } from "@polkadot-api/descriptors"
import { PublicClient } from "viem";
import { PolkadotSigner, TypedApi } from "polkadot-api";
import { toViemAddress, convertPublicKeyToSs58 } from "../src/address-utils"
import { IMetagraphABI, IMETAGRAPH_ADDRESS } from "../src/contracts/metagraph"
-describe("Test the EVM chain ID", () => {
+describe("Test the Metagraph precompile", () => {
// init substrate part
const hotkey = getRandomSubstrateKeypair();
const coldkey = getRandomSubstrateKeypair();
@@ -26,7 +26,6 @@ describe("Test the EVM chain ID", () => {
before(async () => {
// init variables got from await and async
publicClient = await getPublicClient(ETH_LOCAL_URL)
- const subClient = await getClient(SUB_LOCAL_URL)
api = await getDevnetApi()
alice = await getAliceSigner();
@@ -35,7 +34,7 @@ describe("Test the EVM chain ID", () => {
const internalCall = api.tx.Balances.force_set_balance({ who: multiAddress, new_free: BigInt(1e12) })
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
+ await waitForTransactionWithRetry(api, tx, alice)
.then(() => { })
.catch((error) => { console.log(`transaction error ${error}`) });
}
@@ -45,14 +44,14 @@ describe("Test the EVM chain ID", () => {
const internalCall = api.tx.Balances.force_set_balance({ who: multiAddress, new_free: BigInt(1e12) })
const tx = api.tx.Sudo.sudo({ call: internalCall.decodedCall })
- await waitForTransactionCompletion(api, tx, alice)
+ await waitForTransactionWithRetry(api, tx, alice)
.then(() => { })
.catch((error) => { console.log(`transaction error ${error}`) });
}
const signer = getSignerFromKeypair(coldkey)
const registerNetworkTx = api.tx.SubtensorModule.register_network({ hotkey: convertPublicKeyToSs58(hotkey.publicKey) })
- await waitForTransactionCompletion(api, registerNetworkTx, signer)
+ await waitForTransactionWithRetry(api, registerNetworkTx, signer)
.then(() => { })
.catch((error) => { console.log(`transaction error ${error}`) });
@@ -64,7 +63,7 @@ describe("Test the EVM chain ID", () => {
await api.query.SubtensorModule.SubnetworkN.getValue(subnetId)
if (uid_count === 0) {
const tx = api.tx.SubtensorModule.burned_register({ hotkey: convertPublicKeyToSs58(hotkey.publicKey), netuid: subnetId })
- await waitForTransactionCompletion(api, tx, signer)
+ await waitForTransactionWithRetry(api, tx, signer)
.then(() => { })
.catch((error) => { console.log(`transaction error ${error}`) });
}
diff --git a/evm-tests/test/neuron.precompile.emission-check.test.ts b/evm-tests/test/neuron.precompile.emission-check.test.ts
index ac609c1e27..e54cb1ec88 100644
--- a/evm-tests/test/neuron.precompile.emission-check.test.ts
+++ b/evm-tests/test/neuron.precompile.emission-check.test.ts
@@ -1,8 +1,8 @@
import * as assert from "assert";
-import { getAliceSigner, getClient, getDevnetApi, getRandomSubstrateKeypair } from "../src/substrate"
+import { getAliceSigner, getDevnetApi, getRandomSubstrateKeypair } from "../src/substrate"
import { getPublicClient, } from "../src/utils";
-import { ETH_LOCAL_URL, SUB_LOCAL_URL, } from "../src/config";
+import { ETH_LOCAL_URL } from "../src/config";
import { devnet } from "@polkadot-api/descriptors"
import { PublicClient } from "viem";
import { PolkadotSigner, TypedApi } from "polkadot-api";
@@ -10,9 +10,9 @@ import { convertPublicKeyToSs58, } from "../src/address-utils"
import { ethers } from "ethers"
import { INEURON_ADDRESS, INeuronABI } from "../src/contracts/neuron"
import { generateRandomEthersWallet } from "../src/utils"
-import { forceSetBalanceToSs58Address, forceSetBalanceToEthAddress, addNewSubnetwork } from "../src/subtensor"
+import { forceSetBalanceToSs58Address, forceSetBalanceToEthAddress, addNewSubnetwork, startCall, setSubtokenEnable } from "../src/subtensor"
-describe("Test the EVM chain ID", () => {
+describe("Test the Neuron precompile with emission", () => {
// init eth part
const wallet = generateRandomEthersWallet();
@@ -30,7 +30,6 @@ describe("Test the EVM chain ID", () => {
before(async () => {
// init variables got from await and async
publicClient = await getPublicClient(ETH_LOCAL_URL)
- const subClient = await getClient(SUB_LOCAL_URL)
api = await getDevnetApi()
alice = await getAliceSigner();
await forceSetBalanceToSs58Address(api, convertPublicKeyToSs58(hotkey.publicKey))
@@ -40,11 +39,13 @@ describe("Test the EVM chain ID", () => {
await forceSetBalanceToEthAddress(api, wallet.address)
const netuid = await addNewSubnetwork(api, hotkey2, coldkey)
+ await startCall(api, netuid, coldkey)
console.log("test on subnet ", netuid)
})
it("Burned register and check emission", async () => {
let netuid = (await api.query.SubtensorModule.TotalNetworks.getValue()) - 1
+
const uid = await api.query.SubtensorModule.SubnetworkN.getValue(netuid)
const contract = new ethers.Contract(INEURON_ADDRESS, INeuronABI, wallet);
diff --git a/evm-tests/test/neuron.precompile.reveal-weights.test.ts b/evm-tests/test/neuron.precompile.reveal-weights.test.ts
index 85125f0956..8045ac18f1 100644
--- a/evm-tests/test/neuron.precompile.reveal-weights.test.ts
+++ b/evm-tests/test/neuron.precompile.reveal-weights.test.ts
@@ -12,7 +12,8 @@ import { convertH160ToPublicKey } from "../src/address-utils"
import { blake2AsU8a } from "@polkadot/util-crypto"
import {
forceSetBalanceToEthAddress, forceSetBalanceToSs58Address, addNewSubnetwork, setCommitRevealWeightsEnabled, setWeightsSetRateLimit, burnedRegister,
- setTempo, setCommitRevealWeightsInterval
+ setTempo, setCommitRevealWeightsInterval,
+ startCall
} from "../src/subtensor"
// hardcode some values for reveal hash
@@ -64,6 +65,7 @@ describe("Test neuron precompile reveal weights", () => {
await forceSetBalanceToSs58Address(api, convertPublicKeyToSs58(coldkey.publicKey))
await forceSetBalanceToEthAddress(api, wallet.address)
let netuid = await addNewSubnetwork(api, hotkey, coldkey)
+ await startCall(api, netuid, coldkey)
console.log("test the case on subnet ", netuid)
@@ -97,9 +99,10 @@ describe("Test neuron precompile reveal weights", () => {
if (weightsCommit === undefined) {
throw new Error("submit weights failed")
}
- assert.ok(weightsCommit.length > 0)
+ else { assert.ok(weightsCommit.length > 0) }
})
+ // Temporarily disable it, there is a type error in CI.
it("EVM neuron reveal weights via call precompile", async () => {
let totalNetworks = await api.query.SubtensorModule.TotalNetworks.getValue()
const netuid = totalNetworks - 1
@@ -129,11 +132,16 @@ describe("Test neuron precompile reveal weights", () => {
ss58Address
)
+ if (neuron_uid === undefined) {
+ throw new Error("neuron_uid not available onchain or invalid type")
+ }
+
const weights = await api.query.SubtensorModule.Weights.getValue(netuid, neuron_uid)
- if (weights === undefined) {
- throw new Error("weights not available onchain")
+ if (weights === undefined || !Array.isArray(weights)) {
+ throw new Error("weights not available onchain or invalid type")
}
+
for (const weight of weights) {
assert.equal(weight[0], neuron_uid)
assert.ok(weight[1] !== undefined)
diff --git a/evm-tests/test/neuron.precompile.serve.axon-prometheus.test.ts b/evm-tests/test/neuron.precompile.serve.axon-prometheus.test.ts
index aee84f130c..a80d79d486 100644
--- a/evm-tests/test/neuron.precompile.serve.axon-prometheus.test.ts
+++ b/evm-tests/test/neuron.precompile.serve.axon-prometheus.test.ts
@@ -1,13 +1,12 @@
import * as assert from "assert";
-import { getAliceSigner, getClient, getDevnetApi, getRandomSubstrateKeypair } from "../src/substrate"
-import { SUB_LOCAL_URL, } from "../src/config";
+import { getAliceSigner, getDevnetApi, getRandomSubstrateKeypair } from "../src/substrate"
import { devnet } from "@polkadot-api/descriptors"
import { PolkadotSigner, TypedApi } from "polkadot-api";
import { convertPublicKeyToSs58, convertH160ToSS58 } from "../src/address-utils"
import { ethers } from "ethers"
import { INEURON_ADDRESS, INeuronABI } from "../src/contracts/neuron"
import { generateRandomEthersWallet } from "../src/utils"
-import { forceSetBalanceToEthAddress, forceSetBalanceToSs58Address, addNewSubnetwork, burnedRegister } from "../src/subtensor"
+import { forceSetBalanceToEthAddress, forceSetBalanceToSs58Address, addNewSubnetwork, burnedRegister, startCall } from "../src/subtensor"
describe("Test neuron precompile Serve Axon Prometheus", () => {
// init eth part
@@ -25,7 +24,6 @@ describe("Test neuron precompile Serve Axon Prometheus", () => {
let alice: PolkadotSigner;
before(async () => {
// init variables got from await and async
- const subClient = await getClient(SUB_LOCAL_URL)
api = await getDevnetApi()
alice = await getAliceSigner();
@@ -36,6 +34,7 @@ describe("Test neuron precompile Serve Axon Prometheus", () => {
await forceSetBalanceToEthAddress(api, wallet2.address)
await forceSetBalanceToEthAddress(api, wallet3.address)
let netuid = await addNewSubnetwork(api, hotkey, coldkey)
+ await startCall(api, netuid, coldkey)
console.log("test the case on subnet ", netuid)
diff --git a/evm-tests/test/neuron.precompile.set-weights.test.ts b/evm-tests/test/neuron.precompile.set-weights.test.ts
index 393c2b97b8..1c9f62e773 100644
--- a/evm-tests/test/neuron.precompile.set-weights.test.ts
+++ b/evm-tests/test/neuron.precompile.set-weights.test.ts
@@ -9,7 +9,8 @@ import { INEURON_ADDRESS, INeuronABI } from "../src/contracts/neuron"
import { generateRandomEthersWallet } from "../src/utils"
import {
forceSetBalanceToSs58Address, forceSetBalanceToEthAddress, addNewSubnetwork, burnedRegister, setCommitRevealWeightsEnabled,
- setWeightsSetRateLimit
+ setWeightsSetRateLimit,
+ startCall
} from "../src/subtensor"
describe("Test neuron precompile contract, set weights function", () => {
@@ -31,6 +32,7 @@ describe("Test neuron precompile contract, set weights function", () => {
await forceSetBalanceToEthAddress(api, wallet.address)
const netuid = await addNewSubnetwork(api, hotkey, coldkey)
+ await startCall(api, netuid, coldkey)
console.log("test on subnet ", netuid)
await burnedRegister(api, netuid, convertH160ToSS58(wallet.address), coldkey)
@@ -53,13 +55,17 @@ describe("Test neuron precompile contract, set weights function", () => {
const tx = await contract.setWeights(netuid, dests, weights, version_key);
await tx.wait();
- const weightsOnChain = await api.query.SubtensorModule.Weights.getValue(netuid, uid)
+ if (uid === undefined) {
+ throw new Error("uid not get on chain")
+ } else {
+ const weightsOnChain = await api.query.SubtensorModule.Weights.getValue(netuid, uid)
- weightsOnChain.forEach((weight, _) => {
- const uidInWeight = weight[0];
- const value = weight[1];
- assert.equal(uidInWeight, uid)
- assert.ok(value > 0)
- });
+ weightsOnChain.forEach((weight, _) => {
+ const uidInWeight = weight[0];
+ const value = weight[1];
+ assert.equal(uidInWeight, uid)
+ assert.ok(value > 0)
+ });
+ }
})
});
\ No newline at end of file
diff --git a/evm-tests/test/staking.precompile.add-remove.test.ts b/evm-tests/test/staking.precompile.add-remove.test.ts
index 5387e62428..91bece4c0e 100644
--- a/evm-tests/test/staking.precompile.add-remove.test.ts
+++ b/evm-tests/test/staking.precompile.add-remove.test.ts
@@ -10,12 +10,13 @@ import { convertH160ToPublicKey } from "../src/address-utils"
import {
forceSetBalanceToEthAddress, forceSetBalanceToSs58Address, addNewSubnetwork, burnedRegister,
sendProxyCall,
+ startCall,
} from "../src/subtensor"
import { ETH_LOCAL_URL } from "../src/config";
import { ISTAKING_ADDRESS, ISTAKING_V2_ADDRESS, IStakingABI, IStakingV2ABI } from "../src/contracts/staking"
import { PublicClient } from "viem";
-describe("Test neuron precompile reveal weights", () => {
+describe("Test neuron precompile add remove stake", () => {
// init eth part
const wallet1 = generateRandomEthersWallet();
const wallet2 = generateRandomEthersWallet();
@@ -41,6 +42,7 @@ describe("Test neuron precompile reveal weights", () => {
await forceSetBalanceToEthAddress(api, wallet1.address)
await forceSetBalanceToEthAddress(api, wallet2.address)
let netuid = await addNewSubnetwork(api, hotkey, coldkey)
+ await startCall(api, netuid, coldkey)
console.log("test the case on subnet ", netuid)
diff --git a/evm-tests/test/staking.precompile.limit.test.ts b/evm-tests/test/staking.precompile.limit.test.ts
new file mode 100644
index 0000000000..759aaecce2
--- /dev/null
+++ b/evm-tests/test/staking.precompile.limit.test.ts
@@ -0,0 +1,113 @@
+import * as assert from "assert";
+import { getDevnetApi, getRandomSubstrateKeypair } from "../src/substrate";
+import { devnet } from "@polkadot-api/descriptors";
+import { TypedApi } from "polkadot-api";
+import {
+ convertH160ToSS58,
+ convertPublicKeyToSs58,
+} from "../src/address-utils";
+import { tao, raoToEth } from "../src/balance-math";
+import {
+ addNewSubnetwork,
+ addStake,
+ forceSetBalanceToEthAddress,
+ forceSetBalanceToSs58Address,
+ startCall,
+} from "../src/subtensor";
+import { ethers } from "ethers";
+import { generateRandomEthersWallet } from "../src/utils";
+import { ISTAKING_V2_ADDRESS, IStakingV2ABI } from "../src/contracts/staking";
+import { log } from "console";
+
+describe("Test staking precompile add remove limit methods", () => {
+ const hotkey = getRandomSubstrateKeypair();
+ const coldkey = getRandomSubstrateKeypair();
+ const wallet1 = generateRandomEthersWallet();
+
+ let api: TypedApi;
+
+ before(async () => {
+ api = await getDevnetApi();
+ await forceSetBalanceToSs58Address(
+ api,
+ convertPublicKeyToSs58(hotkey.publicKey),
+ );
+ await forceSetBalanceToSs58Address(
+ api,
+ convertPublicKeyToSs58(coldkey.publicKey),
+ );
+ await forceSetBalanceToEthAddress(api, wallet1.address);
+ await addNewSubnetwork(api, hotkey, coldkey);
+ let netuid = (await api.query.SubtensorModule.TotalNetworks.getValue()) - 1;
+ await startCall(api, netuid, coldkey);
+ console.log("will test in subnet: ", netuid);
+ });
+
+ it("Staker add limit", async () => {
+ let netuid = (await api.query.SubtensorModule.TotalNetworks.getValue()) - 1;
+ let ss58Address = convertH160ToSS58(wallet1.address);
+
+ const alpha = await api.query.SubtensorModule.Alpha.getValue(
+ convertPublicKeyToSs58(hotkey.publicKey),
+ ss58Address,
+ netuid,
+ );
+
+ const contract = new ethers.Contract(
+ ISTAKING_V2_ADDRESS,
+ IStakingV2ABI,
+ wallet1,
+ );
+
+ const tx = await contract.addStakeLimit(
+ hotkey.publicKey,
+ tao(2000),
+ tao(1000),
+ true,
+ netuid,
+ );
+ await tx.wait();
+
+ const alphaAfterAddStake = await api.query.SubtensorModule.Alpha.getValue(
+ convertPublicKeyToSs58(hotkey.publicKey),
+ ss58Address,
+ netuid,
+ );
+
+ assert.ok(alphaAfterAddStake > alpha);
+ });
+
+ it("Staker remove limit", async () => {
+ let netuid = (await api.query.SubtensorModule.TotalNetworks.getValue()) - 1;
+ let ss58Address = convertH160ToSS58(wallet1.address);
+
+ const alpha = await api.query.SubtensorModule.Alpha.getValue(
+ convertPublicKeyToSs58(hotkey.publicKey),
+ ss58Address,
+ netuid,
+ );
+
+ const contract = new ethers.Contract(
+ ISTAKING_V2_ADDRESS,
+ IStakingV2ABI,
+ wallet1,
+ );
+
+ const tx = await contract.removeStakeLimit(
+ hotkey.publicKey,
+ tao(100),
+ tao(1),
+ true,
+ netuid,
+ );
+ await tx.wait();
+
+ const alphaAfterRemoveStake = await api.query.SubtensorModule.Alpha.getValue(
+ convertPublicKeyToSs58(hotkey.publicKey),
+ ss58Address,
+ netuid,
+ );
+
+ assert.ok(alphaAfterRemoveStake < alpha);
+ });
+});
diff --git a/evm-tests/test/staking.precompile.reward.test.ts b/evm-tests/test/staking.precompile.reward.test.ts
index 3600a6d08d..3735329ff2 100644
--- a/evm-tests/test/staking.precompile.reward.test.ts
+++ b/evm-tests/test/staking.precompile.reward.test.ts
@@ -7,10 +7,11 @@ import { tao } from "../src/balance-math"
import {
forceSetBalanceToSs58Address, addNewSubnetwork, burnedRegister,
setTxRateLimit, setTempo, setWeightsSetRateLimit, setSubnetOwnerCut, setMaxAllowedUids,
- setMinDelegateTake, becomeDelegate, setActivityCutoff, addStake, setWeight, rootRegister
+ setMinDelegateTake, becomeDelegate, setActivityCutoff, addStake, setWeight, rootRegister,
+ startCall
} from "../src/subtensor"
-describe("Test neuron precompile reveal weights", () => {
+describe("Test neuron precompile reward", () => {
const hotkey = getRandomSubstrateKeypair();
const coldkey = getRandomSubstrateKeypair();
@@ -35,6 +36,7 @@ describe("Test neuron precompile reveal weights", () => {
// await forceSetBalanceToEthAddress(api, wallet1.address)
// await forceSetBalanceToEthAddress(api, wallet2.address)
let netuid = await addNewSubnetwork(api, hotkey, coldkey)
+ await startCall(api, netuid, coldkey)
console.log("test the case on subnet ", netuid)
diff --git a/evm-tests/test/staking.precompile.stake-get.test.ts b/evm-tests/test/staking.precompile.stake-get.test.ts
index 37a23d8db2..460aeabf32 100644
--- a/evm-tests/test/staking.precompile.stake-get.test.ts
+++ b/evm-tests/test/staking.precompile.stake-get.test.ts
@@ -6,6 +6,7 @@ import { convertPublicKeyToSs58 } from "../src/address-utils"
import { tao } from "../src/balance-math"
import {
forceSetBalanceToSs58Address, addNewSubnetwork, addStake,
+ startCall
} from "../src/subtensor"
import { ethers } from "ethers";
import { generateRandomEthersWallet } from "../src/utils"
@@ -23,7 +24,9 @@ describe("Test staking precompile get methods", () => {
api = await getDevnetApi()
await forceSetBalanceToSs58Address(api, convertPublicKeyToSs58(hotkey.publicKey))
await forceSetBalanceToSs58Address(api, convertPublicKeyToSs58(coldkey.publicKey))
- let netuid = await addNewSubnetwork(api, hotkey, coldkey)
+ await addNewSubnetwork(api, hotkey, coldkey)
+ let netuid = (await api.query.SubtensorModule.TotalNetworks.getValue()) - 1
+ await startCall(api, netuid, coldkey)
console.log("will test in subnet: ", netuid)
})
diff --git a/evm-tests/test/subnet.precompile.hyperparameter.test.ts b/evm-tests/test/subnet.precompile.hyperparameter.test.ts
index 1805b85ce9..57efd64f77 100644
--- a/evm-tests/test/subnet.precompile.hyperparameter.test.ts
+++ b/evm-tests/test/subnet.precompile.hyperparameter.test.ts
@@ -57,386 +57,476 @@ describe("Test the Subnet precompile contract", () => {
assert.ok(totalNetwork + 1 === totalNetworkAfterAdd)
});
- it("Can set subnet parameter", async () => {
+ it("Can set servingRateLimit parameter", async () => {
const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
const netuid = totalNetwork - 1;
- // servingRateLimit hyperparameter
- {
- const newValue = 100;
- const tx = await contract.setServingRateLimit(netuid, newValue);
- await tx.wait();
+ const newValue = 100;
+ const tx = await contract.setServingRateLimit(netuid, newValue);
+ await tx.wait();
+
+ let onchainValue = await api.query.SubtensorModule.ServingRateLimit.getValue(netuid)
+
+
+ let valueFromContract = Number(
+ await contract.getServingRateLimit(netuid)
+ );
+
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
+
+
+ // minDifficulty hyperparameter
+ //
+ // disabled: only by sudo
+ //
+ // newValue = 101;
+ // tx = await contract.setMinDifficulty(netuid, newValue);
+ // await tx.wait();
- let onchainValue = await api.query.SubtensorModule.ServingRateLimit.getValue(netuid)
+ // await usingApi(async (api) => {
+ // onchainValue = Number(
+ // await api.query.subtensorModule.minDifficulty(netuid)
+ // );
+ // });
+
+ // valueFromContract = Number(await contract.getMinDifficulty(netuid));
+
+ // expect(valueFromContract).to.eq(newValue);
+ // expect(valueFromContract).to.eq(onchainValue);
+
+ it("Can set maxDifficulty parameter", async () => {
+
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
+
+ const newValue = 102;
+ const tx = await contract.setMaxDifficulty(netuid, newValue);
+ await tx.wait();
+ let onchainValue = await api.query.SubtensorModule.MaxDifficulty.getValue(netuid)
- let valueFromContract = Number(
- await contract.getServingRateLimit(netuid)
- );
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ let valueFromContract = Number(
+ await contract.getMaxDifficulty(netuid)
+ );
+
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
+
+
+ it("Can set weightsVersionKey parameter", async () => {
+
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
+
+ const newValue = 103;
+ const tx = await contract.setWeightsVersionKey(netuid, newValue);
+ await tx.wait();
+
+ let onchainValue = await api.query.SubtensorModule.WeightsVersionKey.getValue(netuid)
+
+
+ let valueFromContract = Number(
+ await contract.getWeightsVersionKey(netuid)
+ );
+
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
- // minDifficulty hyperparameter
- //
- // disabled: only by sudo
- //
- // newValue = 101;
- // tx = await contract.setMinDifficulty(netuid, newValue);
- // await tx.wait();
+ // need sudo as origin now
+ // it("Can set weightsSetRateLimit parameter", async () => {
- // await usingApi(async (api) => {
- // onchainValue = Number(
- // await api.query.subtensorModule.minDifficulty(netuid)
- // );
- // });
+ // const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ // const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ // const netuid = totalNetwork - 1;
- // valueFromContract = Number(await contract.getMinDifficulty(netuid));
+ // const newValue = 104;
+ // const tx = await contract.setWeightsSetRateLimit(netuid, newValue);
+ // await tx.wait();
+
+ // let onchainValue = await api.query.SubtensorModule.WeightsSetRateLimit.getValue(netuid)
+
+
+ // let valueFromContract = Number(
+ // await contract.getWeightsSetRateLimit(netuid)
+ // );
+
+ // assert.equal(valueFromContract, newValue)
+ // assert.equal(valueFromContract, onchainValue);
+ // })
+
+ it("Can set adjustmentAlpha parameter", async () => {
+
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
+
+ const newValue = 105;
+ const tx = await contract.setAdjustmentAlpha(netuid, newValue);
+ await tx.wait();
+
+ let onchainValue = await api.query.SubtensorModule.AdjustmentAlpha.getValue(netuid)
+
+
+ let valueFromContract = Number(
+ await contract.getAdjustmentAlpha(netuid)
+ );
+
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
+
+ it("Can set maxWeightLimit parameter", async () => {
+
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
+
+ const newValue = 106;
+ const tx = await contract.setMaxWeightLimit(netuid, newValue);
+ await tx.wait();
+
+ let onchainValue = await api.query.SubtensorModule.MaxWeightsLimit.getValue(netuid)
+
+
+ let valueFromContract = Number(
+ await contract.getMaxWeightLimit(netuid)
+ );
+
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
+
+ it("Can set immunityPeriod parameter", async () => {
+
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
- // expect(valueFromContract).to.eq(newValue);
- // expect(valueFromContract).to.eq(onchainValue);
+ const newValue = 107;
+ const tx = await contract.setImmunityPeriod(netuid, newValue);
+ await tx.wait();
- // maxDifficulty hyperparameter
+ let onchainValue = await api.query.SubtensorModule.ImmunityPeriod.getValue(netuid)
- {
- const newValue = 102;
- const tx = await contract.setMaxDifficulty(netuid, newValue);
- await tx.wait();
- let onchainValue = await api.query.SubtensorModule.MaxDifficulty.getValue(netuid)
+ let valueFromContract = Number(
+ await contract.getImmunityPeriod(netuid)
+ );
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
- let valueFromContract = Number(
- await contract.getMaxDifficulty(netuid)
- );
+ it("Can set minAllowedWeights parameter", async () => {
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
- // weightsVersionKey hyperparameter
- {
- const newValue = 103;
- const tx = await contract.setWeightsVersionKey(netuid, newValue);
- await tx.wait();
+ const newValue = 108;
+ const tx = await contract.setMinAllowedWeights(netuid, newValue);
+ await tx.wait();
- let onchainValue = await api.query.SubtensorModule.WeightsVersionKey.getValue(netuid)
+ let onchainValue = await api.query.SubtensorModule.MinAllowedWeights.getValue(netuid)
- let valueFromContract = Number(
- await contract.getWeightsVersionKey(netuid)
- );
+ let valueFromContract = Number(
+ await contract.getMinAllowedWeights(netuid)
+ );
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
- // weightsSetRateLimit hyperparameter
- {
- const newValue = 104;
- const tx = await contract.setWeightsSetRateLimit(netuid, newValue);
- await tx.wait();
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
- let onchainValue = await api.query.SubtensorModule.WeightsSetRateLimit.getValue(netuid)
+ it("Can set kappa parameter", async () => {
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
- let valueFromContract = Number(
- await contract.getWeightsSetRateLimit(netuid)
- );
+ const newValue = 109;
+ const tx = await contract.setKappa(netuid, newValue);
+ await tx.wait();
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ let onchainValue = await api.query.SubtensorModule.Kappa.getValue(netuid)
- // adjustmentAlpha hyperparameter
- {
- const newValue = 105;
- const tx = await contract.setAdjustmentAlpha(netuid, newValue);
- await tx.wait();
- let onchainValue = await api.query.SubtensorModule.AdjustmentAlpha.getValue(netuid)
+ let valueFromContract = Number(
+ await contract.getKappa(netuid)
+ );
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
- let valueFromContract = Number(
- await contract.getAdjustmentAlpha(netuid)
- );
+ it("Can set rho parameter", async () => {
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
- // maxWeightLimit hyperparameter
- {
- const newValue = 106;
- const tx = await contract.setMaxWeightLimit(netuid, newValue);
- await tx.wait();
+ const newValue = 110;
+ const tx = await contract.setRho(netuid, newValue);
+ await tx.wait();
- let onchainValue = await api.query.SubtensorModule.MaxWeightsLimit.getValue(netuid)
+ let onchainValue = await api.query.SubtensorModule.Rho.getValue(netuid)
- let valueFromContract = Number(
- await contract.getMaxWeightLimit(netuid)
- );
+ let valueFromContract = Number(
+ await contract.getRho(netuid)
+ );
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
- // immunityPeriod hyperparameter
- {
- const newValue = 107;
- const tx = await contract.setImmunityPeriod(netuid, newValue);
- await tx.wait();
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
- let onchainValue = await api.query.SubtensorModule.ImmunityPeriod.getValue(netuid)
+ it("Can set activityCutoff parameter", async () => {
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
+ const newValue = await api.query.SubtensorModule.MinActivityCutoff.getValue() + 1;
+ const tx = await contract.setActivityCutoff(netuid, newValue);
+ await tx.wait();
- let valueFromContract = Number(
- await contract.getImmunityPeriod(netuid)
- );
+ let onchainValue = await api.query.SubtensorModule.ActivityCutoff.getValue(netuid)
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
- // minAllowedWeights hyperparameter
- {
- const newValue = 108;
- const tx = await contract.setMinAllowedWeights(netuid, newValue);
- await tx.wait();
+ let valueFromContract = Number(
+ await contract.getActivityCutoff(netuid)
+ );
- let onchainValue = await api.query.SubtensorModule.MinAllowedWeights.getValue(netuid)
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
+ it("Can set networkRegistrationAllowed parameter", async () => {
- let valueFromContract = Number(
- await contract.getMinAllowedWeights(netuid)
- );
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ const newValue = true;
+ const tx = await contract.setNetworkRegistrationAllowed(netuid, newValue);
+ await tx.wait();
- // kappa hyperparameter
- {
- const newValue = 109;
- const tx = await contract.setKappa(netuid, newValue);
- await tx.wait();
+ let onchainValue = await api.query.SubtensorModule.NetworkRegistrationAllowed.getValue(netuid)
- let onchainValue = await api.query.SubtensorModule.Kappa.getValue(netuid)
+ let valueFromContract = Boolean(
+ await contract.getNetworkRegistrationAllowed(netuid)
+ );
- let valueFromContract = Number(
- await contract.getKappa(netuid)
- );
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ it("Can set networkPowRegistrationAllowed parameter", async () => {
- // rho hyperparameter
- {
- const newValue = 110;
- const tx = await contract.setRho(netuid, newValue);
- await tx.wait();
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
- let onchainValue = await api.query.SubtensorModule.Rho.getValue(netuid)
+ const newValue = true;
+ const tx = await contract.setNetworkPowRegistrationAllowed(netuid, newValue);
+ await tx.wait();
+ let onchainValue = await api.query.SubtensorModule.NetworkPowRegistrationAllowed.getValue(netuid)
- let valueFromContract = Number(
- await contract.getRho(netuid)
- );
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ let valueFromContract = Boolean(
+ await contract.getNetworkPowRegistrationAllowed(netuid)
+ );
- // activityCutoff hyperparameter
- {
- const newValue = 111;
- const tx = await contract.setActivityCutoff(netuid, newValue);
- await tx.wait();
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
- let onchainValue = await api.query.SubtensorModule.ActivityCutoff.getValue(netuid)
+ // minBurn hyperparameter. only sudo can set it now
+ // newValue = 112;
+ // tx = await contract.setMinBurn(netuid, newValue);
+ // await tx.wait();
- let valueFromContract = Number(
- await contract.getActivityCutoff(netuid)
- );
+ // await usingApi(async (api) => {
+ // onchainValue = Number(
+ // await api.query.subtensorModule.minBurn(netuid)
+ // );
+ // });
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ // valueFromContract = Number(await contract.getMinBurn(netuid));
- // networkRegistrationAllowed hyperparameter
- {
- const newValue = true;
- const tx = await contract.setNetworkRegistrationAllowed(netuid, newValue);
- await tx.wait();
+ // expect(valueFromContract).to.eq(newValue);
+ // expect(valueFromContract).to.eq(onchainValue);
- let onchainValue = await api.query.SubtensorModule.NetworkRegistrationAllowed.getValue(netuid)
+ // maxBurn hyperparameter. only sudo can set it now
+ // it("Can set maxBurn parameter", async () => {
+ // const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ // const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ // const netuid = totalNetwork - 1;
- let valueFromContract = Boolean(
- await contract.getNetworkRegistrationAllowed(netuid)
- );
+ // const newValue = 113;
+ // const tx = await contract.setMaxBurn(netuid, newValue);
+ // await tx.wait();
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ // let onchainValue = await api.query.SubtensorModule.MaxBurn.getValue(netuid)
- // networkPowRegistrationAllowed hyperparameter
- {
- const newValue = true;
- const tx = await contract.setNetworkPowRegistrationAllowed(netuid, newValue);
- await tx.wait();
- let onchainValue = await api.query.SubtensorModule.NetworkPowRegistrationAllowed.getValue(netuid)
+ // let valueFromContract = Number(
+ // await contract.getMaxBurn(netuid)
+ // );
+ // assert.equal(valueFromContract, newValue)
+ // assert.equal(valueFromContract, onchainValue);
+ // })
- let valueFromContract = Boolean(
- await contract.getNetworkPowRegistrationAllowed(netuid)
- );
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ // difficulty hyperparameter (disabled: sudo only)
+ // newValue = 114;
- // minBurn hyperparameter. only sudo can set it now
- // newValue = 112;
+ // tx = await contract.setDifficulty(netuid, newValue);
+ // await tx.wait();
- // tx = await contract.setMinBurn(netuid, newValue);
- // await tx.wait();
+ // await usingApi(async (api) => {
+ // onchainValue = Number(
+ // await api.query.subtensorModule.difficulty(netuid)
+ // );
+ // });
- // await usingApi(async (api) => {
- // onchainValue = Number(
- // await api.query.subtensorModule.minBurn(netuid)
- // );
- // });
+ // valueFromContract = Number(await contract.getDifficulty(netuid));
- // valueFromContract = Number(await contract.getMinBurn(netuid));
+ // expect(valueFromContract).to.eq(newValue);
+ // expect(valueFromContract).to.eq(onchainValue);
- // expect(valueFromContract).to.eq(newValue);
- // expect(valueFromContract).to.eq(onchainValue);
+ it("Can set bondsMovingAverage parameter", async () => {
- // maxBurn hyperparameter
- {
- const newValue = 113;
- const tx = await contract.setMaxBurn(netuid, newValue);
- await tx.wait();
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
- let onchainValue = await api.query.SubtensorModule.MaxBurn.getValue(netuid)
+ const newValue = 115;
+ const tx = await contract.setBondsMovingAverage(netuid, newValue);
+ await tx.wait();
+ let onchainValue = await api.query.SubtensorModule.BondsMovingAverage.getValue(netuid)
- let valueFromContract = Number(
- await contract.getMaxBurn(netuid)
- );
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ let valueFromContract = Number(
+ await contract.getBondsMovingAverage(netuid)
+ );
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
- // difficulty hyperparameter (disabled: sudo only)
- // newValue = 114;
+ it("Can set commitRevealWeightsEnabled parameter", async () => {
- // tx = await contract.setDifficulty(netuid, newValue);
- // await tx.wait();
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
- // await usingApi(async (api) => {
- // onchainValue = Number(
- // await api.query.subtensorModule.difficulty(netuid)
- // );
- // });
+ const newValue = true;
+ const tx = await contract.setCommitRevealWeightsEnabled(netuid, newValue);
+ await tx.wait();
- // valueFromContract = Number(await contract.getDifficulty(netuid));
+ let onchainValue = await api.query.SubtensorModule.CommitRevealWeightsEnabled.getValue(netuid)
- // expect(valueFromContract).to.eq(newValue);
- // expect(valueFromContract).to.eq(onchainValue);
- // bondsMovingAverage hyperparameter
- {
- const newValue = 115;
- const tx = await contract.setBondsMovingAverage(netuid, newValue);
- await tx.wait();
+ let valueFromContract = Boolean(
+ await contract.getCommitRevealWeightsEnabled(netuid)
+ );
- let onchainValue = await api.query.SubtensorModule.BondsMovingAverage.getValue(netuid)
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
+ it("Can set liquidAlphaEnabled parameter", async () => {
- let valueFromContract = Number(
- await contract.getBondsMovingAverage(netuid)
- );
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ const newValue = true;
+ const tx = await contract.setLiquidAlphaEnabled(netuid, newValue);
+ await tx.wait();
+ let onchainValue = await api.query.SubtensorModule.LiquidAlphaOn.getValue(netuid)
- // commitRevealWeightsEnabled hyperparameter
- {
- const newValue = true;
- const tx = await contract.setCommitRevealWeightsEnabled(netuid, newValue);
- await tx.wait();
- let onchainValue = await api.query.SubtensorModule.CommitRevealWeightsEnabled.getValue(netuid)
+ let valueFromContract = Boolean(
+ await contract.getLiquidAlphaEnabled(netuid)
+ );
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
- let valueFromContract = Boolean(
- await contract.getCommitRevealWeightsEnabled(netuid)
- );
+ it("Can set yuma3Enabled hyperparameter", async () =>
+ {
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ const newValue = true;
+ const tx = await contract.setYuma3Enabled(netuid, newValue);
+ await tx.wait();
- // liquidAlphaEnabled hyperparameter
- {
- const newValue = true;
- const tx = await contract.setLiquidAlphaEnabled(netuid, newValue);
- await tx.wait();
+ let onchainValue = await api.query.SubtensorModule.Yuma3On.getValue(netuid)
- let onchainValue = await api.query.SubtensorModule.LiquidAlphaOn.getValue(netuid)
+ let valueFromContract = Boolean(
+ await contract.getYuma3Enabled(netuid)
+ );
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
+ })
- let valueFromContract = Boolean(
- await contract.getLiquidAlphaEnabled(netuid)
- );
+ it("Can set alphaValues parameter", async () => {
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ const newValue = [118, 52429];
+ const tx = await contract.setAlphaValues(netuid, newValue[0], newValue[1]);
+ await tx.wait();
- // alphaValues hyperparameter
- {
- const newValue = [118, 52429];
- const tx = await contract.setAlphaValues(netuid, newValue[0], newValue[1]);
- await tx.wait();
+ let onchainValue = await api.query.SubtensorModule.AlphaValues.getValue(netuid)
- let onchainValue = await api.query.SubtensorModule.AlphaValues.getValue(netuid)
+ let value = await contract.getAlphaValues(netuid)
+ let valueFromContract = [Number(value[0]), Number(value[1])]
- let value = await contract.getAlphaValues(netuid)
- let valueFromContract = [Number(value[0]), Number(value[1])]
+ assert.equal(valueFromContract[0], newValue[0])
+ assert.equal(valueFromContract[1], newValue[1])
+ assert.equal(valueFromContract[0], onchainValue[0]);
+ assert.equal(valueFromContract[1], onchainValue[1]);
+ })
- assert.equal(valueFromContract[0], newValue[0])
- assert.equal(valueFromContract[1], newValue[1])
- assert.equal(valueFromContract[0], onchainValue[0]);
- assert.equal(valueFromContract[1], onchainValue[1]);
- }
+ it("Can set commitRevealWeightsInterval parameter", async () => {
+ const totalNetwork = await api.query.SubtensorModule.TotalNetworks.getValue()
+ const contract = new ethers.Contract(ISUBNET_ADDRESS, ISubnetABI, wallet);
+ const netuid = totalNetwork - 1;
- // commitRevealWeightsInterval hyperparameter
- {
- const newValue = 119;
- const tx = await contract.setCommitRevealWeightsInterval(netuid, newValue);
- await tx.wait();
+ const newValue = 119;
+ const tx = await contract.setCommitRevealWeightsInterval(netuid, newValue);
+ await tx.wait();
- let onchainValue = await api.query.SubtensorModule.RevealPeriodEpochs.getValue(netuid)
+ let onchainValue = await api.query.SubtensorModule.RevealPeriodEpochs.getValue(netuid)
- let valueFromContract = Number(
- await contract.getCommitRevealWeightsInterval(netuid)
- );
+ let valueFromContract = Number(
+ await contract.getCommitRevealWeightsInterval(netuid)
+ );
- assert.equal(valueFromContract, newValue)
- assert.equal(valueFromContract, onchainValue);
- }
+ assert.equal(valueFromContract, newValue)
+ assert.equal(valueFromContract, onchainValue);
})
-});
\ No newline at end of file
+})
diff --git a/evm-tests/test/uid.precompile.lookup.test.ts b/evm-tests/test/uid.precompile.lookup.test.ts
new file mode 100644
index 0000000000..6e702d612e
--- /dev/null
+++ b/evm-tests/test/uid.precompile.lookup.test.ts
@@ -0,0 +1,90 @@
+import * as assert from "assert";
+
+import { getAliceSigner, getDevnetApi, waitForTransactionCompletion, getRandomSubstrateKeypair, getSignerFromKeypair } from "../src/substrate"
+import { convertToFixedSizeBinary, generateRandomEthersWallet, getPublicClient } from "../src/utils";
+import { ETH_LOCAL_URL } from "../src/config";
+import { devnet } from "@polkadot-api/descriptors"
+import { hexToU8a } from "@polkadot/util";
+import { u64 } from "scale-ts";
+import { PublicClient } from "viem";
+import { PolkadotSigner, TypedApi } from "polkadot-api";
+import { toViemAddress, convertPublicKeyToSs58 } from "../src/address-utils"
+import { IUIDLookupABI, IUID_LOOKUP_ADDRESS } from "../src/contracts/uidLookup"
+import { keccak256 } from 'ethers';
+import { addNewSubnetwork, forceSetBalanceToSs58Address, startCall } from "../src/subtensor";
+
+describe("Test the UID Lookup precompile", () => {
+ const hotkey = getRandomSubstrateKeypair();
+ const coldkey = getRandomSubstrateKeypair();
+ const evmWallet = generateRandomEthersWallet();
+ let publicClient: PublicClient;
+
+ let api: TypedApi
+
+ let alice: PolkadotSigner;
+
+ let uid: number;
+ let blockNumber: number;
+ let netuid: number;
+ let blockNumberAssociated: bigint;
+
+ before(async () => {
+ publicClient = await getPublicClient(ETH_LOCAL_URL)
+ api = await getDevnetApi()
+ alice = await getAliceSigner();
+
+ await forceSetBalanceToSs58Address(api, convertPublicKeyToSs58(alice.publicKey))
+ await forceSetBalanceToSs58Address(api, convertPublicKeyToSs58(hotkey.publicKey))
+ await forceSetBalanceToSs58Address(api, convertPublicKeyToSs58(coldkey.publicKey))
+
+ netuid = await addNewSubnetwork(api, hotkey, coldkey)
+ await startCall(api, netuid, coldkey)
+
+ const maybeUid = await api.query.SubtensorModule.Uids.getValue(netuid, convertPublicKeyToSs58(hotkey.publicKey))
+
+ if (maybeUid === undefined) {
+ throw new Error("UID should be defined")
+ }
+ uid = maybeUid
+
+ // Associate EVM key
+ blockNumber = await api.query.System.Number.getValue();
+ const blockNumberBytes = u64.enc(BigInt(blockNumber));
+ const blockNumberHash = hexToU8a(keccak256(blockNumberBytes));
+ const concatenatedArray = new Uint8Array([...hotkey.publicKey, ...blockNumberHash]);
+ const signature = await evmWallet.signMessage(concatenatedArray);
+ const associateEvmKeyTx = api.tx.SubtensorModule.associate_evm_key({
+ netuid: netuid,
+ hotkey: convertPublicKeyToSs58(hotkey.publicKey),
+ evm_key: convertToFixedSizeBinary(evmWallet.address, 20),
+ block_number: BigInt(blockNumber),
+ signature: convertToFixedSizeBinary(signature, 65)
+ });
+ const signer = getSignerFromKeypair(coldkey);
+ await waitForTransactionCompletion(api, associateEvmKeyTx, signer)
+ .then(() => { })
+ .catch((error) => { console.log(`transaction error ${error}`) });
+
+ const storedEvmKey = await api.query.SubtensorModule.AssociatedEvmAddress.getValue(netuid, uid)
+ assert.notEqual(storedEvmKey, undefined, "storedEvmKey should be defined")
+ if (storedEvmKey !== undefined) {
+ assert.equal(storedEvmKey[0].asHex(), convertToFixedSizeBinary(evmWallet.address, 20).asHex())
+ blockNumberAssociated = storedEvmKey[1]
+ }
+ })
+
+ it("UID lookup via precompile contract works correctly", async () => {
+ // Get UID for the EVM address
+ const uidArray = await publicClient.readContract({
+ abi: IUIDLookupABI,
+ address: toViemAddress(IUID_LOOKUP_ADDRESS),
+ functionName: "uidLookup",
+ args: [netuid, evmWallet.address, 1024]
+ })
+
+ assert.notEqual(uidArray, undefined, "UID should be defined")
+ assert.ok(Array.isArray(uidArray), `UID should be an array, got ${typeof uidArray}`)
+ assert.ok(uidArray.length > 0, "UID array should not be empty")
+ assert.deepStrictEqual(uidArray[0], { uid: uid, block_associated: blockNumberAssociated })
+ })
+});
diff --git a/hyperparameters.md b/hyperparameters.md
index c8d2ce1106..31d7261608 100644
--- a/hyperparameters.md
+++ b/hyperparameters.md
@@ -7,6 +7,7 @@ TxRateLimit: u64 = 1; // [1 @ 64,888]
### netuid 1 (text_prompting)
```rust
Rho: u16 = 10;
+AlphaSigmoidSteepness: u16 = 10.0
Kappa: u16 = 32_767; // 0.5 = 65535/2
MaxAllowedUids: u16 = 1024;
Issuance: u64 = 0;
@@ -33,6 +34,7 @@ MaxRegistrationsPerBlock: u16 = 1;
PruningScore : u16 = u16::MAX;
BondsMovingAverage: u64 = 900_000;
BondsPenalty: u16 = 0;
+BondsResetOn: bool = false;
WeightsVersionKey: u64 = 1020;
MinDifficulty: u64 = 10_000_000;
MaxDifficulty: u64 = u64::MAX / 4;
@@ -46,6 +48,7 @@ WeightsSetRateLimit: u64 = 100;
### netuid 3 (causallmnext)
```rust
Rho: u16 = 10;
+AlphaSigmoidSteepness: u16 = 10.0
Kappa: u16 = 32_767; // 0.5 = 65535/2
MaxAllowedUids: u16 = 4096;
Issuance: u64 = 0;
@@ -72,6 +75,7 @@ MaxRegistrationsPerBlock: u16 = 1;
PruningScore : u16 = u16::MAX;
BondsMovingAverage: u64 = 900_000;
BondsPenalty: u16 = 0;
+BondsResetOn: bool = false;
WeightsVersionKey: u64 = 400;
MinDifficulty: u64 = 10_000_000;
MaxDifficulty: u64 = u64::MAX / 4;
diff --git a/node/Cargo.toml b/node/Cargo.toml
index 6cea8f6950..52ccf20de3 100644
--- a/node/Cargo.toml
+++ b/node/Cargo.toml
@@ -99,6 +99,7 @@ fc-api = { workspace = true }
fc-rpc = { workspace = true }
fc-rpc-core = { workspace = true }
fp-rpc = { workspace = true }
+fc-aura = { workspace = true }
fc-mapping-sync = { workspace = true }
fp-consensus = { workspace = true }
thiserror = { workspace = true }
diff --git a/node/src/command.rs b/node/src/command.rs
index 5b88e03f9a..aea800596e 100644
--- a/node/src/command.rs
+++ b/node/src/command.rs
@@ -181,9 +181,10 @@ pub fn run() -> sc_cli::Result<()> {
// This switch needs to be in the client, since the client decides
// which sub-commands it wants to support.
match cmd {
- BenchmarkCmd::Pallet(cmd) => {
- cmd.run_with_spec::, ()>(Some(config.chain_spec))
- }
+ BenchmarkCmd::Pallet(cmd) => cmd
+ .run_with_spec::, crate::client::HostFunctions>(Some(
+ config.chain_spec,
+ )),
BenchmarkCmd::Block(cmd) => cmd.run(client),
BenchmarkCmd::Storage(cmd) => {
let db = backend.expose_db();
diff --git a/node/src/ethereum.rs b/node/src/ethereum.rs
index 158bd84807..c708efd714 100644
--- a/node/src/ethereum.rs
+++ b/node/src/ethereum.rs
@@ -1,8 +1,9 @@
+use fc_aura::AuraConsensusDataProvider;
pub use fc_consensus::FrontierBlockImport;
use fc_rpc::{
Debug, DebugApiServer, Eth, EthApiServer, EthConfig, EthDevSigner, EthFilter,
EthFilterApiServer, EthPubSub, EthPubSubApiServer, EthSigner, EthTask, Net, NetApiServer, Web3,
- Web3ApiServer, pending::AuraConsensusDataProvider,
+ Web3ApiServer,
};
pub use fc_rpc_core::types::{FeeHistoryCache, FeeHistoryCacheLimit, FilterPool};
/// Frontier DB backend type.
diff --git a/pallets/admin-utils/src/benchmarking.rs b/pallets/admin-utils/src/benchmarking.rs
index c5794e0279..022ea815f9 100644
--- a/pallets/admin-utils/src/benchmarking.rs
+++ b/pallets/admin-utils/src/benchmarking.rs
@@ -145,7 +145,7 @@ mod benchmarks {
pallet_subtensor::Pallet::::init_new_network(1u16 /*netuid*/, 1u16 /*tempo*/);
#[extrinsic_call]
- _(RawOrigin::Root, 1u16/*netuid*/, 300u16/*activity_cutoff*/)/*sudo_set_activity_cutoff*/;
+ _(RawOrigin::Root, 1u16/*netuid*/, 361u16/*activity_cutoff*/)/*sudo_set_activity_cutoff*/;
}
#[benchmark]
diff --git a/pallets/admin-utils/src/lib.rs b/pallets/admin-utils/src/lib.rs
index 19bbbee73b..2b41539816 100644
--- a/pallets/admin-utils/src/lib.rs
+++ b/pallets/admin-utils/src/lib.rs
@@ -2,11 +2,8 @@
// extern crate alloc;
-pub use pallet::*;
-pub mod weights;
-pub use weights::WeightInfo;
-
use frame_system::pallet_prelude::BlockNumberFor;
+pub use pallet::*;
// - we could replace it with Vec<(AuthorityId, u64)>, but we would need
// `sp_consensus_grandpa` for `AuthorityId` anyway
// - we could use a type parameter for `AuthorityId`, but there is
@@ -66,9 +63,6 @@ pub mod pallet {
/// The maximum number of authorities that the pallet can hold.
type MaxAuthorities: Get;
- /// Weight information for extrinsics in this pallet.
- type WeightInfo: WeightInfo;
-
/// Unit of assets
type Balance: Balance;
}
@@ -83,6 +77,13 @@ pub mod pallet {
/// Indicates if the precompile operation is enabled or not.
enabled: bool,
},
+ /// Event emitted when the Yuma3 enable is toggled.
+ Yuma3EnableToggled {
+ /// The network identifier.
+ netuid: u16,
+ /// Indicates if the Yuma3 enable was enabled or disabled.
+ enabled: bool,
+ },
}
// Errors inform users that something went wrong.
@@ -94,6 +95,8 @@ pub mod pallet {
MaxValidatorsLargerThanMaxUIds,
/// The maximum number of subnet validators must be more than the current number of UIDs already in the subnet.
MaxAllowedUIdsLessThanCurrentUIds,
+ /// The maximum value for bonds moving average is reached
+ BondsMovingAverageMaxReached,
}
/// Enum for specifying the type of precompile operation.
#[derive(Encode, Decode, TypeInfo, Clone, PartialEq, Eq, Debug, Copy)]
@@ -108,6 +111,8 @@ pub mod pallet {
Metagraph,
/// Enum for neuron precompile
Neuron,
+ /// Enum for UID lookup precompile
+ UidLookup,
}
#[pallet::type_value]
@@ -134,7 +139,9 @@ pub mod pallet {
/// It is only callable by the root account.
/// The extrinsic will call the Aura pallet to change the authorities.
#[pallet::call_index(0)]
- #[pallet::weight(::WeightInfo::swap_authorities(new_authorities.len() as u32))]
+ #[pallet::weight(Weight::from_parts(6_265_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(2_u64)))]
pub fn swap_authorities(
origin: OriginFor,
new_authorities: BoundedVec<::AuthorityId, T::MaxAuthorities>,
@@ -153,7 +160,9 @@ pub mod pallet {
/// It is only callable by the root account.
/// The extrinsic will call the Subtensor pallet to set the default take.
#[pallet::call_index(1)]
- #[pallet::weight(::WeightInfo::sudo_set_default_take())]
+ #[pallet::weight(Weight::from_parts(6_942_000, 0)
+ .saturating_add(T::DbWeight::get().reads(0_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_default_take(origin: OriginFor, default_take: u16) -> DispatchResult {
ensure_root(origin)?;
pallet_subtensor::Pallet::::set_max_delegate_take(default_take);
@@ -177,7 +186,9 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the serving rate limit.
#[pallet::call_index(3)]
- #[pallet::weight(::WeightInfo::sudo_set_serving_rate_limit())]
+ #[pallet::weight(Weight::from_parts(7_815_000, 0)
+ .saturating_add(T::DbWeight::get().reads(0_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_serving_rate_limit(
origin: OriginFor,
netuid: u16,
@@ -197,7 +208,9 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the minimum difficulty.
#[pallet::call_index(4)]
- #[pallet::weight(::WeightInfo::sudo_set_min_difficulty())]
+ #[pallet::weight(Weight::from_parts(19_780_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_min_difficulty(
origin: OriginFor,
netuid: u16,
@@ -222,7 +235,9 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the maximum difficulty.
#[pallet::call_index(5)]
- #[pallet::weight(::WeightInfo::sudo_set_max_difficulty())]
+ #[pallet::weight(Weight::from_parts(20_050_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_max_difficulty(
origin: OriginFor,
netuid: u16,
@@ -247,7 +262,9 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the weights version key.
#[pallet::call_index(6)]
- #[pallet::weight(::WeightInfo::sudo_set_weights_version_key())]
+ #[pallet::weight(Weight::from_parts(19_990_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_weights_version_key(
origin: OriginFor,
netuid: u16,
@@ -295,7 +312,9 @@ pub mod pallet {
/// It is only callable by the root account.
/// The extrinsic will call the Subtensor pallet to set the weights set rate limit.
#[pallet::call_index(7)]
- #[pallet::weight(::WeightInfo::sudo_set_weights_set_rate_limit())]
+ #[pallet::weight(Weight::from_parts(20_050_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_weights_set_rate_limit(
origin: OriginFor,
netuid: u16,
@@ -323,7 +342,9 @@ pub mod pallet {
/// It is only callable by the root account, not changeable by the subnet owner.
/// The extrinsic will call the Subtensor pallet to set the adjustment interval.
#[pallet::call_index(8)]
- #[pallet::weight(::WeightInfo::sudo_set_adjustment_interval())]
+ #[pallet::weight(Weight::from_parts(20_010_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_adjustment_interval(
origin: OriginFor,
netuid: u16,
@@ -378,7 +399,9 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the adjustment beta.
#[pallet::call_index(12)]
- #[pallet::weight(::WeightInfo::sudo_set_max_weight_limit())]
+ #[pallet::weight(Weight::from_parts(19_240_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_max_weight_limit(
origin: OriginFor,
netuid: u16,
@@ -403,7 +426,9 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the immunity period.
#[pallet::call_index(13)]
- #[pallet::weight(::WeightInfo::sudo_set_immunity_period())]
+ #[pallet::weight(Weight::from_parts(19_380_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_immunity_period(
origin: OriginFor,
netuid: u16,
@@ -428,7 +453,9 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the minimum allowed weights.
#[pallet::call_index(14)]
- #[pallet::weight(::WeightInfo::sudo_set_min_allowed_weights())]
+ #[pallet::weight(Weight::from_parts(19_770_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_min_allowed_weights(
origin: OriginFor,
netuid: u16,
@@ -453,7 +480,9 @@ pub mod pallet {
/// It is only callable by the root account.
/// The extrinsic will call the Subtensor pallet to set the maximum allowed UIDs for a subnet.
#[pallet::call_index(15)]
- #[pallet::weight(::WeightInfo::sudo_set_max_allowed_uids())]
+ #[pallet::weight(Weight::from_parts(23_820_000, 0)
+ .saturating_add(T::DbWeight::get().reads(2_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_max_allowed_uids(
origin: OriginFor,
netuid: u16,
@@ -481,7 +510,9 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the kappa.
#[pallet::call_index(16)]
- #[pallet::weight(::WeightInfo::sudo_set_kappa())]
+ #[pallet::weight(Weight::from_parts(19_590_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_kappa(origin: OriginFor, netuid: u16, kappa: u16) -> DispatchResult {
pallet_subtensor::Pallet::::ensure_subnet_owner_or_root(origin, netuid)?;
@@ -498,7 +529,9 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the rho.
#[pallet::call_index(17)]
- #[pallet::weight(::WeightInfo::sudo_set_rho())]
+ #[pallet::weight(Weight::from_parts(16_420_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_rho(origin: OriginFor, netuid: u16, rho: u16) -> DispatchResult {
pallet_subtensor::Pallet::::ensure_subnet_owner_or_root(origin, netuid)?;
@@ -515,7 +548,9 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the activity cutoff.
#[pallet::call_index(18)]
- #[pallet::weight(::WeightInfo::sudo_set_activity_cutoff())]
+ #[pallet::weight(Weight::from_parts(22_600_000, 0)
+ .saturating_add(T::DbWeight::get().reads(2_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_activity_cutoff(
origin: OriginFor,
netuid: u16,
@@ -547,8 +582,8 @@ pub mod pallet {
/// The extrinsic will call the Subtensor pallet to set the network registration allowed.
#[pallet::call_index(19)]
#[pallet::weight((
- Weight::from_parts(4_000_000, 0)
- .saturating_add(Weight::from_parts(0, 0))
+ Weight::from_parts(8_696_000, 0)
+ .saturating_add(T::DbWeight::get().reads(0))
.saturating_add(T::DbWeight::get().writes(1)),
DispatchClass::Operational,
Pays::No
@@ -603,7 +638,9 @@ pub mod pallet {
/// It is only callable by the root account.
/// The extrinsic will call the Subtensor pallet to set the target registrations per interval.
#[pallet::call_index(21)]
- #[pallet::weight(::WeightInfo::sudo_set_target_registrations_per_interval())]
+ #[pallet::weight(Weight::from_parts(19_830_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_target_registrations_per_interval(
origin: OriginFor,
netuid: u16,
@@ -631,7 +668,9 @@ pub mod pallet {
/// It is only callable by the root account.
/// The extrinsic will call the Subtensor pallet to set the minimum burn.
#[pallet::call_index(22)]
- #[pallet::weight(::WeightInfo::sudo_set_min_burn())]
+ #[pallet::weight(Weight::from_parts(19_840_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_min_burn(
origin: OriginFor,
netuid: u16,
@@ -656,13 +695,15 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the maximum burn.
#[pallet::call_index(23)]
- #[pallet::weight(::WeightInfo::sudo_set_max_burn())]
+ #[pallet::weight(Weight::from_parts(19_740_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_max_burn(
origin: OriginFor,
netuid: u16,
max_burn: u64,
) -> DispatchResult {
- pallet_subtensor::Pallet::::ensure_subnet_owner_or_root(origin, netuid)?;
+ ensure_root(origin)?;
ensure!(
pallet_subtensor::Pallet::::if_subnet_exist(netuid),
@@ -681,7 +722,9 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the difficulty.
#[pallet::call_index(24)]
- #[pallet::weight(::WeightInfo::sudo_set_difficulty())]
+ #[pallet::weight(Weight::from_parts(20_280_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_difficulty(
origin: OriginFor,
netuid: u16,
@@ -705,7 +748,9 @@ pub mod pallet {
/// It is only callable by the root account.
/// The extrinsic will call the Subtensor pallet to set the maximum allowed validators.
#[pallet::call_index(25)]
- #[pallet::weight(::WeightInfo::sudo_set_max_allowed_validators())]
+ #[pallet::weight(Weight::from_parts(25_210_000, 0)
+ .saturating_add(T::DbWeight::get().reads(2_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_max_allowed_validators(
origin: OriginFor,
netuid: u16,
@@ -738,13 +783,22 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the bonds moving average.
#[pallet::call_index(26)]
- #[pallet::weight(::WeightInfo::sudo_set_bonds_moving_average())]
+ #[pallet::weight(Weight::from_parts(20_270_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_bonds_moving_average(
origin: OriginFor,
netuid: u16,
bonds_moving_average: u64,
) -> DispatchResult {
- pallet_subtensor::Pallet::::ensure_subnet_owner_or_root(origin, netuid)?;
+ pallet_subtensor::Pallet::::ensure_subnet_owner_or_root(origin.clone(), netuid)?;
+
+ if pallet_subtensor::Pallet::::ensure_subnet_owner(origin, netuid).is_ok() {
+ ensure!(
+ bonds_moving_average <= 975000,
+ Error::::BondsMovingAverageMaxReached
+ )
+ }
ensure!(
pallet_subtensor::Pallet::::if_subnet_exist(netuid),
@@ -763,7 +817,9 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the bonds penalty.
#[pallet::call_index(60)]
- #[pallet::weight(::WeightInfo::sudo_set_bonds_penalty())]
+ #[pallet::weight(Weight::from_parts(20_030_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_bonds_penalty(
origin: OriginFor,
netuid: u16,
@@ -788,7 +844,9 @@ pub mod pallet {
/// It is only callable by the root account.
/// The extrinsic will call the Subtensor pallet to set the maximum registrations per block.
#[pallet::call_index(27)]
- #[pallet::weight(::WeightInfo::sudo_set_max_registrations_per_block())]
+ #[pallet::weight(Weight::from_parts(19_680_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_max_registrations_per_block(
origin: OriginFor,
netuid: u16,
@@ -859,7 +917,9 @@ pub mod pallet {
/// It is only callable by the root account.
/// The extrinsic will call the Subtensor pallet to set the tempo.
#[pallet::call_index(30)]
- #[pallet::weight(::WeightInfo::sudo_set_tempo())]
+ #[pallet::weight(Weight::from_parts(19_900_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_tempo(origin: OriginFor, netuid: u16, tempo: u16) -> DispatchResult {
ensure_root(origin)?;
ensure!(
@@ -1077,7 +1137,9 @@ pub mod pallet {
/// It is only callable by the root account or subnet owner.
/// The extrinsic will call the Subtensor pallet to set the value.
#[pallet::call_index(49)]
- #[pallet::weight(::WeightInfo::sudo_set_commit_reveal_weights_enabled())]
+ #[pallet::weight(Weight::from_parts(19_480_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_commit_reveal_weights_enabled(
origin: OriginFor,
netuid: u16,
@@ -1276,7 +1338,9 @@ pub mod pallet {
/// # Weight
/// Weight is handled by the `#[pallet::weight]` attribute.
#[pallet::call_index(57)]
- #[pallet::weight(::WeightInfo::sudo_set_commit_reveal_weights_interval())]
+ #[pallet::weight(Weight::from_parts(20_490_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_commit_reveal_weights_interval(
origin: OriginFor,
netuid: u16,
@@ -1310,7 +1374,9 @@ pub mod pallet {
/// # Weight
/// Weight is handled by the `#[pallet::weight]` attribute.
#[pallet::call_index(58)]
- #[pallet::weight(::WeightInfo::sudo_set_evm_chain_id())]
+ #[pallet::weight(Weight::from_parts(27_199_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn sudo_set_evm_chain_id(origin: OriginFor, chain_id: u64) -> DispatchResult {
// Ensure the call is made by the root account
ensure_root(origin)?;
@@ -1335,7 +1401,9 @@ pub mod pallet {
/// No change should be signaled while any change is pending. Returns an error if a change
/// is already pending.
#[pallet::call_index(59)]
- #[pallet::weight(::WeightInfo::swap_authorities(next_authorities.len() as u32))]
+ #[pallet::weight(Weight::from_parts(11_550_000, 0)
+ .saturating_add(T::DbWeight::get().reads(1_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)))]
pub fn schedule_grandpa_change(
origin: OriginFor,
// grandpa ID is always the same type, so we don't need to parametrize it via `Config`
@@ -1476,6 +1544,133 @@ pub mod pallet {
);
Ok(())
}
+
+ ///
+ ///
+ /// # Arguments
+ /// * `origin` - The origin of the call, which must be the root account.
+ /// * `netuid` - The unique identifier for the subnet.
+ /// * `steepness` - The new steepness for the alpha sigmoid function.
+ ///
+ /// # Errors
+ /// * `BadOrigin` - If the caller is not the root account.
+ /// # Weight
+ /// Weight is handled by the `#[pallet::weight]` attribute.
+ #[pallet::call_index(68)]
+ #[pallet::weight((0, DispatchClass::Operational, Pays::No))]
+ pub fn sudo_set_alpha_sigmoid_steepness(
+ origin: OriginFor,
+ netuid: u16,
+ steepness: u16,
+ ) -> DispatchResult {
+ ensure_root(origin)?;
+ pallet_subtensor::Pallet::::set_alpha_sigmoid_steepness(netuid, steepness);
+
+ log::debug!(
+ "AlphaSigmoidSteepnessSet( netuid: {:?}, steepness: {:?} )",
+ netuid,
+ steepness
+ );
+ Ok(())
+ }
+
+ /// Enables or disables Yuma3 for a given subnet.
+ ///
+ /// # Parameters
+ /// - `origin`: The origin of the call, which must be the root account or subnet owner.
+ /// - `netuid`: The unique identifier for the subnet.
+ /// - `enabled`: A boolean flag to enable or disable Yuma3.
+ ///
+ /// # Weight
+ /// This function has a fixed weight of 0 and is classified as an operational transaction that does not incur any fees.
+ #[pallet::call_index(69)]
+ #[pallet::weight((0, DispatchClass::Operational, Pays::No))]
+ pub fn sudo_set_yuma3_enabled(
+ origin: OriginFor,
+ netuid: u16,
+ enabled: bool,
+ ) -> DispatchResult {
+ pallet_subtensor::Pallet::::ensure_subnet_owner_or_root(origin, netuid)?;
+ pallet_subtensor::Pallet::::set_yuma3_enabled(netuid, enabled);
+
+ Self::deposit_event(Event::Yuma3EnableToggled { netuid, enabled });
+ log::debug!(
+ "Yuma3EnableToggled( netuid: {:?}, Enabled: {:?} ) ",
+ netuid,
+ enabled
+ );
+ Ok(())
+ }
+
+ /// Sets or updates the hotkey account associated with the owner of a specific subnet.
+ ///
+ /// This function allows either the root origin or the current subnet owner to set or update
+ /// the hotkey for a given subnet. The subnet must already exist. To prevent abuse, the call is
+ /// rate-limited to once per configured interval (default: one week) per subnet.
+ ///
+ /// # Parameters
+ /// - `origin`: The dispatch origin of the call. Must be either root or the current owner of the subnet.
+ /// - `netuid`: The unique identifier of the subnet whose owner hotkey is being set.
+ /// - `hotkey`: The new hotkey account to associate with the subnet owner.
+ ///
+ /// # Returns
+ /// - `DispatchResult`: Returns `Ok(())` if the hotkey was successfully set, or an appropriate error otherwise.
+ ///
+ /// # Errors
+ /// - `Error::SubnetNotExists`: If the specified subnet does not exist.
+ /// - `Error::TxRateLimitExceeded`: If the function is called more frequently than the allowed rate limit.
+ ///
+ /// # Access Control
+ /// Only callable by:
+ /// - Root origin, or
+ /// - The coldkey account that owns the subnet.
+ ///
+ /// # Storage
+ /// - Updates [`SubnetOwnerHotkey`] for the given `netuid`.
+ /// - Reads and updates [`LastRateLimitedBlock`] for rate-limiting.
+ /// - Reads [`DefaultSetSNOwnerHotkeyRateLimit`] to determine the interval between allowed updates.
+ ///
+ /// # Rate Limiting
+ /// This function is rate-limited to one call per subnet per interval (e.g., one week).
+ #[pallet::call_index(67)]
+ #[pallet::weight((0, DispatchClass::Operational, Pays::No))]
+ pub fn sudo_set_sn_owner_hotkey(
+ origin: OriginFor,
+ netuid: u16,
+ hotkey: T::AccountId,
+ ) -> DispatchResult {
+ pallet_subtensor::Pallet::::do_set_sn_owner_hotkey(origin, netuid, &hotkey)
+ }
+
+ /// Enables or disables subtoken trading for a given subnet.
+ ///
+ /// # Arguments
+ /// * `origin` - The origin of the call, which must be the root account.
+ /// * `netuid` - The unique identifier of the subnet.
+ /// * `subtoken_enabled` - A boolean indicating whether subtoken trading should be enabled or disabled.
+ ///
+ /// # Errors
+ /// * `BadOrigin` - If the caller is not the root account.
+ ///
+ /// # Weight
+ /// Weight is handled by the `#[pallet::weight]` attribute.
+ #[pallet::call_index(66)]
+ #[pallet::weight((0, DispatchClass::Operational, Pays::No))]
+ pub fn sudo_set_subtoken_enabled(
+ origin: OriginFor,
+ netuid: u16,
+ subtoken_enabled: bool,
+ ) -> DispatchResult {
+ ensure_root(origin)?;
+ pallet_subtensor::SubtokenEnabled::::set(netuid, subtoken_enabled);
+
+ log::debug!(
+ "SubtokenEnabled( netuid: {:?}, subtoken_enabled: {:?} )",
+ netuid,
+ subtoken_enabled
+ );
+ Ok(())
+ }
}
}
diff --git a/pallets/admin-utils/src/tests/mock.rs b/pallets/admin-utils/src/tests/mock.rs
index 99c11b7165..f8b3e6a9b6 100644
--- a/pallets/admin-utils/src/tests/mock.rs
+++ b/pallets/admin-utils/src/tests/mock.rs
@@ -80,6 +80,7 @@ parameter_types! {
pub const TransactionByteFee: Balance = 100;
pub const SDebug:u64 = 1;
pub const InitialRho: u16 = 30;
+ pub const InitialAlphaSigmoidSteepness: u16 = 10;
pub const InitialKappa: u16 = 32_767;
pub const InitialTempo: u16 = 0;
pub const SelfOwnership: u64 = 2;
@@ -87,6 +88,7 @@ parameter_types! {
pub const InitialMaxAllowedUids: u16 = 2;
pub const InitialBondsMovingAverage: u64 = 900_000;
pub const InitialBondsPenalty: u16 = u16::MAX;
+ pub const InitialBondsResetOn: bool = false;
pub const InitialStakePruningMin: u16 = 0;
pub const InitialFoundationDistribution: u64 = 0;
pub const InitialDefaultDelegateTake: u16 = 11_796; // 18% honest number.
@@ -129,9 +131,11 @@ parameter_types! {
pub const InitialAlphaHigh: u16 = 58982; // Represents 0.9 as per the production default
pub const InitialAlphaLow: u16 = 45875; // Represents 0.7 as per the production default
pub const InitialLiquidAlphaOn: bool = false; // Default value for LiquidAlphaOn
+ pub const InitialYuma3On: bool = false; // Default value for Yuma3On
// pub const InitialHotkeyEmissionTempo: u64 = 1; // (DEPRECATED)
// pub const InitialNetworkMaxStake: u64 = u64::MAX; // (DEPRECATED)
pub const InitialColdkeySwapScheduleDuration: u64 = 5 * 24 * 60 * 60 / 12; // 5 days
+ pub const InitialColdkeySwapRescheduleDuration: u64 = 24 * 60 * 60 / 12; // 1 day
pub const InitialDissolveNetworkScheduleDuration: u64 = 5 * 24 * 60 * 60 / 12; // 5 days
pub const InitialTaoWeight: u64 = u64::MAX/10; // 10% global weight.
pub const InitialEmaPriceHalvingPeriod: u64 = 201_600_u64; // 4 weeks
@@ -157,6 +161,7 @@ impl pallet_subtensor::Config for Test {
type InitialAdjustmentAlpha = InitialAdjustmentAlpha;
type InitialTargetRegistrationsPerInterval = InitialTargetRegistrationsPerInterval;
type InitialRho = InitialRho;
+ type InitialAlphaSigmoidSteepness = InitialAlphaSigmoidSteepness;
type InitialKappa = InitialKappa;
type InitialMaxAllowedUids = InitialMaxAllowedUids;
type InitialValidatorPruneLen = InitialValidatorPruneLen;
@@ -167,6 +172,7 @@ impl pallet_subtensor::Config for Test {
type InitialPruningScore = InitialPruningScore;
type InitialBondsMovingAverage = InitialBondsMovingAverage;
type InitialBondsPenalty = InitialBondsPenalty;
+ type InitialBondsResetOn = InitialBondsResetOn;
type InitialMaxAllowedValidators = InitialMaxAllowedValidators;
type InitialDefaultDelegateTake = InitialDefaultDelegateTake;
type InitialMinDelegateTake = InitialMinDelegateTake;
@@ -195,8 +201,10 @@ impl pallet_subtensor::Config for Test {
type AlphaHigh = InitialAlphaHigh;
type AlphaLow = InitialAlphaLow;
type LiquidAlphaOn = InitialLiquidAlphaOn;
+ type Yuma3On = InitialYuma3On;
type Preimages = ();
type InitialColdkeySwapScheduleDuration = InitialColdkeySwapScheduleDuration;
+ type InitialColdkeySwapRescheduleDuration = InitialColdkeySwapRescheduleDuration;
type InitialDissolveNetworkScheduleDuration = InitialDissolveNetworkScheduleDuration;
type InitialTaoWeight = InitialTaoWeight;
type InitialEmaPriceHalvingPeriod = InitialEmaPriceHalvingPeriod;
@@ -285,7 +293,6 @@ impl crate::Config for Test {
type Aura = ();
type Grandpa = GrandpaInterfaceImpl;
type Balance = Balance;
- type WeightInfo = ();
}
parameter_types! {
@@ -311,7 +318,6 @@ impl pallet_scheduler::Config for Test {
impl pallet_evm_chain_id::Config for Test {}
impl pallet_drand::Config for Test {
type RuntimeEvent = RuntimeEvent;
- type WeightInfo = pallet_drand::weights::SubstrateWeight;
type AuthorityId = TestAuthId;
type Verifier = pallet_drand::verifier::QuicknetVerifier;
type UnsignedPriority = ConstU64<{ 1 << 20 }>;
diff --git a/pallets/admin-utils/src/tests/mod.rs b/pallets/admin-utils/src/tests/mod.rs
index 2f4c3f2b51..bb813ce117 100644
--- a/pallets/admin-utils/src/tests/mod.rs
+++ b/pallets/admin-utils/src/tests/mod.rs
@@ -1711,3 +1711,72 @@ fn test_sudo_set_ema_halving() {
assert_eq!(value_after_2, to_be_set);
});
}
+
+// cargo test --package pallet-admin-utils --lib -- tests::test_set_sn_owner_hotkey --exact --show-output
+#[test]
+fn test_set_sn_owner_hotkey_owner() {
+ new_test_ext().execute_with(|| {
+ let netuid: u16 = 1;
+ let hotkey: U256 = U256::from(3);
+ let bad_origin_coldkey: U256 = U256::from(4);
+ add_network(netuid, 10);
+
+ let owner = U256::from(10);
+ pallet_subtensor::SubnetOwner::::insert(netuid, owner);
+
+ // Non-owner and non-root cannot set the sn owner hotkey
+ assert_eq!(
+ AdminUtils::sudo_set_sn_owner_hotkey(
+ <::RuntimeOrigin>::signed(bad_origin_coldkey),
+ netuid,
+ hotkey
+ ),
+ Err(DispatchError::BadOrigin)
+ );
+
+ // SN owner can set the hotkey
+ assert_ok!(AdminUtils::sudo_set_sn_owner_hotkey(
+ <::RuntimeOrigin>::signed(owner),
+ netuid,
+ hotkey
+ ));
+
+ // Check the value
+ let actual_hotkey = pallet_subtensor::SubnetOwnerHotkey::::get(netuid);
+ assert_eq!(actual_hotkey, hotkey);
+
+ // Cannot set again (rate limited)
+ assert_err!(
+ AdminUtils::sudo_set_sn_owner_hotkey(
+ <::RuntimeOrigin>::signed(owner),
+ netuid,
+ hotkey
+ ),
+ pallet_subtensor::Error::::TxRateLimitExceeded
+ );
+ });
+}
+
+// cargo test --package pallet-admin-utils --lib -- tests::test_set_sn_owner_hotkey_root --exact --show-output
+#[test]
+fn test_set_sn_owner_hotkey_root() {
+ new_test_ext().execute_with(|| {
+ let netuid: u16 = 1;
+ let hotkey: U256 = U256::from(3);
+ add_network(netuid, 10);
+
+ let owner = U256::from(10);
+ pallet_subtensor::SubnetOwner::::insert(netuid, owner);
+
+ // Root can set the hotkey
+ assert_ok!(AdminUtils::sudo_set_sn_owner_hotkey(
+ <::RuntimeOrigin>::root(),
+ netuid,
+ hotkey
+ ));
+
+ // Check the value
+ let actual_hotkey = pallet_subtensor::SubnetOwnerHotkey::::get(netuid);
+ assert_eq!(actual_hotkey, hotkey);
+ });
+}
diff --git a/pallets/admin-utils/src/weights.rs b/pallets/admin-utils/src/weights.rs
deleted file mode 100644
index 6ef9523546..0000000000
--- a/pallets/admin-utils/src/weights.rs
+++ /dev/null
@@ -1,854 +0,0 @@
-
-//! Autogenerated weights for `pallet_admin_utils`
-//!
-//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2023-12-01, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
-//! WORST CASE MAP SIZE: `1000000`
-//! HOSTNAME: `morpheus`, CPU: `AMD EPYC 7513 32-Core Processor`
-//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("local")`, DB CACHE: `1024`
-
-// Executed Command:
-// ./target/release/node-subtensor
-// benchmark
-// pallet
-// --chain=local
-// --execution=wasm
-// --wasm-execution=compiled
-// --pallet=pallet_admin_utils
-// --extrinsic=*
-// --steps
-// 50
-// --repeat
-// 20
-// --output=pallets/admin-utils/src/weights.rs
-// --template=./.maintain/frame-weight-template.hbs
-
-#![cfg_attr(rustfmt, rustfmt_skip)]
-#![allow(unused_parens)]
-#![allow(unused_imports)]
-#![allow(missing_docs)]
-
-use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
-use core::marker::PhantomData;
-
-/// Weight functions needed for `pallet_admin_utils`.
-pub trait WeightInfo {
- fn swap_authorities(a: u32, ) -> Weight;
- fn sudo_set_min_delegate_take() -> Weight;
- fn sudo_set_default_take() -> Weight;
- fn sudo_set_serving_rate_limit() -> Weight;
- fn sudo_set_max_difficulty() -> Weight;
- fn sudo_set_min_difficulty() -> Weight;
- fn sudo_set_weights_set_rate_limit() -> Weight;
- fn sudo_set_weights_version_key() -> Weight;
- fn sudo_set_bonds_moving_average() -> Weight;
- fn sudo_set_bonds_penalty() -> Weight;
- fn sudo_set_max_allowed_validators() -> Weight;
- fn sudo_set_difficulty() -> Weight;
- fn sudo_set_adjustment_interval() -> Weight;
- fn sudo_set_target_registrations_per_interval() -> Weight;
- fn sudo_set_activity_cutoff() -> Weight;
- fn sudo_set_rho() -> Weight;
- fn sudo_set_kappa() -> Weight;
- fn sudo_set_max_allowed_uids() -> Weight;
- fn sudo_set_min_allowed_weights() -> Weight;
- fn sudo_set_validator_prune_len() -> Weight;
- fn sudo_set_scaling_law_power() -> Weight;
- fn sudo_set_immunity_period() -> Weight;
- fn sudo_set_max_weight_limit() -> Weight;
- fn sudo_set_max_registrations_per_block() -> Weight;
- fn sudo_set_max_burn() -> Weight;
- fn sudo_set_min_burn() -> Weight;
- fn sudo_set_network_registration_allowed() -> Weight;
- fn sudo_set_tempo() -> Weight;
- fn sudo_set_commit_reveal_weights_interval() -> Weight;
- fn sudo_set_commit_reveal_weights_enabled() -> Weight;
- fn sudo_set_evm_chain_id() -> Weight;
- fn schedule_grandpa_change(a: u32) -> Weight;
-}
-
-/// Weights for `pallet_admin_utils` using the Substrate node and recommended hardware.
-pub struct SubstrateWeight(PhantomData);
-impl WeightInfo for SubstrateWeight {
- /// Storage: System Digest (r:1 w:1)
- /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured)
- /// Storage: Aura Authorities (r:0 w:1)
- /// Proof: Aura Authorities (max_values: Some(1), max_size: Some(1025), added: 1520, mode: MaxEncodedLen)
- /// The range of component `a` is `[0, 32]`.
- fn swap_authorities(a: u32, ) -> Weight {
- // Proof Size summary in bytes:
- // Measured: `632`
- // Estimated: `1127`
- // Minimum execution time: 11_490_000 picoseconds.
- Weight::from_parts(20_410_228, 1127)
- // Standard Error: 8_309
- .saturating_add(Weight::from_parts(199_399, 0).saturating_mul(a.into()))
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(2_u64))
- }
- /// Storage: SubtensorModule DefaultTake (r:0 w:1)
- /// Proof Skipped: SubtensorModule DefaultTake (max_values: Some(1), max_size: None, mode: Measured)
- fn sudo_set_default_take() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `655`
- // Estimated: `655`
- // Minimum execution time: 26_770_000 picoseconds.
- Weight::from_parts(27_199_000, 655)
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule DefaultTake (r:0 w:1)
- /// Proof Skipped: SubtensorModule DefaultTake (max_values: Some(1), max_size: None, mode: Measured)
- fn sudo_set_min_delegate_take() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `655`
- // Estimated: `655`
- // Minimum execution time: 26_770_000 picoseconds.
- Weight::from_parts(27_199_000, 655)
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule ServingRateLimit (r:0 w:1)
- /// Proof Skipped: SubtensorModule ServingRateLimit (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_serving_rate_limit() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `655`
- // Estimated: `655`
- // Minimum execution time: 27_700_000 picoseconds.
- Weight::from_parts(28_290_000, 655)
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxDifficulty (r:0 w:1)
- /// Proof Skipped: SubtensorModule MaxDifficulty (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_max_difficulty() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_450_000 picoseconds.
- Weight::from_parts(47_279_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MinDifficulty (r:0 w:1)
- /// Proof Skipped: SubtensorModule MinDifficulty (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_min_difficulty() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_110_000 picoseconds.
- Weight::from_parts(46_909_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule WeightsSetRateLimit (r:0 w:1)
- /// Proof Skipped: SubtensorModule WeightsSetRateLimit (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_weights_set_rate_limit() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_349_000 picoseconds.
- Weight::from_parts(46_970_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule WeightsVersionKey (r:0 w:1)
- /// Proof Skipped: SubtensorModule WeightsVersionKey (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_weights_version_key() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_940_000 picoseconds.
- Weight::from_parts(47_460_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule BondsMovingAverage (r:0 w:1)
- /// Proof Skipped: SubtensorModule BondsMovingAverage (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_bonds_moving_average() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_099_000 picoseconds.
- Weight::from_parts(47_510_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule BondsPenalty (r:0 w:1)
- /// Proof Skipped: SubtensorModule BondsPenalty (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_bonds_penalty() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_099_000 picoseconds.
- Weight::from_parts(47_510_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxAllowedUids (r:1 w:0)
- /// Proof Skipped: SubtensorModule MaxAllowedUids (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxAllowedValidators (r:0 w:1)
- /// Proof Skipped: SubtensorModule MaxAllowedValidators (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_max_allowed_validators() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1154`
- // Estimated: `8412`
- // Minimum execution time: 52_599_000 picoseconds.
- Weight::from_parts(53_640_000, 8412)
- .saturating_add(T::DbWeight::get().reads(2_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule Difficulty (r:0 w:1)
- /// Proof Skipped: SubtensorModule Difficulty (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_difficulty() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_240_000 picoseconds.
- Weight::from_parts(47_130_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule AdjustmentInterval (r:0 w:1)
- /// Proof Skipped: SubtensorModule AdjustmentInterval (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_adjustment_interval() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_430_000 picoseconds.
- Weight::from_parts(46_790_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule TargetRegistrationsPerInterval (r:0 w:1)
- /// Proof Skipped: SubtensorModule TargetRegistrationsPerInterval (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_target_registrations_per_interval() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_899_000 picoseconds.
- Weight::from_parts(47_099_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule ActivityCutoff (r:0 w:1)
- /// Proof Skipped: SubtensorModule ActivityCutoff (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_activity_cutoff() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_029_000 picoseconds.
- Weight::from_parts(46_759_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule Rho (r:0 w:1)
- /// Proof Skipped: SubtensorModule Rho (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_rho() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `903`
- // Estimated: `4281`
- // Minimum execution time: 30_980_000 picoseconds.
- Weight::from_parts(31_820_000, 4281)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule Kappa (r:0 w:1)
- /// Proof Skipped: SubtensorModule Kappa (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_kappa() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_620_000 picoseconds.
- Weight::from_parts(46_440_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule SubnetworkN (r:1 w:0)
- /// Proof Skipped: SubtensorModule SubnetworkN (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxAllowedUids (r:0 w:1)
- /// Proof Skipped: SubtensorModule MaxAllowedUids (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_max_allowed_uids() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1117`
- // Estimated: `8301`
- // Minimum execution time: 50_270_000 picoseconds.
- Weight::from_parts(51_149_000, 8301)
- .saturating_add(T::DbWeight::get().reads(2_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MinAllowedWeights (r:0 w:1)
- /// Proof Skipped: SubtensorModule MinAllowedWeights (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_min_allowed_weights() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_990_000 picoseconds.
- Weight::from_parts(47_390_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule ValidatorPruneLen (r:0 w:1)
- /// Proof Skipped: SubtensorModule ValidatorPruneLen (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_validator_prune_len() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_939_000 picoseconds.
- Weight::from_parts(46_960_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule ScalingLawPower (r:0 w:1)
- /// Proof Skipped: SubtensorModule ScalingLawPower (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_scaling_law_power() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_480_000 picoseconds.
- Weight::from_parts(46_590_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule ImmunityPeriod (r:0 w:1)
- /// Proof Skipped: SubtensorModule ImmunityPeriod (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_immunity_period() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_289_000 picoseconds.
- Weight::from_parts(46_679_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxWeightsLimit (r:0 w:1)
- /// Proof Skipped: SubtensorModule MaxWeightsLimit (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_max_weight_limit() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_850_000 picoseconds.
- Weight::from_parts(46_589_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxRegistrationsPerBlock (r:0 w:1)
- /// Proof Skipped: SubtensorModule MaxRegistrationsPerBlock (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_max_registrations_per_block() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_330_000 picoseconds.
- Weight::from_parts(46_490_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxBurn (r:0 w:1)
- /// Proof Skipped: SubtensorModule MaxBurn (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_max_burn() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_390_000 picoseconds.
- Weight::from_parts(46_339_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MinBurn (r:0 w:1)
- /// Proof Skipped: SubtensorModule MinBurn (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_min_burn() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_189_000 picoseconds.
- Weight::from_parts(46_109_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworkPowRegistrationAllowed (r:0 w:1)
- /// Proof Skipped: SubtensorModule NetworkPowRegistrationAllowed (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_network_registration_allowed() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `655`
- // Estimated: `655`
- // Minimum execution time: 33_600_000 picoseconds.
- Weight::from_parts(34_599_000, 655)
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule Tempo (r:0 w:1)
- /// Proof Skipped: SubtensorModule Tempo (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_tempo() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 44_739_000 picoseconds.
- Weight::from_parts(45_489_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- fn sudo_set_commit_reveal_weights_interval() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `456`
- // Estimated: `3921`
- // Minimum execution time: 19_070_000 picoseconds.
- Weight::from_parts(19_380_000, 456)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- fn sudo_set_commit_reveal_weights_enabled() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_450_000 picoseconds.
- Weight::from_parts(47_279_000, 4697)
- .saturating_add(T::DbWeight::get().reads(1_u64))
- .saturating_add(T::DbWeight::get().writes(1_u64))
- }
- fn sudo_set_evm_chain_id() -> Weight {
- Weight::from_parts(20_200_000, 0)
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
-
- fn schedule_grandpa_change(_a: u32) -> Weight {
- // TODO should be replaced by benchmarked weights
- Weight::default()
- }
-}
-
-// For backwards compatibility and tests.
-impl WeightInfo for () {
- /// Storage: System Digest (r:1 w:1)
- /// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured)
- /// Storage: Aura Authorities (r:0 w:1)
- /// Proof: Aura Authorities (max_values: Some(1), max_size: Some(1025), added: 1520, mode: MaxEncodedLen)
- /// The range of component `a` is `[0, 32]`.
- fn swap_authorities(a: u32, ) -> Weight {
- // Proof Size summary in bytes:
- // Measured: `632`
- // Estimated: `1127`
- // Minimum execution time: 11_490_000 picoseconds.
- Weight::from_parts(20_410_228, 1127)
- // Standard Error: 8_309
- .saturating_add(Weight::from_parts(199_399, 0).saturating_mul(a.into()))
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(2_u64))
- }
- /// Storage: SubtensorModule DefaultTake (r:0 w:1)
- /// Proof Skipped: SubtensorModule DefaultTake (max_values: Some(1), max_size: None, mode: Measured)
- fn sudo_set_default_take() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `655`
- // Estimated: `655`
- // Minimum execution time: 26_770_000 picoseconds.
- Weight::from_parts(27_199_000, 655)
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule DefaultTake (r:0 w:1)
- /// Proof Skipped: SubtensorModule DefaultTake (max_values: Some(1), max_size: None, mode: Measured)
- fn sudo_set_min_delegate_take() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `655`
- // Estimated: `655`
- // Minimum execution time: 26_770_000 picoseconds.
- Weight::from_parts(27_199_000, 655)
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule ServingRateLimit (r:0 w:1)
- /// Proof Skipped: SubtensorModule ServingRateLimit (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_serving_rate_limit() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `655`
- // Estimated: `655`
- // Minimum execution time: 27_700_000 picoseconds.
- Weight::from_parts(28_290_000, 655)
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxDifficulty (r:0 w:1)
- /// Proof Skipped: SubtensorModule MaxDifficulty (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_max_difficulty() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_450_000 picoseconds.
- Weight::from_parts(47_279_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MinDifficulty (r:0 w:1)
- /// Proof Skipped: SubtensorModule MinDifficulty (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_min_difficulty() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_110_000 picoseconds.
- Weight::from_parts(46_909_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule WeightsSetRateLimit (r:0 w:1)
- /// Proof Skipped: SubtensorModule WeightsSetRateLimit (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_weights_set_rate_limit() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_349_000 picoseconds.
- Weight::from_parts(46_970_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule WeightsVersionKey (r:0 w:1)
- /// Proof Skipped: SubtensorModule WeightsVersionKey (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_weights_version_key() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_940_000 picoseconds.
- Weight::from_parts(47_460_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule BondsMovingAverage (r:0 w:1)
- /// Proof Skipped: SubtensorModule BondsMovingAverage (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_bonds_moving_average() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_099_000 picoseconds.
- Weight::from_parts(47_510_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule BondsPenalty (r:0 w:1)
- /// Proof Skipped: SubtensorModule BondsPenalty (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_bonds_penalty() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_099_000 picoseconds.
- Weight::from_parts(47_510_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxAllowedUids (r:1 w:0)
- /// Proof Skipped: SubtensorModule MaxAllowedUids (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxAllowedValidators (r:0 w:1)
- /// Proof Skipped: SubtensorModule MaxAllowedValidators (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_max_allowed_validators() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1154`
- // Estimated: `8412`
- // Minimum execution time: 52_599_000 picoseconds.
- Weight::from_parts(53_640_000, 8412)
- .saturating_add(RocksDbWeight::get().reads(2_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule Difficulty (r:0 w:1)
- /// Proof Skipped: SubtensorModule Difficulty (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_difficulty() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_240_000 picoseconds.
- Weight::from_parts(47_130_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule AdjustmentInterval (r:0 w:1)
- /// Proof Skipped: SubtensorModule AdjustmentInterval (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_adjustment_interval() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_430_000 picoseconds.
- Weight::from_parts(46_790_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule TargetRegistrationsPerInterval (r:0 w:1)
- /// Proof Skipped: SubtensorModule TargetRegistrationsPerInterval (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_target_registrations_per_interval() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_899_000 picoseconds.
- Weight::from_parts(47_099_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule ActivityCutoff (r:0 w:1)
- /// Proof Skipped: SubtensorModule ActivityCutoff (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_activity_cutoff() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 46_029_000 picoseconds.
- Weight::from_parts(46_759_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule Rho (r:0 w:1)
- /// Proof Skipped: SubtensorModule Rho (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_rho() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `903`
- // Estimated: `4281`
- // Minimum execution time: 30_980_000 picoseconds.
- Weight::from_parts(31_820_000, 4281)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule Kappa (r:0 w:1)
- /// Proof Skipped: SubtensorModule Kappa (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_kappa() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_620_000 picoseconds.
- Weight::from_parts(46_440_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule SubnetworkN (r:1 w:0)
- /// Proof Skipped: SubtensorModule SubnetworkN (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxAllowedUids (r:0 w:1)
- /// Proof Skipped: SubtensorModule MaxAllowedUids (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_max_allowed_uids() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1117`
- // Estimated: `8301`
- // Minimum execution time: 50_270_000 picoseconds.
- Weight::from_parts(51_149_000, 8301)
- .saturating_add(RocksDbWeight::get().reads(2_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MinAllowedWeights (r:0 w:1)
- /// Proof Skipped: SubtensorModule MinAllowedWeights (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_min_allowed_weights() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_990_000 picoseconds.
- Weight::from_parts(47_390_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule ValidatorPruneLen (r:0 w:1)
- /// Proof Skipped: SubtensorModule ValidatorPruneLen (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_validator_prune_len() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_939_000 picoseconds.
- Weight::from_parts(46_960_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule ScalingLawPower (r:0 w:1)
- /// Proof Skipped: SubtensorModule ScalingLawPower (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_scaling_law_power() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_480_000 picoseconds.
- Weight::from_parts(46_590_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule ImmunityPeriod (r:0 w:1)
- /// Proof Skipped: SubtensorModule ImmunityPeriod (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_immunity_period() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_289_000 picoseconds.
- Weight::from_parts(46_679_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxWeightsLimit (r:0 w:1)
- /// Proof Skipped: SubtensorModule MaxWeightsLimit (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_max_weight_limit() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_850_000 picoseconds.
- Weight::from_parts(46_589_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxRegistrationsPerBlock (r:0 w:1)
- /// Proof Skipped: SubtensorModule MaxRegistrationsPerBlock (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_max_registrations_per_block() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_330_000 picoseconds.
- Weight::from_parts(46_490_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MaxBurn (r:0 w:1)
- /// Proof Skipped: SubtensorModule MaxBurn (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_max_burn() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_390_000 picoseconds.
- Weight::from_parts(46_339_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule MinBurn (r:0 w:1)
- /// Proof Skipped: SubtensorModule MinBurn (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_min_burn() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 45_189_000 picoseconds.
- Weight::from_parts(46_109_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworkPowRegistrationAllowed (r:0 w:1)
- /// Proof Skipped: SubtensorModule NetworkPowRegistrationAllowed (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_network_registration_allowed() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `655`
- // Estimated: `655`
- // Minimum execution time: 33_600_000 picoseconds.
- Weight::from_parts(34_599_000, 655)
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- /// Storage: SubtensorModule NetworksAdded (r:1 w:0)
- /// Proof Skipped: SubtensorModule NetworksAdded (max_values: None, max_size: None, mode: Measured)
- /// Storage: SubtensorModule Tempo (r:0 w:1)
- /// Proof Skipped: SubtensorModule Tempo (max_values: None, max_size: None, mode: Measured)
- fn sudo_set_tempo() -> Weight {
- // Proof Size summary in bytes:
- // Measured: `1111`
- // Estimated: `4697`
- // Minimum execution time: 44_739_000 picoseconds.
- Weight::from_parts(45_489_000, 4697)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- fn sudo_set_commit_reveal_weights_interval() -> Weight {
- // -- Extrinsic Time --
- // Model:
- // Time ~= 19.38
- // µs
- // Reads = 1
- // Writes = 1
- // Recorded proof Size = 456
- Weight::from_parts(19_380_000, 456)
- .saturating_add(RocksDbWeight::get().reads(1))
- .saturating_add(RocksDbWeight::get().writes(1))
- }
- fn sudo_set_commit_reveal_weights_enabled() -> Weight {
- // -- Extrinsic Time --
- // Model:
- // Time ~= 19.78
- // µs
- // Reads = 1
- // Writes = 1
- // Recorded proof Size = 456
- Weight::from_parts(19_780_000, 456)
- .saturating_add(RocksDbWeight::get().reads(1_u64))
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- fn sudo_set_evm_chain_id() -> Weight {
- Weight::from_parts(20_200_000, 0)
- .saturating_add(RocksDbWeight::get().writes(1_u64))
- }
- fn schedule_grandpa_change(_a: u32) -> Weight {
- // TODO should be replaced by benchmarked weights
- Weight::default()
- }
-}
diff --git a/pallets/commitments/src/benchmarking.rs b/pallets/commitments/src/benchmarking.rs
index 54247bb9d6..e66f2a07e8 100644
--- a/pallets/commitments/src/benchmarking.rs
+++ b/pallets/commitments/src/benchmarking.rs
@@ -35,7 +35,6 @@ mod benchmarks {
#[benchmark]
fn set_commitment() {
- // The target user
let netuid = 1;
let caller: T::AccountId = whitelisted_caller();
let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value());
@@ -56,5 +55,15 @@ mod benchmarks {
);
}
+ #[benchmark]
+ fn set_max_space() {
+ let new_space: u32 = 1_000;
+
+ #[extrinsic_call]
+ _(RawOrigin::Root, new_space);
+
+ assert_eq!(MaxSpace::::get(), new_space);
+ }
+
//impl_benchmark_test_suite!(Commitments, crate::tests::new_test_ext(), crate::tests::Test);
}
diff --git a/pallets/commitments/src/lib.rs b/pallets/commitments/src/lib.rs
index 11e1ae76ee..5b1ff7f3a8 100644
--- a/pallets/commitments/src/lib.rs
+++ b/pallets/commitments/src/lib.rs
@@ -47,7 +47,7 @@ pub mod pallet {
/// Because this pallet emits events, it depends on the runtime's definition of an event.
type RuntimeEvent: From> + IsType<::RuntimeEvent>;
- /// Currency type that will be used to place deposits on neurons
+ ///Currency type that will be used to reserve deposits for commitments
type Currency: ReservableCurrency + Send + Sync;
/// Weight information for extrinsics in this pallet.
@@ -56,6 +56,9 @@ pub mod pallet {
/// Interface to access-limit metadata commitments
type CanCommit: CanCommit;
+ /// Interface to trigger other pallets when metadata is committed
+ type OnMetadataCommitment: OnMetadataCommitment;
+
/// The maximum number of additional fields that can be added to a commitment
#[pallet::constant]
type MaxFields: Get + TypeInfo + 'static;
@@ -68,15 +71,11 @@ pub mod pallet {
#[pallet::constant]
type FieldDeposit: Get>;
- /// The rate limit for commitments
- #[pallet::constant]
- type DefaultRateLimit: Get>;
-
- /// Used to retreive the given subnet's tempo
+ /// Used to retrieve the given subnet's tempo
type TempoInterface: GetTempoInterface;
}
- /// Used to retreive the given subnet's tempo
+ /// Used to retrieve the given subnet's tempo
pub trait GetTempoInterface {
/// Used to retreive the epoch index for the given subnet.
fn get_epoch_index(netuid: u16, cur_block: u64) -> u64;
@@ -114,26 +113,14 @@ pub mod pallet {
pub enum Error {
/// Account passed too many additional fields to their commitment
TooManyFieldsInCommitmentInfo,
- /// Account is not allow to make commitments to the chain
+ /// Account is not allowed to make commitments to the chain
AccountNotAllowedCommit,
- /// Account is trying to commit data too fast, rate limit exceeded
- CommitmentSetRateLimitExceeded,
/// Space Limit Exceeded for the current interval
SpaceLimitExceeded,
/// Indicates that unreserve returned a leftover, which is unexpected.
UnexpectedUnreserveLeftover,
}
- #[pallet::type_value]
- /// *DEPRECATED* Default value for commitment rate limit.
- pub fn DefaultRateLimit() -> BlockNumberFor {
- T::DefaultRateLimit::get()
- }
-
- /// *DEPRECATED* The rate limit for commitments
- #[pallet::storage]
- pub type RateLimit = StorageValue<_, BlockNumberFor, ValueQuery, DefaultRateLimit>;
-
/// Tracks all CommitmentOf that have at least one timelocked field.
#[pallet::storage]
#[pallet::getter(fn timelocked_index)]
@@ -164,6 +151,19 @@ pub mod pallet {
BlockNumberFor,
OptionQuery,
>;
+
+ #[pallet::storage]
+ #[pallet::getter(fn last_bonds_reset)]
+ pub(super) type LastBondsReset = StorageDoubleMap<
+ _,
+ Identity,
+ u16,
+ Twox64Concat,
+ T::AccountId,
+ BlockNumberFor,
+ OptionQuery,
+ >;
+
#[pallet::storage]
#[pallet::getter(fn revealed_commitments)]
pub(super) type RevealedCommitments = StorageDoubleMap<
@@ -198,7 +198,9 @@ pub mod pallet {
/// Set the commitment for a given netuid
#[pallet::call_index(0)]
#[pallet::weight((
- ::WeightInfo::set_commitment(),
+ Weight::from_parts(38_000_000, 0)
+ .saturating_add(T::DbWeight::get().reads(5_u64))
+ .saturating_add(T::DbWeight::get().writes(4_u64)),
DispatchClass::Operational,
Pays::No
))]
@@ -207,7 +209,7 @@ pub mod pallet {
netuid: u16,
info: Box>,
) -> DispatchResult {
- let who = ensure_signed(origin)?;
+ let who = ensure_signed(origin.clone())?;
ensure!(
T::CanCommit::can_commit(netuid, &who),
Error::::AccountNotAllowedCommit
@@ -238,6 +240,16 @@ pub mod pallet {
usage.used_space = 0;
}
+ // check if ResetBondsFlag is set in the fields
+ for field in info.fields.iter() {
+ if let Data::ResetBondsFlag = field {
+ // track when bonds reset was last triggered
+ >::insert(netuid, &who, cur_block);
+ T::OnMetadataCommitment::on_metadata_commitment(netuid, &who);
+ break;
+ }
+ }
+
let max_allowed = MaxSpace::::get() as u64;
ensure!(
usage.used_space.saturating_add(required_space) <= max_allowed,
@@ -306,23 +318,27 @@ pub mod pallet {
Ok(())
}
- /// Sudo-set the commitment rate limit
+ /// *DEPRECATED* Sudo-set the commitment rate limit
#[pallet::call_index(1)]
#[pallet::weight((
- ::WeightInfo::set_rate_limit(),
- DispatchClass::Operational,
- Pays::No
- ))]
- pub fn set_rate_limit(origin: OriginFor, rate_limit_blocks: u32) -> DispatchResult {
+ Weight::from_parts(3_596_000, 0)
+ .saturating_add(T::DbWeight::get().reads(0_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)),
+ DispatchClass::Operational,
+ Pays::No
+ ))]
+ pub fn set_rate_limit(origin: OriginFor, _rate_limit_blocks: u32) -> DispatchResult {
ensure_root(origin)?;
- RateLimit::::set(rate_limit_blocks.into());
+ // RateLimit::::set(rate_limit_blocks.into());
Ok(())
}
/// Sudo-set MaxSpace
#[pallet::call_index(2)]
#[pallet::weight((
- ::WeightInfo::set_rate_limit(),
+ Weight::from_parts(3_556_000, 0)
+ .saturating_add(T::DbWeight::get().reads(0_u64))
+ .saturating_add(T::DbWeight::get().writes(1_u64)),
DispatchClass::Operational,
Pays::No
))]
@@ -359,6 +375,14 @@ impl CanCommit for () {
}
}
+pub trait OnMetadataCommitment {
+ fn on_metadata_commitment(netuid: u16, account: &AccountId);
+}
+
+impl OnMetadataCommitment for () {
+ fn on_metadata_commitment(_: u16, _: &A) {}
+}
+
/************************************************************
CallType definition
************************************************************/
diff --git a/pallets/commitments/src/mock.rs b/pallets/commitments/src/mock.rs
index c8f6b1e1b2..4e6aa123bd 100644
--- a/pallets/commitments/src/mock.rs
+++ b/pallets/commitments/src/mock.rs
@@ -100,8 +100,8 @@ impl pallet_commitments::Config for Test {
type CanCommit = TestCanCommit;
type FieldDeposit = ConstU64<0>;
type InitialDeposit = ConstU64<0>;
- type DefaultRateLimit = ConstU64<0>;
type TempoInterface = MockTempoInterface;
+ type OnMetadataCommitment = ();
}
pub struct MockTempoInterface;
@@ -118,7 +118,6 @@ impl pallet_commitments::GetTempoInterface for MockTempoInterface {
impl pallet_drand::Config for Test {
type RuntimeEvent = RuntimeEvent;
- type WeightInfo = pallet_drand::weights::SubstrateWeight;
type AuthorityId = test_crypto::TestAuthId;
type Verifier = pallet_drand::verifier::QuicknetVerifier;
type UnsignedPriority = ConstU64<{ 1 << 20 }>;
diff --git a/pallets/commitments/src/tests.rs b/pallets/commitments/src/tests.rs
index c9b14d188b..62e9444b76 100644
--- a/pallets/commitments/src/tests.rs
+++ b/pallets/commitments/src/tests.rs
@@ -3,7 +3,7 @@ use sp_std::prelude::*;
#[cfg(test)]
use crate::{
- CommitmentInfo, CommitmentOf, Config, Data, Error, Event, MaxSpace, Pallet, RateLimit,
+ BalanceOf, CommitmentInfo, CommitmentOf, Config, Data, Error, Event, MaxSpace, Pallet,
Registration, RevealedCommitments, TimelockedIndex, UsedSpaceOf,
mock::{
Balances, DRAND_QUICKNET_SIG_2000_HEX, DRAND_QUICKNET_SIG_HEX, RuntimeEvent, RuntimeOrigin,
@@ -34,6 +34,8 @@ fn manual_data_type_info() {
Data::ShaThree256(_) => "ShaThree256".to_string(),
Data::Raw(bytes) => format!("Raw{}", bytes.len()),
Data::TimelockEncrypted { .. } => "TimelockEncrypted".to_string(),
+ Data::ResetBondsFlag => "ResetBondsFlag".to_string(),
+ Data::BigRaw(_) => "BigRaw".to_string(),
};
if let scale_info::TypeDef::Variant(variant) = &type_info.type_def {
let variant = variant
@@ -50,6 +52,7 @@ fn manual_data_type_info() {
let expected_len = match data {
Data::None => 0,
Data::Raw(bytes) => bytes.len() as u32,
+ Data::BigRaw(bytes) => bytes.len() as u32,
Data::BlakeTwo256(_)
| Data::Sha256(_)
| Data::Keccak256(_)
@@ -63,6 +66,7 @@ fn manual_data_type_info() {
let reveal_round_len = reveal_round.encode().len() as u32; // Typically 8 bytes
encrypted_len + reveal_round_len
}
+ Data::ResetBondsFlag => 0,
};
assert_eq!(
encoded.len() as u32 - 1, // Subtract variant byte
@@ -89,6 +93,7 @@ fn manual_data_type_info() {
Data::Sha256(Default::default()),
Data::Keccak256(Default::default()),
Data::ShaThree256(Default::default()),
+ Data::ResetBondsFlag,
];
// Add Raw instances for all possible sizes
@@ -150,39 +155,6 @@ fn set_commitment_too_many_fields_panics() {
});
}
-// DEPRECATED
-// #[test]
-// fn set_commitment_rate_limit_exceeded() {
-// new_test_ext().execute_with(|| {
-// let rate_limit = ::DefaultRateLimit::get();
-// System::::set_block_number(1);
-// let info = Box::new(CommitmentInfo {
-// fields: BoundedVec::try_from(vec![]).expect("Expected not to panic"),
-// });
-
-// assert_ok!(Pallet::::set_commitment(
-// RuntimeOrigin::signed(1),
-// 1,
-// info.clone()
-// ));
-
-// // Set block number to just before rate limit expires
-// System::::set_block_number(rate_limit);
-// assert_noop!(
-// Pallet::::set_commitment(RuntimeOrigin::signed(1), 1, info.clone()),
-// Error::::CommitmentSetRateLimitExceeded
-// );
-
-// // Set block number to after rate limit
-// System::::set_block_number(rate_limit + 1);
-// assert_ok!(Pallet::::set_commitment(
-// RuntimeOrigin::signed(1),
-// 1,
-// info
-// ));
-// });
-// }
-
#[test]
fn set_commitment_updates_deposit() {
new_test_ext().execute_with(|| {
@@ -226,22 +198,6 @@ fn set_commitment_updates_deposit() {
});
}
-#[test]
-fn set_rate_limit_works() {
- new_test_ext().execute_with(|| {
- let default_rate_limit: u64 = ::DefaultRateLimit::get();
- assert_eq!(RateLimit::::get(), default_rate_limit);
-
- assert_ok!(Pallet::::set_rate_limit(RuntimeOrigin::root(), 200));
- assert_eq!(RateLimit::::get(), 200);
-
- assert_noop!(
- Pallet::::set_rate_limit(RuntimeOrigin::signed(1), 300),
- sp_runtime::DispatchError::BadOrigin
- );
- });
-}
-
#[test]
fn event_emission_works() {
new_test_ext().execute_with(|| {
@@ -1791,3 +1747,441 @@ fn usage_respects_minimum_of_100_bytes() {
);
});
}
+
+#[test]
+fn set_commitment_works_with_multiple_raw_fields() {
+ new_test_ext().execute_with(|| {
+ let cur_block = 10u64.into();
+ System::::set_block_number(cur_block);
+ let initial_deposit: BalanceOf = ::InitialDeposit::get();
+ let field_deposit: BalanceOf = ::FieldDeposit::get();
+
+ let field1 = Data::Raw(vec![0u8; 10].try_into().expect("<=128 bytes is OK"));
+ let field2 = Data::Raw(vec![1u8; 20].try_into().expect("<=128 bytes is OK"));
+ let field3 = Data::Raw(vec![2u8; 50].try_into().expect("<=128 bytes is OK"));
+
+ let info_multiple = CommitmentInfo {
+ fields: BoundedVec::try_from(vec![field1.clone(), field2.clone(), field3.clone()])
+ .expect("<= MaxFields"),
+ };
+
+ assert_ok!(Pallet::::set_commitment(
+ RuntimeOrigin::signed(12345),
+ 99,
+ Box::new(info_multiple)
+ ));
+
+ let expected_deposit: BalanceOf = initial_deposit + 3u64 * field_deposit;
+ let stored = CommitmentOf::::get(99, 12345).expect("Should be stored");
+ assert_eq!(
+ stored.deposit, expected_deposit,
+ "Deposit must equal initial + 3 * field_deposit"
+ );
+
+ assert_eq!(stored.block, cur_block, "Stored block must match cur_block");
+
+ let usage = UsedSpaceOf::::get(99, 12345).expect("Expected to not panic");
+ assert_eq!(
+ usage.used_space, 100,
+ "Usage is clamped to 100 when sum of fields is < 100"
+ );
+
+ let next_block = 11u64.into();
+ System::::set_block_number(next_block);
+
+ let info_two_fields = CommitmentInfo {
+ fields: BoundedVec::try_from(vec![field1.clone(), field2.clone()])
+ .expect("<= MaxFields"),
+ };
+
+ assert_ok!(Pallet::::set_commitment(
+ RuntimeOrigin::signed(12345),
+ 99,
+ Box::new(info_two_fields)
+ ));
+
+ let expected_deposit2: BalanceOf = initial_deposit + 2u64 * field_deposit;
+ let stored2 = CommitmentOf::::get(99, 12345).expect("Should be stored");
+ assert_eq!(
+ stored2.deposit, expected_deposit2,
+ "Deposit must have decreased after removing one field"
+ );
+
+ let usage2 = UsedSpaceOf::::get(99, 12345).expect("Expected to not panic");
+ let expected_usage2 = 200u64;
+ assert_eq!(
+ usage2.used_space, expected_usage2,
+ "Usage accumulates in the same epoch, respecting the min usage of 100 each time"
+ );
+
+ let events = System::::events();
+ let found_commitment_event = events.iter().any(|e| {
+ matches!(
+ e.event,
+ RuntimeEvent::Commitments(Event::Commitment {
+ netuid: 99,
+ who: 12345
+ })
+ )
+ });
+ assert!(
+ found_commitment_event,
+ "Expected at least one Event::Commitment to be emitted"
+ );
+ });
+}
+
+#[allow(clippy::indexing_slicing)]
+#[test]
+fn multiple_timelocked_commitments_reveal_works() {
+ new_test_ext().execute_with(|| {
+ // -------------------------------------------
+ // 1) Set up initial block number and user
+ // -------------------------------------------
+ let cur_block = 5u64.into();
+ System::::set_block_number(cur_block);
+
+ let who = 123;
+ let netuid = 999;
+
+ // -------------------------------------------
+ // 2) Create multiple TLE fields referencing
+ // two known valid Drand rounds: 1000, 2000
+ // -------------------------------------------
+
+ let round_1000 = 1000;
+ let round_2000 = 2000;
+
+ // 2.a) TLE #1 => round=1000
+ let tle_1_plaintext = b"Timelock #1 => round=1000";
+ let ciphertext_1 = produce_ciphertext(tle_1_plaintext, round_1000);
+ let tle_1 = Data::TimelockEncrypted {
+ encrypted: ciphertext_1,
+ reveal_round: round_1000,
+ };
+
+ // 2.b) TLE #2 => round=1000
+ let tle_2_plaintext = b"Timelock #2 => round=1000";
+ let ciphertext_2 = produce_ciphertext(tle_2_plaintext, round_1000);
+ let tle_2 = Data::TimelockEncrypted {
+ encrypted: ciphertext_2,
+ reveal_round: round_1000,
+ };
+
+ // 2.c) TLE #3 => round=2000
+ let tle_3_plaintext = b"Timelock #3 => round=2000";
+ let ciphertext_3 = produce_ciphertext(tle_3_plaintext, round_2000);
+ let tle_3 = Data::TimelockEncrypted {
+ encrypted: ciphertext_3,
+ reveal_round: round_2000,
+ };
+
+ // 2.d) TLE #4 => round=2000
+ let tle_4_plaintext = b"Timelock #4 => round=2000";
+ let ciphertext_4 = produce_ciphertext(tle_4_plaintext, round_2000);
+ let tle_4 = Data::TimelockEncrypted {
+ encrypted: ciphertext_4,
+ reveal_round: round_2000,
+ };
+
+ // -------------------------------------------
+ // 3) Insert all TLEs in a single CommitmentInfo
+ // -------------------------------------------
+ let fields = vec![tle_1, tle_2, tle_3, tle_4];
+ let fields_bounded = BoundedVec::try_from(fields).expect("Must not exceed MaxFields");
+ let info = CommitmentInfo {
+ fields: fields_bounded,
+ };
+
+ // -------------------------------------------
+ // 4) set_commitment => user is now in TimelockedIndex
+ // -------------------------------------------
+ assert_ok!(Pallet::::set_commitment(
+ RuntimeOrigin::signed(who),
+ netuid,
+ Box::new(info)
+ ));
+ assert!(
+ TimelockedIndex::::get().contains(&(netuid, who)),
+ "User must appear in TimelockedIndex since they have TLE fields"
+ );
+
+ // Confirm the stored fields are as expected
+ let stored = CommitmentOf::::get(netuid, who).expect("Should be stored");
+ assert_eq!(
+ stored.info.fields.len(),
+ 4,
+ "All 4 timelock fields must be stored"
+ );
+
+ // -------------------------------------------
+ // 5) Insert valid Drand pulse => round=1000
+ // -------------------------------------------
+ let drand_sig_1000 = hex::decode(DRAND_QUICKNET_SIG_HEX).expect("decode signature");
+ insert_drand_pulse(round_1000, &drand_sig_1000);
+
+ // Reveal at block=6 => should remove TLE #1 and TLE #2, leaving TLE #3, #4
+ System::::set_block_number(6u64.into());
+ assert_ok!(Pallet::::reveal_timelocked_commitments());
+
+ // Check leftover => TLE #3, TLE #4 remain
+ let leftover_after_1000 = CommitmentOf::::get(netuid, who).expect("Must exist");
+ assert_eq!(
+ leftover_after_1000.info.fields.len(),
+ 2,
+ "After revealing round=1000, 2 timelocks remain (#3, #4)"
+ );
+
+ // Check partial reveals => TLE #1 & #2 in revealed storage
+ let revealed_1000 = RevealedCommitments::::get(netuid, who)
+ .expect("Should have partial reveals");
+ assert_eq!(
+ revealed_1000.len(),
+ 2,
+ "We revealed exactly 2 items at round=1000"
+ );
+ {
+ let (bytes_a, _) = &revealed_1000[0];
+ let (bytes_b, _) = &revealed_1000[1];
+ let txt_a = sp_std::str::from_utf8(bytes_a).expect("utf-8 expected");
+ let txt_b = sp_std::str::from_utf8(bytes_b).expect("utf-8 expected");
+ assert!(
+ txt_a.contains("Timelock #1") || txt_a.contains("Timelock #2"),
+ "Revealed #1 or #2"
+ );
+ assert!(
+ txt_b.contains("Timelock #1") || txt_b.contains("Timelock #2"),
+ "Revealed #1 or #2"
+ );
+ }
+
+ assert!(
+ TimelockedIndex::::get().contains(&(netuid, who)),
+ "TLE left"
+ );
+
+ // -------------------------------------------
+ // 6) Insert valid Drand pulse => round=2000
+ // -------------------------------------------
+ let drand_sig_2000_hex =
+ "b6cb8f482a0b15d45936a4c4ea08e98a087e71787caee3f4d07a8a9843b1bc5423c6b3c22f446488b3137eaca799c77e";
+ let drand_sig_2000 = hex::decode(drand_sig_2000_hex).expect("decode signature");
+ insert_drand_pulse(round_2000, &drand_sig_2000);
+
+ // Reveal at block=7 => should remove TLE #3 and TLE #4
+ System::::set_block_number(7u64.into());
+ assert_ok!(Pallet::::reveal_timelocked_commitments());
+
+ // After revealing these last two timelocks => leftover is none
+ let leftover_after_2000 = CommitmentOf::::get(netuid, who);
+ assert!(
+ leftover_after_2000.is_none(),
+ "All timelocks revealed => leftover none => entry removed"
+ );
+
+ // Because the user has no timelocks left => removed from TimelockedIndex
+ assert!(
+ !TimelockedIndex::::get().contains(&(netuid, who)),
+ "No TLE left => user removed from index"
+ );
+
+ // Check TLE #3 and #4 were appended to revealed
+ let revealed_final = RevealedCommitments::::get(netuid, who)
+ .expect("Should exist with final reveals");
+ assert_eq!(
+ revealed_final.len(),
+ 4,
+ "We should have all 4 TLE items revealed in total"
+ );
+
+ // The final two items in `revealed_final` must be #3, #4
+ let (third_bytes, _) = &revealed_final[2];
+ let (fourth_bytes, _) = &revealed_final[3];
+ let third_txt = sp_std::str::from_utf8(third_bytes).expect("utf-8 expected");
+ let fourth_txt = sp_std::str::from_utf8(fourth_bytes).expect("utf-8 expected");
+
+ assert!(
+ third_txt.contains("Timelock #3"),
+ "Expected TLE #3 among final reveals"
+ );
+ assert!(
+ fourth_txt.contains("Timelock #4"),
+ "Expected TLE #4 among final reveals"
+ );
+ });
+}
+
+#[allow(clippy::indexing_slicing)]
+#[test]
+fn mixed_timelocked_and_raw_fields_works() {
+ new_test_ext().execute_with(|| {
+ // -------------------------------------------
+ // 1) Setup initial block number and user
+ // -------------------------------------------
+ let cur_block = 3u64.into();
+ System::::set_block_number(cur_block);
+
+ let who = 77;
+ let netuid = 501;
+
+ // -------------------------------------------
+ // 2) Create raw fields and timelocked fields
+ // -------------------------------------------
+ // We'll use 2 raw fields, and 2 timelocked fields referencing
+ // 2 Drand rounds (1000 and 2000) that we know have valid signatures.
+
+ // Round constants:
+ let round_1000 = 1000;
+ let round_2000 = 2000;
+
+ // (a) Timelock #1 => round=1000
+ let tle_1_plaintext = b"TLE #1 => round=1000";
+ let ciphertext_1 = produce_ciphertext(tle_1_plaintext, round_1000);
+ let tle_1 = Data::TimelockEncrypted {
+ encrypted: ciphertext_1,
+ reveal_round: round_1000,
+ };
+
+ // (b) Timelock #2 => round=2000
+ let tle_2_plaintext = b"TLE #2 => round=2000";
+ let ciphertext_2 = produce_ciphertext(tle_2_plaintext, round_2000);
+ let tle_2 = Data::TimelockEncrypted {
+ encrypted: ciphertext_2,
+ reveal_round: round_2000,
+ };
+
+ // (c) Two Raw fields
+ let raw_1 = Data::Raw(b"Raw field #1".to_vec().try_into().expect("<= 128 bytes"));
+ let raw_2 = Data::Raw(b"Raw field #2".to_vec().try_into().expect("<= 128 bytes"));
+
+ // We'll put them in a single vector: [TLE #1, raw_1, TLE #2, raw_2]
+ let all_fields = vec![tle_1, raw_1.clone(), tle_2, raw_2.clone()];
+ let fields_bounded = BoundedVec::try_from(all_fields).expect("<= MaxFields");
+
+ // -------------------------------------------
+ // 3) Submit the single commitment
+ // -------------------------------------------
+ let info = CommitmentInfo { fields: fields_bounded };
+
+ assert_ok!(Pallet::::set_commitment(
+ RuntimeOrigin::signed(who),
+ netuid,
+ Box::new(info)
+ ));
+
+ // The user should appear in TimelockedIndex because they have timelocked fields.
+ assert!(
+ TimelockedIndex::::get().contains(&(netuid, who)),
+ "User must be in TimelockedIndex with TLE fields"
+ );
+
+ // Check the stored data
+ let stored = CommitmentOf::::get(netuid, who).expect("Should exist in storage");
+ assert_eq!(
+ stored.info.fields.len(),
+ 4,
+ "We have 2 raw + 2 TLE fields in total"
+ );
+
+ // -------------------------------------------
+ // 4) Insert Drand signature for round=1000 => partial reveal
+ // -------------------------------------------
+ let drand_sig_1000 = hex::decode(DRAND_QUICKNET_SIG_HEX).expect("decode signature");
+ insert_drand_pulse(round_1000, &drand_sig_1000);
+
+ System::::set_block_number(4u64.into());
+ assert_ok!(Pallet::::reveal_timelocked_commitments());
+
+ // => TLE #1 (round=1000) is revealed. TLE #2 (round=2000) remains locked.
+ // => The two raw fields remain untouched.
+ let leftover_after_1000 = CommitmentOf::::get(netuid, who).expect("Must still exist");
+ assert_eq!(
+ leftover_after_1000.info.fields.len(),
+ 3,
+ "One TLE removed => leftover=3 fields: TLE #2 + raw_1 + raw_2"
+ );
+
+ // Make sure user is still in TimelockedIndex (they still have TLE #2)
+ assert!(
+ TimelockedIndex::::get().contains(&(netuid, who)),
+ "Still has leftover TLE #2 => remains in index"
+ );
+
+ // Check partial reveal
+ let revealed_1000 = RevealedCommitments::::get(netuid, who)
+ .expect("Should have partial reveals");
+ assert_eq!(
+ revealed_1000.len(),
+ 1,
+ "We revealed exactly 1 item at round=1000"
+ );
+ let (revealed_bytes_1, _block_1) = &revealed_1000[0];
+ let revealed_str_1 =
+ sp_std::str::from_utf8(revealed_bytes_1).expect("Should parse as UTF-8");
+ assert!(
+ revealed_str_1.contains("TLE #1 => round=1000"),
+ "Check that TLE #1 was revealed"
+ );
+
+ // -------------------------------------------
+ // 5) Insert Drand signature for round=2000 => final TLE reveal
+ // -------------------------------------------
+ let drand_sig_2000_hex =
+ "b6cb8f482a0b15d45936a4c4ea08e98a087e71787caee3f4d07a8a9843b1bc5423c6b3c22f446488b3137eaca799c77e";
+ let drand_sig_2000 = hex::decode(drand_sig_2000_hex).expect("decode signature");
+ insert_drand_pulse(round_2000, &drand_sig_2000);
+
+ System::::set_block_number(5u64.into());
+ assert_ok!(Pallet::::reveal_timelocked_commitments());
+
+ // => TLE #2 is now revealed. The two raw fields remain.
+ let leftover_after_2000 = CommitmentOf::::get(netuid, who).expect("Still exists");
+ let leftover_fields = &leftover_after_2000.info.fields;
+ assert_eq!(
+ leftover_fields.len(),
+ 2,
+ "Only the 2 raw fields remain after TLE #2 is revealed"
+ );
+
+ assert_eq!(
+ leftover_fields[0],
+ raw_1,
+ "Leftover field[0] must match raw_1"
+ );
+ assert_eq!(
+ leftover_fields[1],
+ raw_2,
+ "Leftover field[1] must match raw_2"
+ );
+
+ // The user has no leftover timelocks => removed from TimelockedIndex
+ assert!(
+ !TimelockedIndex::::get().contains(&(netuid, who)),
+ "No more TLE => user removed from index"
+ );
+
+ // But the record is still present in storage (because raw fields remain)
+ // => leftover_fields must match our original raw fields.
+ let [f1, f2] = &leftover_fields[..] else {
+ panic!("Expected exactly 2 fields leftover");
+ };
+ assert_eq!(f1, &raw_1, "Raw field #1 remains unaltered");
+ assert_eq!(f2, &raw_2, "Raw field #2 remains unaltered");
+
+ // Check that TLE #2 was appended to revealed data
+ let revealed_final = RevealedCommitments::::get(netuid, who)
+ .expect("Should have final reveals");
+ assert_eq!(
+ revealed_final.len(),
+ 2,
+ "Now we have 2 revealed TLE items total (TLE #1 and TLE #2)."
+ );
+ let (revealed_bytes_2, _block_2) = &revealed_final[1];
+ let revealed_str_2 =
+ sp_std::str::from_utf8(revealed_bytes_2).expect("Should parse as UTF-8");
+ assert!(
+ revealed_str_2.contains("TLE #2 => round=2000"),
+ "Check that TLE #2 was revealed"
+ );
+ });
+}
diff --git a/pallets/commitments/src/types.rs b/pallets/commitments/src/types.rs
index 0f1d2302a5..543eb08cd1 100644
--- a/pallets/commitments/src/types.rs
+++ b/pallets/commitments/src/types.rs
@@ -31,15 +31,18 @@ use sp_runtime::{
use sp_std::{fmt::Debug, iter::once, prelude::*};
use subtensor_macros::freeze_struct;
-/// Either underlying data blob if it is at most 32 bytes, or a hash of it. If the data is greater
-/// than 32-bytes then it will be truncated when encoding.
-///
-/// Can also be `None`.
+/// Represents stored data which can be:
+/// - `Raw`: a direct blob up to 128 bytes
+/// - `BigRaw`: a larger blob up to 512 bytes
+/// - A cryptographic hash (BlakeTwo256, Sha256, Keccak256, ShaThree256)
+/// - A timelock-encrypted blob with a reveal round
+/// - A reset flag (`ResetBondsFlag`)
+/// Can also be `None`.
#[derive(Clone, Eq, PartialEq, RuntimeDebug, MaxEncodedLen)]
pub enum Data {
/// No data here.
None,
- /// The data is stored directly.
+ /// The data is stored directly (up to 128 bytes).
Raw(BoundedVec>),
/// Only the Blake2 hash of the data is stored. The preimage of the hash may be retrieved
/// through some hash-lookup service.
@@ -58,6 +61,10 @@ pub enum Data {
encrypted: BoundedVec>,
reveal_round: u64,
},
+ /// Flag to trigger bonds reset for subnet
+ ResetBondsFlag,
+ /// The data is stored directly (up to 512 bytes).
+ BigRaw(BoundedVec>),
}
impl Data {
@@ -79,6 +86,8 @@ impl Data {
| Data::Keccak256(arr)
| Data::ShaThree256(arr) => arr.len() as u64,
Data::TimelockEncrypted { encrypted, .. } => encrypted.len() as u64,
+ Data::ResetBondsFlag => 0,
+ Data::BigRaw(bytes) => bytes.len() as u64,
}
}
}
@@ -108,6 +117,12 @@ impl Decode for Data {
reveal_round,
}
}
+ 135 => Data::ResetBondsFlag,
+ 136 => {
+ let bigvec =
+ BoundedVec::>::decode(input)?;
+ Data::BigRaw(bigvec)
+ }
_ => return Err(codec::Error::from("invalid leading byte")),
})
}
@@ -136,6 +151,12 @@ impl Encode for Data {
r.extend_from_slice(&reveal_round.encode());
r
}
+ Data::ResetBondsFlag => vec![135],
+ Data::BigRaw(bigvec) => {
+ let mut r = vec![136];
+ r.extend_from_slice(&bigvec.encode());
+ r
+ }
}
}
}
@@ -321,6 +342,12 @@ impl TypeInfo for Data {
})
.field(|f| f.name("reveal_round").ty::()),
)
+ })
+ .variant("ResetBondsFlag", |v| v.index(135))
+ .variant("BigRaw", |v| {
+ v.index(136).fields(Fields::unnamed().field(|f| {
+ f.ty::>>()
+ }))
});
Type::builder()
@@ -348,6 +375,7 @@ pub struct CommitmentInfo> {
/// Maximum size of the serialized timelock commitment in bytes
pub const MAX_TIMELOCK_COMMITMENT_SIZE_BYTES: u32 = 1024;
+pub const MAX_BIGRAW_COMMITMENT_SIZE_BYTES: u32 = 512;
/// Contains the decrypted data of a revealed commitment.
#[freeze_struct("bf575857b57f9bef")]
diff --git a/pallets/commitments/src/weights.rs b/pallets/commitments/src/weights.rs
index b91017e050..e1bd05fcc7 100644
--- a/pallets/commitments/src/weights.rs
+++ b/pallets/commitments/src/weights.rs
@@ -53,7 +53,7 @@ impl WeightInfo for SubstrateWeight {
fn set_rate_limit() -> Weight {
Weight::from_parts(10_000_000, 2000)
.saturating_add(RocksDbWeight::get().reads(1_u64))
- }
+ }
}
// For backwards compatibility and tests.
@@ -76,5 +76,5 @@ impl WeightInfo for () {
fn set_rate_limit() -> Weight {
Weight::from_parts(10_000_000, 2000)
.saturating_add(RocksDbWeight::get().reads(1_u64))
- }
-}
\ No newline at end of file
+ }
+}
diff --git a/pallets/crowdloan/Cargo.toml b/pallets/crowdloan/Cargo.toml
new file mode 100644
index 0000000000..e8d582fa44
--- /dev/null
+++ b/pallets/crowdloan/Cargo.toml
@@ -0,0 +1,62 @@
+[package]
+name = "pallet-crowdloan"
+version = "0.1.0"
+edition = "2024"
+authors = ["Bittensor Nucleus Team"]
+license = "Apache-2.0"
+homepage = "https://bittensor.com"
+description = "FRAME crowdloan pallet"
+publish = false
+repository = "https://github.com/opentensor/subtensor"
+
+[lints]
+workspace = true
+
+[dependencies]
+subtensor-macros.workspace = true
+scale-info = { workspace = true, features = ["derive"] }
+codec = { workspace = true, features = ["max-encoded-len"] }
+frame-benchmarking = { optional = true, workspace = true }
+frame-support.workspace = true
+frame-system.workspace = true
+sp-runtime.workspace = true
+sp-std.workspace = true
+log = { workspace = true }
+
+[dev-dependencies]
+pallet-balances = { default-features = true, workspace = true }
+pallet-preimage = { default-features = true, workspace = true }
+sp-core = { default-features = true, workspace = true }
+sp-io = { default-features = true, workspace = true }
+
+[features]
+default = ["std"]
+std = [
+ "codec/std",
+ "frame-benchmarking?/std",
+ "frame-support/std",
+ "frame-system/std",
+ "scale-info/std",
+ "sp-runtime/std",
+ "sp-std/std",
+ "sp-io/std",
+ "log/std",
+ "sp-core/std",
+ "pallet-balances/std",
+ "pallet-preimage/std",
+]
+runtime-benchmarks = [
+ "frame-benchmarking/runtime-benchmarks",
+ "frame-support/runtime-benchmarks",
+ "frame-system/runtime-benchmarks",
+ "sp-runtime/runtime-benchmarks",
+ "pallet-balances/runtime-benchmarks",
+ "pallet-preimage/runtime-benchmarks",
+]
+try-runtime = [
+ "frame-support/try-runtime",
+ "frame-system/try-runtime",
+ "sp-runtime/try-runtime",
+ "pallet-balances/try-runtime",
+ "pallet-preimage/try-runtime",
+]
diff --git a/pallets/crowdloan/README.md b/pallets/crowdloan/README.md
new file mode 100644
index 0000000000..3d67fee33a
--- /dev/null
+++ b/pallets/crowdloan/README.md
@@ -0,0 +1,19 @@
+# Crowdloan Pallet
+
+A pallet that enables the creation and management of generic crowdloans for transferring funds and executing an arbitrary call.
+
+Users of this pallet can create a crowdloan by providing a deposit, a cap, an end block, an optional target address and an optional call.
+
+Users can contribute to a crowdloan by providing funds to the crowdloan they choose to support. The contribution can be withdrawn while the crowdloan is not finalized.
+
+Once the crowdloan is finalized, the funds will be transferred to the target address if provided; otherwise, the end user is expected to transfer them manually on-chain if the call is a pallet extrinsic. The call will be dispatched with the current crowdloan ID stored as a temporary item.
+
+If the crowdloan fails to reach the cap, the creator can decide to refund all contributors and dissolve the crowdloan. The initial deposit will be refunded.
+
+## Overview
+
+## Interface
+
+## Dispatchable Functions
+
+License: Apache-2.0
diff --git a/pallets/crowdloan/src/benchmarking.rs b/pallets/crowdloan/src/benchmarking.rs
new file mode 100644
index 0000000000..0891baf5af
--- /dev/null
+++ b/pallets/crowdloan/src/benchmarking.rs
@@ -0,0 +1,498 @@
+//! Benchmarks for Crowdloan Pallet
+#![cfg(feature = "runtime-benchmarks")]
+#![allow(
+ clippy::arithmetic_side_effects,
+ clippy::indexing_slicing,
+ clippy::unwrap_used
+)]
+use crate::{BalanceOf, CrowdloanId, CrowdloanInfo, CurrencyOf, pallet::*};
+use frame_benchmarking::{account, v2::*};
+use frame_support::traits::{Get, StorePreimage, fungible::*};
+use frame_system::{RawOrigin, pallet_prelude::BlockNumberFor};
+
+extern crate alloc;
+
+const SEED: u32 = 0;
+
+use alloc::{boxed::Box, vec};
+
+fn assert_last_event(generic_event: ::RuntimeEvent) {
+ let events = frame_system::Pallet::::events();
+ let system_event: ::RuntimeEvent = generic_event.into();
+ // compare to the last event record
+ let frame_system::EventRecord { event, .. } = &events[events.len() - 1];
+ assert_eq!(event, &system_event);
+}
+
+#[benchmarks]
+mod benchmarks {
+ use super::*;
+
+ #[benchmark]
+ fn create() {
+ let creator: T::AccountId = account::("creator", 0, SEED);
+ let deposit = T::MinimumDeposit::get();
+ let min_contribution = T::AbsoluteMinimumContribution::get();
+ let cap = deposit + deposit;
+ let now = frame_system::Pallet::::block_number();
+ let end = now + T::MaximumBlockDuration::get();
+ let target_address = account::("target_address", 0, SEED);
+ let call: Box<::RuntimeCall> =
+ Box::new(frame_system::Call::::remark { remark: vec![] }.into());
+ let _ = CurrencyOf::::set_balance(&creator, deposit);
+
+ #[extrinsic_call]
+ _(
+ RawOrigin::Signed(creator.clone()),
+ deposit,
+ min_contribution,
+ cap,
+ end,
+ Some(call.clone()),
+ Some(target_address.clone()),
+ );
+
+ // ensure the crowdloan is stored correctly
+ let crowdloan_id = 0;
+ let funds_account = Pallet::::funds_account(crowdloan_id);
+ assert_eq!(
+ Crowdloans::::get(crowdloan_id),
+ Some(CrowdloanInfo {
+ creator: creator.clone(),
+ deposit,
+ min_contribution,
+ cap,
+ end,
+ funds_account: funds_account.clone(),
+ raised: deposit,
+ target_address: Some(target_address.clone()),
+ call: Some(T::Preimages::bound(*call).unwrap()),
+ finalized: false,
+ contributors_count: 1,
+ })
+ );
+ // ensure the creator has been deducted the deposit
+ assert!(CurrencyOf::::balance(&creator) == 0);
+ // ensure the initial deposit is stored correctly as contribution
+ assert_eq!(
+ Contributions::::get(crowdloan_id, &creator),
+ Some(deposit)
+ );
+ // ensure the raised amount is updated correctly
+ assert!(Crowdloans::::get(crowdloan_id).is_some_and(|c| c.raised == deposit));
+ // ensure the crowdloan account has the deposit
+ assert_eq!(CurrencyOf::::balance(&funds_account), deposit);
+ // ensure the event is emitted
+ assert_last_event::(
+ Event::::Created {
+ crowdloan_id,
+ creator,
+ end,
+ cap,
+ }
+ .into(),
+ );
+ // ensure next crowdloan id is incremented
+ assert_eq!(NextCrowdloanId::::get(), crowdloan_id + 1);
+ }
+
+ #[benchmark]
+ fn contribute() {
+ // create a crowdloan
+ let creator: T::AccountId = account::("creator", 0, SEED);
+ let deposit = T::MinimumDeposit::get();
+ let min_contribution = T::AbsoluteMinimumContribution::get();
+ let cap = deposit + deposit;
+ let now = frame_system::Pallet::