From cd0828919212179f0636dc142bdf962da7650c39 Mon Sep 17 00:00:00 2001 From: Cameron Fairchild Date: Mon, 29 Apr 2024 17:10:42 -0400 Subject: [PATCH 01/33] fix: reject registrations only after 3 times target --- pallets/subtensor/src/lib.rs | 2 +- pallets/subtensor/tests/registration.rs | 161 +++++++++++++++++++----- 2 files changed, 134 insertions(+), 29 deletions(-) diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index 554e2198f..8beba51c1 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -1869,7 +1869,7 @@ where let registrations_this_interval = Pallet::::get_registrations_this_interval(*netuid); let max_registrations_per_interval = - Pallet::::get_target_registrations_per_interval(*netuid); + Pallet::::get_target_registrations_per_interval(*netuid) * 3; if registrations_this_interval >= max_registrations_per_interval { // If the registration limit for the interval is exceeded, reject the transaction return InvalidTransaction::ExhaustsResources.into(); diff --git a/pallets/subtensor/tests/registration.rs b/pallets/subtensor/tests/registration.rs index 63ef2b947..6787291b9 100644 --- a/pallets/subtensor/tests/registration.rs +++ b/pallets/subtensor/tests/registration.rs @@ -197,8 +197,9 @@ fn test_registration_under_limit() { let coldkey_account_id = U256::from(667); let who: ::AccountId = hotkey_account_id; - let max_registrants = 2; - SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); + let target_registrants = 2; + let max_registrants = target_registrants * 3; // Maximum is 3 times the target + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); let (nonce, work) = SubtensorModule::create_work_for_block_number( netuid, @@ -235,8 +236,7 @@ fn test_registration_under_limit() { )); let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); - let target_registrants = SubtensorModule::get_target_registrations_per_interval(netuid); - assert!(current_registrants <= target_registrants); + assert!(current_registrants <= max_registrants); // Should be less than 3 times the target }); } @@ -249,9 +249,12 @@ fn test_registration_rate_limit_exceeded() { let coldkey_account_id = U256::from(667); let who: ::AccountId = hotkey_account_id; - let max_registrants = 1; - SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); - SubtensorModule::set_registrations_this_interval(netuid, 1); + let target_registrants = 1; + let max_registrants = target_registrants * 3; // Maximum is 3 times the target + + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + // Set the current registrations to the maximum; should not be able to register more + SubtensorModule::set_registrations_this_interval(netuid, max_registrants); let (nonce, work) = SubtensorModule::create_work_for_block_number( netuid, @@ -280,28 +283,83 @@ fn test_registration_rate_limit_exceeded() { }); } -/******************************************** - registration::do_burned_registration tests -*********************************************/ - #[test] -fn test_burned_registration_under_limit() { +fn test_registration_rate_limit_allows_difficulty_adjustment() { + // We need to be able to register more than the *target* registrations per interval new_test_ext(1).execute_with(|| { let netuid: u16 = 1; + let block_number: u64 = 0; let hotkey_account_id: U256 = U256::from(1); let coldkey_account_id = U256::from(667); let who: ::AccountId = hotkey_account_id; - let block_number: u64 = 0; + let target_registrants = 1; // Target is 1, but we can register more than that, up to some maximum. + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + // Set the current registrations to above the target; we should be able to register at least 1 more + SubtensorModule::set_registrations_this_interval(netuid, target_registrants); + + // Register one more, so the current registrations are above the target let (nonce, work) = SubtensorModule::create_work_for_block_number( netuid, block_number, 129123813, &hotkey_account_id, ); + let work_clone = work.clone(); + let call = pallet_subtensor::Call::register { + netuid, + block_number, + nonce, + work: work_clone, + hotkey: hotkey_account_id, + coldkey: coldkey_account_id, + }; + let info: DispatchInfo = + DispatchInfoOf::<::RuntimeCall>::default(); + let extension = SubtensorSignedExtension::::new(); + //does not actually call register + let result = extension.validate(&who, &call.into(), &info, 10); + assert_ok!(result); + + //actually call register + add_network(netuid, 13, 0); + assert_ok!(SubtensorModule::register( + <::RuntimeOrigin>::signed(hotkey_account_id), + netuid, + block_number, + nonce, + work, + hotkey_account_id, + coldkey_account_id + )); + + let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); + assert!(current_registrants > target_registrants); + }); +} - let max_registrants = 2; - SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); +/******************************************** + registration::do_burned_registration tests +*********************************************/ + +#[test] +fn test_burned_registration_under_limit() { + new_test_ext(1).execute_with(|| { + let netuid: u16 = 1; + let hotkey_account_id: U256 = U256::from(1); + let coldkey_account_id = U256::from(667); + let who: ::AccountId = coldkey_account_id; + let burn_cost = 1000; + // Set the burn cost + SubtensorModule::set_burn(netuid, burn_cost); + + add_network(netuid, 13, 0); // Add the network + // Give it some TAO to the coldkey balance; more than the burn cost + SubtensorModule::add_balance_to_coldkey_account(&coldkey_account_id, burn_cost + 10_000); + + let target_registrants = 2; + let max_registrants = target_registrants * 3; // Maximum is 3 times the target + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); let call_burned_register: pallet_subtensor::Call = pallet_subtensor::Call::burned_register { @@ -317,21 +375,15 @@ fn test_burned_registration_under_limit() { extension.validate(&who, &call_burned_register.into(), &info, 10); assert_ok!(burned_register_result); - add_network(netuid, 13, 0); //actually call register - assert_ok!(SubtensorModule::register( - <::RuntimeOrigin>::signed(hotkey_account_id), + assert_ok!(SubtensorModule::burned_register( + <::RuntimeOrigin>::signed(coldkey_account_id), netuid, - block_number, - nonce, - work, hotkey_account_id, - coldkey_account_id )); let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); - let target_registrants = SubtensorModule::get_target_registrations_per_interval(netuid); - assert!(current_registrants <= target_registrants); + assert!(current_registrants <= max_registrants); }); } @@ -340,11 +392,15 @@ fn test_burned_registration_rate_limit_exceeded() { new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let hotkey_account_id: U256 = U256::from(1); - let who: ::AccountId = hotkey_account_id; - let max_registrants = 1; + let coldkey_account_id = U256::from(667); + let who: ::AccountId = coldkey_account_id; + + let target_registrants = 1; + let max_registrants = target_registrants * 3; // Maximum is 3 times the target - SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); - SubtensorModule::set_registrations_this_interval(netuid, 1); + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + // Set the current registrations to the maximum; should not be able to register more + SubtensorModule::set_registrations_this_interval(netuid, max_registrants); let call_burned_register: pallet_subtensor::Call = pallet_subtensor::Call::burned_register { @@ -369,6 +425,55 @@ fn test_burned_registration_rate_limit_exceeded() { }); } +#[test] +fn test_burned_registration_rate_allows_burn_adjustment() { + // We need to be able to register more than the *target* registrations per interval + new_test_ext(1).execute_with(|| { + let netuid: u16 = 1; + let hotkey_account_id: U256 = U256::from(1); + let coldkey_account_id = U256::from(667); + let who: ::AccountId = coldkey_account_id; + + let burn_cost = 1000; + // Set the burn cost + SubtensorModule::set_burn(netuid, burn_cost); + + add_network(netuid, 13, 0); // Add the network + // Give it some TAO to the coldkey balance; more than the burn cost + SubtensorModule::add_balance_to_coldkey_account(&coldkey_account_id, burn_cost + 10_000); + + let target_registrants = 1; // Target is 1, but we can register more than that, up to some maximum. + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + // Set the current registrations to above the target; we should be able to register at least 1 more + SubtensorModule::set_registrations_this_interval(netuid, target_registrants); + + // Register one more, so the current registrations are above the target + let call_burned_register: pallet_subtensor::Call = + pallet_subtensor::Call::burned_register { + netuid, + hotkey: hotkey_account_id, + }; + + let info: DispatchInfo = + DispatchInfoOf::<::RuntimeCall>::default(); + let extension = SubtensorSignedExtension::::new(); + //does not actually call register + let burned_register_result = + extension.validate(&who, &call_burned_register.into(), &info, 10); + assert_ok!(burned_register_result); + + //actually call register + assert_ok!(SubtensorModule::burned_register( + <::RuntimeOrigin>::signed(coldkey_account_id), + netuid, + hotkey_account_id + )); + + let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); + assert!(current_registrants > target_registrants); // Should be able to register more than the target + }); +} + #[test] fn test_burned_registration_ok() { new_test_ext(1).execute_with(|| { From d0043b5fc464ae160a7abb5c8631781d657c5cde Mon Sep 17 00:00:00 2001 From: shibshib Date: Mon, 29 Apr 2024 21:33:57 +0000 Subject: [PATCH 02/33] upped spec version --- runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 1b8352513..46e39e3c5 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -137,7 +137,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 146, + spec_version: 147, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, From 0e88691f0da65c258d1366073593a13c0ba2a820 Mon Sep 17 00:00:00 2001 From: distributedstatemachine <112424909+distributedstatemachine@users.noreply.github.com> Date: Tue, 30 Apr 2024 02:03:00 +0400 Subject: [PATCH 03/33] Revert "fix: reject registrations only after 3 times target" --- .github/PULL_REQUEST_TEMPLATE/add-feature.md | 22 + .github/PULL_REQUEST_TEMPLATE/fix-bug.md | 21 + .github/pull_request_template.md | 47 - .github/workflows/check-rust.yml | 309 +- Cargo.lock | 4856 +++++++++-------- Cargo.toml | 11 +- README.md | 63 +- docs/running-subtensor-locally.md | 210 +- integration-tests/Cargo.toml | 3 - justfile | 40 - node/Cargo.toml | 82 +- node/src/benchmarking.rs | 2 +- node/src/chain_spec.rs | 55 +- node/src/cli.rs | 9 +- node/src/command.rs | 33 +- node/src/rpc.rs | 50 +- node/src/service.rs | 163 +- node/tests/chain_spec.rs | 2 +- pallets/admin-utils/Cargo.toml | 45 +- pallets/admin-utils/src/lib.rs | 21 +- pallets/admin-utils/tests/mock.rs | 85 +- pallets/admin-utils/tests/tests.rs | 117 +- pallets/collective/Cargo.toml | 23 +- pallets/collective/src/benchmarking.rs | 32 +- pallets/collective/src/lib.rs | 101 +- pallets/collective/src/tests.rs | 168 +- pallets/collective/src/weights.rs | 156 +- pallets/commitments/Cargo.toml | 29 +- pallets/commitments/src/benchmarking.rs | 9 +- pallets/commitments/src/lib.rs | 48 +- pallets/commitments/src/tests.rs | 65 +- pallets/commitments/src/types.rs | 44 +- pallets/registry/Cargo.toml | 25 +- pallets/registry/src/benchmarking.rs | 9 +- pallets/registry/src/lib.rs | 2 +- pallets/registry/src/tests.rs | 3 + pallets/registry/src/types.rs | 21 +- pallets/subtensor/Cargo.toml | 71 +- pallets/subtensor/rpc/Cargo.toml | 20 +- pallets/subtensor/runtime-api/Cargo.toml | 16 +- pallets/subtensor/src/benchmarks.rs | 81 +- pallets/subtensor/src/block_step.rs | 59 +- pallets/subtensor/src/delegate_info.rs | 17 +- pallets/subtensor/src/epoch.rs | 10 +- pallets/subtensor/src/lib.rs | 158 +- pallets/subtensor/src/math.rs | 657 ++- pallets/subtensor/src/migration.rs | 16 +- pallets/subtensor/src/neuron_info.rs | 108 +- pallets/subtensor/src/registration.rs | 94 +- pallets/subtensor/src/root.rs | 63 +- pallets/subtensor/src/serving.rs | 29 +- pallets/subtensor/src/stake_info.rs | 17 +- pallets/subtensor/src/staking.rs | 207 +- pallets/subtensor/src/subnet_info.rs | 18 +- pallets/subtensor/src/uids.rs | 21 +- pallets/subtensor/src/utils.rs | 65 +- pallets/subtensor/src/weights.rs | 50 +- pallets/subtensor/tests/block_step.rs | 32 +- pallets/subtensor/tests/difficulty.rs | 22 +- pallets/subtensor/tests/epoch.rs | 523 +- pallets/subtensor/tests/migration.rs | 26 +- pallets/subtensor/tests/mock.rs | 75 +- pallets/subtensor/tests/networks.rs | 4 +- pallets/subtensor/tests/neuron_info.rs | 12 +- pallets/subtensor/tests/registration.rs | 304 +- pallets/subtensor/tests/root.rs | 70 +- pallets/subtensor/tests/senate.rs | 72 +- pallets/subtensor/tests/serving.rs | 124 +- pallets/subtensor/tests/staking.rs | 179 +- pallets/subtensor/tests/uids.rs | 12 +- pallets/subtensor/tests/weights.rs | 95 +- recipe.json | 49 +- runtime/Cargo.toml | 87 +- runtime/src/lib.rs | 297 +- .../src/migrations/account_data_migration.rs | 205 - .../src/migrations/init_storage_versions.rs | 26 - runtime/src/migrations/mod.rs | 2 - runtime/tests/pallet_proxy.rs | 197 - rust-toolchain.toml | 17 +- scripts/install_rust.sh | 42 - scripts/localnet.sh | 6 +- scripts/localnet_setup.sh | 32 + scripts/run/subtensor.sh | 2 +- zepter.yaml | 40 - 84 files changed, 5075 insertions(+), 6235 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE/add-feature.md create mode 100644 .github/PULL_REQUEST_TEMPLATE/fix-bug.md delete mode 100644 .github/pull_request_template.md delete mode 100644 justfile delete mode 100644 runtime/src/migrations/account_data_migration.rs delete mode 100644 runtime/src/migrations/init_storage_versions.rs delete mode 100644 runtime/src/migrations/mod.rs delete mode 100644 runtime/tests/pallet_proxy.rs delete mode 100755 scripts/install_rust.sh create mode 100755 scripts/localnet_setup.sh delete mode 100644 zepter.yaml diff --git a/.github/PULL_REQUEST_TEMPLATE/add-feature.md b/.github/PULL_REQUEST_TEMPLATE/add-feature.md new file mode 100644 index 000000000..a791dad6f --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/add-feature.md @@ -0,0 +1,22 @@ +## Description + + + + +______ + + +## Checklist + + + +- [ ] Added tests for intended behaviors +- [ ] Added tests for error and/or panic states +- [ ] Updated relevant documentation +- [ ] Tracked `rustfmt` changes +- [ ] No _new_ compiler warnings + diff --git a/.github/PULL_REQUEST_TEMPLATE/fix-bug.md b/.github/PULL_REQUEST_TEMPLATE/fix-bug.md new file mode 100644 index 000000000..4883ceab7 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/fix-bug.md @@ -0,0 +1,21 @@ +## Description + + + + +______ + + +## Checklist + + + +- [ ] Updated relevant documentation +- [ ] Updated relevant tests +- [ ] Tracked `rustfmt` changes +- [ ] No _new_ compiler warnings + diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 1e279b2eb..000000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,47 +0,0 @@ -## Description - - - -## Related Issue(s) - -- Closes #[issue number] - -## Type of Change - - -- [ ] Bug fix (non-breaking change which fixes an issue) -- [ ] New feature (non-breaking change which adds functionality) -- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) -- [ ] Documentation update -- [ ] Other (please describe): - -## Breaking Change - -If this PR introduces a breaking change, please provide a detailed description of the impact and the migration path for existing applications. - -## Checklist - - - -- [ ] I have performed a self-review of my own code -- [ ] I have commented my code, particularly in hard-to-understand areas -- [ ] I have run `cargo fmt` and `cargo clippy` to ensure my code is formatted and linted correctly -- [ ] I have made corresponding changes to the documentation -- [ ] My changes generate no new warnings -- [ ] I have added tests that prove my fix is effective or that my feature works -- [ ] New and existing unit tests pass locally with my changes -- [ ] Any dependent changes have been merged and published in downstream modules - -## Screenshots (if applicable) - -Please include any relevant screenshots or GIFs that demonstrate the changes made. - -## Additional Notes - -Please provide any additional information or context that may be helpful for reviewers. \ No newline at end of file diff --git a/.github/workflows/check-rust.yml b/.github/workflows/check-rust.yml index b1c36057d..4e2123e41 100644 --- a/.github/workflows/check-rust.yml +++ b/.github/workflows/check-rust.yml @@ -1,13 +1,13 @@ -name: CI +name: Rust build, benchmarks, and tests concurrency: group: ci-${{ github.ref }} cancel-in-progress: true +## on: - ## Run automatically for all PRs against main, regardless of what the changes are - ## to be safe and so we can more easily force re-run the CI when github is being - ## weird by using a blank commit + ## + # Run automatically for any push that changes Rust file(s) push: branches: [main, development, staging] @@ -24,225 +24,48 @@ on: required: false default: "" +## env: CARGO_TERM_COLOR: always VERBOSE: ${{ github.events.input.verbose }} +## +# jobs: - # runs cargo fmt - cargo-fmt: - name: cargo fmt + check: + name: Tests targeting ${{ matrix.rust-target }} for OS ${{ matrix.os }} runs-on: SubtensorCI - strategy: - matrix: - rust-branch: - - nightly-2024-03-05 - rust-target: - - x86_64-unknown-linux-gnu - # - x86_64-apple-darwin - os: - - ubuntu-latest - # - macos-latest - include: - - os: ubuntu-latest - # - os: macos-latest - env: - RELEASE_NAME: development - # RUSTFLAGS: -A warnings - RUSTV: ${{ matrix.rust-branch }} - RUST_BACKTRACE: full - RUST_BIN_DIR: target/${{ matrix.rust-target }} - SKIP_WASM_BUILD: 1 - TARGET: ${{ matrix.rust-target }} - steps: - - name: Check-out repository under $GITHUB_WORKSPACE - uses: actions/checkout@v2 - - - name: Install dependencies - run: sudo apt-get update && sudo apt-get install -y build-essential - - name: Install Rust ${{ matrix.rust-branch }} - uses: actions-rs/toolchain@v1.0.6 - with: - toolchain: ${{ matrix.rust-branch }} - components: rustfmt - profile: minimal - - - name: cargo fmt - run: cargo fmt --check --all - - # runs cargo clippy --workspace --all-targets --all-features - cargo-clippy: - name: cargo clippy - runs-on: SubtensorCI + ## + # Define multiple targets for builds and tests strategy: matrix: rust-branch: - - nightly-2024-03-05 - rust-target: - - x86_64-unknown-linux-gnu - # - x86_64-apple-darwin - os: - - ubuntu-latest - # - macos-latest - include: - - os: ubuntu-latest - # - os: macos-latest - env: - RELEASE_NAME: development - # RUSTFLAGS: -A warnings - RUSTV: ${{ matrix.rust-branch }} - RUST_BACKTRACE: full - RUST_BIN_DIR: target/${{ matrix.rust-target }} - SKIP_WASM_BUILD: 1 - TARGET: ${{ matrix.rust-target }} - steps: - - name: Check-out repository under $GITHUB_WORKSPACE - uses: actions/checkout@v2 - - - name: Install dependencies - run: | - sudo apt-get update && - sudo apt-get install -y clang curl libssl-dev llvm libudev-dev protobuf-compiler - - - name: Install Rust ${{ matrix.rust-branch }} - uses: actions-rs/toolchain@v1.0.6 - with: - toolchain: ${{ matrix.rust-branch }} - components: rustfmt, clippy - profile: minimal + - nightly-2023-01-18 - - name: Utilize Shared Rust Cache - uses: Swatinem/rust-cache@v2.2.1 - with: - key: ${{ matrix.os }}-${{ env.RUST_BIN_DIR }} - - - name: cargo clippy --workspace --all-targets --all-features - run: cargo clippy --workspace --all-targets --all-features - - # runs cargo test --workspace - cargo-test: - name: cargo test - runs-on: SubtensorCI - strategy: - matrix: - rust-branch: - - nightly-2024-03-05 rust-target: - x86_64-unknown-linux-gnu # - x86_64-apple-darwin - os: - - ubuntu-latest - # - macos-latest - include: - - os: ubuntu-latest - # - os: macos-latest - env: - RELEASE_NAME: development - # RUSTFLAGS: -A warnings - RUSTV: ${{ matrix.rust-branch }} - RUST_BACKTRACE: full - RUST_BIN_DIR: target/${{ matrix.rust-target }} - SKIP_WASM_BUILD: 1 - TARGET: ${{ matrix.rust-target }} - steps: - - name: Check-out repository under $GITHUB_WORKSPACE - uses: actions/checkout@v2 - - - name: Install dependencies - run: | - sudo apt-get update && - sudo apt-get install -y clang curl libssl-dev llvm libudev-dev protobuf-compiler - - - name: Install Rust ${{ matrix.rust-branch }} - uses: actions-rs/toolchain@v1.0.6 - with: - toolchain: ${{ matrix.rust-branch }} - components: rustfmt, clippy - profile: minimal - - - name: Utilize Rust shared cached - uses: Swatinem/rust-cache@v2.2.1 - with: - key: ${{ matrix.os }}-${{ env.RUST_BIN_DIR }} - - - name: cargo test --workspace - run: cargo test --workspace - # runs cargo test --workspace --features=runtime-benchmarks - cargo-test-benchmarks: - name: cargo test w/benchmarks - runs-on: SubtensorCI - strategy: - matrix: - rust-branch: - - nightly-2024-03-05 - rust-target: - - x86_64-unknown-linux-gnu - # - x86_64-apple-darwin os: - ubuntu-latest # - macos-latest - include: - - os: ubuntu-latest - # - os: macos-latest - env: - RELEASE_NAME: development - # RUSTFLAGS: -A warnings - RUSTV: ${{ matrix.rust-branch }} - RUST_BACKTRACE: full - RUST_BIN_DIR: target/${{ matrix.rust-target }} - SKIP_WASM_BUILD: 1 - TARGET: ${{ matrix.rust-target }} - steps: - - name: Check-out repository under $GITHUB_WORKSPACE - uses: actions/checkout@v2 - - - name: Install dependencies - run: | - sudo apt-get update && - sudo apt-get install -y clang curl libssl-dev llvm libudev-dev protobuf-compiler - - name: Install Rust ${{ matrix.rust-branch }} - uses: actions-rs/toolchain@v1.0.6 - with: - toolchain: ${{ matrix.rust-branch }} - components: rustfmt, clippy - profile: minimal - - - name: Utilize Rust shared cached - uses: Swatinem/rust-cache@v2.2.1 - with: - key: ${{ matrix.os }}-${{ env.RUST_BIN_DIR }} - - - name: cargo test --workspace --features=runtime-benchmarks - run: cargo test --workspace --features=runtime-benchmarks - - # ensures cargo fix has no trivial changes that can be applied - cargo-fix: - name: cargo fix - runs-on: SubtensorCI - strategy: - matrix: - rust-branch: - - nightly-2024-03-05 - rust-target: - - x86_64-unknown-linux-gnu - # - x86_64-apple-darwin - os: - - ubuntu-latest - # - macos-latest include: - os: ubuntu-latest # - os: macos-latest + + ## env: RELEASE_NAME: development - # RUSTFLAGS: -A warnings + RUSTFLAGS: -A warnings RUSTV: ${{ matrix.rust-branch }} RUST_BACKTRACE: full RUST_BIN_DIR: target/${{ matrix.rust-target }} SKIP_WASM_BUILD: 1 TARGET: ${{ matrix.rust-target }} + + ## steps: - name: Check-out repository under $GITHUB_WORKSPACE uses: actions/checkout@v2 @@ -250,13 +73,12 @@ jobs: - name: Install dependencies run: | sudo apt-get update && - sudo apt-get install -y clang curl libssl-dev llvm libudev-dev protobuf-compiler + sudo apt-get install -y git clang curl libssl-dev llvm libudev-dev protobuf-compiler - name: Install Rust ${{ matrix.rust-branch }} uses: actions-rs/toolchain@v1.0.6 with: toolchain: ${{ matrix.rust-branch }} - components: rustfmt, clippy profile: minimal - name: Utilize Rust shared cached @@ -264,88 +86,21 @@ jobs: with: key: ${{ matrix.os }}-${{ env.RUST_BIN_DIR }} - - name: cargo fix --workspace - run: | - # Run cargo fix on the project - cargo fix --workspace - - # Check for local git changes - if ! git diff --exit-code; then - echo "There are local changes after running 'cargo fix --workspace' ❌" - exit 1 - else - echo "No changes detected after running 'cargo fix --workspace' ✅" - fi - - check-feature-propagation: - name: zepter run check - runs-on: ubuntu-22.04 - - steps: - - name: Install stable Rust - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: stable - - - name: Install Zepter - run: cargo install --locked -q zepter && zepter --version - - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 # Dont clone historic commits. + - name: cargo fmt + run: cargo fmt --check - - name: Check features - run: zepter run check + ## TODO: maybe use `if` conditions in tests to target `--package ` + - name: cargo test + # timeout-minutes: 30 + run: cargo test --workspace - check-finney-migrations: - name: check finney migrations - runs-on: ubuntu-22.04 - steps: - - name: Checkout sources - uses: actions/checkout@v3 + - name: Run benchmarks + # timeout-minutes: 30 + run: | + pushd node && + cargo build --features=runtime-benchmarks --release - - name: Run Try Runtime Checks - uses: "paritytech/try-runtime-gha@v0.1.0" - with: - runtime-package: "node-subtensor-runtime" - node-uri: "wss://entrypoint-finney.opentensor.ai:443" - checks: "pre-and-post" - extra-args: "--disable-spec-version-check --no-weight-warnings --disable-idempotency-checks" + - name: Build executable + # timeout-minutes: 30 + run: cargo build --release - # ---- - # We can enable devnet and finney migrations once Polkadot v1.0 is deployed to finney, after - # which time all future migrations should be idempotent and won't start failing after the - # upgrade is deployed. - # ---- - # check-devnet-migrations: - # name: check devnet migrations - # runs-on: ubuntu-22.04 - # steps: - # - name: Checkout sources - # uses: actions/checkout@v3 - # - # - name: Run Try Runtime Checks - # uses: "paritytech/try-runtime-gha@v0.1.0" - # with: - # runtime-package: "node-subtensor-runtime" - # node-uri: "wss://dev.chain.opentensor.ai:443" - # checks: "pre-and-post" - # extra-args: "--disable-spec-version-check --no-weight-warnings --disable-idempotency-checks" - # - # check-testnet-migrations: - # name: check testnet migrations - # runs-on: ubuntu-22.04 - # steps: - # - name: Checkout sources - # uses: actions/checkout@v3 - # - # - name: Run Try Runtime Checks - # uses: "paritytech/try-runtime-gha@v0.1.0" - # with: - # runtime-package: "node-subtensor-runtime" - # node-uri: "wss://test.chain.opentensor.ai:443" - # checks: "pre-and-post" - # extra-args: "--disable-spec-version-check --no-weight-warnings --disable-idempotency-checks" - # diff --git a/Cargo.lock b/Cargo.lock index dca2eea4c..77ba885b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,20 +14,20 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.19.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ - "gimli 0.27.3", + "gimli 0.26.2", ] [[package]] name = "addr2line" -version = "0.21.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ - "gimli 0.28.1", + "gimli 0.27.1", ] [[package]] @@ -38,149 +38,149 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aead" -version = "0.5.2" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" dependencies = [ - "crypto-common", - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] -name = "aes" -version = "0.8.4" +name = "aead" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", + "generic-array 0.14.6", + "rand_core 0.6.4", ] [[package]] -name = "aes-gcm" -version = "0.10.3" +name = "aes" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", - "subtle", + "aes-soft", + "aesni", + "cipher 0.2.5", ] [[package]] -name = "ahash" -version = "0.7.8" +name = "aes" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ - "getrandom 0.2.14", - "once_cell", - "version_check", + "cfg-if", + "cipher 0.3.0", + "cpufeatures", + "opaque-debug 0.3.0", ] [[package]] -name = "ahash" -version = "0.8.11" +name = "aes-gcm" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" dependencies = [ - "cfg-if", - "getrandom 0.2.14", - "once_cell", - "version_check", - "zerocopy", + "aead 0.3.2", + "aes 0.6.0", + "cipher 0.2.5", + "ctr 0.6.0", + "ghash 0.3.1", + "subtle", ] [[package]] -name = "aho-corasick" -version = "1.1.3" +name = "aes-gcm" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" dependencies = [ - "memchr", + "aead 0.4.3", + "aes 0.7.5", + "cipher 0.3.0", + "ctr 0.8.0", + "ghash 0.4.4", + "subtle", ] [[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" +name = "aes-soft" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" dependencies = [ - "libc", + "cipher 0.2.5", + "opaque-debug 0.3.0", ] [[package]] -name = "ansi_term" -version = "0.12.1" +name = "aesni" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" dependencies = [ - "winapi", + "cipher 0.2.5", + "opaque-debug 0.3.0", ] [[package]] -name = "anstream" -version = "0.6.13" +name = "ahash" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "utf8parse", + "getrandom 0.2.8", + "once_cell", + "version_check", ] [[package]] -name = "anstyle" -version = "1.0.6" +name = "ahash" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "getrandom 0.2.8", + "once_cell", + "version_check", +] [[package]] -name = "anstyle-parse" -version = "0.2.3" +name = "aho-corasick" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ - "utf8parse", + "memchr", ] [[package]] -name = "anstyle-query" -version = "1.0.2" +name = "android_system_properties" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "windows-sys 0.52.0", + "libc", ] [[package]] -name = "anstyle-wincon" -version = "3.0.2" +name = "ansi_term" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ - "anstyle", - "windows-sys 0.52.0", + "winapi", ] [[package]] name = "anyhow" -version = "1.0.81" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" [[package]] name = "approx" @@ -191,17 +191,23 @@ dependencies = [ "num-traits", ] +[[package]] +name = "arc-swap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" + [[package]] name = "array-bytes" -version = "6.2.2" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f840fb7195bcfc5e17ea40c26e5ce6d5b9ce5d584466e17703209657e459ae0" +checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" [[package]] name = "arrayvec" @@ -211,24 +217,52 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "asn1-rs" -version = "0.5.2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33" +dependencies = [ + "asn1-rs-derive 0.1.0", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time 0.3.17", +] + +[[package]] +name = "asn1-rs" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" dependencies = [ - "asn1-rs-derive", + "asn1-rs-derive 0.4.0", "asn1-rs-impl", "displaydoc", "nom", "num-traits", "rusticata-macros", "thiserror", - "time", + "time 0.3.17", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.107", + "synstructure", ] [[package]] @@ -239,7 +273,7 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", "synstructure", ] @@ -251,94 +285,75 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] -name = "async-channel" -version = "1.9.0" +name = "asn1_der" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] +checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" [[package]] name = "async-io" -version = "2.3.2" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" dependencies = [ - "async-lock 3.3.0", - "cfg-if", + "async-lock", + "autocfg", "concurrent-queue", - "futures-io", "futures-lite", + "libc", + "log", "parking", "polling", - "rustix 0.38.32", "slab", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-lock" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" -dependencies = [ - "event-listener 2.5.3", + "socket2", + "waker-fn", + "windows-sys 0.42.0", ] [[package]] name = "async-lock" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" -dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy", - "pin-project-lite 0.2.14", -] - -[[package]] -name = "async-recursion" -version = "1.1.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30c5ef0ede93efbf733c1a727f3b6b5a1060bbedd5600183e66f6e4be4af0ec5" +checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.58", + "event-listener", + "futures-lite", ] [[package]] name = "async-trait" -version = "0.1.79" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" +checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "asynchronous-codec" -version = "0.6.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" +checksum = "06a0daa378f5fd10634e44b0a29b2a87b890657658e072a30d6f26e57ddee182" dependencies = [ "bytes", "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.14", + "pin-project-lite 0.2.9", ] +[[package]] +name = "atomic-waker" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599" + [[package]] name = "atty" version = "0.2.14" @@ -352,22 +367,22 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.2.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" dependencies = [ - "addr2line 0.21.0", + "addr2line 0.19.0", "cc", "cfg-if", "libc", "miniz_oxide", - "object 0.32.2", + "object 0.30.3", "rustc-demangle", ] @@ -379,9 +394,15 @@ checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" [[package]] name = "base16ct" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" + +[[package]] +name = "base58" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" [[package]] name = "base64" @@ -391,15 +412,15 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.7" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" [[package]] name = "beef" @@ -421,23 +442,21 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.65.1" +version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" dependencies = [ - "bitflags 1.3.2", + "bitflags", "cexpr", "clang-sys", "lazy_static", "lazycell", "peeking_take_while", - "prettyplease 0.2.17", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "syn 2.0.58", ] [[package]] @@ -446,12 +465,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "bitflags" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" - [[package]] name = "bitvec" version = "1.0.1" @@ -470,7 +483,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest 0.10.7", + "digest 0.10.6", ] [[package]] @@ -480,32 +493,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", - "arrayvec 0.7.4", - "constant_time_eq", + "arrayvec 0.7.2", + "constant_time_eq 0.3.0", ] [[package]] name = "blake2s_simd" -version = "1.0.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" +checksum = "db539cc2b5f6003621f1cd9ef92d7ded8ea5232c7de0f9faa2de251cd98730d4" dependencies = [ "arrayref", - "arrayvec 0.7.4", - "constant_time_eq", + "arrayvec 0.7.2", + "constant_time_eq 0.1.5", ] [[package]] name = "blake3" -version = "1.5.1" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec 0.7.2", "cc", "cfg-if", - "constant_time_eq", + "constant_time_eq 0.2.4", ] [[package]] @@ -514,7 +527,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ - "block-padding", + "block-padding 0.1.5", "byte-tools", "byteorder", "generic-array 0.12.4", @@ -526,16 +539,26 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] name = "block-buffer" -version = "0.10.4" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array 0.14.6", +] + +[[package]] +name = "block-modes" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" dependencies = [ - "generic-array 0.14.7", + "block-padding 0.2.1", + "cipher 0.2.5", ] [[package]] @@ -547,11 +570,17 @@ dependencies = [ "byte-tools", ] +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + [[package]] name = "bounded-collections" -version = "0.1.9" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca548b6163b872067dc5eb82fd130c56881435e30367d2073594a3d9744120dd" +checksum = "eb5b05133427c07c4776906f673ccf36c21b102c9829c641a5b56bd151d44fd6" dependencies = [ "log", "parity-scale-codec", @@ -567,9 +596,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.9.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" dependencies = [ "memchr", "serde", @@ -586,9 +615,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "byte-slice-cast" @@ -604,21 +633,21 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.15.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" [[package]] name = "byteorder" -version = "1.5.0" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.6.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "bzip2-sys" @@ -633,9 +662,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.6" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +checksum = "c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055" dependencies = [ "serde", ] @@ -648,22 +677,22 @@ checksum = "7b02b629252fe8ef6460461409564e2c21d0c8e77e0944f3d189ff06c4e932ad" [[package]] name = "cargo-platform" -version = "0.1.8" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" dependencies = [ "serde", ] [[package]] name = "cargo_metadata" -version = "0.15.4" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" +checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" dependencies = [ "camino", "cargo-platform", - "semver 1.0.22", + "semver 1.0.16", "serde", "serde_json", "thiserror", @@ -671,12 +700,22 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.91" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd97381a8cc6493395a5afc4c691c1084b3768db713b73aa215217aa245d153" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" dependencies = [ "jobserver", - "libc", +] + +[[package]] +name = "ccm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7" +dependencies = [ + "aead 0.3.2", + "cipher 0.2.5", + "subtle", ] [[package]] @@ -690,9 +729,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.15.7" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa50868b64a9a6fda9d593ce778849ea8715cd2a3d2cc17ffdb4a2f2f2f1961d" +checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" dependencies = [ "smallvec", ] @@ -711,48 +750,49 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] name = "chacha20" -version = "0.9.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" dependencies = [ "cfg-if", - "cipher", + "cipher 0.3.0", "cpufeatures", + "zeroize", ] [[package]] name = "chacha20poly1305" -version = "0.10.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" dependencies = [ - "aead", + "aead 0.4.3", "chacha20", - "cipher", + "cipher 0.3.0", "poly1305", "zeroize", ] [[package]] name = "chrono" -version = "0.4.37" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d04d43504c61aa6c7531f1871dd0d418d91130162063b789da00fd7057a5e" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", + "num-integer", "num-traits", - "serde", + "time 0.1.45", "wasm-bindgen", - "windows-targets 0.52.4", + "winapi", ] [[package]] name = "cid" -version = "0.9.0" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9b68e3193982cd54187d71afdb2a271ad4cf8af157858e9cb911b91321de143" +checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2" dependencies = [ "core2", "multibase", @@ -763,20 +803,27 @@ dependencies = [ [[package]] name = "cipher" -version = "0.4.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" dependencies = [ - "crypto-common", - "inout", - "zeroize", + "generic-array 0.14.6", +] + +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array 0.14.6", ] [[package]] name = "clang-sys" -version = "1.7.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" +checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" dependencies = [ "glob", "libc", @@ -785,43 +832,40 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76" dependencies = [ - "clap_builder", + "bitflags", "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" -dependencies = [ - "anstream", - "anstyle", "clap_lex", - "strsim 0.11.1", + "is-terminal", + "once_cell", + "strsim", + "termcolor", ] [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8" dependencies = [ - "heck 0.5.0", + "heck", + "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade" +dependencies = [ + "os_str_bytes", +] [[package]] name = "codespan-reporting" @@ -833,70 +877,43 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "colorchoice" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" - [[package]] name = "comfy-table" -version = "7.1.1" +version = "6.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b34115915337defe99b2aff5c2ce6771e5fbc4079f4b506301f5cf394c8452f7" +checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" dependencies = [ - "strum 0.26.2", - "strum_macros 0.26.2", + "strum", + "strum_macros", "unicode-width", ] [[package]] name = "concurrent-queue" -version = "2.4.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" dependencies = [ "crossbeam-utils", ] -[[package]] -name = "console" -version = "0.15.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" -dependencies = [ - "encode_unicode", - "lazy_static", - "libc", - "unicode-width", - "windows-sys 0.52.0", -] - [[package]] name = "const-oid" -version = "0.9.6" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" [[package]] -name = "const-random" -version = "0.1.18" +name = "constant_time_eq" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" -dependencies = [ - "const-random-macro", -] +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] -name = "const-random-macro" -version = "0.1.16" +name = "constant_time_eq" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" -dependencies = [ - "getrandom 0.2.14", - "once_cell", - "tiny-keccak", -] +checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" [[package]] name = "constant_time_eq" @@ -906,9 +923,9 @@ checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" [[package]] name = "core-foundation" -version = "0.9.4" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -916,9 +933,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "core2" @@ -940,36 +957,43 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] +[[package]] +name = "cpuid-bool" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" + [[package]] name = "cranelift-bforest" -version = "0.95.1" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1277fbfa94bc82c8ec4af2ded3e639d49ca5f7f3c7eeab2c66accd135ece4e70" +checksum = "2bc42ba2e232e5b20ff7dc299a812d53337dadce9a7e39a238e6a5cb82d2e57b" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.95.1" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e8c31ad3b2270e9aeec38723888fe1b0ace3bea2b06b3f749ccf46661d3220" +checksum = "253531aca9b6f56103c9420369db3263e784df39aa1c90685a1f69cfbba0623e" dependencies = [ + "arrayvec 0.7.2", "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", "cranelift-entity", "cranelift-isle", - "gimli 0.27.3", - "hashbrown 0.13.2", + "gimli 0.26.2", + "hashbrown 0.12.3", "log", "regalloc2", "smallvec", @@ -978,33 +1002,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.95.1" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ac5ac30d62b2d66f12651f6b606dbdfd9c2cfd0908de6b387560a277c5c9da" +checksum = "72f2154365e2bff1b1b8537a7181591fdff50d8e27fa6e40d5c69c3bad0ca7c8" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.95.1" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd82b8b376247834b59ed9bdc0ddeb50f517452827d4a11bccf5937b213748b8" +checksum = "687e14e3f5775248930e0d5a84195abef8b829958e9794bf8d525104993612b4" [[package]] name = "cranelift-entity" -version = "0.95.1" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40099d38061b37e505e63f89bab52199037a72b931ad4868d9089ff7268660b0" +checksum = "f42ea692c7b450ad18b8c9889661505d51c09ec4380cf1c2d278dbb2da22cae1" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.95.1" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a25d9d0a0ae3079c463c34115ec59507b4707175454f0eee0891e83e30e82d" +checksum = "8483c2db6f45fe9ace984e5adc5d058102227e4c62e5aa2054e16b0275fd3a6e" dependencies = [ "cranelift-codegen", "log", @@ -1014,15 +1038,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.95.1" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80de6a7d0486e4acbd5f9f87ec49912bf4c8fb6aea00087b989685460d4469ba" +checksum = "e9793158837678902446c411741d87b43f57dadfb944f2440db4287cda8cbd59" [[package]] name = "cranelift-native" -version = "0.95.1" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6b03e0e03801c4b3fd8ce0758a94750c07a44e7944cc0ffbf0d3f2e7c79b00" +checksum = "72668c7755f2b880665cb422c8ad2d56db58a88b9bebfef0b73edc2277c13c49" dependencies = [ "cranelift-codegen", "libc", @@ -1031,9 +1055,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.95.1" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff3220489a3d928ad91e59dd7aeaa8b3de18afb554a6211213673a71c90737ac" +checksum = "3852ce4b088b44ac4e29459573943009a70d1b192c8d77ef949b4e814f656fc1" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1045,39 +1069,72 @@ dependencies = [ "wasmtime-types", ] +[[package]] +name = "crc" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" + [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ "cfg-if", + "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" dependencies = [ + "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" dependencies = [ + "autocfg", + "cfg-if", "crossbeam-utils", + "memoffset 0.7.1", + "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +dependencies = [ + "cfg-if", +] [[package]] name = "crunchy" @@ -1087,11 +1144,11 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.5.5" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", "subtle", "zeroize", @@ -1103,9 +1160,8 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", - "typenum 1.17.0", + "generic-array 0.14.6", + "typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1114,7 +1170,17 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" +dependencies = [ + "generic-array 0.14.6", "subtle", ] @@ -1124,17 +1190,26 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "subtle", ] [[package]] name = "ctr" -version = "0.9.2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" +dependencies = [ + "cipher 0.2.5", +] + +[[package]] +name = "ctr" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" dependencies = [ - "cipher", + "cipher 0.3.0", ] [[package]] @@ -1165,37 +1240,23 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.1.2" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +checksum = "8da00a7a9a4eb92a0a0f8e75660926d48f0d0f3c537e455c457bcdaa1e16b1ac" dependencies = [ "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest 0.10.7", "fiat-crypto", - "platforms", - "rustc_version 0.4.0", + "packed_simd_2", + "platforms 3.0.2", "subtle", "zeroize", ] -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.58", -] - [[package]] name = "cxx" -version = "1.0.120" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4dc7287237dd438b926a81a1a5605dad33d286870e5eee2db17bf2bcd9e92a" +checksum = "bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9" dependencies = [ "cc", "cxxbridge-flags", @@ -1205,9 +1266,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.120" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47c6c8ad7c1a10d3ef0fe3ff6733f4db0d78f08ef0b13121543163ef327058b" +checksum = "94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d" dependencies = [ "cc", "codespan-reporting", @@ -1215,31 +1276,31 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "cxxbridge-flags" -version = "1.0.120" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "701a1ac7a697e249cdd8dc026d7a7dafbfd0dbcd8bd24ec55889f2bc13dd6287" +checksum = "48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a" [[package]] name = "cxxbridge-macro" -version = "1.0.120" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b404f596046b0bb2d903a9c786b875a126261b52b7c3a64bbb66382c41c771df" +checksum = "81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "darling" -version = "0.20.8" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" dependencies = [ "darling_core", "darling_macro", @@ -1247,40 +1308,40 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.8" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim 0.10.0", - "syn 2.0.58", + "strsim", + "syn 1.0.107", ] [[package]] name = "darling_macro" -version = "0.20.8" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" dependencies = [ "darling_core", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "data-encoding" -version = "2.5.0" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" +checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" [[package]] name = "data-encoding-macro" -version = "0.1.14" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c01c06f5f429efdf2bae21eb67c28b3df3cf85b7dd2d8ef09c0838dac5d33e" +checksum = "86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -1288,31 +1349,32 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.12" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0047d07f2c89b17dd631c80450d69841a6b5d7fb17278cbc43d7e4cfcf2576f3" +checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "der" -version = "0.7.9" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ "const-oid", + "pem-rfc7468", "zeroize", ] [[package]] name = "der-parser" -version = "8.2.0" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" dependencies = [ - "asn1-rs", + "asn1-rs 0.3.1", "displaydoc", "nom", "num-bigint", @@ -1321,13 +1383,17 @@ dependencies = [ ] [[package]] -name = "deranged" -version = "0.3.11" +name = "der-parser" +version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" dependencies = [ - "powerfmt", - "serde", + "asn1-rs 0.5.1", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", ] [[package]] @@ -1338,7 +1404,38 @@ checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", +] + +[[package]] +name = "derive_builder" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 1.0.107", +] + +[[package]] +name = "derive_builder_macro" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" +dependencies = [ + "derive_builder_core", + "syn 1.0.107", ] [[package]] @@ -1349,7 +1446,7 @@ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -1373,17 +1470,16 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] name = "digest" -version = "0.10.7" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.4", - "const-oid", + "block-buffer 0.10.3", "crypto-common", "subtle", ] @@ -1431,13 +1527,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.4" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] @@ -1446,11 +1542,17 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + [[package]] name = "dtoa" -version = "1.0.9" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" +checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" [[package]] name = "dyn-clonable" @@ -1470,27 +1572,25 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "dyn-clone" -version = "1.0.17" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60" [[package]] name = "ecdsa" -version = "0.16.9" +version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" dependencies = [ "der", - "digest 0.10.7", "elliptic-curve", "rfc6979", - "signature 2.2.0", - "spki", + "signature", ] [[package]] @@ -1499,17 +1599,7 @@ version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" dependencies = [ - "signature 1.6.4", -] - -[[package]] -name = "ed25519" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" -dependencies = [ - "pkcs8", - "signature 2.2.0", + "signature", ] [[package]] @@ -1519,23 +1609,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" dependencies = [ "curve25519-dalek 3.2.0", - "ed25519 1.5.3", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "ed25519-dalek" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" -dependencies = [ - "curve25519-dalek 4.1.2", - "ed25519 2.2.3", - "rand_core 0.6.4", + "ed25519", + "rand 0.7.3", "serde", - "sha2 0.10.8", - "subtle", + "sha2 0.9.9", "zeroize", ] @@ -1555,22 +1632,25 @@ dependencies = [ [[package]] name = "either" -version = "1.10.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "elliptic-curve" -version = "0.13.8" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ "base16ct", "crypto-bigint", - "digest 0.10.7", + "der", + "digest 0.10.6", "ff", - "generic-array 0.14.7", + "generic-array 0.14.6", "group", + "hkdf", + "pem-rfc7468", "pkcs8", "rand_core 0.6.4", "sec1", @@ -1578,49 +1658,43 @@ dependencies = [ "zeroize", ] -[[package]] -name = "encode_unicode" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" - [[package]] name = "enum-as-inner" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "enumflags2" -version = "0.7.9" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" +checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939" dependencies = [ "enumflags2_derive", ] [[package]] name = "enumflags2_derive" -version = "0.7.9" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" +checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.38", ] [[package]] name = "env_logger" -version = "0.10.2" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" dependencies = [ "humantime", "is-terminal", @@ -1636,19 +1710,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] -name = "equivalent" -version = "1.0.1" +name = "errno" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] [[package]] -name = "errno" -version = "0.3.8" +name = "errno-dragonfly" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" dependencies = [ + "cc", "libc", - "windows-sys 0.52.0", ] [[package]] @@ -1684,27 +1763,6 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" -[[package]] -name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite 0.2.14", -] - -[[package]] -name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite 0.2.14", -] - [[package]] name = "exit-future" version = "0.2.0" @@ -1714,20 +1772,6 @@ dependencies = [ "futures", ] -[[package]] -name = "expander" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e83c02035136f1592a47964ea60c05a50e4ed8b5892cfac197063850898d4d" -dependencies = [ - "blake2", - "fs-err", - "prettier-please", - "proc-macro2", - "quote", - "syn 2.0.58", -] - [[package]] name = "fake-simd" version = "0.1.2" @@ -1742,9 +1786,12 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "2.0.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +dependencies = [ + "instant", +] [[package]] name = "fdlimit" @@ -1757,9 +1804,9 @@ dependencies = [ [[package]] name = "ff" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ "rand_core 0.6.4", "subtle", @@ -1767,9 +1814,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.7" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c007b1ae3abe1cb6f85a16305acd418b7ca6343b953633fee2b76d8f108b830f" +checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" [[package]] name = "file-per-thread-logger" @@ -1783,21 +1830,21 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.23" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.4.1", - "windows-sys 0.52.0", + "redox_syscall", + "windows-sys 0.42.0", ] [[package]] name = "finality-grandpa" -version = "0.16.2" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" +checksum = "e24e6c429951433ccb7c87fd528c60084834dcd14763182c1f83291bcde24c34" dependencies = [ "either", "futures", @@ -1841,9 +1888,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.28" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" dependencies = [ "crc32fast", "libz-sys", @@ -1868,16 +1915,16 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "parity-scale-codec", ] [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ "percent-encoding", ] @@ -1891,7 +1938,7 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-support", "frame-support-procedural", @@ -1916,7 +1963,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "Inflector", "array-bytes", @@ -1950,13 +1997,12 @@ dependencies = [ "sp-database", "sp-externalities", "sp-inherents", - "sp-io", "sp-keystore", "sp-runtime", "sp-state-machine", + "sp-std", "sp-storage", "sp-trie", - "sp-wasm-interface", "thiserror", "thousands", ] @@ -1964,7 +2010,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-support", "frame-system", @@ -1980,9 +2026,9 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "16.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" dependencies = [ "cfg-if", "parity-scale-codec", @@ -1993,37 +2039,31 @@ dependencies = [ [[package]] name = "frame-remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "async-recursion", "futures", - "indicatif", - "jsonrpsee", "log", "parity-scale-codec", "serde", "sp-core", "sp-io", "sp-runtime", - "spinners", "substrate-rpc-client", "tokio", - "tokio-retry", ] [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "bitflags 1.3.2", - "environmental", + "bitflags", "frame-metadata", "frame-support-procedural", "impl-trait-for-tuples", "k256", "log", - "macro_magic", + "once_cell", "parity-scale-codec", "paste", "scale-info", @@ -2033,7 +2073,6 @@ dependencies = [ "sp-arithmetic", "sp-core", "sp-core-hashing-proc-macro", - "sp-debug-derive", "sp-inherents", "sp-io", "sp-runtime", @@ -2048,49 +2087,45 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "Inflector", "cfg-expr", "derive-syn-parse", - "expander", "frame-support-procedural-tools", "itertools", - "macro_magic", - "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-support-procedural-tools-derive", - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "cfg-if", "frame-support", "log", "parity-scale-codec", @@ -2107,7 +2142,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-benchmarking", "frame-support", @@ -2122,7 +2157,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "parity-scale-codec", "sp-api", @@ -2131,7 +2166,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-support", "parity-scale-codec", @@ -2140,15 +2175,6 @@ dependencies = [ "sp-std", ] -[[package]] -name = "fs-err" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" -dependencies = [ - "autocfg", -] - [[package]] name = "fs2" version = "0.4.3" @@ -2167,9 +2193,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" dependencies = [ "futures-channel", "futures-core", @@ -2182,9 +2208,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" dependencies = [ "futures-core", "futures-sink", @@ -2192,15 +2218,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" dependencies = [ "futures-core", "futures-task", @@ -2210,29 +2236,34 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" [[package]] name = "futures-lite" -version = "2.3.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" dependencies = [ + "fastrand", "futures-core", - "pin-project-lite 0.2.14", + "futures-io", + "memchr", + "parking", + "pin-project-lite 0.2.9", + "waker-fn", ] [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] @@ -2242,33 +2273,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" dependencies = [ "futures-io", - "rustls 0.20.9", - "webpki", + "rustls 0.20.8", + "webpki 0.22.0", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" [[package]] name = "futures-timer" -version = "3.0.3" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" dependencies = [ "futures-channel", "futures-core", @@ -2277,7 +2308,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.14", + "pin-project-lite 0.2.9", "pin-utils", "slab", ] @@ -2297,18 +2328,17 @@ version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" dependencies = [ - "typenum 1.17.0", + "typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ - "typenum 1.17.0", + "typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)", "version_check", - "zeroize", ] [[package]] @@ -2334,9 +2364,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", "libc", @@ -2344,40 +2374,41 @@ dependencies = [ ] [[package]] -name = "getrandom_or_panic" -version = "0.0.3" +name = "ghash" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" +checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" dependencies = [ - "rand_core 0.6.4", + "opaque-debug 0.3.0", + "polyval 0.4.5", ] [[package]] name = "ghash" -version = "0.5.1" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" dependencies = [ - "opaque-debug 0.3.1", - "polyval", + "opaque-debug 0.3.0", + "polyval 0.5.3", ] [[package]] name = "gimli" -version = "0.27.3" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" dependencies = [ "fallible-iterator", - "indexmap 1.9.3", + "indexmap", "stable_deref_trait", ] [[package]] name = "gimli" -version = "0.28.1" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec" [[package]] name = "glob" @@ -2387,22 +2418,22 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.14" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" dependencies = [ "aho-corasick", "bstr", + "fnv", "log", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex", ] [[package]] name = "group" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff", "rand_core 0.6.4", @@ -2411,9 +2442,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.26" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" dependencies = [ "bytes", "fnv", @@ -2421,7 +2452,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.2.6", + "indexmap", "slab", "tokio", "tokio-util", @@ -2430,9 +2461,9 @@ dependencies = [ [[package]] name = "handlebars" -version = "4.5.0" +version = "4.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" +checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a" dependencies = [ "log", "pest", @@ -2444,9 +2475,9 @@ dependencies = [ [[package]] name = "hash-db" -version = "0.16.0" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" +checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" [[package]] name = "hash256-std-hasher" @@ -2463,7 +2494,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.8", + "ahash 0.7.6", ] [[package]] @@ -2472,15 +2503,9 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.11", + "ahash 0.8.3", ] -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - [[package]] name = "heck" version = "0.4.1" @@ -2488,25 +2513,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "heck" -version = "0.5.0" +name = "hermit-abi" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] [[package]] name = "hermit-abi" -version = "0.1.19" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" dependencies = [ "libc", ] [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "856b5cb0902c2b6d65d5fd97dfa30f9b70c7538e770b98eab5ed52d8db923e01" [[package]] name = "hex" @@ -2521,15 +2549,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] -name = "hmac" -version = "0.8.1" +name = "hkdf" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +dependencies = [ + "hmac 0.12.1", +] + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" dependencies = [ "crypto-mac 0.8.0", "digest 0.9.0", ] +[[package]] +name = "hmac" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" +dependencies = [ + "crypto-mac 0.10.1", + "digest 0.9.0", +] + [[package]] name = "hmac" version = "0.11.0" @@ -2546,7 +2593,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", + "digest 0.10.6", ] [[package]] @@ -2556,19 +2603,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array 0.14.7", + "generic-array 0.14.6", "hmac 0.8.1", ] -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "hostname" version = "0.3.1" @@ -2582,9 +2620,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.12" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", @@ -2593,20 +2631,20 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", - "pin-project-lite 0.2.14", + "pin-project-lite 0.2.9", ] [[package]] name = "http-range-header" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" +checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" [[package]] name = "httparse" @@ -2616,9 +2654,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "humantime" @@ -2628,9 +2666,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.28" +version = "0.14.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" dependencies = [ "bytes", "futures-channel", @@ -2642,8 +2680,8 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project-lite 0.2.14", - "socket2 0.5.6", + "pin-project-lite 0.2.9", + "socket2", "tokio", "tower-service", "tracing", @@ -2652,42 +2690,41 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.2" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" dependencies = [ - "futures-util", "http", "hyper", "log", - "rustls 0.21.10", + "rustls 0.20.8", "rustls-native-certs", "tokio", "tokio-rustls", - "webpki-roots 0.25.4", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows-core 0.52.0", + "winapi", ] [[package]] name = "iana-time-zone-haiku" -version = "0.1.2" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" dependencies = [ - "cc", + "cxx", + "cxx-build", ] [[package]] @@ -2709,9 +2746,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.5.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2719,19 +2756,19 @@ dependencies = [ [[package]] name = "if-addrs" -version = "0.10.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +checksum = "cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9" dependencies = [ "libc", - "windows-sys 0.48.0", + "winapi", ] [[package]] name = "if-watch" -version = "3.2.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e" +checksum = "ba7abdbb86e485125dad06c2691e1e393bf3b08c7b743b43aa162a00fd39062e" dependencies = [ "async-io", "core-foundation", @@ -2790,52 +2827,20 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "indexmap" -version = "1.9.3" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", "hashbrown 0.12.3", "serde", ] -[[package]] -name = "indexmap" -version = "2.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" -dependencies = [ - "equivalent", - "hashbrown 0.14.3", -] - -[[package]] -name = "indicatif" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" -dependencies = [ - "console", - "instant", - "number_prefix", - "portable-atomic", - "unicode-width", -] - -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array 0.14.7", -] - [[package]] name = "instant" version = "0.1.12" @@ -2861,15 +2866,33 @@ dependencies = [ "cargo-husky", ] +[[package]] +name = "interceptor" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b" +dependencies = [ + "async-trait", + "bytes", + "log", + "rand 0.8.5", + "rtcp", + "rtp", + "thiserror", + "tokio", + "waitgroup", + "webrtc-srtp", + "webrtc-util", +] + [[package]] name = "io-lifetimes" -version = "1.0.11" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" dependencies = [ - "hermit-abi 0.3.9", "libc", - "windows-sys 0.48.0", + "windows-sys 0.45.0", ] [[package]] @@ -2880,31 +2903,32 @@ checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" [[package]] name = "ipconfig" -version = "0.3.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" dependencies = [ - "socket2 0.5.6", + "socket2", "widestring", - "windows-sys 0.48.0", + "winapi", "winreg", ] [[package]] name = "ipnet" -version = "2.9.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.52.0", + "hermit-abi 0.3.0", + "io-lifetimes", + "rustix", + "windows-sys 0.45.0", ] [[package]] @@ -2918,36 +2942,35 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "jobserver" -version = "0.1.28" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" +checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" dependencies = [ "wasm-bindgen", ] [[package]] name = "jsonrpsee" -version = "0.16.3" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "367a292944c07385839818bb71c8d76611138e2dedb0677d035b8da21d29c78b" +checksum = "7d291e3a5818a2384645fd9756362e6d89cf0541b0b916fa7702ea4a9833608e" dependencies = [ "jsonrpsee-core", - "jsonrpsee-http-client", "jsonrpsee-proc-macros", "jsonrpsee-server", "jsonrpsee-types", @@ -2957,9 +2980,9 @@ dependencies = [ [[package]] name = "jsonrpsee-client-transport" -version = "0.16.3" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8b3815d9f5d5de348e5f162b316dc9cdf4548305ebb15b4eb9328e66cf27d7a" +checksum = "965de52763f2004bc91ac5bcec504192440f0b568a5d621c59d9dbd6f886c3fb" dependencies = [ "futures-util", "http", @@ -2973,18 +2996,18 @@ dependencies = [ "tokio-rustls", "tokio-util", "tracing", - "webpki-roots 0.25.4", + "webpki-roots", ] [[package]] name = "jsonrpsee-core" -version = "0.16.3" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5dde66c53d6dcdc8caea1874a45632ec0fcf5b437789f1e45766a1512ce803" +checksum = "a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b" dependencies = [ "anyhow", - "arrayvec 0.7.4", - "async-lock 2.8.0", + "arrayvec 0.7.2", + "async-lock", "async-trait", "beef", "futures-channel", @@ -3004,43 +3027,24 @@ dependencies = [ "tracing", ] -[[package]] -name = "jsonrpsee-http-client" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e5f9fabdd5d79344728521bb65e3106b49ec405a78b66fbff073b72b389fa43" -dependencies = [ - "async-trait", - "hyper", - "hyper-rustls", - "jsonrpsee-core", - "jsonrpsee-types", - "rustc-hash", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", -] - [[package]] name = "jsonrpsee-proc-macros" -version = "0.16.3" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44e8ab85614a08792b9bff6c8feee23be78c98d0182d4c622c05256ab553892a" +checksum = "baa6da1e4199c10d7b1d0a6e5e8bd8e55f351163b6f4b3cbb044672a69bd4c1c" dependencies = [ - "heck 0.4.1", - "proc-macro-crate 1.1.3", + "heck", + "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "jsonrpsee-server" -version = "0.16.3" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4d945a6008c9b03db3354fb3c83ee02d2faa9f2e755ec1dfb69c3551b8f4ba" +checksum = "1fb69dad85df79527c019659a992498d03f8495390496da2f07e6c24c2b356fc" dependencies = [ "futures-channel", "futures-util", @@ -3060,9 +3064,9 @@ dependencies = [ [[package]] name = "jsonrpsee-types" -version = "0.16.3" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245ba8e5aa633dd1c1e4fae72bce06e71f42d34c14a2767c6b4d173b57bee5e5" +checksum = "5bd522fe1ce3702fd94812965d7bb7a3364b1c9aba743944c5a00529aae80f8c" dependencies = [ "anyhow", "beef", @@ -3074,9 +3078,9 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.16.3" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e1b3975ed5d73f456478681a417128597acd6a2487855fdb7b4a3d4d195bf5e" +checksum = "0b83daeecfc6517cfe210df24e570fb06213533dfb990318fae781f4c7119dd9" dependencies = [ "http", "jsonrpsee-client-transport", @@ -3086,22 +3090,21 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" dependencies = [ "cfg-if", "ecdsa", "elliptic-curve", - "once_cell", - "sha2 0.10.8", + "sha2 0.10.6", ] [[package]] name = "keccak" -version = "0.1.5" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" dependencies = [ "cpufeatures", ] @@ -3127,9 +3130,9 @@ dependencies = [ [[package]] name = "kvdb-rocksdb" -version = "0.19.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" +checksum = "2182b8219fee6bd83aacaab7344e840179ae079d5216aa4e249b4d704646a844" dependencies = [ "kvdb", "num_cpus", @@ -3153,40 +3156,50 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" [[package]] name = "libloading" -version = "0.8.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ "cfg-if", - "windows-targets 0.52.4", + "winapi", ] +[[package]] +name = "libm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" + +[[package]] +name = "libm" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" + [[package]] name = "libp2p" -version = "0.51.4" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f35eae38201a993ece6bdc823292d6abd1bffed1c4d0f4a3517d2bd8e1d917fe" +checksum = "2e0a0d2f693675f49ded13c5d510c48b78069e23cbd9108d7ccd59f6dc568819" dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.14", + "getrandom 0.2.8", "instant", - "libp2p-allow-block-list", - "libp2p-connection-limits", "libp2p-core", "libp2p-dns", "libp2p-identify", - "libp2p-identity", "libp2p-kad", "libp2p-mdns", "libp2p-metrics", + "libp2p-mplex", "libp2p-noise", "libp2p-ping", "libp2p-quic", @@ -3194,48 +3207,29 @@ dependencies = [ "libp2p-swarm", "libp2p-tcp", "libp2p-wasm-ext", + "libp2p-webrtc", "libp2p-websocket", "libp2p-yamux", "multiaddr", + "parking_lot 0.12.1", "pin-project", -] - -[[package]] -name = "libp2p-allow-block-list" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510daa05efbc25184458db837f6f9a5143888f1caa742426d92e1833ddd38a50" -dependencies = [ - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "void", -] - -[[package]] -name = "libp2p-connection-limits" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4caa33f1d26ed664c4fe2cca81a08c8e07d4c1c04f2f4ac7655c2dd85467fda0" -dependencies = [ - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "void", + "smallvec", ] [[package]] name = "libp2p-core" -version = "0.39.2" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c1df63c0b582aa434fb09b2d86897fa2b419ffeccf934b36f87fcedc8e835c2" +checksum = "b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f" dependencies = [ + "asn1_der", + "bs58", + "ed25519-dalek", "either", "fnv", "futures", "futures-timer", "instant", - "libp2p-identity", "log", "multiaddr", "multihash", @@ -3243,20 +3237,24 @@ dependencies = [ "once_cell", "parking_lot 0.12.1", "pin-project", - "quick-protobuf", + "prost", + "prost-build", "rand 0.8.5", "rw-stream-sink", + "sec1", + "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", "void", + "zeroize", ] [[package]] name = "libp2p-dns" -version = "0.39.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146ff7034daae62077c415c2376b8057368042df6ab95f5432ad5e88568b1554" +checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" dependencies = [ "futures", "libp2p-core", @@ -3268,51 +3266,32 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.42.2" +version = "0.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5455f472243e63b9c497ff320ded0314254a9eb751799a39c283c6f20b793f3c" +checksum = "c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf" dependencies = [ "asynchronous-codec", - "either", "futures", "futures-timer", "libp2p-core", - "libp2p-identity", "libp2p-swarm", "log", - "lru 0.10.1", - "quick-protobuf", - "quick-protobuf-codec", + "lru 0.8.1", + "prost", + "prost-build", + "prost-codec", "smallvec", "thiserror", "void", ] -[[package]] -name = "libp2p-identity" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276bb57e7af15d8f100d3c11cbdd32c6752b7eef4ba7a18ecf464972c07abcce" -dependencies = [ - "bs58", - "ed25519-dalek 2.1.1", - "log", - "multiaddr", - "multihash", - "quick-protobuf", - "rand 0.8.5", - "sha2 0.10.8", - "thiserror", - "zeroize", -] - [[package]] name = "libp2p-kad" -version = "0.43.3" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff" +checksum = "2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.2", "asynchronous-codec", "bytes", "either", @@ -3321,12 +3300,12 @@ dependencies = [ "futures-timer", "instant", "libp2p-core", - "libp2p-identity", "libp2p-swarm", "log", - "quick-protobuf", + "prost", + "prost-build", "rand 0.8.5", - "sha2 0.10.8", + "sha2 0.10.6", "smallvec", "thiserror", "uint", @@ -3336,20 +3315,19 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.43.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19983e1f949f979a928f2c603de1cf180cc0dc23e4ac93a62651ccb18341460b" +checksum = "04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b" dependencies = [ "data-encoding", "futures", "if-watch", "libp2p-core", - "libp2p-identity", "libp2p-swarm", "log", "rand 0.8.5", "smallvec", - "socket2 0.4.10", + "socket2", "tokio", "trust-dns-proto", "void", @@ -3357,9 +3335,9 @@ dependencies = [ [[package]] name = "libp2p-metrics" -version = "0.12.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a42ec91e227d7d0dafa4ce88b333cdf5f277253873ab087555c92798db2ddd46" +checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" dependencies = [ "libp2p-core", "libp2p-identify", @@ -3369,36 +3347,53 @@ dependencies = [ "prometheus-client", ] +[[package]] +name = "libp2p-mplex" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03805b44107aa013e7cbbfa5627b31c36cbedfdfb00603c0311998882bc4bace" +dependencies = [ + "asynchronous-codec", + "bytes", + "futures", + "libp2p-core", + "log", + "nohash-hasher", + "parking_lot 0.12.1", + "rand 0.8.5", + "smallvec", + "unsigned-varint", +] + [[package]] name = "libp2p-noise" -version = "0.42.2" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3673da89d29936bc6435bafc638e2f184180d554ce844db65915113f86ec5e" +checksum = "a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e" dependencies = [ "bytes", "curve25519-dalek 3.2.0", "futures", "libp2p-core", - "libp2p-identity", "log", "once_cell", - "quick-protobuf", + "prost", + "prost-build", "rand 0.8.5", - "sha2 0.10.8", + "sha2 0.10.6", "snow", "static_assertions", "thiserror", - "x25519-dalek", + "x25519-dalek 1.1.1", "zeroize", ] [[package]] name = "libp2p-ping" -version = "0.42.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e57759c19c28a73ef1eb3585ca410cefb72c1a709fcf6de1612a378e4219202" +checksum = "929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f" dependencies = [ - "either", "futures", "futures-timer", "instant", @@ -3411,47 +3406,48 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.7.0-alpha.3" +version = "0.7.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735" +checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" dependencies = [ "bytes", "futures", "futures-timer", "if-watch", "libp2p-core", - "libp2p-identity", "libp2p-tls", "log", "parking_lot 0.12.1", "quinn-proto", "rand 0.8.5", - "rustls 0.20.9", + "rustls 0.20.8", "thiserror", "tokio", ] [[package]] name = "libp2p-request-response" -version = "0.24.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffdb374267d42dc5ed5bc53f6e601d4a64ac5964779c6e40bb9e4f14c1e30d5" +checksum = "3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884" dependencies = [ "async-trait", + "bytes", "futures", "instant", "libp2p-core", - "libp2p-identity", "libp2p-swarm", + "log", "rand 0.8.5", "smallvec", + "unsigned-varint", ] [[package]] name = "libp2p-swarm" -version = "0.42.2" +version = "0.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "903b3d592d7694e56204d211f29d31bc004be99386644ba8731fc3e3ef27b296" +checksum = "b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0" dependencies = [ "either", "fnv", @@ -3459,31 +3455,32 @@ dependencies = [ "futures-timer", "instant", "libp2p-core", - "libp2p-identity", "libp2p-swarm-derive", "log", + "pin-project", "rand 0.8.5", "smallvec", + "thiserror", "tokio", "void", ] [[package]] name = "libp2p-swarm-derive" -version = "0.32.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f" +checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" dependencies = [ - "heck 0.4.1", + "heck", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "libp2p-tcp" -version = "0.39.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d33698596d7722d85d3ab0c86c2c322254fce1241e91208e3679b4eb3026cf" +checksum = "b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d" dependencies = [ "futures", "futures-timer", @@ -3491,34 +3488,33 @@ dependencies = [ "libc", "libp2p-core", "log", - "socket2 0.4.10", + "socket2", "tokio", ] [[package]] name = "libp2p-tls" -version = "0.1.0" +version = "0.1.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" +checksum = "f7905ce0d040576634e8a3229a7587cc8beab83f79db6023800f1792895defa8" dependencies = [ "futures", "futures-rustls", "libp2p-core", - "libp2p-identity", - "rcgen", - "ring 0.16.20", - "rustls 0.20.9", + "rcgen 0.10.0", + "ring", + "rustls 0.20.8", "thiserror", - "webpki", - "x509-parser", + "webpki 0.22.0", + "x509-parser 0.14.0", "yasna", ] [[package]] name = "libp2p-wasm-ext" -version = "0.39.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77dff9d32353a5887adb86c8afc1de1a94d9e8c3bc6df8b2201d7cdf5c848f43" +checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069" dependencies = [ "futures", "js-sys", @@ -3528,11 +3524,42 @@ dependencies = [ "wasm-bindgen-futures", ] +[[package]] +name = "libp2p-webrtc" +version = "0.4.0-alpha" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" +dependencies = [ + "async-trait", + "asynchronous-codec", + "bytes", + "futures", + "futures-timer", + "hex", + "if-watch", + "libp2p-core", + "libp2p-noise", + "log", + "multihash", + "prost", + "prost-build", + "prost-codec", + "rand 0.8.5", + "rcgen 0.9.3", + "serde", + "stun", + "thiserror", + "tinytemplate", + "tokio", + "tokio-util", + "webrtc", +] + [[package]] name = "libp2p-websocket" -version = "0.41.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "111273f7b3d3510524c752e8b7a5314b7f7a1fee7e68161c01a7d72cbb06db9f" +checksum = "1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54" dependencies = [ "either", "futures", @@ -3544,37 +3571,28 @@ dependencies = [ "rw-stream-sink", "soketto", "url", - "webpki-roots 0.22.6", + "webpki-roots", ] [[package]] name = "libp2p-yamux" -version = "0.43.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd21d950662700a385d4c6d68e2f5f54d778e97068cdd718522222ef513bda" +checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" dependencies = [ "futures", "libp2p-core", "log", + "parking_lot 0.12.1", "thiserror", "yamux", ] -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.5.0", - "libc", -] - [[package]] name = "librocksdb-sys" -version = "0.11.0+8.1.1" +version = "0.8.0+7.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" +checksum = "611804e4666a25136fcc5f8cf425ab4d26c7f74ea245ffe92ea23b85b6420b5d" dependencies = [ "bindgen", "bzip2-sys", @@ -3601,7 +3619,7 @@ dependencies = [ "rand 0.8.5", "serde", "sha2 0.9.9", - "typenum 1.17.0", + "typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3635,9 +3653,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.16" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9" +checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" dependencies = [ "cc", "pkg-config", @@ -3646,9 +3664,9 @@ dependencies = [ [[package]] name = "link-cplusplus" -version = "1.0.9" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" dependencies = [ "cc", ] @@ -3670,9 +3688,9 @@ dependencies = [ [[package]] name = "linregress" -version = "0.5.3" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4de04dcecc58d366391f9920245b85ffa684558a5ef6e7736e754347c3aea9c2" +checksum = "475015a7f8f017edb28d2e69813be23500ad4b32cfe3421c4148efc97324ee52" dependencies = [ "nalgebra", ] @@ -3683,17 +3701,11 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" -[[package]] -name = "linux-raw-sys" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" - [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ "autocfg", "scopeguard", @@ -3701,9 +3713,12 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] [[package]] name = "lru" @@ -3716,11 +3731,11 @@ dependencies = [ [[package]] name = "lru" -version = "0.10.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" +checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" dependencies = [ - "hashbrown 0.13.2", + "hashbrown 0.12.3", ] [[package]] @@ -3761,60 +3776,6 @@ dependencies = [ "libc", ] -[[package]] -name = "macro_magic" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aee866bfee30d2d7e83835a4574aad5b45adba4cc807f2a3bbba974e5d4383c9" -dependencies = [ - "macro_magic_core", - "macro_magic_macros", - "quote", - "syn 2.0.58", -] - -[[package]] -name = "macro_magic_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e766a20fd9c72bab3e1e64ed63f36bd08410e75803813df210d1ce297d7ad00" -dependencies = [ - "const-random", - "derive-syn-parse", - "macro_magic_core_macros", - "proc-macro2", - "quote", - "syn 2.0.58", -] - -[[package]] -name = "macro_magic_core_macros" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d710e1214dffbab3b5dacb21475dde7d6ed84c69ff722b3a47a782668d44fbac" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.58", -] - -[[package]] -name = "macro_magic_macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fb85ec1620619edf2984a7693497d4ec88a9665d8b87e942856884c92dbf2a" -dependencies = [ - "macro_magic_core", - "quote", - "syn 2.0.58", -] - -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - [[package]] name = "match_cfg" version = "0.1.0" @@ -3827,7 +3788,7 @@ version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -3838,77 +3799,89 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matrixmultiply" -version = "0.3.8" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" dependencies = [ - "autocfg", "rawpointer", ] +[[package]] +name = "md-5" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +dependencies = [ + "digest 0.10.6", +] + [[package]] name = "memchr" -version = "2.7.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memfd" -version = "0.6.4" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" +checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.38.32", + "rustix", ] [[package]] name = "memmap2" -version = "0.5.10" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc" dependencies = [ "libc", ] [[package]] name = "memoffset" -version = "0.8.0" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ "autocfg", ] [[package]] -name = "memory-db" -version = "0.32.0" +name = "memoffset" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" dependencies = [ - "hash-db", + "autocfg", ] [[package]] -name = "merlin" -version = "2.0.1" +name = "memory-db" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" +checksum = "5e0c7cba9ce19ac7ffd2053ac9f49843bbd3f4318feedfd74e85c19d5fb0ba66" dependencies = [ - "byteorder", - "keccak", - "rand_core 0.5.1", - "zeroize", + "hash-db", + "hashbrown 0.12.3", ] +[[package]] +name = "memory_units" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" + [[package]] name = "merlin" -version = "3.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" dependencies = [ "byteorder", "keccak", - "rand_core 0.6.4", + "rand_core 0.5.1", "zeroize", ] @@ -3920,29 +3893,30 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.11" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" dependencies = [ "libc", + "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "windows-sys 0.42.0", ] [[package]] name = "mockall" -version = "0.11.4" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" +checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" dependencies = [ "cfg-if", "downcast", @@ -3955,26 +3929,25 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.11.4" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" +checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "multiaddr" -version = "0.17.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" +checksum = "a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e" dependencies = [ "arrayref", "byteorder", "data-encoding", - "log", "multibase", "multihash", "percent-encoding", @@ -3997,17 +3970,17 @@ dependencies = [ [[package]] name = "multihash" -version = "0.17.0" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" +checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" dependencies = [ "blake2b_simd", "blake2s_simd", "blake3", "core2", - "digest 0.10.7", + "digest 0.10.6", "multihash-derive", - "sha2 0.10.8", + "sha2 0.10.6", "sha3", "unsigned-varint", ] @@ -4018,11 +3991,11 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", "synstructure", ] @@ -4048,9 +4021,9 @@ dependencies = [ [[package]] name = "nalgebra" -version = "0.32.5" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea4908d4f23254adda3daa60ffef0f1ac7b8c3e9a864cf3cc154b251908a2ef" +checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" dependencies = [ "approx", "matrixmultiply", @@ -4059,18 +4032,18 @@ dependencies = [ "num-rational", "num-traits", "simba", - "typenum 1.17.0", + "typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "nalgebra-macros" -version = "0.2.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" +checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -4114,7 +4087,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" dependencies = [ "anyhow", - "bitflags 1.3.2", + "bitflags", "byteorder", "libc", "netlink-packet-core", @@ -4150,9 +4123,9 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.6" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416060d346fbaf1f23f9512963e3e878f1a78e707cb699ba9215761754244307" +checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" dependencies = [ "bytes", "futures", @@ -4167,9 +4140,24 @@ version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ - "bitflags 1.3.2", + "bitflags", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +dependencies = [ + "bitflags", "cfg-if", "libc", + "memoffset 0.7.1", + "pin-utils", + "static_assertions", ] [[package]] @@ -4192,12 +4180,9 @@ dependencies = [ "sc-client-api", "sc-consensus", "sc-consensus-aura", - "sc-consensus-grandpa", - "sc-consensus-grandpa-rpc", "sc-executor", + "sc-finality-grandpa", "sc-keystore", - "sc-network", - "sc-offchain", "sc-rpc", "sc-rpc-api", "sc-service", @@ -4211,8 +4196,8 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-aura", - "sp-consensus-grandpa", "sp-core", + "sp-finality-grandpa", "sp-inherents", "sp-io", "sp-keyring", @@ -4246,7 +4231,6 @@ dependencies = [ "pallet-membership", "pallet-multisig", "pallet-preimage", - "pallet-proxy", "pallet-registry", "pallet-scheduler", "pallet-subtensor", @@ -4264,12 +4248,10 @@ dependencies = [ "sp-consensus-aura", "sp-core", "sp-inherents", - "sp-io", "sp-offchain", "sp-runtime", "sp-session", "sp-std", - "sp-tracing", "sp-transaction-pool", "sp-version", "substrate-wasm-builder", @@ -4300,9 +4282,9 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" dependencies = [ "autocfg", "num-integer", @@ -4311,35 +4293,30 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.5" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" dependencies = [ "num-traits", ] -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - [[package]] name = "num-format" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.2", "itoa", ] [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ + "autocfg", "num-traits", ] @@ -4350,70 +4327,74 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", + "num-bigint", "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.2.6", "libc", ] -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "object" -version = "0.30.4" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" dependencies = [ "crc32fast", - "hashbrown 0.13.2", - "indexmap 1.9.3", + "hashbrown 0.12.3", + "indexmap", "memchr", ] [[package]] name = "object" -version = "0.32.2" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" dependencies = [ "memchr", ] +[[package]] +name = "oid-registry" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" +dependencies = [ + "asn1-rs 0.3.1", +] + [[package]] name = "oid-registry" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.1", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" [[package]] name = "opaque-debug" @@ -4423,9 +4404,9 @@ checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] name = "opaque-debug" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl-probe" @@ -4433,6 +4414,44 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "os_str_bytes" +version = "6.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" + +[[package]] +name = "p256" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" +dependencies = [ + "ecdsa", + "elliptic-curve", + "sha2 0.10.6", +] + +[[package]] +name = "p384" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" +dependencies = [ + "ecdsa", + "elliptic-curve", + "sha2 0.10.6", +] + +[[package]] +name = "packed_simd_2" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" +dependencies = [ + "cfg-if", + "libm 0.1.4", +] + [[package]] name = "pallet-admin-utils" version = "4.0.0-dev" @@ -4456,7 +4475,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-support", "frame-system", @@ -4472,7 +4491,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-support", "frame-system", @@ -4486,7 +4505,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4534,7 +4553,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4545,8 +4564,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-application-crypto", - "sp-consensus-grandpa", "sp-core", + "sp-finality-grandpa", "sp-io", "sp-runtime", "sp-session", @@ -4557,7 +4576,7 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-support", "frame-system", @@ -4571,7 +4590,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4588,7 +4607,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4604,7 +4623,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4618,21 +4637,6 @@ dependencies = [ "sp-std", ] -[[package]] -name = "pallet-proxy" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - [[package]] name = "pallet-registry" version = "4.0.0-dev" @@ -4652,7 +4656,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4669,7 +4673,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-support", "frame-system", @@ -4723,9 +4727,8 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "frame-benchmarking", "frame-support", "frame-system", "parity-scale-codec", @@ -4738,7 +4741,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4756,7 +4759,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-support", "frame-system", @@ -4772,7 +4775,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -4788,7 +4791,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -4800,7 +4803,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-benchmarking", "frame-support", @@ -4815,9 +4818,9 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.4.13" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592a28a24b09c9dc20ac8afaa6839abc417c720afe42c12e1e4a9d6aa2508d2e" +checksum = "dd684a725651d9588ef21f140a328b6b4f64e646b2e931f3e6f14f75eedf9980" dependencies = [ "blake2", "crc32fast", @@ -4829,18 +4832,16 @@ dependencies = [ "memmap2", "parking_lot 0.12.1", "rand 0.8.5", - "siphasher", "snap", - "winapi", ] [[package]] name = "parity-scale-codec" -version = "3.6.9" +version = "3.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.2", "bitvec", "byte-slice-cast", "bytes", @@ -4851,14 +4852,14 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.6.9" +version = "3.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" dependencies = [ - "proc-macro-crate 2.0.2", + "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -4892,7 +4893,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2" dependencies = [ "proc-macro2", - "syn 1.0.109", + "syn 1.0.107", "synstructure", ] @@ -4904,9 +4905,9 @@ checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] name = "parking" -version = "2.2.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" [[package]] name = "parking_lot" @@ -4926,7 +4927,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.9", + "parking_lot_core 0.9.7", ] [[package]] @@ -4938,35 +4939,29 @@ dependencies = [ "cfg-if", "instant", "libc", - "redox_syscall 0.2.16", + "redox_syscall", "smallvec", "winapi", ] [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.4.1", + "redox_syscall", "smallvec", - "windows-targets 0.48.5", + "windows-sys 0.45.0", ] -[[package]] -name = "partial_sort" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156" - [[package]] name = "paste" -version = "1.0.14" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" [[package]] name = "pbkdf2" @@ -4983,7 +4978,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest 0.10.7", + "digest 0.10.6", ] [[package]] @@ -5001,28 +4996,36 @@ dependencies = [ "base64 0.13.1", ] +[[package]] +name = "pem-rfc7468" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.7.9" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "311fb059dee1a7b802f036316d790138c613a4e8b180c822e3925a662e9f0c95" +checksum = "4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f" dependencies = [ - "memchr", "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.9" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73541b156d32197eecda1a4014d7f868fd2bcb3c550d5386087cfba442bf69c" +checksum = "8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea" dependencies = [ "pest", "pest_generator", @@ -5030,56 +5033,56 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.9" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c35eeed0a3fab112f75165fdc026b3913f4183133f19b49be773ac9ea966e8bd" +checksum = "2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "pest_meta" -version = "2.7.9" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2adbf29bb9776f28caece835398781ab24435585fe0d4dc1374a61db5accedca" +checksum = "9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d" dependencies = [ "once_cell", "pest", - "sha2 0.10.8", + "sha2 0.10.6", ] [[package]] name = "petgraph" -version = "0.6.4" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" dependencies = [ "fixedbitset", - "indexmap 2.2.6", + "indexmap", ] [[package]] name = "pin-project" -version = "1.1.5" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] @@ -5090,9 +5093,9 @@ checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -5102,9 +5105,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkcs8" -version = "0.10.2" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" dependencies = [ "der", "spki", @@ -5112,65 +5115,69 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" + +[[package]] +name = "platforms" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" [[package]] name = "platforms" -version = "3.4.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" +checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" [[package]] name = "polling" -version = "3.6.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c976a60b2d7e99d6f229e414670a9b85d13ac305cc6d1e9c134de58c5aaaf6" +checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" dependencies = [ + "autocfg", "cfg-if", - "concurrent-queue", - "hermit-abi 0.3.9", - "pin-project-lite 0.2.14", - "rustix 0.38.32", - "tracing", - "windows-sys 0.52.0", + "libc", + "log", + "wepoll-ffi", + "windows-sys 0.42.0", ] [[package]] name = "poly1305" -version = "0.8.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" dependencies = [ "cpufeatures", - "opaque-debug 0.3.1", + "opaque-debug 0.3.0", "universal-hash", ] [[package]] name = "polyval" -version = "0.6.2" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug 0.3.1", + "cpuid-bool", + "opaque-debug 0.3.0", "universal-hash", ] [[package]] -name = "portable-atomic" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" - -[[package]] -name = "powerfmt" -version = "0.2.0" +name = "polyval" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash", +] [[package]] name = "ppv-lite86" @@ -5194,48 +5201,28 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.6" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" +checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" [[package]] name = "predicates-tree" -version = "1.0.9" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" dependencies = [ "predicates-core", "termtree", ] -[[package]] -name = "prettier-please" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22020dfcf177fcc7bf5deaf7440af371400c67c0de14c399938d8ed4fb4645d3" -dependencies = [ - "proc-macro2", - "syn 2.0.58", -] - -[[package]] -name = "prettyplease" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28f53e8b192565862cf99343194579a022eb9c7dd3a8d03134734803c7b3125" -dependencies = [ - "proc-macro2", - "syn 1.0.109", -] - [[package]] name = "prettyplease" -version = "0.2.17" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3928fb5db768cb86f891ff014f0144589297e3c6a1aba6ed7cecfdace270c7" +checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" dependencies = [ "proc-macro2", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] @@ -5253,9 +5240,9 @@ dependencies = [ [[package]] name = "primitive-types" -version = "0.12.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" dependencies = [ "fixed-hash 0.8.0", "impl-codec", @@ -5271,17 +5258,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ "thiserror", - "toml 0.5.11", -] - -[[package]] -name = "proc-macro-crate" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" -dependencies = [ - "toml_datetime", - "toml_edit 0.20.2", + "toml", ] [[package]] @@ -5293,7 +5270,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", "version_check", ] @@ -5308,22 +5285,11 @@ dependencies = [ "version_check", ] -[[package]] -name = "proc-macro-warning" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.58", -] - [[package]] name = "proc-macro2" -version = "1.0.79" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" dependencies = [ "unicode-ident", ] @@ -5344,32 +5310,32 @@ dependencies = [ [[package]] name = "prometheus-client" -version = "0.19.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6fa99d535dd930d1249e6c79cb3c2915f9172a540fe2b02a4c8f9ca954721e" +checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" dependencies = [ "dtoa", "itoa", "parking_lot 0.12.1", - "prometheus-client-derive-encode", + "prometheus-client-derive-text-encode", ] [[package]] -name = "prometheus-client-derive-encode" -version = "0.4.2" +name = "prometheus-client-derive-text-encode" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" +checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "prost" -version = "0.11.9" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698" dependencies = [ "bytes", "prost-derive", @@ -5377,45 +5343,59 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.11.9" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +checksum = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e" dependencies = [ "bytes", - "heck 0.4.1", + "heck", "itertools", "lazy_static", "log", "multimap", "petgraph", - "prettyplease 0.1.11", + "prettyplease", "prost", "prost-types", "regex", - "syn 1.0.109", + "syn 1.0.107", "tempfile", "which", ] +[[package]] +name = "prost-codec" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc34979ff898b6e141106178981ce2596c387ea6e62533facfc61a37fc879c0" +dependencies = [ + "asynchronous-codec", + "bytes", + "prost", + "thiserror", + "unsigned-varint", +] + [[package]] name = "prost-derive" -version = "0.11.9" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d" dependencies = [ "anyhow", "itertools", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "prost-types" -version = "0.11.9" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788" dependencies = [ + "bytes", "prost", ] @@ -5434,28 +5414,6 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quick-protobuf" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" -dependencies = [ - "byteorder", -] - -[[package]] -name = "quick-protobuf-codec" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1693116345026436eb2f10b677806169c1a1260c1c60eaaffe3fb5a29ae23d8b" -dependencies = [ - "asynchronous-codec", - "bytes", - "quick-protobuf", - "thiserror", - "unsigned-varint", -] - [[package]] name = "quicksink" version = "0.1.2" @@ -5469,27 +5427,27 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.9.6" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b0b33c13a79f669c85defaf4c275dc86a0c0372807d0ca3d78e0bb87274863" +checksum = "72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9" dependencies = [ "bytes", "rand 0.8.5", - "ring 0.16.20", + "ring", "rustc-hash", - "rustls 0.20.9", + "rustls 0.20.8", "slab", "thiserror", "tinyvec", "tracing", - "webpki", + "webpki 0.22.0", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -5559,7 +5517,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.14", + "getrandom 0.2.8", ] [[package]] @@ -5588,9 +5546,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.10.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" dependencies = [ "either", "rayon-core", @@ -5598,80 +5556,86 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" dependencies = [ + "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", + "num_cpus", ] [[package]] name = "rcgen" -version = "0.10.0" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" dependencies = [ "pem", - "ring 0.16.20", - "time", + "ring", + "time 0.3.17", + "x509-parser 0.13.2", "yasna", ] [[package]] -name = "redox_syscall" -version = "0.2.16" +name = "rcgen" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" dependencies = [ - "bitflags 1.3.2", + "pem", + "ring", + "time 0.3.17", + "yasna", ] [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags 1.3.2", + "bitflags", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.14", - "libredox", + "getrandom 0.2.8", + "redox_syscall", "thiserror", ] [[package]] name = "ref-cast" -version = "1.0.22" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4846d4c50d1721b1a3bef8af76924eef20d5e723647333798c1b519b3a9473f" +checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.22" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fddb4f8d99b0a2ebafc65a87a69a7b9875e4b1ae1f00db265d300ef7f28bccc" +checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "regalloc2" -version = "0.6.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" +checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" dependencies = [ "fxhash", "log", @@ -5681,14 +5645,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.4" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-syntax", ] [[package]] @@ -5697,31 +5660,35 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax 0.6.29", + "regex-syntax", ] [[package]] -name = "regex-automata" -version = "0.4.6" +name = "regex-syntax" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.3", -] +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] -name = "regex-syntax" -version = "0.6.29" +name = "region" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e" +dependencies = [ + "bitflags", + "libc", + "mach", + "winapi", +] [[package]] -name = "regex-syntax" -version = "0.8.3" +name = "remove_dir_all" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] [[package]] name = "resolv-conf" @@ -5735,12 +5702,13 @@ dependencies = [ [[package]] name = "rfc6979" -version = "0.4.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" dependencies = [ + "crypto-bigint", "hmac 0.12.1", - "subtle", + "zeroize", ] [[package]] @@ -5752,27 +5720,12 @@ dependencies = [ "cc", "libc", "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", + "spin", + "untrusted", "web-sys", "winapi", ] -[[package]] -name = "ring" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.14", - "libc", - "spin 0.9.8", - "untrusted 0.9.0", - "windows-sys 0.52.0", -] - [[package]] name = "rlp" version = "0.5.2" @@ -5785,9 +5738,9 @@ dependencies = [ [[package]] name = "rocksdb" -version = "0.21.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" +checksum = "7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc" dependencies = [ "libc", "librocksdb-sys", @@ -5795,13 +5748,24 @@ dependencies = [ [[package]] name = "rpassword" -version = "7.3.1" +version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" +checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322" dependencies = [ "libc", "rtoolbox", - "windows-sys 0.48.0", + "winapi", +] + +[[package]] +name = "rtcp" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691" +dependencies = [ + "bytes", + "thiserror", + "webrtc-util", ] [[package]] @@ -5814,26 +5778,40 @@ dependencies = [ "log", "netlink-packet-route", "netlink-proto", - "nix", + "nix 0.24.3", "thiserror", "tokio", ] [[package]] name = "rtoolbox" -version = "0.0.2" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" +checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" dependencies = [ "libc", - "windows-sys 0.48.0", + "winapi", +] + +[[package]] +name = "rtp" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80" +dependencies = [ + "async-trait", + "bytes", + "rand 0.8.5", + "serde", + "thiserror", + "webrtc-util", ] [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustc-hash" @@ -5862,7 +5840,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.22", + "semver 1.0.16", ] [[package]] @@ -5876,60 +5854,48 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.17" +version = "0.36.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed" +checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" dependencies = [ - "bitflags 1.3.2", + "bitflags", "errno", "io-lifetimes", "libc", - "linux-raw-sys 0.1.4", + "linux-raw-sys", "windows-sys 0.45.0", ] -[[package]] -name = "rustix" -version = "0.38.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" -dependencies = [ - "bitflags 2.5.0", - "errno", - "libc", - "linux-raw-sys 0.4.13", - "windows-sys 0.52.0", -] - [[package]] name = "rustls" -version = "0.20.9" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" dependencies = [ + "base64 0.13.1", "log", - "ring 0.16.20", - "sct", - "webpki", + "ring", + "sct 0.6.1", + "webpki 0.21.4", ] [[package]] name = "rustls" -version = "0.21.10" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" dependencies = [ "log", - "ring 0.17.8", - "rustls-webpki", - "sct", + "ring", + "sct 0.7.0", + "webpki 0.22.0", ] [[package]] name = "rustls-native-certs" -version = "0.6.3" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" dependencies = [ "openssl-probe", "rustls-pemfile", @@ -5939,28 +5905,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-webpki" -version = "0.101.7" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", + "base64 0.21.0", ] [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" [[package]] name = "rw-stream-sink" @@ -5975,9 +5931,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" [[package]] name = "safe-mix" @@ -5990,9 +5946,9 @@ dependencies = [ [[package]] name = "safe_arch" -version = "0.7.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" +checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" dependencies = [ "bytemuck", ] @@ -6009,7 +5965,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "log", "sp-core", @@ -6020,7 +5976,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "futures", "futures-timer", @@ -6043,7 +5999,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6053,49 +6009,46 @@ dependencies = [ "sp-core", "sp-inherents", "sp-runtime", + "sp-state-machine", ] [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "memmap2", "sc-chain-spec-derive", - "sc-client-api", - "sc-executor", - "sc-network", + "sc-network-common", "sc-telemetry", "serde", "serde_json", - "sp-blockchain", "sp-core", "sp-runtime", - "sp-state-machine", ] [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "array-bytes", "chrono", "clap", "fdlimit", "futures", - "libp2p-identity", + "libp2p", "log", "names", "parity-scale-codec", @@ -6106,6 +6059,7 @@ dependencies = [ "sc-client-db", "sc-keystore", "sc-network", + "sc-network-common", "sc-service", "sc-telemetry", "sc-tracing", @@ -6127,7 +6081,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "fnv", "futures", @@ -6143,9 +6097,9 @@ dependencies = [ "sp-core", "sp-database", "sp-externalities", + "sp-keystore", "sp-runtime", "sp-state-machine", - "sp-statement-store", "sp-storage", "substrate-prometheus-endpoint", ] @@ -6153,7 +6107,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "hash-db", "kvdb", @@ -6179,12 +6133,12 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", "futures", "futures-timer", - "libp2p-identity", + "libp2p", "log", "mockall", "parking_lot 0.12.1", @@ -6204,7 +6158,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", "futures", @@ -6230,71 +6184,10 @@ dependencies = [ "thiserror", ] -[[package]] -name = "sc-consensus-grandpa" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" -dependencies = [ - "ahash 0.8.11", - "array-bytes", - "async-trait", - "dyn-clone", - "finality-grandpa", - "fork-tree", - "futures", - "futures-timer", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.8.5", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-consensus", - "sc-network", - "sc-network-common", - "sc-network-gossip", - "sc-telemetry", - "sc-transaction-pool-api", - "sc-utils", - "serde_json", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-consensus-grandpa", - "sp-core", - "sp-keystore", - "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", -] - -[[package]] -name = "sc-consensus-grandpa-rpc" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" -dependencies = [ - "finality-grandpa", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "sc-client-api", - "sc-consensus-grandpa", - "sc-rpc", - "serde", - "sp-blockchain", - "sp-core", - "sp-runtime", - "thiserror", -] - [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", "futures", @@ -6317,13 +6210,14 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ + "lru 0.8.1", "parity-scale-codec", "parking_lot 0.12.1", "sc-executor-common", + "sc-executor-wasmi", "sc-executor-wasmtime", - "schnellru", "sp-api", "sp-core", "sp-externalities", @@ -6334,30 +6228,46 @@ dependencies = [ "sp-version", "sp-wasm-interface", "tracing", + "wasmi", ] [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "sc-allocator", "sp-maybe-compressed-blob", "sp-wasm-interface", "thiserror", "wasm-instrument", + "wasmi", +] + +[[package]] +name = "sc-executor-wasmi" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +dependencies = [ + "log", + "sc-allocator", + "sc-executor-common", + "sp-runtime-interface", + "sp-wasm-interface", + "wasmi", ] [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "anyhow", "cfg-if", "libc", "log", - "rustix 0.36.17", + "once_cell", + "rustix", "sc-allocator", "sc-executor-common", "sp-runtime-interface", @@ -6366,17 +6276,56 @@ dependencies = [ ] [[package]] -name = "sc-informant" +name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "ansi_term", + "ahash 0.8.3", + "array-bytes", + "async-trait", + "dyn-clone", + "finality-grandpa", + "fork-tree", "futures", "futures-timer", "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.8.5", + "sc-block-builder", + "sc-chain-spec", "sc-client-api", + "sc-consensus", "sc-network", "sc-network-common", + "sc-network-gossip", + "sc-telemetry", + "sc-utils", + "serde_json", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-finality-grandpa", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", +] + +[[package]] +name = "sc-informant" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +dependencies = [ + "ansi_term", + "futures", + "futures-timer", + "log", + "sc-client-api", + "sc-network-common", "sp-blockchain", "sp-runtime", ] @@ -6384,9 +6333,10 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "array-bytes", + "async-trait", "parking_lot 0.12.1", "serde_json", "sp-application-crypto", @@ -6398,12 +6348,12 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "array-bytes", - "async-channel", "async-trait", "asynchronous-codec", + "backtrace", "bytes", "either", "fnv", @@ -6411,45 +6361,46 @@ dependencies = [ "futures-timer", "ip_network", "libp2p", - "linked_hash_set", "log", + "lru 0.8.1", "mockall", "parity-scale-codec", "parking_lot 0.12.1", - "partial_sort", "pin-project", "rand 0.8.5", + "sc-block-builder", "sc-client-api", + "sc-consensus", "sc-network-common", + "sc-peerset", "sc-utils", "serde", "serde_json", "smallvec", "sp-arithmetic", "sp-blockchain", + "sp-consensus", "sp-core", "sp-runtime", "substrate-prometheus-endpoint", "thiserror", "unsigned-varint", - "wasm-timer", "zeroize", ] [[package]] name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "async-channel", "cid", "futures", - "libp2p-identity", + "libp2p", "log", "prost", "prost-build", "sc-client-api", - "sc-network", + "sc-network-common", "sp-blockchain", "sp-runtime", "thiserror", @@ -6459,33 +6410,42 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", - "bitflags 1.3.2", + "bitflags", + "bytes", "futures", - "libp2p-identity", + "futures-timer", + "libp2p", + "linked_hash_set", "parity-scale-codec", "prost-build", "sc-consensus", + "sc-peerset", + "serde", + "smallvec", + "sp-blockchain", "sp-consensus", - "sp-consensus-grandpa", + "sp-finality-grandpa", "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", ] [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "ahash 0.8.11", + "ahash 0.8.3", "futures", "futures-timer", "libp2p", "log", - "sc-network", + "lru 0.8.1", "sc-network-common", - "schnellru", + "sc-peerset", "sp-runtime", "substrate-prometheus-endpoint", "tracing", @@ -6494,18 +6454,18 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "array-bytes", - "async-channel", "futures", - "libp2p-identity", + "libp2p", "log", "parity-scale-codec", "prost", "prost-build", "sc-client-api", - "sc-network", + "sc-network-common", + "sc-peerset", "sp-blockchain", "sp-core", "sp-runtime", @@ -6515,32 +6475,30 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "array-bytes", - "async-channel", "async-trait", "fork-tree", "futures", - "futures-timer", "libp2p", "log", + "lru 0.8.1", "mockall", "parity-scale-codec", "prost", "prost-build", "sc-client-api", "sc-consensus", - "sc-network", "sc-network-common", + "sc-peerset", "sc-utils", - "schnellru", "smallvec", "sp-arithmetic", "sp-blockchain", "sp-consensus", - "sp-consensus-grandpa", "sp-core", + "sp-finality-grandpa", "sp-runtime", "substrate-prometheus-endpoint", "thiserror", @@ -6549,15 +6507,16 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "array-bytes", "futures", "libp2p", "log", "parity-scale-codec", - "sc-network", + "pin-project", "sc-network-common", + "sc-peerset", "sc-utils", "sp-consensus", "sp-runtime", @@ -6567,7 +6526,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "array-bytes", "bytes", @@ -6577,31 +6536,40 @@ dependencies = [ "hyper", "hyper-rustls", "libp2p", - "log", "num_cpus", "once_cell", "parity-scale-codec", "parking_lot 0.12.1", "rand 0.8.5", "sc-client-api", - "sc-network", "sc-network-common", - "sc-transaction-pool-api", + "sc-peerset", "sc-utils", "sp-api", "sp-core", - "sp-externalities", - "sp-keystore", "sp-offchain", "sp-runtime", "threadpool", "tracing", ] +[[package]] +name = "sc-peerset" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +dependencies = [ + "futures", + "libp2p", + "log", + "sc-utils", + "serde_json", + "wasm-timer", +] + [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -6610,7 +6578,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "futures", "jsonrpsee", @@ -6633,7 +6601,6 @@ dependencies = [ "sp-rpc", "sp-runtime", "sp-session", - "sp-statement-store", "sp-version", "tokio", ] @@ -6641,7 +6608,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -6660,7 +6627,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "http", "jsonrpsee", @@ -6675,7 +6642,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "array-bytes", "futures", @@ -6701,7 +6668,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", "directories", @@ -6728,9 +6695,11 @@ dependencies = [ "sc-network-light", "sc-network-sync", "sc-network-transactions", + "sc-offchain", "sc-rpc", "sc-rpc-server", "sc-rpc-spec-v2", + "sc-storage-monitor", "sc-sysinfo", "sc-telemetry", "sc-tracing", @@ -6765,7 +6734,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "log", "parity-scale-codec", @@ -6773,10 +6742,26 @@ dependencies = [ "sp-core", ] +[[package]] +name = "sc-storage-monitor" +version = "0.1.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +dependencies = [ + "clap", + "futures", + "log", + "nix 0.26.2", + "sc-client-db", + "sc-utils", + "sp-core", + "thiserror", + "tokio", +] + [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "futures", "libc", @@ -6795,7 +6780,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "chrono", "futures", @@ -6814,7 +6799,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "ansi_term", "atty", @@ -6822,10 +6807,12 @@ dependencies = [ "lazy_static", "libc", "log", + "once_cell", "parking_lot 0.12.1", "regex", "rustc-hash", "sc-client-api", + "sc-rpc-server", "sc-tracing-proc-macro", "serde", "sp-api", @@ -6843,24 +6830,25 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", "futures", "futures-timer", "linked-hash-map", "log", + "num-traits", "parity-scale-codec", "parking_lot 0.12.1", "sc-client-api", @@ -6880,15 +6868,13 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", "futures", "log", - "parity-scale-codec", "serde", "sp-blockchain", - "sp-core", "sp-runtime", "thiserror", ] @@ -6896,23 +6882,22 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "async-channel", + "backtrace", "futures", "futures-timer", "lazy_static", "log", "parking_lot 0.12.1", "prometheus", - "sp-arithmetic", ] [[package]] name = "scale-info" -version = "2.11.2" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c453e59a955f81fb62ee5d596b450383d699f152d350e9d23a0db2adb78e4c0" +checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782" dependencies = [ "bitvec", "cfg-if", @@ -6924,23 +6909,23 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.2" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18cf6c6447f813ef19eb450e985bcce6705f9ce7660db221b59093d15c79c4b7" +checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.42.0", ] [[package]] @@ -6949,7 +6934,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" dependencies = [ - "ahash 0.8.11", + "ahash 0.8.3", "cfg-if", "hashbrown 0.13.2", ] @@ -6964,7 +6949,7 @@ dependencies = [ "arrayvec 0.5.2", "curve25519-dalek 2.1.3", "getrandom 0.1.16", - "merlin 2.0.1", + "merlin", "rand 0.7.3", "rand_core 0.5.1", "sha2 0.8.2", @@ -6973,53 +6958,58 @@ dependencies = [ ] [[package]] -name = "schnorrkel" -version = "0.11.4" +name = "scopeguard" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" -dependencies = [ - "arrayref", - "arrayvec 0.7.4", - "curve25519-dalek 4.1.2", - "getrandom_or_panic", - "merlin 3.0.0", - "rand_core 0.6.4", - "sha2 0.10.8", - "subtle", - "zeroize", -] +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] -name = "scopeguard" -version = "1.2.0" +name = "scratch" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" [[package]] -name = "scratch" -version = "1.0.7" +name = "sct" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring", + "untrusted", +] [[package]] name = "sct" -version = "0.7.1" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sdp" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +checksum = "4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13" dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", + "rand 0.8.5", + "substring", + "thiserror", + "url", ] [[package]] name = "sec1" -version = "0.7.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct", "der", - "generic-array 0.14.7", + "generic-array 0.14.6", "pkcs8", "subtle", "zeroize", @@ -7054,11 +7044,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.10.0" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ - "bitflags 1.3.2", + "bitflags", "core-foundation", "core-foundation-sys", "libc", @@ -7067,9 +7057,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.10.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" dependencies = [ "core-foundation-sys", "libc", @@ -7095,9 +7085,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" dependencies = [ "serde", ] @@ -7110,9 +7100,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.197" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] @@ -7128,70 +7118,55 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.14" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.38", ] [[package]] name = "serde_json" -version = "1.0.115" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" +checksum = "7434af0dc1cbd59268aa98b4c22c131c0584d2232f6fb166efb993e2832e896a" dependencies = [ "itoa", "ryu", "serde", ] -[[package]] -name = "serde_spanned" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" -dependencies = [ - "serde", -] - [[package]] name = "serde_with" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89df7a26519371a3cce44fbb914c2819c84d9b897890987fa3ab096491cc0ea8" dependencies = [ - "base64 0.13.1", - "chrono", - "hex", - "indexmap 1.9.3", "serde", - "serde_json", "serde_with_macros", - "time", ] [[package]] name = "serde_with_macros" -version = "2.3.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +checksum = "a1966009f3c05f095697c537312f5415d1e3ed31ce0a56942bac4c771c5c335e" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] @@ -7204,7 +7179,7 @@ dependencies = [ "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.1", + "opaque-debug 0.3.0", ] [[package]] @@ -7229,50 +7204,50 @@ dependencies = [ "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.1", + "opaque-debug 0.3.0", ] [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest 0.10.6", ] [[package]] name = "sha3" -version = "0.10.8" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" dependencies = [ - "digest 0.10.7", + "digest 0.10.6", "keccak", ] [[package]] name = "sharded-slab" -version = "0.1.7" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" dependencies = [ "lazy_static", ] [[package]] name = "shlex" -version = "1.3.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" dependencies = [ "libc", ] @@ -7282,22 +7257,16 @@ name = "signature" version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest 0.10.7", + "digest 0.10.6", "rand_core 0.6.4", ] [[package]] name = "simba" -version = "0.8.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +checksum = "50582927ed6f77e4ac020c057f37a268fc6aebc29225050365aacbb9deeeddc4" dependencies = [ "approx", "num-complex", @@ -7306,76 +7275,60 @@ dependencies = [ "wide", ] -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - [[package]] name = "slab" -version = "0.4.9" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" dependencies = [ "autocfg", ] [[package]] name = "slice-group-by" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" +checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" [[package]] name = "smallvec" -version = "1.13.2" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "snap" -version = "1.1.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" +checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" -version = "0.9.6" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" +checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" dependencies = [ - "aes-gcm", + "aes-gcm 0.9.4", "blake2", "chacha20poly1305", - "curve25519-dalek 4.1.2", + "curve25519-dalek 4.0.0-rc.0", "rand_core 0.6.4", - "ring 0.17.8", + "ring", "rustc_version 0.4.0", - "sha2 0.10.8", + "sha2 0.10.6", "subtle", ] [[package]] name = "socket2" -version = "0.4.10" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" dependencies = [ "libc", "winapi", ] -[[package]] -name = "socket2" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "soketto" version = "0.7.1" @@ -7396,16 +7349,13 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "hash-db", "log", "parity-scale-codec", - "scale-info", "sp-api-proc-macro", "sp-core", - "sp-externalities", - "sp-metadata-ir", "sp-runtime", "sp-state-machine", "sp-std", @@ -7417,21 +7367,19 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "Inflector", "blake2", - "expander", - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "sp-application-crypto" -version = "23.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "parity-scale-codec", "scale-info", @@ -7443,8 +7391,8 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "16.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "integer-sqrt", "num-traits", @@ -7458,8 +7406,9 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ + "parity-scale-codec", "sp-api", "sp-inherents", "sp-runtime", @@ -7469,13 +7418,13 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "futures", "log", + "lru 0.8.1", "parity-scale-codec", "parking_lot 0.12.1", - "schnellru", "sp-api", "sp-consensus", "sp-database", @@ -7487,28 +7436,32 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", "futures", "log", + "parity-scale-codec", "sp-core", "sp-inherents", "sp-runtime", "sp-state-machine", + "sp-std", + "sp-version", "thiserror", ] [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", "parity-scale-codec", "scale-info", "sp-api", "sp-application-crypto", + "sp-consensus", "sp-consensus-slots", "sp-inherents", "sp-runtime", @@ -7519,62 +7472,61 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", + "merlin", "parity-scale-codec", "scale-info", "serde", "sp-api", "sp-application-crypto", + "sp-consensus", "sp-consensus-slots", + "sp-consensus-vrf", "sp-core", "sp-inherents", + "sp-keystore", "sp-runtime", "sp-std", "sp-timestamp", ] [[package]] -name = "sp-consensus-grandpa" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +name = "sp-consensus-slots" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "finality-grandpa", - "log", "parity-scale-codec", "scale-info", "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-keystore", - "sp-runtime", "sp-std", + "sp-timestamp", ] [[package]] -name = "sp-consensus-slots" +name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "parity-scale-codec", "scale-info", - "serde", + "schnorrkel", + "sp-core", + "sp-runtime", "sp-std", - "sp-timestamp", ] [[package]] name = "sp-core" -version = "21.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "array-bytes", - "bitflags 1.3.2", + "base58", + "bitflags", "blake2", "bounded-collections", - "bs58", "dyn-clonable", "ed25519-zebra", "futures", @@ -7584,15 +7536,14 @@ dependencies = [ "lazy_static", "libsecp256k1", "log", - "merlin 2.0.1", + "merlin", "parity-scale-codec", "parking_lot 0.12.1", - "paste", - "primitive-types 0.12.2", + "primitive-types 0.12.1", "rand 0.8.5", "regex", "scale-info", - "schnorrkel 0.9.1", + "schnorrkel", "secp256k1", "secrecy", "serde", @@ -7606,37 +7557,38 @@ dependencies = [ "substrate-bip39", "thiserror", "tiny-bip39", - "tracing", "zeroize", ] [[package]] name = "sp-core-hashing" -version = "9.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "blake2b_simd", + "blake2", "byteorder", - "digest 0.10.7", - "sha2 0.10.8", + "digest 0.10.6", + "sha2 0.10.6", "sha3", + "sp-std", "twox-hash", ] [[package]] name = "sp-core-hashing-proc-macro" -version = "9.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ + "proc-macro2", "quote", "sp-core-hashing", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -7644,18 +7596,18 @@ dependencies = [ [[package]] name = "sp-debug-derive" -version = "8.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "sp-externalities" -version = "0.19.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "0.13.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "environmental", "parity-scale-codec", @@ -7663,15 +7615,34 @@ dependencies = [ "sp-storage", ] +[[package]] +name = "sp-finality-grandpa" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +dependencies = [ + "finality-grandpa", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "sp-runtime", + "sp-std", +] + [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", + "sp-core", "sp-runtime", "sp-std", "thiserror", @@ -7679,16 +7650,16 @@ dependencies = [ [[package]] name = "sp-io" -version = "23.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "bytes", - "ed25519 1.5.3", - "ed25519-dalek 1.0.1", + "ed25519", + "ed25519-dalek", + "futures", "libsecp256k1", "log", "parity-scale-codec", - "rustversion", "secp256k1", "sp-core", "sp-externalities", @@ -7704,22 +7675,27 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "24.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "lazy_static", "sp-core", "sp-runtime", - "strum 0.24.1", + "strum", ] [[package]] name = "sp-keystore" -version = "0.27.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "0.13.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ + "async-trait", + "futures", + "merlin", "parity-scale-codec", "parking_lot 0.12.1", + "schnorrkel", + "serde", "sp-core", "sp-externalities", "thiserror", @@ -7728,27 +7704,16 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "thiserror", - "zstd 0.12.4", -] - -[[package]] -name = "sp-metadata-ir" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" -dependencies = [ - "frame-metadata", - "parity-scale-codec", - "scale-info", - "sp-std", + "zstd", ] [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "sp-api", "sp-core", @@ -7757,8 +7722,8 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "8.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "backtrace", "lazy_static", @@ -7768,7 +7733,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "rustc-hash", "serde", @@ -7777,8 +7742,8 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "24.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "either", "hash256-std-hasher", @@ -7799,13 +7764,13 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "17.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "bytes", "impl-trait-for-tuples", "parity-scale-codec", - "primitive-types 0.12.2", + "primitive-types 0.12.1", "sp-externalities", "sp-runtime-interface-proc-macro", "sp-std", @@ -7817,26 +7782,25 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "11.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "Inflector", - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-core", - "sp-keystore", "sp-runtime", "sp-staking", "sp-std", @@ -7845,12 +7809,10 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "serde", "sp-core", "sp-runtime", "sp-std", @@ -7858,8 +7820,8 @@ dependencies = [ [[package]] name = "sp-state-machine" -version = "0.28.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "0.13.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "hash-db", "log", @@ -7874,35 +7836,17 @@ dependencies = [ "sp-trie", "thiserror", "tracing", - "trie-db", -] - -[[package]] -name = "sp-statement-store" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-externalities", - "sp-runtime", - "sp-runtime-interface", - "sp-std", - "thiserror", ] [[package]] name = "sp-std" -version = "8.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" [[package]] name = "sp-storage" -version = "13.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "impl-serde 0.4.0", "parity-scale-codec", @@ -7915,9 +7859,11 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", + "futures-timer", + "log", "parity-scale-codec", "sp-inherents", "sp-runtime", @@ -7927,8 +7873,8 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "10.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "6.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "parity-scale-codec", "sp-std", @@ -7940,7 +7886,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "sp-api", "sp-runtime", @@ -7949,9 +7895,10 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", + "log", "parity-scale-codec", "scale-info", "sp-core", @@ -7963,12 +7910,12 @@ dependencies = [ [[package]] name = "sp-trie" -version = "22.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ - "ahash 0.8.11", + "ahash 0.8.3", "hash-db", - "hashbrown 0.13.2", + "hashbrown 0.12.3", "lazy_static", "memory-db", "nohash-hasher", @@ -7986,8 +7933,8 @@ dependencies = [ [[package]] name = "sp-version" -version = "22.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "5.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "impl-serde 0.4.0", "parity-scale-codec", @@ -8003,32 +7950,33 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" -version = "8.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "sp-wasm-interface" -version = "14.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "7.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "anyhow", "impl-trait-for-tuples", "log", "parity-scale-codec", "sp-std", + "wasmi", "wasmtime", ] [[package]] name = "sp-weights" -version = "20.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +version = "4.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "parity-scale-codec", "scale-info", @@ -8046,28 +7994,11 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "spinners" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0ef947f358b9c238923f764c72a4a9d42f2d637c46e059dbd319d6e7cfb4f82" -dependencies = [ - "lazy_static", - "maplit", - "strum 0.24.1", -] - [[package]] name = "spki" -version = "0.7.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" dependencies = [ "base64ct", "der", @@ -8075,9 +8006,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.47.0" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4743ce898933fbff7bbf414f497c459a782d496269644b3d650a398ae6a487ba" +checksum = "e40c020d72bc0a9c5660bb71e4a6fdef081493583062c474740a7d59f55f0e7b" dependencies = [ "Inflector", "num-format", @@ -8106,7 +8037,7 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" dependencies = [ - "bitflags 1.3.2", + "bitflags", "cfg_aliases", "libc", "parking_lot 0.11.2", @@ -8125,7 +8056,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] @@ -8134,62 +8065,56 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - [[package]] name = "strum" version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" dependencies = [ - "strum_macros 0.24.3", + "strum_macros", ] -[[package]] -name = "strum" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" - [[package]] name = "strum_macros" version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote", "rustversion", - "syn 1.0.109", + "syn 1.0.107", ] [[package]] -name = "strum_macros" -version = "0.26.2" +name = "stun" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +checksum = "a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25" dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.58", + "base64 0.13.1", + "crc", + "lazy_static", + "md-5", + "rand 0.8.5", + "ring", + "subtle", + "thiserror", + "tokio", + "url", + "webrtc-util", ] [[package]] name = "substrate-bip39" -version = "0.4.6" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a7590dc041b9bc2825e52ce5af8416c73dbe9d0654402bfd4b4941938b94d8f" +checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" dependencies = [ "hmac 0.11.0", "pbkdf2 0.8.0", - "schnorrkel 0.11.4", + "schnorrkel", "sha2 0.9.9", "zeroize", ] @@ -8197,7 +8122,10 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +dependencies = [ + "platforms 2.0.0", +] [[package]] name = "substrate-fixed" @@ -8206,14 +8134,13 @@ source = "git+https://github.com/encointer/substrate-fixed.git?tag=v0.5.9#a4fb46 dependencies = [ "parity-scale-codec", "scale-info", - "serde", - "typenum 1.16.0", + "typenum 1.16.0 (git+https://github.com/encointer/typenum?tag=v1.16.0)", ] [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -8232,7 +8159,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "hyper", "log", @@ -8244,7 +8171,7 @@ dependencies = [ [[package]] name = "substrate-rpc-client" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", "jsonrpsee", @@ -8257,21 +8184,29 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "ansi_term", "build-helper", "cargo_metadata", "filetime", - "parity-wasm", "sp-maybe-compressed-blob", - "strum 0.24.1", + "strum", "tempfile", - "toml 0.7.8", + "toml", "walkdir", "wasm-opt", ] +[[package]] +name = "substring" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" +dependencies = [ + "autocfg", +] + [[package]] name = "subtensor-custom-rpc" version = "0.0.2" @@ -8305,9 +8240,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.109" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" dependencies = [ "proc-macro2", "quote", @@ -8316,9 +8251,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.58" +version = "2.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687" +checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" dependencies = [ "proc-macro2", "quote", @@ -8333,17 +8268,17 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 1.0.107", "unicode-xid", ] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" dependencies = [ - "bitflags 1.3.2", + "bitflags", "core-foundation", "system-configuration-sys", ] @@ -8366,55 +8301,57 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.14" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" +checksum = "9410d0f6853b1d94f0e519fb95df60f29d2c1eff2d921ffdf01a4c8a3b54f12d" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" dependencies = [ "cfg-if", "fastrand", - "rustix 0.38.32", - "windows-sys 0.52.0", + "libc", + "redox_syscall", + "remove_dir_all", + "winapi", ] [[package]] name = "termcolor" -version = "1.4.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] [[package]] name = "termtree" -version = "0.4.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" [[package]] name = "thiserror" -version = "1.0.58" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.58" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] @@ -8425,11 +8362,10 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" dependencies = [ - "cfg-if", "once_cell", ] @@ -8444,9 +8380,9 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.5.4+5.3.0-patched" +version = "0.5.3+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1" +checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" dependencies = [ "cc", "libc", @@ -8454,14 +8390,22 @@ dependencies = [ [[package]] name = "time" -version = "0.3.34" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "time" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" dependencies = [ - "deranged", "itoa", - "num-conv", - "powerfmt", "serde", "time-core", "time-macros", @@ -8469,17 +8413,16 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" [[package]] name = "time-macros" -version = "0.2.17" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" dependencies = [ - "num-conv", "time-core", ] @@ -8495,7 +8438,7 @@ dependencies = [ "pbkdf2 0.11.0", "rand 0.8.5", "rustc-hash", - "sha2 0.10.8", + "sha2 0.10.6", "thiserror", "unicode-normalization", "wasm-bindgen", @@ -8511,6 +8454,16 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -8528,78 +8481,69 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" dependencies = [ - "backtrace", + "autocfg", "bytes", "libc", + "memchr", "mio", "num_cpus", "parking_lot 0.12.1", - "pin-project-lite 0.2.14", + "pin-project-lite 0.2.9", "signal-hook-registry", - "socket2 0.5.6", + "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.42.0", ] [[package]] name = "tokio-macros" -version = "2.2.0" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", -] - -[[package]] -name = "tokio-retry" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f" -dependencies = [ - "pin-project", - "rand 0.8.5", - "tokio", + "syn 1.0.107", ] [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls 0.21.10", + "rustls 0.20.8", "tokio", + "webpki 0.22.0", ] [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" dependencies = [ "futures-core", - "pin-project-lite 0.2.14", + "pin-project-lite 0.2.9", "tokio", "tokio-util", ] [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", - "pin-project-lite 0.2.14", + "pin-project-lite 0.2.9", "tokio", "tracing", ] @@ -8613,51 +8557,6 @@ dependencies = [ "serde", ] -[[package]] -name = "toml" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit 0.19.15", -] - -[[package]] -name = "toml_datetime" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.2.6", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "toml_edit" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" -dependencies = [ - "indexmap 2.2.6", - "toml_datetime", - "winnow", -] - [[package]] name = "tower" version = "0.4.13" @@ -8671,18 +8570,18 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.4.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" +checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" dependencies = [ - "bitflags 2.5.0", + "bitflags", "bytes", "futures-core", "futures-util", "http", "http-body", "http-range-header", - "pin-project-lite 0.2.14", + "pin-project-lite 0.2.9", "tower-layer", "tower-service", ] @@ -8701,32 +8600,33 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ + "cfg-if", "log", - "pin-project-lite 0.2.14", + "pin-project-lite 0.2.9", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" dependencies = [ "once_cell", "valuable", @@ -8744,12 +8644,12 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.4" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" dependencies = [ + "lazy_static", "log", - "once_cell", "tracing-core", ] @@ -8788,9 +8688,9 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.27.1" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85" +checksum = "3390c0409daaa6027d6681393316f4ccd3ff82e1590a1e4725014e3ae2bf1920" dependencies = [ "hash-db", "hashbrown 0.13.2", @@ -8801,9 +8701,9 @@ dependencies = [ [[package]] name = "trie-root" -version = "0.18.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" +checksum = "9a36c5ca3911ed3c9a5416ee6c679042064b93fc637ded67e25f92e68d783891" dependencies = [ "hash-db", ] @@ -8826,7 +8726,7 @@ dependencies = [ "lazy_static", "rand 0.8.5", "smallvec", - "socket2 0.4.10", + "socket2", "thiserror", "tinyvec", "tokio", @@ -8856,14 +8756,14 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" dependencies = [ "async-trait", "clap", @@ -8874,6 +8774,7 @@ dependencies = [ "parity-scale-codec", "sc-cli", "sc-executor", + "sc-service", "serde", "serde_json", "sp-api", @@ -8893,7 +8794,7 @@ dependencies = [ "sp-version", "sp-weights", "substrate-rpc-client", - "zstd 0.12.4", + "zstd", ] [[package]] @@ -8902,6 +8803,25 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" +[[package]] +name = "turn" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8" +dependencies = [ + "async-trait", + "base64 0.13.1", + "futures", + "log", + "md-5", + "rand 0.8.5", + "ring", + "stun", + "thiserror", + "tokio", + "webrtc-util", +] + [[package]] name = "twox-hash" version = "1.6.3" @@ -8909,11 +8829,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", - "digest 0.10.7", + "digest 0.10.6", "rand 0.8.5", "static_assertions", ] +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + [[package]] name = "typenum" version = "1.16.0" @@ -8923,17 +8849,11 @@ dependencies = [ "scale-info", ] -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" [[package]] name = "uint" @@ -8949,30 +8869,30 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] [[package]] name = "unicode-width" -version = "0.1.11" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "unicode-xid" @@ -8982,19 +8902,19 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "universal-hash" -version = "0.5.1" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ - "crypto-common", + "generic-array 0.14.6", "subtle", ] [[package]] name = "unsigned-varint" -version = "0.7.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" +checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" dependencies = [ "asynchronous-codec", "bytes", @@ -9008,28 +8928,25 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - [[package]] name = "url" -version = "2.5.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", - "idna 0.5.0", + "idna 0.3.0", "percent-encoding", ] [[package]] -name = "utf8parse" -version = "0.2.1" +name = "uuid" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" +dependencies = [ + "getrandom 0.2.8", +] [[package]] name = "valuable" @@ -9055,22 +8972,39 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +[[package]] +name = "waitgroup" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" +dependencies = [ + "atomic-waker", +] + +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + [[package]] name = "walkdir" -version = "2.5.0" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", + "winapi", "winapi-util", ] [[package]] name = "want" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" dependencies = [ + "log", "try-lock", ] @@ -9080,6 +9014,12 @@ version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -9088,9 +9028,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -9098,24 +9038,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" dependencies = [ "cfg-if", "js-sys", @@ -9125,9 +9065,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -9135,22 +9075,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-instrument" @@ -9163,14 +9103,14 @@ dependencies = [ [[package]] name = "wasm-opt" -version = "0.112.0" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fef6d0d508f08334e0ab0e6877feb4c0ecb3956bcf2cb950699b22fedf3e9c" +checksum = "84a303793cbc01fb96551badfc7367db6007396bba6bac97936b3c8b6f7fdb41" dependencies = [ "anyhow", "libc", - "strum 0.24.1", - "strum_macros 0.24.3", + "strum", + "strum_macros", "tempfile", "thiserror", "wasm-opt-cxx-sys", @@ -9179,9 +9119,9 @@ dependencies = [ [[package]] name = "wasm-opt-cxx-sys" -version = "0.112.0" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc816bbc1596c8f2e8127e137a760c798023ef3d378f2ae51f0f1840e2dfa445" +checksum = "d9c9deb56f8a9f2ec177b3bd642a8205621835944ed5da55f2388ef216aca5a4" dependencies = [ "anyhow", "cxx", @@ -9191,14 +9131,15 @@ dependencies = [ [[package]] name = "wasm-opt-sys" -version = "0.112.0" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40199e4f68ef1071b3c6d0bd8026a12b481865d4b9e49c156932ea9a6234dd14" +checksum = "4432e28b542738a9776cedf92e8a99d8991c7b4667ee2c7ccddfb479dd2856a7" dependencies = [ "anyhow", "cc", "cxx", "cxx-build", + "regex", ] [[package]] @@ -9216,29 +9157,63 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasmi" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" +dependencies = [ + "parity-wasm", + "wasmi-validation", + "wasmi_core", +] + +[[package]] +name = "wasmi-validation" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b" +dependencies = [ + "parity-wasm", +] + +[[package]] +name = "wasmi_core" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" +dependencies = [ + "downcast-rs", + "libm 0.2.6", + "memory_units", + "num-rational", + "num-traits", + "region", +] + [[package]] name = "wasmparser" -version = "0.102.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48134de3d7598219ab9eaf6b91b15d8e50d31da76b8519fe4ecfcec2cf35104b" +checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" dependencies = [ - "indexmap 1.9.3", + "indexmap", "url", ] [[package]] name = "wasmtime" -version = "8.0.1" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f907fdead3153cb9bfb7a93bbd5b62629472dc06dee83605358c64c52ed3dda9" +checksum = "76a222f5fa1e14b2cefc286f1b68494d7a965f4bf57ec04c59bb62673d639af6" dependencies = [ "anyhow", "bincode", "cfg-if", - "indexmap 1.9.3", + "indexmap", "libc", "log", - "object 0.30.4", + "object 0.29.0", "once_cell", "paste", "psm", @@ -9251,43 +9226,43 @@ dependencies = [ "wasmtime-environ", "wasmtime-jit", "wasmtime-runtime", - "windows-sys 0.45.0", + "windows-sys 0.42.0", ] [[package]] name = "wasmtime-asm-macros" -version = "8.0.1" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b9daa7c14cd4fa3edbf69de994408d5f4b7b0959ac13fa69d465f6597f810d" +checksum = "4407a7246e7d2f3d8fb1cf0c72fda8dbafdb6dd34d555ae8bea0e5ae031089cc" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "8.0.1" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213" +checksum = "5ceb3adf61d654be0be67fffdce42447b0880481348785be5fe40b5dd7663a4c" dependencies = [ "anyhow", - "base64 0.21.7", + "base64 0.13.1", "bincode", "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.17", + "rustix", "serde", - "sha2 0.10.8", - "toml 0.5.11", - "windows-sys 0.45.0", - "zstd 0.11.2+zstd.1.5.2", + "sha2 0.10.6", + "toml", + "windows-sys 0.42.0", + "zstd", ] [[package]] name = "wasmtime-cranelift" -version = "8.0.1" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1cefde0cce8cb700b1b21b6298a3837dba46521affd7b8c38a9ee2c869eee04" +checksum = "3c366bb8647e01fd08cb5589976284b00abfded5529b33d7e7f3f086c68304a4" dependencies = [ "anyhow", "cranelift-codegen", @@ -9295,43 +9270,27 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli 0.27.3", + "gimli 0.26.2", "log", - "object 0.30.4", + "object 0.29.0", "target-lexicon", "thiserror", "wasmparser", - "wasmtime-cranelift-shared", - "wasmtime-environ", -] - -[[package]] -name = "wasmtime-cranelift-shared" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd041e382ef5aea1b9fc78442394f1a4f6d676ce457e7076ca4cb3f397882f8b" -dependencies = [ - "anyhow", - "cranelift-codegen", - "cranelift-native", - "gimli 0.27.3", - "object 0.30.4", - "target-lexicon", "wasmtime-environ", ] [[package]] name = "wasmtime-environ" -version = "8.0.1" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a990198cee4197423045235bf89d3359e69bd2ea031005f4c2d901125955c949" +checksum = "47b8b50962eae38ee319f7b24900b7cf371f03eebdc17400c1dc8575fc10c9a7" dependencies = [ "anyhow", "cranelift-entity", - "gimli 0.27.3", - "indexmap 1.9.3", + "gimli 0.26.2", + "indexmap", "log", - "object 0.30.4", + "object 0.29.0", "serde", "target-lexicon", "thiserror", @@ -9341,18 +9300,18 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "8.0.1" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de48df552cfca1c9b750002d3e07b45772dd033b0b206d5c0968496abf31244" +checksum = "ffaed4f9a234ba5225d8e64eac7b4a5d13b994aeb37353cde2cbeb3febda9eaa" dependencies = [ - "addr2line 0.19.0", + "addr2line 0.17.0", "anyhow", "bincode", "cfg-if", "cpp_demangle", - "gimli 0.27.3", + "gimli 0.26.2", "log", - "object 0.30.4", + "object 0.29.0", "rustc-demangle", "serde", "target-lexicon", @@ -9360,60 +9319,60 @@ dependencies = [ "wasmtime-jit-debug", "wasmtime-jit-icache-coherence", "wasmtime-runtime", - "windows-sys 0.45.0", + "windows-sys 0.42.0", ] [[package]] name = "wasmtime-jit-debug" -version = "8.0.1" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0554b84c15a27d76281d06838aed94e13a77d7bf604bbbaf548aa20eb93846" +checksum = "eed41cbcbf74ce3ff6f1d07d1b707888166dc408d1a880f651268f4f7c9194b2" dependencies = [ - "object 0.30.4", + "object 0.29.0", "once_cell", - "rustix 0.36.17", + "rustix", ] [[package]] name = "wasmtime-jit-icache-coherence" -version = "8.0.1" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aecae978b13f7f67efb23bd827373ace4578f2137ec110bbf6a4a7cde4121bbd" +checksum = "43a28ae1e648461bfdbb79db3efdaee1bca5b940872e4175390f465593a2e54c" dependencies = [ "cfg-if", "libc", - "windows-sys 0.45.0", + "windows-sys 0.42.0", ] [[package]] name = "wasmtime-runtime" -version = "8.0.1" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658cf6f325232b6760e202e5255d823da5e348fdea827eff0a2a22319000b441" +checksum = "e704b126e4252788ccfc3526d4d4511d4b23c521bf123e447ac726c14545217b" dependencies = [ "anyhow", "cc", "cfg-if", - "indexmap 1.9.3", + "indexmap", "libc", "log", "mach", "memfd", - "memoffset", + "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.17", + "rustix", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", - "windows-sys 0.45.0", + "windows-sys 0.42.0", ] [[package]] name = "wasmtime-types" -version = "8.0.1" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f" +checksum = "83e5572c5727c1ee7e8f28717aaa8400e4d22dcbd714ea5457d85b5005206568" dependencies = [ "cranelift-entity", "serde", @@ -9423,9 +9382,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" dependencies = [ "js-sys", "wasm-bindgen", @@ -9433,331 +9392,443 @@ dependencies = [ [[package]] name = "webpki" -version = "0.22.4" +version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", + "ring", + "untrusted", ] [[package]] -name = "webpki-roots" -version = "0.22.6" +name = "webpki" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" dependencies = [ - "webpki", + "ring", + "untrusted", ] [[package]] name = "webpki-roots" -version = "0.25.4" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki 0.22.0", +] [[package]] -name = "which" -version = "4.4.2" +name = "webrtc" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +checksum = "2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb" dependencies = [ - "either", - "home", - "once_cell", - "rustix 0.38.32", + "arc-swap", + "async-trait", + "bytes", + "hex", + "interceptor", + "lazy_static", + "log", + "rand 0.8.5", + "rcgen 0.9.3", + "regex", + "ring", + "rtcp", + "rtp", + "rustls 0.19.1", + "sdp", + "serde", + "serde_json", + "sha2 0.10.6", + "stun", + "thiserror", + "time 0.3.17", + "tokio", + "turn", + "url", + "waitgroup", + "webrtc-data", + "webrtc-dtls", + "webrtc-ice", + "webrtc-mdns", + "webrtc-media", + "webrtc-sctp", + "webrtc-srtp", + "webrtc-util", ] [[package]] -name = "wide" -version = "0.7.15" +name = "webrtc-data" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89beec544f246e679fc25490e3f8e08003bc4bf612068f325120dad4cea02c1c" +checksum = "0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100" dependencies = [ - "bytemuck", - "safe_arch", + "bytes", + "derive_builder", + "log", + "thiserror", + "tokio", + "webrtc-sctp", + "webrtc-util", ] [[package]] -name = "widestring" -version = "1.1.0" +name = "webrtc-dtls" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" +checksum = "7021987ae0a2ed6c8cd33f68e98e49bb6e74ffe9543310267b48a1bbe3900e5f" +dependencies = [ + "aes 0.6.0", + "aes-gcm 0.8.0", + "async-trait", + "bincode", + "block-modes", + "byteorder", + "ccm", + "curve25519-dalek 3.2.0", + "der-parser 8.1.0", + "elliptic-curve", + "hkdf", + "hmac 0.10.1", + "log", + "oid-registry 0.6.1", + "p256", + "p384", + "rand 0.8.5", + "rand_core 0.6.4", + "rcgen 0.9.3", + "ring", + "rustls 0.19.1", + "sec1", + "serde", + "sha-1", + "sha2 0.9.9", + "signature", + "subtle", + "thiserror", + "tokio", + "webpki 0.21.4", + "webrtc-util", + "x25519-dalek 2.0.0-pre.1", + "x509-parser 0.13.2", +] [[package]] -name = "winapi" -version = "0.3.9" +name = "webrtc-ice" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "494483fbb2f5492620871fdc78b084aed8807377f6e3fe88b2e49f0a9c9c41d7" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "arc-swap", + "async-trait", + "crc", + "log", + "rand 0.8.5", + "serde", + "serde_json", + "stun", + "thiserror", + "tokio", + "turn", + "url", + "uuid", + "waitgroup", + "webrtc-mdns", + "webrtc-util", ] [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" +name = "webrtc-mdns" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106" +dependencies = [ + "log", + "socket2", + "thiserror", + "tokio", + "webrtc-util", +] [[package]] -name = "winapi-util" -version = "0.1.6" +name = "webrtc-media" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "ee2a3c157a040324e5049bcbd644ffc9079e6738fa2cfab2bcff64e5cc4c00d7" dependencies = [ - "winapi", + "byteorder", + "bytes", + "derive_builder", + "displaydoc", + "rand 0.8.5", + "rtp", + "thiserror", + "webrtc-util", ] [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "webrtc-sctp" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0" +dependencies = [ + "arc-swap", + "async-trait", + "bytes", + "crc", + "log", + "rand 0.8.5", + "thiserror", + "tokio", + "webrtc-util", +] [[package]] -name = "windows" -version = "0.51.1" +name = "webrtc-srtp" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +checksum = "6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5" dependencies = [ - "windows-core 0.51.1", - "windows-targets 0.48.5", + "aead 0.4.3", + "aes 0.7.5", + "aes-gcm 0.9.4", + "async-trait", + "byteorder", + "bytes", + "ctr 0.8.0", + "hmac 0.11.0", + "log", + "rtcp", + "rtp", + "sha-1", + "subtle", + "thiserror", + "tokio", + "webrtc-util", ] [[package]] -name = "windows-core" -version = "0.51.1" +name = "webrtc-util" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" dependencies = [ - "windows-targets 0.48.5", + "async-trait", + "bitflags", + "bytes", + "cc", + "ipnet", + "lazy_static", + "libc", + "log", + "nix 0.24.3", + "rand 0.8.5", + "thiserror", + "tokio", + "winapi", ] [[package]] -name = "windows-core" -version = "0.52.0" +name = "wepoll-ffi" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" dependencies = [ - "windows-targets 0.52.4", + "cc", ] [[package]] -name = "windows-sys" -version = "0.45.0" +name = "which" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" dependencies = [ - "windows-targets 0.42.2", + "either", + "libc", + "once_cell", ] [[package]] -name = "windows-sys" -version = "0.48.0" +name = "wide" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "b689b6c49d6549434bf944e6b0f39238cf63693cb7a147e9d887507fffa3b223" dependencies = [ - "windows-targets 0.48.5", + "bytemuck", + "safe_arch", ] [[package]] -name = "windows-sys" -version = "0.52.0" +name = "widestring" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.4", -] +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" [[package]] -name = "windows-targets" -version = "0.42.2" +name = "winapi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] -name = "windows-targets" -version = "0.48.5" +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] -name = "windows-targets" -version = "0.52.4" +name = "winapi-util" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "windows_aarch64_gnullvm 0.52.4", - "windows_aarch64_msvc 0.52.4", - "windows_i686_gnu 0.52.4", - "windows_i686_msvc 0.52.4", - "windows_x86_64_gnu 0.52.4", - "windows_x86_64_gnullvm 0.52.4", - "windows_x86_64_msvc 0.52.4", + "winapi", ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" +name = "windows" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f" +dependencies = [ + "windows_aarch64_msvc 0.34.0", + "windows_i686_gnu 0.34.0", + "windows_i686_msvc 0.34.0", + "windows_x86_64_gnu 0.34.0", + "windows_x86_64_msvc 0.34.0", +] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.4" +name = "windows-sys" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.1", +] [[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" +name = "windows-sys" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] [[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" +name = "windows-targets" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.1", +] [[package]] -name = "windows_aarch64_msvc" -version = "0.52.4" +name = "windows_aarch64_gnullvm" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" [[package]] -name = "windows_i686_gnu" -version = "0.42.2" +name = "windows_aarch64_msvc" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] -name = "windows_i686_gnu" -version = "0.48.5" +name = "windows_aarch64_msvc" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" [[package]] name = "windows_i686_gnu" -version = "0.52.4" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" +checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] -name = "windows_i686_msvc" -version = "0.42.2" +name = "windows_i686_gnu" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" [[package]] name = "windows_i686_msvc" -version = "0.48.5" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" -version = "0.52.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" [[package]] name = "windows_x86_64_gnu" -version = "0.48.5" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" -version = "0.52.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" [[package]] name = "windows_x86_64_msvc" -version = "0.48.5" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.52.4" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" - -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" [[package]] name = "winreg" -version = "0.50.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" dependencies = [ - "cfg-if", - "windows-sys 0.48.0", + "winapi", ] [[package]] @@ -9780,22 +9851,52 @@ dependencies = [ "zeroize", ] +[[package]] +name = "x25519-dalek" +version = "2.0.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df" +dependencies = [ + "curve25519-dalek 3.2.0", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "x509-parser" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" +dependencies = [ + "asn1-rs 0.3.1", + "base64 0.13.1", + "data-encoding", + "der-parser 7.0.0", + "lazy_static", + "nom", + "oid-registry 0.4.0", + "ring", + "rusticata-macros", + "thiserror", + "time 0.3.17", +] + [[package]] name = "x509-parser" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.1", "base64 0.13.1", "data-encoding", - "der-parser", + "der-parser 8.1.0", "lazy_static", "nom", - "oid-registry", + "oid-registry 0.6.1", "rusticata-macros", "thiserror", - "time", + "time 0.3.17", ] [[package]] @@ -9814,51 +9915,32 @@ dependencies = [ [[package]] name = "yasna" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" -dependencies = [ - "time", -] - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.58", + "time 0.3.17", ] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 1.0.107", + "synstructure", ] [[package]] @@ -9867,16 +9949,7 @@ version = "0.11.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" dependencies = [ - "zstd-safe 5.0.2+zstd.1.5.2", -] - -[[package]] -name = "zstd" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" -dependencies = [ - "zstd-safe 6.0.6", + "zstd-safe", ] [[package]] @@ -9889,22 +9962,13 @@ dependencies = [ "zstd-sys", ] -[[package]] -name = "zstd-safe" -version = "6.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" -dependencies = [ - "libc", - "zstd-sys", -] - [[package]] name = "zstd-sys" -version = "2.0.10+zstd.1.5.6" +version = "2.0.6+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" +checksum = "68a3f9792c0c3dc6c165840a75f47ae1f4da402c2d006881129579f6597e801b" dependencies = [ "cc", + "libc", "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index a05b3c9e5..5389d330c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,22 +2,13 @@ members = [ "integration-tests", "node", - "pallets/commitments", "pallets/subtensor", + "pallets/commitments", "runtime", ] -resolver = "2" - -[workspace.lints.clippy] -type_complexity = "allow" [profile.release] panic = "unwind" [profile.test] opt-level = 3 - -[profile.production] -inherits = "release" -lto = true -codegen-units = 1 diff --git a/README.md b/README.md index 47639b640..b1e6c1a99 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ This repository contains Bittensor's substrate-chain. Subtensor contains the trusted logic which: 1. Runs Bittensor's [consensus mechanism](./docs/consensus.md); -2. Advertises neuron information, IPs, etc., and +2. Advertises neuron information, IPs, etc.; and 3. Facilitates value transfer via TAO. ## System Requirements @@ -42,29 +42,15 @@ Requirements: * Subtensor needs access to the public internet * Subtensor runs on ipv4 * Subtensor listens on the following ports: - 1) 9944 - Websocket. This port is used by bittensor. It only accepts connections from localhost. Make sure this port is firewalled off from the public domain. - 2) 9933 - RPC. This port is opened, but not used. - 3) 30333 - p2p socket. This port accepts connections from other subtensor nodes. Make sure your firewall(s) allow incoming traffic to this port. +1) 9944 - Websocket. This port is used by bittensor. It only accepts connections from localhost. Make sure this port is firewalled off from the public domain. +2) 9933 - RPC. This port is opened, but not used. +3) 30333 - p2p socket. This port accepts connections from other subtensor nodes. Make sure your firewall(s) allow incoming traffic to this port. * It is assumed your default outgoing traffic policy is ACCEPT. If not, make sure outbound traffic to port 30333 is allowed. ---- - -## For Subnet Development - -If you are developing and testing subnet incentive mechanism, you will need to run a local subtensor node. Follow the detailed step-by-step instructions provided in the document [Running subtensor locally](./docs/running-subtensor-locally.md) to run either a lite node or an archive node. Also see the [**Subtensor Nodes** section in Bittensor Developer Documentation](https://docs.bittensor.com/subtensor-nodes). - -### Lite node vs Archive node - -For an explanation of lite node, archive node and how you can run your local subtensor node in these modes, see [Lite node vs archive node](https://docs.bittensor.com/subtensor-nodes#lite-node-vs-archive-node) section on [Bittensor Developer Docs](https://docs.bittensor.com/). - ---- - -## For Subtensor Development - ### Installation First, complete the [basic Rust setup instructions](./docs/rust-setup.md). -**Build and Run** +### Run Use Rust's native `cargo` command to build and launch the template node: @@ -72,20 +58,15 @@ Use Rust's native `cargo` command to build and launch the template node: cargo run --release -- --dev ``` -**Build only** +### Build -The above `cargo run` command will perform an initial build and launch the node. Use the following command to build the node +The `cargo run` command will perform an initial build. Use the following command to build the node without launching it: ```sh cargo build --release ``` - -## Other ways to launch the node +## Run -The above `cargo run` command will launch a temporary node and its state will be discarded after +The provided `cargo run` command will launch a temporary node and its state will be discarded after you terminate the process. After the project has been built, there are other ways to launch the node. @@ -168,7 +148,7 @@ Running code coverage bash scripts/code-coverage.sh ``` -> Note: They above requires `cargo-tarpaulin` is installed to the host, eg. `cargo install cargo-tarpaulin` +> Note; above requires `cargo-tarpaulin` is installed to the host, eg. `cargo install cargo-tarpaulin` > Development chain means that the state of our chain will be in a tmp folder while the nodes are > running. Also, **alice** account will be authority and sudo account as declared in the > [genesis state](https://github.com/substrate-developer-hub/substrate-node-template/blob/main/node/src/chain_spec.rs#L49). @@ -178,10 +158,10 @@ bash scripts/code-coverage.sh > - Alice//stash > - Bob//stash -If we want to maintain the chain state between runs, a base path must be added +In case of being interested in maintaining the chain' state between runs a base path must be added so the db can be stored in the provided folder instead of a temporal one. We could use this folder to store different chain databases, as a different folder will be created per different chain that -is ran. The following commands show how to use a newly created folder as our db base path: +is ran. The following commands shows how to use a newly created folder as our db base path. ```bash # Create a folder to use as the db base path @@ -199,7 +179,7 @@ ls ./my-chain-state/chains/dev #> db keystore network ``` -**Connect with Polkadot-JS Apps Front-end** +### Connect with Polkadot-JS Apps Front-end Once the node template is running locally, you can connect it with **Polkadot-JS Apps** front-end to interact with your chain. [Click @@ -216,7 +196,7 @@ If you want to see the multi-node consensus algorithm in action, refer to our A Substrate project such as this consists of a number of components that are spread across a few directories. -### Node Capabilities +### Node A blockchain node is an application that allows users to participate in a blockchain network. Substrate-based blockchain nodes expose a number of capabilities: @@ -230,9 +210,7 @@ Substrate-based blockchain nodes expose a number of capabilities: [Web3 Foundation research](https://research.web3.foundation/en/latest/polkadot/NPoS/index.html). - RPC Server: A remote procedure call (RPC) server is used to interact with Substrate nodes. -**Directory structure** - -There are several files in the [`node`](./node/) directory. Make a note of the following important files: +There are several files in the `node` directory - take special note of the following: - [`chain_spec.rs`](./node/src/chain_spec.rs): A [chain specification](https://docs.substrate.io/main-docs/build/chain-spec/) is a @@ -250,13 +228,11 @@ There are several files in the [`node`](./node/) directory. Make a note of the f and other [consensus mechanisms](https://docs.substrate.io/main-docs/fundamentals/consensus/#default-consensus-models) such as Aura for block authoring and GRANDPA for finality. -### CLI help - After the node has been [built](#build), refer to the embedded documentation to learn more about the capabilities and configuration parameters that it exposes: ```shell -./target/release/node-subtensor --help +./target/release/node-template --help ``` ### Runtime @@ -302,7 +278,6 @@ A FRAME pallet is compromised of a number of blockchain primitives: - Config: The `Config` configuration interface is used to define the types and parameters upon which a FRAME pallet depends. - -## License + +## 6. License The MIT License (MIT) Copyright © 2021 Yuma Rao @@ -342,5 +317,5 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -## Acknowledgments +## 7. Acknowledgments **parralax** diff --git a/docs/running-subtensor-locally.md b/docs/running-subtensor-locally.md index f205eea5c..0f7f73f6d 100644 --- a/docs/running-subtensor-locally.md +++ b/docs/running-subtensor-locally.md @@ -1,205 +1,77 @@ -# Running subtensor node locally +# Running subtensor locally -- [Method 1: Using Docker](#method-1-using-docker) -- [Method 2: Using Source Code](#method-2-using-source-code) -- [Running on Cloud](#running-on-cloud) +- [Running docker](#running-docker) +- [Compiling your own binary](#compiling-your-own-binary) +- [Running on cloud](#running-on-cloud) -## Method 1: Using Docker +## Running docker -To run a subtensor node with Docker, follow the below steps. +### Install git +`sudo apt install git` -If you are already running a subtensor node using Docker, then go directly to [Step 5 Prepare to Run](#step-5-prepare-to-run) to restart the Docker container. The below steps 1 through 4 are for first time users only. - -### Step 1: Install git - -Make sure you installed `git` on your machine. See [GitHub docs](https://docs.github.com/en/get-started). - -### Step 2: Install Docker - -Follow Docker's [official installation guides](https://docs.docker.com/engine/install/) and install Docker. - -**Run Docker first** -Before you proceed, make sure that Docker is running. - -### Step 3: Clone the subtensor repo - -Clone the subtensor repo: +### Install Docker Engine + You can follow Docker's [oficial installation guides](https://docs.docker.com/engine/install/) +### Run node-subtensor container ```bash git clone https://github.com/opentensor/subtensor.git -``` - -### Step 4: Go into subtensor directory - -Then `cd` into the subtensor directory: - -```bash cd subtensor -``` - -### Step 5: Prepare to run - -Execute the below three commands in this order: - -Make sure you are on the `main` branch. If not, switch to it: - -```bash -git checkout main -``` - -Pull the latest `main` branch contents: - -```bash -git pull -``` - -Stop the currently running Docker containers: - -```bash -docker compose down --volumes -``` - -### Run a lite node on mainchain - -To run a lite node connected to the Bittensor mainchain, run the below command. - -```bash +# to run a lite node on the mainnet: sudo ./scripts/run/subtensor.sh -e docker --network mainnet --node-type lite +# or mainnet archive node: sudo ./scripts/run/subtensor.sh -e docker --network mainnet --node-type archive +# or testnet lite node: sudo ./scripts/run/subtensor.sh -e docker --network testnet --node-type lite +# or testnet archive node: sudo ./scripts/run/subtensor.sh -e docker --network testnet --node-type archive ``` -### Run an archive node on mainchain - -To run an archive node connected to the Bittensor mainchain, run the below command. - +## Compiling your own binary +### Requirements ```bash -sudo ./scripts/run/subtensor.sh -e docker --network mainnet --node-type archive +sudo apt install build-essential git make clang libssl-dev llvm libudev-dev protobuf-compiler -y ``` -### Run a lite node on testchain - -To run a lite node connected to the Bittensor testchain, run the below command. - +### Install Rust ```bash -sudo ./scripts/run/subtensor.sh -e docker --network testnet --node-type lite +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup-init.sh +chmod +x rustup-init.sh +./rustup-init.sh # you can select default options in the prompts you will be given +source "$HOME/.cargo/env" ``` -### Run an archive node on testchain - -To run an archive node connected to the Bittensor testchain, run the below command. - +### Rustup update ```bash -sudo ./scripts/run/subtensor.sh -e docker --network testnet --node-type archive +rustup default stable && \ + rustup update && \ + rustup update nightly && \ + rustup target add wasm32-unknown-unknown --toolchain nightly ``` ---- - -## Method 2: Using Source Code - -To install and run a subtensor node by compiling the source code, follow the below steps. - -## Install basic packages - -Install the basic requirements by running the below commands on a Linux terminal. - -```bash title="On Linux" -sudo apt-get update -sudo apt install build-essential -sudo apt-get install clang -sudo apt-get install curl -sudo apt-get install git -sudo apt-get install make -sudo apt install --assume-yes git clang curl libssl-dev protobuf-compiler -sudo apt install --assume-yes git clang curl libssl-dev llvm libudev-dev make protobuf-compiler -``` - -## Install Rust - -Next, install Rust and update the environment by running the following commands: - -```bash -curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -source ~/.cargo/env -``` - -Next, install Rust toolchain: - -```bash -rustup default stable -rustup update -rustup target add wasm32-unknown-unknown -rustup toolchain install nightly -rustup target add --toolchain nightly wasm32-unknown-unknown -``` - -## Compile subtensor code - -Next, to compile the subtensor source code, follow the below steps: - -Clone the subtensor repo: - +### Compiling ```bash git clone https://github.com/opentensor/subtensor.git -``` - -`cd` into the subtensor directory: - -```bash cd subtensor +cargo build --release --features runtime-benchmarks ``` -Make sure you are on the `main` branch. If not, switch to it: - +### Running the node +#### Mainnet / Lite node ```bash -git checkout main -``` - -Remove previous chain state: +sudo ./scripts/run/subtensor.sh -e binary --network mainnet --node-type lite +``` +#### Mainnet / Archive node ```bash -rm -rf /tmp/blockchain +sudo ./scripts/run/subtensor.sh -e docker --network mainnet --node-type archive ``` -Install subtensor by compiling with `cargo`: - +#### Testnet / Lite node ```bash -cargo build --release --features=runtime-benchmarks -``` - -## Run the subtensor node - -You can now run the public subtensor node either as a lite node or as an archive node. See below: - -### Lite node on mainchain - -To run a lite node connected to the mainchain, execute the below command (note the `--sync=warp` flag which runs the subtensor node in lite mode): - -```bash title="With --sync=warp setting, for lite node" -./target/release/node-subtensor --chain raw_spec.json --base-path /tmp/blockchain --sync=warp --execution wasm --wasm-execution compiled --port 30333 --max-runtime-instances 64 --rpc-max-response-size 2048 --rpc-cors all --rpc-port 9944 --bootnodes /ip4/13.58.175.193/tcp/30333/p2p/12D3KooWDe7g2JbNETiKypcKT1KsCEZJbTzEHCn8hpd4PHZ6pdz5 --ws-max-connections 16000 --no-mdns --in-peers 8000 --out-peers 8000 --prometheus-external --rpc-external --ws-external -``` - -### Archive node on mainchain - -To run an archive node connected to the mainchain, execute the below command (note the `--sync=full` which syncs the node to the full chain and `--pruning archive` flags, which disables the node's automatic pruning of older historical data): - -```bash title="With --sync=full and --pruning archive setting, for archive node" -./target/release/node-subtensor --chain raw_spec.json --base-path /tmp/blockchain --sync=full --pruning archive --execution wasm --wasm-execution compiled --port 30333 --max-runtime-instances 64 --rpc-max-response-size 2048 --rpc-cors all --rpc-port 9944 --bootnodes /ip4/13.58.175.193/tcp/30333/p2p/12D3KooWDe7g2JbNETiKypcKT1KsCEZJbTzEHCn8hpd4PHZ6pdz5 --ws-max-connections 16000 --no-mdns --in-peers 8000 --out-peers 8000 --prometheus-external --rpc-external --ws-external -``` - -### Lite node on testchain - -To run a lite node connected to the testchain, execute the below command: - -```bash title="With bootnodes set to testnet and --sync=warp setting, for lite node." -./target/release/node-subtensor --chain raw_spec.json --base-path /tmp/blockchain --sync=warp --execution wasm --wasm-execution compiled --port 30333 --max-runtime-instances 64 --rpc-max-response-size 2048 --rpc-cors all --rpc-port 9944 --bootnodes /dns/bootnode.test.finney.opentensor.ai/tcp/30333/p2p/12D3KooWDe7g2JbNETiKypcKT1KsCEZJbTzEHCn8hpd4PHZ6pdz5 --ws-max-connections 16000 --no-mdns --in-peers 8000 --out-peers 8000 --prometheus-external --rpc-external --ws-external +sudo ./scripts/run/subtensor.sh -e docker --network testnet --node-type lite ``` -### Archive node on testchain - -To run an archive node connected to the testchain, execute the below command: - -```bash title="With bootnodes set to testnet and --sync=full and --pruning archive setting, for archive node" -./target/release/node-subtensor --chain raw_spec.json --base-path /tmp/blockchain --sync=full --pruning archive --execution wasm --wasm-execution compiled --port 30333 --max-runtime-instances 64 --rpc-max-response-size 2048 --rpc-cors all --rpc-port 9944 --bootnodes /dns/bootnode.test.finney.opentensor.ai/tcp/30333/p2p/12D3KooWDe7g2JbNETiKypcKT1KsCEZJbTzEHCn8hpd4PHZ6pdz5 --ws-max-connections 16000 --no-mdns --in-peers 8000 --out-peers 8000 --prometheus-external --rpc-external --ws-external +#### Testnet / Archive node +```bash +sudo ./scripts/run/subtensor.sh -e docker --network testnet --node-type archive ``` ## Running on cloud -We have not tested these installation scripts on any cloud service. In addition, if you are using Runpod cloud service, then note that this service is already [containerized](https://docs.runpod.io/pods/overview). Hence, the only option available to you is to compile from the source, as described in the above [Method 2: Using Source Code](#method-2-using-source-code) section. Note that these scripts have not been tested on Runpod. +We have not tested these installation scripts on any cloud service. In addition, if you are using Runpod cloud service, then note that this service is already [containerized](https://docs.runpod.io/pods/overview). Hence, the only option available to you is to compile from the source, as described in the above [Compiling your own binary](#compiling-your-own-binary) section. Note that these scripts have not been tested on Runpod. diff --git a/integration-tests/Cargo.toml b/integration-tests/Cargo.toml index a83410167..d59aece3b 100644 --- a/integration-tests/Cargo.toml +++ b/integration-tests/Cargo.toml @@ -7,9 +7,6 @@ edition = "2021" license = "Unlicense" repository = "https://github.com/opentensor/subtensor" -[lints] -workspace = true - [dependencies] ## diff --git a/justfile b/justfile deleted file mode 100644 index 691d5bca2..000000000 --- a/justfile +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env just --justfile - -export RUST_BACKTRACE := "full" -export SKIP_WASM_BUILD := "1" -export RUST_BIN_DIR := "target/x86_64-unknown-linux-gnu" -export TARGET := "x86_64-unknown-linux-gnu" -export RUSTV := "nightly-2024-03-05" -export RELEASE_NAME := "development" - -fmt: - @echo "Running cargo fmt..." - cargo +{{RUSTV}} fmt --all - -check: - @echo "Running cargo check..." - cargo +{{RUSTV}} check --workspace - -test: - @echo "Running cargo test..." - cargo +{{RUSTV}} test --workspace - -benchmarks: - @echo "Running cargo test with benchmarks..." - cargo +{{RUSTV}} test --workspace --features=runtime-benchmarks - -clippy: - @echo "Running cargo clippy..." - cargo +{{RUSTV}} clippy -- -D clippy::panic \ - -D clippy::todo \ - -D clippy::unimplemented - -clippy-fix: - @echo "Running cargo clippy with automatic fixes on potentially dirty code..." - cargo +{{RUSTV}} clippy --fix --allow-dirty -- -A clippy::panic \ - -A clippy::todo \ - -A clippy::unimplemented -fix: - @echo "Running cargo fix..." - cargo +{{RUSTV}} fix --workspace - git diff --exit-code || (echo "There are local changes after running 'cargo fix --workspace' ❌" && exit 1) \ No newline at end of file diff --git a/node/Cargo.toml b/node/Cargo.toml index 5c0a0e489..286ce5886 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -10,9 +10,6 @@ publish = false repository = "https://github.com/opentensor/subtensor" build = "build.rs" -[lints] -workspace = true - [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -28,47 +25,44 @@ serde = { version = "1.0.145", features = ["derive"] } memmap2 = "0.5.0" serde_json = "1.0.85" -sc-cli = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-core = { version = "21", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-executor = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-service = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-telemetry = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-keystore = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-transaction-pool = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-transaction-pool-api = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-offchain = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-network = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-consensus-aura = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-consensus-aura = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-consensus = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-consensus = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-consensus-grandpa = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-consensus-grandpa-rpc = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-consensus-grandpa = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-client-api = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-runtime = { version = "24", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-io = { version = "23", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-timestamp = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-inherents = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-keyring = { version = "24", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-system = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -pallet-transaction-payment = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-cli = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-core = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sc-executor = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sc-service = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sc-telemetry = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sc-keystore = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sc-transaction-pool = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sc-transaction-pool-api = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sc-consensus-aura = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-consensus-aura = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-consensus = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sc-consensus = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sc-finality-grandpa = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-finality-grandpa = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sc-client-api = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-runtime = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-io = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-timestamp = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-inherents = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-keyring = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-system = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +pallet-transaction-payment = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } pallet-commitments = { path = "../pallets/commitments" } # These dependencies are used for the subtensor's RPCs jsonrpsee = { version = "0.16.2", features = ["server"] } -sc-rpc = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-api = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-rpc-api = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-blockchain = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-block-builder = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sc-basic-authorship = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -substrate-frame-rpc-system = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -pallet-transaction-payment-rpc = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sc-rpc = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-api = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sc-rpc-api = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-blockchain = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-block-builder = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sc-basic-authorship = { version = "0.10.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +substrate-frame-rpc-system = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +pallet-transaction-payment-rpc = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } # These dependencies are used for runtime benchmarking -frame-benchmarking = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-benchmarking-cli = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-benchmarking = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-benchmarking-cli = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } # Local Dependencies node-subtensor-runtime = { version = "4.0.0-dev", path = "../runtime" } @@ -76,10 +70,10 @@ subtensor-custom-rpc = { path = "../pallets/subtensor/rpc" } subtensor-custom-rpc-runtime-api = { path = "../pallets/subtensor/runtime-api" } # CLI-specific dependencies -try-runtime-cli = { version = "0.10.0-dev", optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +try-runtime-cli = { version = "0.10.0-dev", optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } [build-dependencies] -substrate-build-script-utils = { version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +substrate-build-script-utils = { version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } [features] default = [] @@ -88,10 +82,6 @@ runtime-benchmarks = [ "node-subtensor-runtime/runtime-benchmarks", "frame-benchmarking/runtime-benchmarks", "frame-benchmarking-cli/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "sc-service/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "pallet-commitments/runtime-benchmarks" ] pow-faucet = [] @@ -100,8 +90,4 @@ pow-faucet = [] try-runtime = [ "node-subtensor-runtime/try-runtime", "try-runtime-cli/try-runtime", - "frame-system/try-runtime", - "pallet-transaction-payment/try-runtime", - "sp-runtime/try-runtime", - "pallet-commitments/try-runtime" ] diff --git a/node/src/benchmarking.rs b/node/src/benchmarking.rs index 07c596947..7848c2bbe 100644 --- a/node/src/benchmarking.rs +++ b/node/src/benchmarking.rs @@ -89,7 +89,7 @@ impl frame_benchmarking_cli::ExtrinsicBuilder for TransferKeepAliveBuilder { acc, BalancesCall::transfer_keep_alive { dest: self.dest.clone().into(), - value: self.value, + value: self.value.into(), } .into(), nonce, diff --git a/node/src/chain_spec.rs b/node/src/chain_spec.rs index c4f703a12..cce3f9399 100644 --- a/node/src/chain_spec.rs +++ b/node/src/chain_spec.rs @@ -1,22 +1,24 @@ use node_subtensor_runtime::{ - AccountId, AuraConfig, BalancesConfig, GrandpaConfig, RuntimeGenesisConfig, - SenateMembersConfig, Signature, SubtensorModuleConfig, SudoConfig, SystemConfig, - TriumvirateConfig, TriumvirateMembersConfig, WASM_BINARY, + AccountId, AuraConfig, BalancesConfig, GenesisConfig, GrandpaConfig, SenateMembersConfig, + Signature, SubtensorModuleConfig, SudoConfig, SystemConfig, TriumvirateConfig, + TriumvirateMembersConfig, WASM_BINARY, }; use sc_service::ChainType; use sp_consensus_aura::sr25519::AuthorityId as AuraId; -use sp_consensus_grandpa::AuthorityId as GrandpaId; use sp_core::crypto::Ss58Codec; use sp_core::{bounded_vec, sr25519, Pair, Public}; +use sp_finality_grandpa::AuthorityId as GrandpaId; use sp_runtime::traits::{IdentifyAccount, Verify}; use std::env; // The URL for the telemetry server. // const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/"; -/// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type. -pub type ChainSpec = sc_service::GenericChainSpec; +// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type. +pub type ChainSpec = sc_service::GenericChainSpec; +// These functions are unused in production compiles, util functions for unit testing +#[allow(dead_code)] /// Generate a crypto pair from seed. pub fn get_from_seed(seed: &str) -> ::Public { TPublic::Pair::from_string(&format!("//{}", seed), None) @@ -24,8 +26,10 @@ pub fn get_from_seed(seed: &str) -> ::Pu .public() } +#[allow(dead_code)] type AccountPublic = ::Signer; +#[allow(dead_code)] /// Generate an account ID from seed. pub fn get_account_id_from_seed(seed: &str) -> AccountId where @@ -34,6 +38,7 @@ where AccountPublic::from(get_from_seed::(seed)).into_account() } +#[allow(dead_code)] /// Generate an Aura authority key. pub fn authority_keys_from_seed(s: &str) -> (AuraId, GrandpaId) { (get_from_seed::(s), get_from_seed::(s)) @@ -90,14 +95,14 @@ pub fn finney_mainnet_config() -> Result { Vec<(sp_runtime::AccountId32, (u64, u16))>, )> = Vec::new(); for (coldkey_str, hotkeys) in old_state.stakes.iter() { - let coldkey = ::from_ss58check(coldkey_str).unwrap(); + let coldkey = ::from_ss58check(&coldkey_str).unwrap(); let coldkey_account = sp_runtime::AccountId32::from(coldkey); let mut processed_hotkeys: Vec<(sp_runtime::AccountId32, (u64, u16))> = Vec::new(); for (hotkey_str, amount_uid) in hotkeys.iter() { let (amount, uid) = amount_uid; - let hotkey = ::from_ss58check(hotkey_str).unwrap(); + let hotkey = ::from_ss58check(&hotkey_str).unwrap(); let hotkey_account = sp_runtime::AccountId32::from(hotkey); processed_hotkeys.push((hotkey_account, (*amount, *uid))); @@ -109,7 +114,7 @@ pub fn finney_mainnet_config() -> Result { let mut balances_issuance: u64 = 0; let mut processed_balances: Vec<(sp_runtime::AccountId32, u64)> = Vec::new(); for (key_str, amount) in old_state.balances.iter() { - let key = ::from_ss58check(key_str).unwrap(); + let key = ::from_ss58check(&key_str).unwrap(); let key_account = sp_runtime::AccountId32::from(key); processed_balances.push((key_account, *amount)); @@ -266,14 +271,14 @@ pub fn finney_testnet_config() -> Result { Vec<(sp_runtime::AccountId32, (u64, u16))>, )> = Vec::new(); for (coldkey_str, hotkeys) in old_state.stakes.iter() { - let coldkey = ::from_ss58check(coldkey_str).unwrap(); + let coldkey = ::from_ss58check(&coldkey_str).unwrap(); let coldkey_account = sp_runtime::AccountId32::from(coldkey); let mut processed_hotkeys: Vec<(sp_runtime::AccountId32, (u64, u16))> = Vec::new(); for (hotkey_str, amount_uid) in hotkeys.iter() { let (amount, uid) = amount_uid; - let hotkey = ::from_ss58check(hotkey_str).unwrap(); + let hotkey = ::from_ss58check(&hotkey_str).unwrap(); let hotkey_account = sp_runtime::AccountId32::from(hotkey); processed_hotkeys.push((hotkey_account, (*amount, *uid))); @@ -285,7 +290,7 @@ pub fn finney_testnet_config() -> Result { let mut balances_issuance: u64 = 0; let mut processed_balances: Vec<(sp_runtime::AccountId32, u64)> = Vec::new(); for (key_str, amount) in old_state.balances.iter() { - let key = ::from_ss58check(key_str).unwrap(); + let key = ::from_ss58check(&key_str).unwrap(); let key_account = sp_runtime::AccountId32::from(key); processed_balances.push((key_account, *amount)); @@ -409,7 +414,7 @@ fn localnet_genesis( wasm_binary: &[u8], initial_authorities: Vec<(AuraId, GrandpaId)>, _enable_println: bool, -) -> RuntimeGenesisConfig { +) -> GenesisConfig { let mut balances = vec![ ( get_account_id_from_seed::("Alice"), @@ -446,11 +451,10 @@ fn localnet_genesis( } } - RuntimeGenesisConfig { + GenesisConfig { system: SystemConfig { // Add Wasm runtime to storage. code: wasm_binary.to_vec(), - ..Default::default() }, balances: BalancesConfig { balances }, aura: AuraConfig { @@ -461,7 +465,6 @@ fn localnet_genesis( .iter() .map(|x| (x.1.clone(), 1)) .collect(), - ..Default::default() }, sudo: SudoConfig { key: Some(get_account_id_from_seed::("Alice")), @@ -492,7 +495,6 @@ fn localnet_genesis( } // Configure initial storage state for FRAME modules. -#[allow(clippy::too_many_arguments)] fn testnet_genesis( wasm_binary: &[u8], initial_authorities: Vec<(AuraId, GrandpaId)>, @@ -502,12 +504,11 @@ fn testnet_genesis( _stakes: Vec<(AccountId, Vec<(AccountId, (u64, u16))>)>, _balances: Vec<(AccountId, u64)>, _balances_issuance: u64, -) -> RuntimeGenesisConfig { - RuntimeGenesisConfig { +) -> GenesisConfig { + GenesisConfig { system: SystemConfig { // Add Wasm runtime to storage. code: wasm_binary.to_vec(), - ..Default::default() }, balances: BalancesConfig { // Configure sudo balance @@ -525,7 +526,6 @@ fn testnet_genesis( .iter() .map(|x| (x.1.clone(), 1)) .collect(), - ..Default::default() }, sudo: SudoConfig { key: Some( @@ -552,7 +552,6 @@ fn testnet_genesis( } // Configure initial storage state for FRAME modules. -#[allow(clippy::too_many_arguments)] fn finney_genesis( wasm_binary: &[u8], initial_authorities: Vec<(AuraId, GrandpaId)>, @@ -562,17 +561,16 @@ fn finney_genesis( stakes: Vec<(AccountId, Vec<(AccountId, (u64, u16))>)>, balances: Vec<(AccountId, u64)>, balances_issuance: u64, -) -> RuntimeGenesisConfig { - RuntimeGenesisConfig { +) -> GenesisConfig { + GenesisConfig { system: SystemConfig { // Add Wasm runtime to storage. code: wasm_binary.to_vec(), - ..Default::default() }, balances: BalancesConfig { // Configure endowed accounts with initial balance of 1 << 60. //balances: balances.iter().cloned().map(|k| k).collect(), - balances: balances.to_vec(), + balances: balances.iter().cloned().map(|k| k).collect(), }, aura: AuraConfig { authorities: initial_authorities.iter().map(|x| (x.0.clone())).collect(), @@ -582,7 +580,6 @@ fn finney_genesis( .iter() .map(|x| (x.1.clone(), 1)) .collect(), - ..Default::default() }, sudo: SudoConfig { key: Some( @@ -592,8 +589,8 @@ fn finney_genesis( }, transaction_payment: Default::default(), subtensor_module: SubtensorModuleConfig { - stakes, - balances_issuance, + stakes: stakes, + balances_issuance: balances_issuance, }, triumvirate: TriumvirateConfig { // Add initial authorities as collective members diff --git a/node/src/cli.rs b/node/src/cli.rs index 2c9c4c9fd..a37ff9b1f 100644 --- a/node/src/cli.rs +++ b/node/src/cli.rs @@ -9,7 +9,6 @@ pub struct Cli { pub run: RunCmd, } -#[allow(clippy::large_enum_variant)] #[derive(Debug, clap::Subcommand)] pub enum Subcommand { // Key management cli utilities @@ -42,6 +41,14 @@ pub enum Subcommand { #[command(subcommand)] Benchmark(frame_benchmarking_cli::BenchmarkCmd), + // Try some command against runtime state. + #[cfg(feature = "try-runtime")] + TryRuntime(try_runtime_cli::TryRuntimeCmd), + + // Try some command against runtime state. Note: `try-runtime` feature must be enabled. + #[cfg(not(feature = "try-runtime"))] + TryRuntime, + // Db meta columns information. ChainInfo(sc_cli::ChainInfoCmd), } diff --git a/node/src/command.rs b/node/src/command.rs index 1ce7d4f12..2ba0e0841 100644 --- a/node/src/command.rs +++ b/node/src/command.rs @@ -14,7 +14,7 @@ pub use node_subtensor_runtime::EXISTENTIAL_DEPOSIT; pub use sp_keyring::Sr25519Keyring; use node_subtensor_runtime::Block; -use sc_cli::SubstrateCli; +use sc_cli::{ChainSpec, RuntimeVersion, SubstrateCli}; use sc_service::PartialComponents; impl SubstrateCli for Cli { @@ -52,6 +52,10 @@ impl SubstrateCli for Cli { )?), }) } + + fn native_runtime_version(_: &Box) -> &'static RuntimeVersion { + &node_subtensor_runtime::VERSION + } } // Parse and run command line arguments @@ -124,7 +128,7 @@ pub fn run() -> sc_cli::Result<()> { .. } = service::new_partial(&config)?; let aux_revert = Box::new(|client, _, blocks| { - sc_consensus_grandpa::revert(client, blocks)?; + sc_finality_grandpa::revert(client, blocks)?; Ok(()) }); Ok((cmd.run(client, backend, Some(aux_revert)), task_manager)) @@ -200,6 +204,31 @@ pub fn run() -> sc_cli::Result<()> { } }) } + #[cfg(feature = "try-runtime")] + Some(Subcommand::TryRuntime(cmd)) => { + use crate::service::ExecutorDispatch; + use sc_executor::{sp_wasm_interface::ExtendedHostFunctions, NativeExecutionDispatch}; + let runner = cli.create_runner(cmd)?; + runner.async_run(|config| { + // we don't need any of the components of new_partial, just a runtime, or a task + // manager to do `async_run`. + let registry = config.prometheus_config.as_ref().map(|cfg| &cfg.registry); + let task_manager = + sc_service::TaskManager::new(config.tokio_handle.clone(), registry) + .map_err(|e| sc_cli::Error::Service(sc_service::Error::Prometheus(e)))?; + Ok(( + cmd.run::::ExtendHostFunctions, + >>(), + task_manager, + )) + }) + } + #[cfg(not(feature = "try-runtime"))] + Some(Subcommand::TryRuntime) => Err("TryRuntime wasn't enabled when building the node. \ + You can enable it with `--features try-runtime`." + .into()), Some(Subcommand::ChainInfo(cmd)) => { let runner = cli.create_runner(cmd)?; runner.sync_run(|config| cmd.run::(&config)) diff --git a/node/src/rpc.rs b/node/src/rpc.rs index 511fb74c3..9752c379a 100644 --- a/node/src/rpc.rs +++ b/node/src/rpc.rs @@ -8,8 +8,7 @@ use std::sync::Arc; use jsonrpsee::RpcModule; -use node_subtensor_runtime::{opaque::Block, AccountId, Balance, BlockNumber, Hash, Index}; -use sc_consensus_grandpa::FinalityProofProvider; +use node_subtensor_runtime::{opaque::Block, AccountId, Balance, Index}; use sc_transaction_pool_api::TransactionPool; use sp_api::ProvideRuntimeApi; use sp_block_builder::BlockBuilder; @@ -17,37 +16,19 @@ use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata}; pub use sc_rpc_api::DenyUnsafe; -/// Dependencies for GRANDPA -pub struct GrandpaDeps { - /// Voting round info. - pub shared_voter_state: sc_consensus_grandpa::SharedVoterState, - /// Authority set info. - pub shared_authority_set: sc_consensus_grandpa::SharedAuthoritySet, - /// Receives notifications about justification events from Grandpa. - pub justification_stream: sc_consensus_grandpa::GrandpaJustificationStream, - /// Executor to drive the subscription manager in the Grandpa RPC handler. - pub subscription_executor: sc_rpc::SubscriptionTaskExecutor, - /// Finality proof provider. - pub finality_provider: Arc>, -} - /// Full client dependencies. -pub struct FullDeps { +pub struct FullDeps { /// The client instance to use. pub client: Arc, /// Transaction pool instance. pub pool: Arc

, /// Whether to deny unsafe calls pub deny_unsafe: DenyUnsafe, - /// Grandpa block import setup. - pub grandpa: GrandpaDeps, - /// Backend used by the node. - pub backend: Arc, } /// Instantiate all full RPC extensions. -pub fn create_full( - deps: FullDeps, +pub fn create_full( + deps: FullDeps, ) -> Result, Box> where C: ProvideRuntimeApi, @@ -60,11 +41,9 @@ where C::Api: subtensor_custom_rpc_runtime_api::NeuronInfoRuntimeApi, C::Api: subtensor_custom_rpc_runtime_api::SubnetInfoRuntimeApi, C::Api: subtensor_custom_rpc_runtime_api::SubnetRegistrationRuntimeApi, - B: sc_client_api::Backend + Send + Sync + 'static, P: TransactionPool + 'static, { use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; - use sc_consensus_grandpa_rpc::{Grandpa, GrandpaApiServer}; use substrate_frame_rpc_system::{System, SystemApiServer}; use subtensor_custom_rpc::{SubtensorCustom, SubtensorCustomApiServer}; @@ -73,8 +52,6 @@ where client, pool, deny_unsafe, - grandpa, - backend: _, } = deps; // Custom RPC methods for Paratensor @@ -83,25 +60,6 @@ where module.merge(System::new(client.clone(), pool.clone(), deny_unsafe).into_rpc())?; module.merge(TransactionPayment::new(client).into_rpc())?; - let GrandpaDeps { - shared_voter_state, - shared_authority_set, - justification_stream, - subscription_executor, - finality_provider, - } = grandpa; - - module.merge( - Grandpa::new( - subscription_executor, - shared_authority_set.clone(), - shared_voter_state, - justification_stream, - finality_provider, - ) - .into_rpc(), - )?; - // Extend this RPC with a custom API by using the following syntax. // `YourRpcStruct` should have a reference to a client, which is needed // to call into the runtime. diff --git a/node/src/service.rs b/node/src/service.rs index c7eb3d416..79c94d643 100644 --- a/node/src/service.rs +++ b/node/src/service.rs @@ -1,35 +1,19 @@ //! Service and ServiceFactory implementation. Specialized wrapper over substrate service. -use futures::FutureExt; -use node_subtensor_runtime::{opaque::Block, RuntimeApi}; -use sc_client_api::{Backend, BlockBackend}; +use node_subtensor_runtime::{self, opaque::Block, RuntimeApi}; +use sc_client_api::BlockBackend; use sc_consensus_aura::{ImportQueueParams, SlotProportion, StartAuraParams}; -use sc_consensus_grandpa::SharedVoterState; -use sc_executor::sp_wasm_interface::{Function, HostFunctionRegistry, HostFunctions}; pub use sc_executor::NativeElseWasmExecutor; +use sc_finality_grandpa::SharedVoterState; +use sc_keystore::LocalKeystore; use sc_service::{error::Error as ServiceError, Configuration, TaskManager, WarpSyncParams}; use sc_telemetry::{Telemetry, TelemetryWorker}; -use sc_transaction_pool_api::OffchainTransactionPoolFactory; use sp_consensus_aura::sr25519::AuthorityPair as AuraPair; use std::{sync::Arc, time::Duration}; // Our native executor instance. pub struct ExecutorDispatch; -// appeasing the compiler, this is a no-op -impl HostFunctions for ExecutorDispatch { - fn host_functions() -> Vec<&'static dyn Function> { - vec![] - } - - fn register_static(_registry: &mut T) -> core::result::Result<(), T::Error> - where - T: HostFunctionRegistry, - { - Ok(()) - } -} - impl sc_executor::NativeExecutionDispatch for ExecutorDispatch { // Only enable the benchmarking host functions when we actually want to benchmark. #[cfg(feature = "runtime-benchmarks")] @@ -62,18 +46,24 @@ pub fn new_partial( sc_consensus::DefaultImportQueue, sc_transaction_pool::FullPool, ( - sc_consensus_grandpa::GrandpaBlockImport< + sc_finality_grandpa::GrandpaBlockImport< FullBackend, Block, FullClient, FullSelectChain, >, - sc_consensus_grandpa::LinkHalf, + sc_finality_grandpa::LinkHalf, Option, ), >, ServiceError, > { + if config.keystore_remote.is_some() { + return Err(ServiceError::Other( + "Remote Keystores are not supported.".into(), + )); + } + let telemetry = config .telemetry_endpoints .clone() @@ -85,7 +75,12 @@ pub fn new_partial( }) .transpose()?; - let executor = sc_service::new_native_or_wasm_executor(config); + let executor = NativeElseWasmExecutor::::new( + config.wasm_method, + Some(16384), //config.default_heap_pages, + config.max_runtime_instances, + config.runtime_cache_size, + ); let (client, backend, keystore_container, task_manager) = sc_service::new_full_parts::( @@ -112,7 +107,7 @@ pub fn new_partial( client.clone(), ); - let (grandpa_block_import, grandpa_link) = sc_consensus_grandpa::block_import( + let (grandpa_block_import, grandpa_link) = sc_finality_grandpa::block_import( client.clone(), &(client.clone() as Arc<_>), select_chain.clone(), @@ -156,22 +151,38 @@ pub fn new_partial( }) } +fn remote_keystore(_url: &String) -> Result, &'static str> { + // FIXME: here would the concrete keystore be built, + // must return a concrete type (NOT `LocalKeystore`) that + // implements `CryptoStore` and `SyncCryptoStore` + Err("Remote Keystore not supported.") +} + // Builds a new service for a full client. -pub fn new_full(config: Configuration) -> Result { +pub fn new_full(mut config: Configuration) -> Result { let sc_service::PartialComponents { client, backend, mut task_manager, import_queue, - keystore_container, + mut keystore_container, select_chain, transaction_pool, other: (block_import, grandpa_link, mut telemetry), } = new_partial(&config)?; - let mut net_config = sc_network::config::FullNetworkConfiguration::new(&config.network); - - let grandpa_protocol_name = sc_consensus_grandpa::protocol_standard_name( + if let Some(url) = &config.keystore_remote { + match remote_keystore(url) { + Ok(k) => keystore_container.set_remote_keystore(k), + Err(e) => { + return Err(ServiceError::Other(format!( + "Error hooking up remote keystore for {}: {}", + url, e + ))) + } + }; + } + let grandpa_protocol_name = sc_finality_grandpa::protocol_standard_name( &client .block_hash(0) .ok() @@ -180,19 +191,21 @@ pub fn new_full(config: Configuration) -> Result { &config.chain_spec, ); - net_config.add_notification_protocol(sc_consensus_grandpa::grandpa_peers_set_config( - grandpa_protocol_name.clone(), - )); - let warp_sync = Arc::new(sc_consensus_grandpa::warp_proof::NetworkProvider::new( + config + .network + .extra_sets + .push(sc_finality_grandpa::grandpa_peers_set_config( + grandpa_protocol_name.clone(), + )); + let warp_sync = Arc::new(sc_finality_grandpa::warp_proof::NetworkProvider::new( backend.clone(), grandpa_link.shared_authority_set().clone(), Vec::default(), )); - let (network, system_rpc_tx, tx_handler_controller, network_starter, sync_service) = + let (network, system_rpc_tx, tx_handler_controller, network_starter) = sc_service::build_network(sc_service::BuildNetworkParams { config: &config, - net_config, client: client.clone(), transaction_pool: transaction_pool.clone(), spawn_handle: task_manager.spawn_handle(), @@ -202,35 +215,14 @@ pub fn new_full(config: Configuration) -> Result { })?; if config.offchain_worker.enabled { - task_manager.spawn_handle().spawn( - "offchain-workers-runner", - "offchain-worker", - sc_offchain::OffchainWorkers::new(sc_offchain::OffchainWorkerOptions { - runtime_api_provider: client.clone(), - is_validator: config.role.is_authority(), - keystore: Some(keystore_container.keystore()), - offchain_db: backend.offchain_storage(), - transaction_pool: Some(OffchainTransactionPoolFactory::new( - transaction_pool.clone(), - )), - network_provider: network.clone(), - enable_http_requests: true, - custom_extensions: |_| vec![], - }) - .run(client.clone(), task_manager.spawn_handle()) - .boxed(), + sc_service::build_offchain_workers( + &config, + task_manager.spawn_handle(), + client.clone(), + network.clone(), ); } - let finality_proof_provider = sc_consensus_grandpa::FinalityProofProvider::new_for_service( - backend.clone(), - Some(grandpa_link.shared_authority_set().clone()), - ); - let rpc_backend = backend.clone(); - let justification_stream = grandpa_link.justification_stream(); - let shared_authority_set = grandpa_link.shared_authority_set().clone(); - let shared_voter_state = SharedVoterState::empty(); - let role = config.role.clone(); let force_authoring = config.force_authoring; let backoff_authoring_blocks: Option<()> = None; @@ -242,37 +234,26 @@ pub fn new_full(config: Configuration) -> Result { let client = client.clone(); let pool = transaction_pool.clone(); - Box::new( - move |deny_unsafe, subscription_executor: sc_rpc::SubscriptionTaskExecutor| { - let deps = crate::rpc::FullDeps { - client: client.clone(), - pool: pool.clone(), - deny_unsafe, - grandpa: crate::rpc::GrandpaDeps { - shared_voter_state: shared_voter_state.clone(), - shared_authority_set: shared_authority_set.clone(), - justification_stream: justification_stream.clone(), - subscription_executor: subscription_executor.clone(), - finality_provider: finality_proof_provider.clone(), - }, - backend: rpc_backend.clone(), - }; - crate::rpc::create_full(deps).map_err(Into::into) - }, - ) + Box::new(move |deny_unsafe, _| { + let deps = crate::rpc::FullDeps { + client: client.clone(), + pool: pool.clone(), + deny_unsafe, + }; + crate::rpc::create_full(deps).map_err(Into::into) + }) }; let _rpc_handlers = sc_service::spawn_tasks(sc_service::SpawnTasksParams { network: network.clone(), client: client.clone(), - keystore: keystore_container.keystore(), + keystore: keystore_container.sync_keystore(), task_manager: &mut task_manager, transaction_pool: transaction_pool.clone(), rpc_builder: rpc_extensions_builder, backend, system_rpc_tx, tx_handler_controller, - sync_service: sync_service.clone(), config, telemetry: telemetry.as_mut(), })?; @@ -281,7 +262,7 @@ pub fn new_full(config: Configuration) -> Result { let proposer_factory = sc_basic_authorship::ProposerFactory::new( task_manager.spawn_handle(), client.clone(), - transaction_pool.clone(), + transaction_pool, prometheus_registry.as_ref(), telemetry.as_ref().map(|x| x.handle()), ); @@ -308,9 +289,9 @@ pub fn new_full(config: Configuration) -> Result { }, force_authoring, backoff_authoring_blocks, - keystore: keystore_container.keystore(), - sync_oracle: sync_service.clone(), - justification_sync_link: sync_service.clone(), + keystore: keystore_container.sync_keystore(), + sync_oracle: network.clone(), + justification_sync_link: network.clone(), block_proposal_slot_portion: SlotProportion::new(2f32 / 3f32), max_block_proposal_slot_portion: None, telemetry: telemetry.as_ref().map(|x| x.handle()), @@ -329,12 +310,12 @@ pub fn new_full(config: Configuration) -> Result { // if the node isn't actively participating in consensus then it doesn't // need a keystore, regardless of which protocol we use below. let keystore = if role.is_authority() { - Some(keystore_container.keystore()) + Some(keystore_container.sync_keystore()) } else { None }; - let grandpa_config = sc_consensus_grandpa::Config { + let grandpa_config = sc_finality_grandpa::Config { // FIXME #1578 make this available through chainspec gossip_duration: Duration::from_millis(333), justification_period: 512, @@ -352,16 +333,14 @@ pub fn new_full(config: Configuration) -> Result { // and vote data availability than the observer. The observer has not // been tested extensively yet and having most nodes in a network run it // could lead to finality stalls. - let grandpa_config = sc_consensus_grandpa::GrandpaParams { + let grandpa_config = sc_finality_grandpa::GrandpaParams { config: grandpa_config, link: grandpa_link, network, - voting_rule: sc_consensus_grandpa::VotingRulesBuilder::default().build(), + voting_rule: sc_finality_grandpa::VotingRulesBuilder::default().build(), prometheus_registry, shared_voter_state: SharedVoterState::empty(), telemetry: telemetry.as_ref().map(|x| x.handle()), - offchain_tx_pool_factory: OffchainTransactionPoolFactory::new(transaction_pool), - sync: Arc::new(sync_service), }; // the GRANDPA voter task is considered infallible, i.e. @@ -369,7 +348,7 @@ pub fn new_full(config: Configuration) -> Result { task_manager.spawn_essential_handle().spawn_blocking( "grandpa-voter", None, - sc_consensus_grandpa::run_grandpa_voter(grandpa_config)?, + sc_finality_grandpa::run_grandpa_voter(grandpa_config)?, ); } diff --git a/node/tests/chain_spec.rs b/node/tests/chain_spec.rs index 42665c476..611a8450d 100644 --- a/node/tests/chain_spec.rs +++ b/node/tests/chain_spec.rs @@ -1,6 +1,6 @@ use sp_core::sr25519; // use sp_consensus_aura::sr25519::AuthorityId as AuraId; -// use sp_consensus_grandpa::AuthorityId as GrandpaId; +// use sp_finality_grandpa::AuthorityId as GrandpaId; use node_subtensor::chain_spec::*; diff --git a/pallets/admin-utils/Cargo.toml b/pallets/admin-utils/Cargo.toml index cecd3cf39..ead04efef 100644 --- a/pallets/admin-utils/Cargo.toml +++ b/pallets/admin-utils/Cargo.toml @@ -9,9 +9,6 @@ license = "Unlicense" publish = false repository = "https://github.com/opentensor/subtensor" -[lints] -workspace = true - [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -22,21 +19,21 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = scale-info = { version = "2.1.1", default-features = false, features = [ "derive", ] } -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-runtime = { version = "24", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-runtime = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } log = { version = "0.4.14", default-features = false } pallet-subtensor = { version = "4.0.0-dev", default-features = false, path = "../subtensor" } -sp-weights = { git = "https://github.com/paritytech/substrate.git", default-features = false, branch = "polkadot-v1.0.0" } +sp-weights = { git = "https://github.com/paritytech/substrate.git", default-features = false, branch = "polkadot-v0.9.39" } [dev-dependencies] -sp-core = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-io = { version = "23", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } -sp-consensus-aura = { version = "0.10.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0", features = [ +sp-core = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-io = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } +sp-consensus-aura = { version = "0.10.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39", features = [ "std", ] } @@ -51,24 +48,6 @@ std = [ "scale-info/std", "pallet-subtensor/std", "sp-consensus-aura/std", - "pallet-balances/std", - "sp-runtime/std", - "sp-tracing/std", - "sp-weights/std", - "log/std" -] -runtime-benchmarks = [ - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "pallet-subtensor/runtime-benchmarks" -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "pallet-balances/try-runtime", - "sp-runtime/try-runtime", - "pallet-subtensor/try-runtime" ] +runtime-benchmarks = ["frame-benchmarking/runtime-benchmarks"] +try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/admin-utils/src/lib.rs b/pallets/admin-utils/src/lib.rs index ca66bef3b..cee1a3fa2 100644 --- a/pallets/admin-utils/src/lib.rs +++ b/pallets/admin-utils/src/lib.rs @@ -231,7 +231,7 @@ pub mod pallet { #[pallet::call_index(9)] #[pallet::weight(( - Weight::from_parts(14_000_000, 0) + Weight::from_ref_time(14_000_000) .saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().reads(1)), DispatchClass::Operational, @@ -399,8 +399,8 @@ pub mod pallet { #[pallet::call_index(19)] #[pallet::weight(( - Weight::from_parts(4_000_000, 0) - .saturating_add(Weight::from_parts(0, 0)) + Weight::from_ref_time(4_000_000) + .saturating_add(Weight::from_proof_size(0)) .saturating_add(T::DbWeight::get().writes(1)), DispatchClass::Operational, Pays::No @@ -422,7 +422,7 @@ pub mod pallet { #[pallet::call_index(20)] #[pallet::weight(( - Weight::from_parts(14_000_000, 0) + Weight::from_ref_time(14_000_000) .saturating_add(T::DbWeight::get().writes(1)), DispatchClass::Operational, Pays::No @@ -604,7 +604,7 @@ pub mod pallet { #[pallet::call_index(28)] #[pallet::weight(( - Weight::from_parts(14_000_000, 0) + Weight::from_ref_time(14_000_000) .saturating_add(T::DbWeight::get().writes(1)), DispatchClass::Operational, Pays::No @@ -624,7 +624,7 @@ pub mod pallet { #[pallet::call_index(29)] #[pallet::weight(( - Weight::from_parts(14_000_000, 0) + Weight::from_ref_time(14_000_000) .saturating_add(T::DbWeight::get().writes(1)), DispatchClass::Operational, Pays::No @@ -667,7 +667,7 @@ pub mod pallet { #[pallet::call_index(35)] #[pallet::weight(( - Weight::from_parts(14_000_000, 0) + Weight::from_ref_time(14_000_000) .saturating_add(T::DbWeight::get().writes(1)), DispatchClass::Operational, Pays::No @@ -687,7 +687,7 @@ pub mod pallet { #[pallet::call_index(36)] #[pallet::weight(( - Weight::from_parts(14_000_000, 0) + Weight::from_ref_time(14_000_000) .saturating_add(T::DbWeight::get().writes(1)), DispatchClass::Operational, Pays::No @@ -707,7 +707,7 @@ pub mod pallet { #[pallet::call_index(37)] #[pallet::weight(( - Weight::from_parts(14_000_000, 0) + Weight::from_ref_time(14_000_000) .saturating_add(T::DbWeight::get().writes(1)), DispatchClass::Operational, Pays::No @@ -723,7 +723,7 @@ pub mod pallet { #[pallet::call_index(38)] #[pallet::weight(( - Weight::from_parts(14_000_000, 0) + Weight::from_ref_time(14_000_000) .saturating_add(T::DbWeight::get().writes(1)), DispatchClass::Operational, Pays::No @@ -836,6 +836,7 @@ pub trait SubtensorInterface { hotkey: &AccountId, increment: u64, ); + fn u64_to_balance(input: u64) -> Option; fn add_balance_to_coldkey_account(coldkey: &AccountId, amount: Balance); fn get_current_block_as_u64() -> u64; fn get_subnetwork_n(netuid: u16) -> u16; diff --git a/pallets/admin-utils/tests/mock.rs b/pallets/admin-utils/tests/mock.rs index abf663678..77839500f 100644 --- a/pallets/admin-utils/tests/mock.rs +++ b/pallets/admin-utils/tests/mock.rs @@ -1,28 +1,33 @@ use frame_support::{ assert_ok, parameter_types, - traits::{Everything, Hooks}, + traits::{Everything, Hooks, StorageMapShim}, weights, }; use frame_system as system; use frame_system::{limits, EnsureNever}; use sp_consensus_aura::sr25519::AuthorityId as AuraId; +use sp_core::H256; use sp_core::U256; -use sp_core::{ConstU64, H256}; use sp_runtime::{ + testing::Header, traits::{BlakeTwo256, ConstU32, IdentityLookup}, - BuildStorage, DispatchError, + DispatchError, }; +type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; type Block = frame_system::mocking::MockBlock; // Configure a mock runtime to test the pallet. frame_support::construct_runtime!( - pub enum Test + pub enum Test where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic, { System: frame_system, Balances: pallet_balances, AdminUtils: pallet_admin_utils, - SubtensorModule: pallet_subtensor::{Pallet, Call, Storage, Event}, + SubtensorModule: pallet_subtensor::{Pallet, Call, Storage, Event} } ); @@ -62,7 +67,7 @@ parameter_types! { pub const InitialMinAllowedWeights: u16 = 0; pub const InitialEmissionValue: u16 = 0; pub const InitialMaxWeightsLimit: u16 = u16::MAX; - pub BlockWeights: limits::BlockWeights = limits::BlockWeights::simple_max(weights::Weight::from_parts(1024, 0)); + pub BlockWeights: limits::BlockWeights = limits::BlockWeights::simple_max(weights::Weight::from_ref_time(1024)); pub const ExistentialDeposit: Balance = 1; pub const TransactionByteFee: Balance = 100; pub const SDebug:u64 = 1; @@ -165,39 +170,41 @@ impl system::Config for Test { type DbWeight = (); type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; + type Index = u64; + type BlockNumber = u64; type Hash = H256; type Hashing = BlakeTwo256; type AccountId = U256; type Lookup = IdentityLookup; + type Header = Header; type RuntimeEvent = RuntimeEvent; type BlockHashCount = BlockHashCount; type Version = (); type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; + type AccountData = (); type OnNewAccount = (); type OnKilledAccount = (); type SystemWeightInfo = (); type SS58Prefix = SS58Prefix; type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; - type Block = Block; - type Nonce = u64; } impl pallet_balances::Config for Test { - type MaxLocks = (); - type MaxReserves = (); - type ReserveIdentifier = [u8; 8]; - type Balance = u64; + type Balance = Balance; type RuntimeEvent = RuntimeEvent; type DustRemoval = (); - type ExistentialDeposit = ConstU64<1>; - type AccountStore = System; + type ExistentialDeposit = (); + type AccountStore = StorageMapShim< + pallet_balances::Account, + frame_system::Provider, + AccountId, + pallet_balances::AccountData, + >; + type MaxLocks = (); type WeightInfo = (); - type FreezeIdentifier = (); - type MaxFreezes = (); - type RuntimeHoldReason = (); - type MaxHolds = (); + type MaxReserves = (); + type ReserveIdentifier = (); } pub struct SubtensorIntrf; @@ -256,19 +263,19 @@ impl pallet_admin_utils::SubtensorInterface f } fn get_root_netuid() -> u16 { - SubtensorModule::get_root_netuid() + return SubtensorModule::get_root_netuid(); } fn if_subnet_exist(netuid: u16) -> bool { - SubtensorModule::if_subnet_exist(netuid) + return SubtensorModule::if_subnet_exist(netuid); } fn create_account_if_non_existent(coldkey: &AccountId, hotkey: &AccountId) { - SubtensorModule::create_account_if_non_existent(coldkey, hotkey) + return SubtensorModule::create_account_if_non_existent(coldkey, hotkey); } fn coldkey_owns_hotkey(coldkey: &AccountId, hotkey: &AccountId) -> bool { - SubtensorModule::coldkey_owns_hotkey(coldkey, hotkey) + return SubtensorModule::coldkey_owns_hotkey(coldkey, hotkey); } fn increase_stake_on_coldkey_hotkey_account( @@ -279,28 +286,32 @@ impl pallet_admin_utils::SubtensorInterface f SubtensorModule::increase_stake_on_coldkey_hotkey_account(coldkey, hotkey, increment); } + fn u64_to_balance(input: u64) -> Option { + return SubtensorModule::u64_to_balance(input); + } + fn add_balance_to_coldkey_account(coldkey: &AccountId, amount: Balance) { SubtensorModule::add_balance_to_coldkey_account(coldkey, amount); } fn get_current_block_as_u64() -> u64 { - SubtensorModule::get_current_block_as_u64() + return SubtensorModule::get_current_block_as_u64(); } fn get_subnetwork_n(netuid: u16) -> u16 { - SubtensorModule::get_subnetwork_n(netuid) + return SubtensorModule::get_subnetwork_n(netuid); } fn get_max_allowed_uids(netuid: u16) -> u16 { - SubtensorModule::get_max_allowed_uids(netuid) + return SubtensorModule::get_max_allowed_uids(netuid); } fn append_neuron(netuid: u16, new_hotkey: &AccountId, block_number: u64) { - SubtensorModule::append_neuron(netuid, new_hotkey, block_number) + return SubtensorModule::append_neuron(netuid, new_hotkey, block_number); } fn get_neuron_to_prune(netuid: u16) -> u16 { - SubtensorModule::get_neuron_to_prune(netuid) + return SubtensorModule::get_neuron_to_prune(netuid); } fn replace_neuron(netuid: u16, uid_to_replace: u16, new_hotkey: &AccountId, block_number: u64) { @@ -367,7 +378,7 @@ impl pallet_admin_utils::SubtensorInterface f } fn ensure_subnet_owner_or_root(o: RuntimeOrigin, netuid: u16) -> Result<(), DispatchError> { - SubtensorModule::ensure_subnet_owner_or_root(o, netuid) + return SubtensorModule::ensure_subnet_owner_or_root(o, netuid); } fn set_rho(netuid: u16, rho: u16) { @@ -415,7 +426,7 @@ impl pallet_admin_utils::SubtensorInterface f } fn is_hotkey_registered_on_network(netuid: u16, hotkey: &AccountId) -> bool { - SubtensorModule::is_hotkey_registered_on_network(netuid, hotkey) + return SubtensorModule::is_hotkey_registered_on_network(netuid, hotkey); } fn init_new_network(netuid: u16, tempo: u16) { @@ -449,15 +460,13 @@ impl pallet_admin_utils::Config for Test { type WeightInfo = (); } -// Build genesis storage according to the mock runtime. +#[allow(dead_code)] pub fn new_test_ext() -> sp_io::TestExternalities { sp_tracing::try_init_simple(); - let t = frame_system::GenesisConfig::::default() - .build_storage() - .unwrap(); - let mut ext = sp_io::TestExternalities::new(t); - ext.execute_with(|| System::set_block_number(1)); - ext + frame_system::GenesisConfig::default() + .build_storage::() + .unwrap() + .into() } #[allow(dead_code)] @@ -504,7 +513,7 @@ pub fn register_ok_neuron( } #[allow(dead_code)] -pub fn add_network(netuid: u16, tempo: u16) { +pub fn add_network(netuid: u16, tempo: u16, _modality: u16) { SubtensorModule::init_new_network(netuid, tempo); SubtensorModule::set_network_registration_allowed(netuid, true); SubtensorModule::set_network_pow_registration_allowed(netuid, true); diff --git a/pallets/admin-utils/tests/tests.rs b/pallets/admin-utils/tests/tests.rs index 4d2c44013..814c32d4a 100644 --- a/pallets/admin-utils/tests/tests.rs +++ b/pallets/admin-utils/tests/tests.rs @@ -18,7 +18,7 @@ fn test_sudo_set_default_take() { <::RuntimeOrigin>::signed(U256::from(0)), to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!(SubtensorModule::get_default_take(), init_value); assert_ok!(AdminUtils::sudo_set_default_take( @@ -41,7 +41,7 @@ fn test_sudo_set_serving_rate_limit() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!(SubtensorModule::get_serving_rate_limit(netuid), init_value); assert_ok!(AdminUtils::sudo_set_serving_rate_limit( @@ -58,7 +58,7 @@ fn test_sudo_set_min_difficulty() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u64 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u64 = SubtensorModule::get_min_difficulty(netuid); assert_eq!( AdminUtils::sudo_set_min_difficulty( @@ -66,7 +66,7 @@ fn test_sudo_set_min_difficulty() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_min_difficulty( @@ -91,7 +91,7 @@ fn test_sudo_set_max_difficulty() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u64 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u64 = SubtensorModule::get_max_difficulty(netuid); assert_eq!( AdminUtils::sudo_set_max_difficulty( @@ -99,7 +99,7 @@ fn test_sudo_set_max_difficulty() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_max_difficulty( @@ -124,7 +124,7 @@ fn test_sudo_set_weights_version_key() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u64 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u64 = SubtensorModule::get_weights_version_key(netuid); assert_eq!( AdminUtils::sudo_set_weights_version_key( @@ -132,7 +132,7 @@ fn test_sudo_set_weights_version_key() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_weights_version_key( @@ -157,7 +157,7 @@ fn test_sudo_set_weights_set_rate_limit() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u64 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u64 = SubtensorModule::get_weights_set_rate_limit(netuid); assert_eq!( AdminUtils::sudo_set_weights_set_rate_limit( @@ -165,7 +165,7 @@ fn test_sudo_set_weights_set_rate_limit() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_weights_set_rate_limit( @@ -196,7 +196,7 @@ fn test_sudo_set_adjustment_interval() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u16 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u16 = SubtensorModule::get_adjustment_interval(netuid); assert_eq!( AdminUtils::sudo_set_adjustment_interval( @@ -204,7 +204,7 @@ fn test_sudo_set_adjustment_interval() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_adjustment_interval( @@ -229,7 +229,7 @@ fn test_sudo_set_adjustment_alpha() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u64 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u64 = SubtensorModule::get_adjustment_alpha(netuid); assert_eq!( AdminUtils::sudo_set_adjustment_alpha( @@ -237,7 +237,7 @@ fn test_sudo_set_adjustment_alpha() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_adjustment_alpha( @@ -267,7 +267,7 @@ fn test_sudo_subnet_owner_cut() { <::RuntimeOrigin>::signed(U256::from(0)), to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!(SubtensorModule::get_subnet_owner_cut(), init_value); assert_ok!(AdminUtils::sudo_set_subnet_owner_cut( @@ -283,7 +283,7 @@ fn test_sudo_set_max_weight_limit() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u16 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u16 = SubtensorModule::get_max_weight_limit(netuid); assert_eq!( AdminUtils::sudo_set_max_weight_limit( @@ -291,7 +291,7 @@ fn test_sudo_set_max_weight_limit() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_max_weight_limit( @@ -320,7 +320,7 @@ fn test_sudo_set_issuance() { <::RuntimeOrigin>::signed(U256::from(0)), to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_ok!(AdminUtils::sudo_set_total_issuance( <::RuntimeOrigin>::root(), @@ -335,7 +335,7 @@ fn test_sudo_set_immunity_period() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u16 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u16 = SubtensorModule::get_immunity_period(netuid); assert_eq!( AdminUtils::sudo_set_immunity_period( @@ -343,7 +343,7 @@ fn test_sudo_set_immunity_period() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_immunity_period( @@ -368,7 +368,7 @@ fn test_sudo_set_min_allowed_weights() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u16 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u16 = SubtensorModule::get_min_allowed_weights(netuid); assert_eq!( AdminUtils::sudo_set_min_allowed_weights( @@ -376,7 +376,7 @@ fn test_sudo_set_min_allowed_weights() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_min_allowed_weights( @@ -401,7 +401,7 @@ fn test_sudo_set_max_allowed_uids() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u16 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u16 = SubtensorModule::get_max_allowed_uids(netuid); assert_eq!( AdminUtils::sudo_set_max_allowed_uids( @@ -409,7 +409,7 @@ fn test_sudo_set_max_allowed_uids() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_max_allowed_uids( @@ -434,7 +434,7 @@ fn test_sudo_set_and_decrease_max_allowed_uids() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u16 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u16 = SubtensorModule::get_max_allowed_uids(netuid); assert_eq!( AdminUtils::sudo_set_max_allowed_uids( @@ -442,7 +442,7 @@ fn test_sudo_set_and_decrease_max_allowed_uids() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_max_allowed_uids( @@ -471,7 +471,7 @@ fn test_sudo_set_kappa() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u16 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u16 = SubtensorModule::get_kappa(netuid); assert_eq!( AdminUtils::sudo_set_kappa( @@ -479,7 +479,7 @@ fn test_sudo_set_kappa() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_kappa( @@ -504,7 +504,7 @@ fn test_sudo_set_rho() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u16 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u16 = SubtensorModule::get_rho(netuid); assert_eq!( AdminUtils::sudo_set_rho( @@ -512,7 +512,7 @@ fn test_sudo_set_rho() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_rho( @@ -537,7 +537,7 @@ fn test_sudo_set_activity_cutoff() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u16 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u16 = SubtensorModule::get_activity_cutoff(netuid); assert_eq!( AdminUtils::sudo_set_activity_cutoff( @@ -545,7 +545,7 @@ fn test_sudo_set_activity_cutoff() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_activity_cutoff( @@ -570,7 +570,7 @@ fn test_sudo_set_target_registrations_per_interval() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u16 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u16 = SubtensorModule::get_target_registrations_per_interval(netuid); assert_eq!( AdminUtils::sudo_set_target_registrations_per_interval( @@ -578,7 +578,7 @@ fn test_sudo_set_target_registrations_per_interval() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_target_registrations_per_interval( @@ -609,7 +609,7 @@ fn test_sudo_set_difficulty() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u64 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u64 = SubtensorModule::get_difficulty_as_u64(netuid); assert_eq!( AdminUtils::sudo_set_difficulty( @@ -617,7 +617,7 @@ fn test_sudo_set_difficulty() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_difficulty( @@ -642,7 +642,7 @@ fn test_sudo_set_max_allowed_validators() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u16 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u16 = SubtensorModule::get_max_allowed_validators(netuid); assert_eq!( AdminUtils::sudo_set_max_allowed_validators( @@ -650,7 +650,7 @@ fn test_sudo_set_max_allowed_validators() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_max_allowed_validators( @@ -686,7 +686,7 @@ fn test_sudo_set_weights_min_stake() { <::RuntimeOrigin>::signed(U256::from(1)), to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!(SubtensorModule::get_weights_min_stake(), init_value); assert_ok!(AdminUtils::sudo_set_weights_min_stake( @@ -702,7 +702,7 @@ fn test_sudo_set_bonds_moving_average() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u64 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u64 = SubtensorModule::get_bonds_moving_average(netuid); assert_eq!( AdminUtils::sudo_set_bonds_moving_average( @@ -710,7 +710,7 @@ fn test_sudo_set_bonds_moving_average() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_bonds_moving_average( @@ -738,7 +738,7 @@ fn test_sudo_set_rao_recycled() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u64 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u64 = SubtensorModule::get_rao_recycled(netuid); // Need to run from genesis block @@ -750,7 +750,7 @@ fn test_sudo_set_rao_recycled() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( AdminUtils::sudo_set_rao_recycled( @@ -785,10 +785,13 @@ fn test_sudo_set_rao_recycled() { assert_eq!( System::events() .last() - .unwrap_or_else(|| panic!( - "Expected there to be events: {:?}", - System::events().to_vec() - )) + .expect( + format!( + "Expected there to be events: {:?}", + System::events().to_vec() + ) + .as_str() + ) .event, RuntimeEvent::SubtensorModule(Event::RAORecycledForRegistrationSet(netuid, to_be_set)) ); @@ -800,7 +803,7 @@ fn test_sudo_set_subnet_limit() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u16 = 10; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u16 = SubtensorModule::get_max_subnets(); assert_eq!( @@ -808,7 +811,7 @@ fn test_sudo_set_subnet_limit() { <::RuntimeOrigin>::signed(U256::from(1)), to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!(SubtensorModule::get_max_subnets(), init_value); assert_ok!(AdminUtils::sudo_set_subnet_limit( @@ -824,7 +827,7 @@ fn test_sudo_set_network_lock_reduction_interval() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: u64 = 7200; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: u64 = SubtensorModule::get_lock_reduction_interval(); assert_eq!( @@ -832,7 +835,7 @@ fn test_sudo_set_network_lock_reduction_interval() { <::RuntimeOrigin>::signed(U256::from(1)), to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!(SubtensorModule::get_lock_reduction_interval(), init_value); assert_ok!(AdminUtils::sudo_set_lock_reduction_interval( @@ -848,7 +851,7 @@ fn test_sudo_set_network_pow_registration_allowed() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let to_be_set: bool = true; - add_network(netuid, 10); + add_network(netuid, 10, 0); let init_value: bool = SubtensorModule::get_network_pow_registration_allowed(netuid); assert_eq!( @@ -857,7 +860,7 @@ fn test_sudo_set_network_pow_registration_allowed() { netuid, to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); assert_eq!( SubtensorModule::get_network_pow_registration_allowed(netuid), @@ -881,13 +884,13 @@ mod sudo_set_nominator_min_required_stake { #[test] fn can_only_be_called_by_admin() { new_test_ext().execute_with(|| { - let to_be_set: u64 = SubtensorModule::get_nominator_min_required_stake() + 5_u64; + let to_be_set: u64 = SubtensorModule::get_nominator_min_required_stake() + 5 as u64; assert_eq!( AdminUtils::sudo_set_nominator_min_required_stake( <::RuntimeOrigin>::signed(U256::from(0)), to_be_set ), - Err(DispatchError::BadOrigin) + Err(DispatchError::BadOrigin.into()) ); }); } @@ -912,7 +915,7 @@ mod sudo_set_nominator_min_required_stake { #[test] fn sets_a_higher_value() { new_test_ext().execute_with(|| { - let to_be_set: u64 = SubtensorModule::get_nominator_min_required_stake() + 5_u64; + let to_be_set: u64 = SubtensorModule::get_nominator_min_required_stake() + 5 as u64; assert_ok!(AdminUtils::sudo_set_nominator_min_required_stake( <::RuntimeOrigin>::root(), to_be_set @@ -938,7 +941,7 @@ mod sudo_set_nominator_min_required_stake { SubtensorModule::set_target_stakes_per_interval(10); // Register network. - add_network(netuid, 0); + add_network(netuid, 0, 0); // Register hot1. register_ok_neuron(netuid, hot1, cold1, 0); diff --git a/pallets/collective/Cargo.toml b/pallets/collective/Cargo.toml index c29f55d09..126ef8d6c 100644 --- a/pallets/collective/Cargo.toml +++ b/pallets/collective/Cargo.toml @@ -9,9 +9,6 @@ repository = "https://github.com/opentensor/subtensor" description = "Collective system: Members of a set of account IDs can make their collective feelings known through dispatched calls from one of two specialized origins." readme = "README.md" -[lints] -workspace = true - [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -23,13 +20,13 @@ log = { version = "0.4.17", default-features = false } scale-info = { version = "2.1.1", default-features = false, features = [ "derive", ] } -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } -sp-io = { version = "23", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-runtime = { version = "24", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } +sp-io = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-runtime = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } [features] default = ["std"] @@ -51,8 +48,4 @@ runtime-benchmarks = [ "frame-system/runtime-benchmarks", "sp-runtime/runtime-benchmarks", ] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "sp-runtime/try-runtime" -] +try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/collective/src/benchmarking.rs b/pallets/collective/src/benchmarking.rs index cf44e9948..48a545634 100644 --- a/pallets/collective/src/benchmarking.rs +++ b/pallets/collective/src/benchmarking.rs @@ -73,7 +73,7 @@ benchmarks_instance_pallet! { SystemOrigin::Signed(old_members.last().unwrap().clone()).into(), Box::new(proposal.clone()), MAX_BYTES, - TryInto::>::try_into(3u64).ok().expect("convert u64 to block number.") + TryInto::::try_into(3u64).ok().expect("convert u64 to block number.") )?; let hash = T::Hashing::hash_of(&proposal); // Vote on the proposal to increase state relevant for `set_members`. @@ -131,7 +131,7 @@ benchmarks_instance_pallet! { let proposal_hash = T::Hashing::hash_of(&proposal); // Note that execution fails due to mis-matched origin assert_last_event::( - Event::MemberExecuted { proposal_hash, result: Ok(()) }.into() + Event::MemberExecuted { proposal_hash, result: Err(DispatchError::BadOrigin) }.into() ); } @@ -162,7 +162,7 @@ benchmarks_instance_pallet! { SystemOrigin::Signed(caller.clone()).into(), Box::new(proposal), bytes_in_storage, - TryInto::>::try_into(3u64).ok().expect("convert u64 to block number.") + TryInto::::try_into(3u64).ok().expect("convert u64 to block number.") )?; } @@ -170,7 +170,7 @@ benchmarks_instance_pallet! { let proposal: T::Proposal = SystemCall::::remark { remark: id_to_remark_data(p, b as usize) }.into(); - }: propose(SystemOrigin::Signed(caller.clone()), Box::new(proposal.clone()), bytes_in_storage, TryInto::>::try_into(3u64).ok().expect("convert u64 to block number.")) + }: propose(SystemOrigin::Signed(caller.clone()), Box::new(proposal.clone()), bytes_in_storage, TryInto::::try_into(3u64).ok().expect("convert u64 to block number.")) verify { // New proposal is recorded assert_eq!(Collective::::proposals().len(), p as usize); @@ -210,7 +210,7 @@ benchmarks_instance_pallet! { SystemOrigin::Signed(proposer.clone()).into(), Box::new(proposal.clone()), bytes_in_storage, - TryInto::>::try_into(3u64).ok().expect("convert u64 to block number.") + TryInto::::try_into(3u64).ok().expect("convert u64 to block number.") )?; last_hash = T::Hashing::hash_of(&proposal); } @@ -248,7 +248,7 @@ benchmarks_instance_pallet! { verify { // All proposals exist and the last proposal has just been updated. assert_eq!(Collective::::proposals().len(), p as usize); - let voting = Collective::::voting(last_hash).ok_or("Proposal Missing")?; + let voting = Collective::::voting(&last_hash).ok_or("Proposal Missing")?; assert_eq!(voting.ayes.len(), (m - 3) as usize); assert_eq!(voting.nays.len(), 1); } @@ -282,7 +282,7 @@ benchmarks_instance_pallet! { SystemOrigin::Signed(proposer.clone()).into(), Box::new(proposal.clone()), bytes_in_storage, - TryInto::>::try_into(3u64).ok().expect("convert u64 to block number.") + TryInto::::try_into(3u64).ok().expect("convert u64 to block number.") )?; last_hash = T::Hashing::hash_of(&proposal); } @@ -348,7 +348,7 @@ benchmarks_instance_pallet! { SystemOrigin::Signed(caller.clone()).into(), Box::new(proposal.clone()), bytes_in_storage, - TryInto::>::try_into(3u64).ok().expect("convert u64 to block number.") + TryInto::::try_into(3u64).ok().expect("convert u64 to block number.") )?; last_hash = T::Hashing::hash_of(&proposal); } @@ -396,7 +396,7 @@ benchmarks_instance_pallet! { verify { // The last proposal is removed. assert_eq!(Collective::::proposals().len(), (p - 1) as usize); - assert_last_event::(Event::Executed { proposal_hash: last_hash, result: Ok(()) }.into()); + assert_last_event::(Event::Executed { proposal_hash: last_hash, result: Err(DispatchError::BadOrigin) }.into()); } close_disapproved { @@ -431,7 +431,7 @@ benchmarks_instance_pallet! { SystemOrigin::Signed(caller.clone()).into(), Box::new(proposal.clone()), bytes_in_storage, - TryInto::>::try_into(3u64).ok().expect("convert u64 to block number.") + TryInto::::try_into(3u64).ok().expect("convert u64 to block number.") )?; last_hash = T::Hashing::hash_of(&proposal); } @@ -468,7 +468,7 @@ benchmarks_instance_pallet! { false, )?; - System::::set_block_number(BlockNumberFor::::max_value()); + System::::set_block_number(T::BlockNumber::max_value()); assert_eq!(Collective::::proposals().len(), p as usize); // Prime nay will close it as disapproved @@ -510,7 +510,7 @@ benchmarks_instance_pallet! { SystemOrigin::Signed(caller.clone()).into(), Box::new(proposal.clone()), bytes_in_storage, - TryInto::>::try_into(3u64).ok().expect("convert u64 to block number.") + TryInto::::try_into(3u64).ok().expect("convert u64 to block number.") )?; last_hash = T::Hashing::hash_of(&proposal); } @@ -537,14 +537,14 @@ benchmarks_instance_pallet! { } // caller is prime, prime already votes aye by creating the proposal - System::::set_block_number(BlockNumberFor::::max_value()); + System::::set_block_number(T::BlockNumber::max_value()); assert_eq!(Collective::::proposals().len(), p as usize); // Prime aye will close it as approved }: close(SystemOrigin::Signed(caller), last_hash, p - 1, Weight::MAX, bytes_in_storage) verify { assert_eq!(Collective::::proposals().len(), (p - 1) as usize); - assert_last_event::(Event::Executed { proposal_hash: last_hash, result: Ok(()) }.into()); + assert_last_event::(Event::Executed { proposal_hash: last_hash, result: Err(DispatchError::BadOrigin) }.into()); } disapprove_proposal { @@ -581,12 +581,12 @@ benchmarks_instance_pallet! { SystemOrigin::Signed(caller.clone()).into(), Box::new(proposal.clone()), bytes_in_storage, - TryInto::>::try_into(3u64).ok().expect("convert u64 to block number.") + TryInto::::try_into(3u64).ok().expect("convert u64 to block number.") )?; last_hash = T::Hashing::hash_of(&proposal); } - System::::set_block_number(BlockNumberFor::::max_value()); + System::::set_block_number(T::BlockNumber::max_value()); assert_eq!(Collective::::proposals().len(), p as usize); }: _(SystemOrigin::Root, last_hash) diff --git a/pallets/collective/src/lib.rs b/pallets/collective/src/lib.rs index bcd88cc31..63cb96dec 100644 --- a/pallets/collective/src/lib.rs +++ b/pallets/collective/src/lib.rs @@ -57,7 +57,7 @@ use frame_support::{ traits::{ Backing, ChangeMembers, EnsureOrigin, Get, GetBacking, InitializeMembers, StorageVersion, }, - weights::Weight, + weights::{OldWeight, Weight}, }; #[cfg(test)] @@ -177,6 +177,7 @@ pub mod pallet { const STORAGE_VERSION: StorageVersion = StorageVersion::new(4); #[pallet::pallet] + #[pallet::generate_store(pub(super) trait Store)] #[pallet::storage_version(STORAGE_VERSION)] #[pallet::without_storage_info] pub struct Pallet(PhantomData<(T, I)>); @@ -199,7 +200,7 @@ pub mod pallet { + IsType<::RuntimeEvent>; /// The time-out for council motions. - type MotionDuration: Get>; + type MotionDuration: Get; /// Maximum number of proposals allowed to be active in parallel. type MaxProposals: Get; @@ -236,6 +237,7 @@ pub mod pallet { pub members: Vec, } + #[cfg(feature = "std")] impl, I: 'static> Default for GenesisConfig { fn default() -> Self { Self { @@ -246,7 +248,7 @@ pub mod pallet { } #[pallet::genesis_build] - impl, I: 'static> BuildGenesisConfig for GenesisConfig { + impl, I: 'static> GenesisBuild for GenesisConfig { fn build(&self) { use sp_std::collections::btree_set::BTreeSet; let members_set: BTreeSet<_> = self.members.iter().collect(); @@ -280,7 +282,7 @@ pub mod pallet { #[pallet::storage] #[pallet::getter(fn voting)] pub type Voting, I: 'static = ()> = - StorageMap<_, Identity, T::Hash, Votes>, OptionQuery>; + StorageMap<_, Identity, T::Hash, Votes, OptionQuery>; /// Proposals so far. #[pallet::storage] @@ -517,7 +519,7 @@ pub mod pallet { origin: OriginFor, proposal: Box<>::Proposal>, #[pallet::compact] length_bound: u32, - duration: BlockNumberFor, + duration: T::BlockNumber, ) -> DispatchResultWithPostInfo { let who = ensure_signed(origin.clone())?; ensure!(T::CanPropose::can_propose(&who), Error::::NotMember); @@ -534,7 +536,7 @@ pub mod pallet { Self::do_propose_proposed(who, threshold, proposal, length_bound, duration)?; Ok(Some(T::WeightInfo::propose_proposed( - proposal_len, // B + proposal_len as u32, // B members.len() as u32, // M active_proposals, // P2 )) @@ -572,8 +574,59 @@ pub mod pallet { } } - // NOTE: call_index(4) was `close_old_weight` and was removed due to weights v1 - // deprecation + /// Close a vote that is either approved, disapproved or whose voting period has ended. + /// + /// May be called by any signed account in order to finish voting and close the proposal. + /// + /// If called before the end of the voting period it will only close the vote if it is + /// has enough votes to be approved or disapproved. + /// + /// If called after the end of the voting period abstentions are counted as rejections + /// unless there is a prime member set and the prime member cast an approval. + /// + /// If the close operation completes successfully with disapproval, the transaction fee will + /// be waived. Otherwise execution of the approved operation will be charged to the caller. + /// + /// + `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed + /// proposal. + /// + `length_bound`: The upper bound for the length of the proposal in storage. Checked via + /// `storage::read` so it is `size_of::() == 4` larger than the pure length. + /// + /// ## Complexity + /// - `O(B + M + P1 + P2)` where: + /// - `B` is `proposal` size in bytes (length-fee-bounded) + /// - `M` is members-count (code- and governance-bounded) + /// - `P1` is the complexity of `proposal` preimage. + /// - `P2` is proposal-count (code-bounded) + #[pallet::call_index(4)] + #[pallet::weight(( + { + let b = *length_bound; + let m = T::MaxMembers::get(); + let p1 = *proposal_weight_bound; + let p2 = T::MaxProposals::get(); + T::WeightInfo::close_early_approved(b, m, p2) + .max(T::WeightInfo::close_early_disapproved(m, p2)) + .max(T::WeightInfo::close_approved(b, m, p2)) + .max(T::WeightInfo::close_disapproved(m, p2)) + .saturating_add(p1.into()) + }, + DispatchClass::Operational + ))] + #[allow(deprecated)] + #[deprecated(note = "1D weight is used in this extrinsic, please migrate to `close`")] + pub fn close_old_weight( + origin: OriginFor, + proposal_hash: T::Hash, + #[pallet::compact] index: ProposalIndex, + #[pallet::compact] proposal_weight_bound: OldWeight, + #[pallet::compact] length_bound: u32, + ) -> DispatchResultWithPostInfo { + let proposal_weight_bound: Weight = proposal_weight_bound.into(); + let _ = ensure_signed(origin)?; + + Self::do_close(proposal_hash, index, proposal_weight_bound, length_bound) + } /// Disapprove a proposal, close, and remove it from the system, regardless of its current /// state. @@ -649,8 +702,6 @@ pub mod pallet { } } -use frame_system::pallet_prelude::BlockNumberFor; - /// Return the weight of a dispatch call result as an `Option`. /// /// Will return the weight regardless of what the state of the result is. @@ -701,7 +752,7 @@ impl, I: 'static> Pallet { threshold: MemberCount, proposal: Box<>::Proposal>, length_bound: MemberCount, - duration: BlockNumberFor, + duration: T::BlockNumber, ) -> Result<(u32, u32), DispatchError> { let proposal_len = proposal.encoded_size(); ensure!( @@ -755,7 +806,7 @@ impl, I: 'static> Pallet { index: ProposalIndex, approve: bool, ) -> Result { - let mut voting = Self::voting(proposal).ok_or(Error::::ProposalMissing)?; + let mut voting = Self::voting(&proposal).ok_or(Error::::ProposalMissing)?; ensure!(voting.index == index, Error::::WrongIndex); let position_yes = voting.ayes.iter().position(|a| a == &who); @@ -794,7 +845,7 @@ impl, I: 'static> Pallet { no: no_votes, }); - Voting::::insert(proposal, voting); + Voting::::insert(&proposal, voting); Ok(is_account_voting_first_time) } @@ -806,7 +857,7 @@ impl, I: 'static> Pallet { proposal_weight_bound: Weight, length_bound: u32, ) -> DispatchResultWithPostInfo { - let voting = Self::voting(proposal_hash).ok_or(Error::::ProposalMissing)?; + let voting = Self::voting(&proposal_hash).ok_or(Error::::ProposalMissing)?; ensure!(voting.index == index, Error::::WrongIndex); let mut no_votes = voting.nays.len() as MemberCount; @@ -979,8 +1030,8 @@ impl, I: 'static> Pallet { // Removes a proposal from the pallet, cleaning up votes and the vector of proposals. fn remove_proposal(proposal_hash: T::Hash) -> u32 { // remove proposal and vote - ProposalOf::::remove(proposal_hash); - Voting::::remove(proposal_hash); + ProposalOf::::remove(&proposal_hash); + Voting::::remove(&proposal_hash); let num_proposals = Proposals::::mutate(|proposals| { proposals.retain(|h| h != &proposal_hash); proposals.len() + 1 // calculate weight based on original length @@ -992,8 +1043,8 @@ impl, I: 'static> Pallet { for h in Self::proposals().into_iter() { >::mutate(h, |v| { if let Some(mut votes) = v.take() { - votes.ayes.retain(|i| i != who); - votes.nays.retain(|i| i != who); + votes.ayes = votes.ayes.into_iter().filter(|i| i != who).collect(); + votes.nays = votes.nays.into_iter().filter(|i| i != who).collect(); *v = Some(votes); } }); @@ -1007,7 +1058,7 @@ impl, I: 'static> Pallet { index: ProposalIndex, who: &T::AccountId, ) -> Result { - let voting = Self::voting(proposal).ok_or(Error::::ProposalMissing)?; + let voting = Self::voting(&proposal).ok_or(Error::::ProposalMissing)?; ensure!(voting.index == index, Error::::WrongIndex); let position_yes = voting.ayes.iter().position(|a| a == who); @@ -1047,8 +1098,16 @@ impl, I: 'static> ChangeMembers for Pallet { for h in Self::proposals().into_iter() { >::mutate(h, |v| { if let Some(mut votes) = v.take() { - votes.ayes.retain(|i| outgoing.binary_search(i).is_err()); - votes.nays.retain(|i| outgoing.binary_search(i).is_err()); + votes.ayes = votes + .ayes + .into_iter() + .filter(|i| outgoing.binary_search(i).is_err()) + .collect(); + votes.nays = votes + .nays + .into_iter() + .filter(|i| outgoing.binary_search(i).is_err()) + .collect(); *v = Some(votes); } }); diff --git a/pallets/collective/src/tests.rs b/pallets/collective/src/tests.rs index 0505d86f0..c0d71334b 100644 --- a/pallets/collective/src/tests.rs +++ b/pallets/collective/src/tests.rs @@ -15,13 +15,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#![allow(non_camel_case_types)] - use super::{Event as CollectiveEvent, *}; use crate as pallet_collective; use frame_support::{ - assert_noop, assert_ok, parameter_types, - traits::{ConstU32, ConstU64}, + assert_noop, assert_ok, + dispatch::Pays, + parameter_types, + traits::{ConstU32, ConstU64, GenesisBuild}, Hashable, }; use frame_system::{EnsureRoot, EventRecord, Phase}; @@ -36,7 +36,10 @@ pub type Block = sp_runtime::generic::Block; pub type UncheckedExtrinsic = sp_runtime::generic::UncheckedExtrinsic; frame_support::construct_runtime!( - pub enum Test + pub enum Test where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic { System: frame_system::{Pallet, Call, Event}, Collective: pallet_collective::::{Pallet, Call, Event, Origin, Config}, @@ -45,14 +48,16 @@ frame_support::construct_runtime!( Democracy: mock_democracy::{Pallet, Call, Event}, } ); + mod mock_democracy { pub use pallet::*; - #[frame_support::pallet(dev_mode)] + #[frame_support::pallet] pub mod pallet { use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::*; #[pallet::pallet] + #[pallet::generate_store(pub(super) trait Store)] pub struct Pallet(_); #[pallet::config] @@ -65,6 +70,7 @@ mod mock_democracy { #[pallet::call] impl Pallet { #[pallet::call_index(0)] + #[pallet::weight(0)] pub fn external_propose_majority(origin: OriginFor) -> DispatchResult { T::ExternalMajorityOrigin::ensure_origin(origin)?; Self::deposit_event(Event::::ExternalProposed); @@ -92,11 +98,14 @@ impl frame_system::Config for Test { type BlockLength = (); type DbWeight = (); type RuntimeOrigin = RuntimeOrigin; + type Index = u64; + type BlockNumber = u64; type RuntimeCall = RuntimeCall; type Hash = H256; type Hashing = BlakeTwo256; type AccountId = u64; type Lookup = IdentityLookup; + type Header = Header; type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); @@ -108,8 +117,6 @@ impl frame_system::Config for Test { type SS58Prefix = (); type OnSetCode = (); type MaxConsumers = ConstU32<16>; - type Block = Block; - type Nonce = u64; } pub struct CanProposeCollective; @@ -240,7 +247,7 @@ impl Config for Test { } pub fn new_test_ext() -> sp_io::TestExternalities { - let mut ext: sp_io::TestExternalities = RuntimeGenesisConfig { + let mut ext: sp_io::TestExternalities = GenesisConfig { collective: pallet_collective::GenesisConfig { members: vec![1, 2, 3], phantom: Default::default(), @@ -292,7 +299,9 @@ fn close_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); @@ -363,7 +372,9 @@ fn proposal_weight_limit_works_on_approve() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); // With 1's prime vote, this should pass @@ -373,7 +384,7 @@ fn proposal_weight_limit_works_on_approve() { RuntimeOrigin::signed(4), hash, 0, - proposal_weight - Weight::from_parts(100, 0), + proposal_weight - Weight::from_ref_time(100), proposal_len ), Error::::WrongProposalWeight @@ -404,7 +415,9 @@ fn proposal_weight_limit_ignored_on_disapprove() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); // No votes, this proposal wont pass System::set_block_number(4); @@ -412,7 +425,7 @@ fn proposal_weight_limit_ignored_on_disapprove() { RuntimeOrigin::signed(4), hash, 0, - proposal_weight - Weight::from_parts(100, 0), + proposal_weight - Weight::from_ref_time(100), proposal_len )); }) @@ -436,7 +449,9 @@ fn close_with_prime_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); @@ -496,7 +511,9 @@ fn close_with_voting_prime_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); @@ -560,7 +577,9 @@ fn close_with_no_prime_but_majority_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(CollectiveMajority::vote( RuntimeOrigin::signed(1), @@ -654,12 +673,14 @@ fn removal_of_old_voters_votes_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); assert_ok!(Collective::vote(RuntimeOrigin::signed(2), hash, 0, true)); assert_eq!( - Collective::voting(hash), + Collective::voting(&hash), Some(Votes { index: 0, threshold: 2, @@ -670,7 +691,7 @@ fn removal_of_old_voters_votes_works() { ); Collective::change_members_sorted(&[4], &[1], &[2, 3, 4]); assert_eq!( - Collective::voting(hash), + Collective::voting(&hash), Some(Votes { index: 0, threshold: 2, @@ -687,12 +708,14 @@ fn removal_of_old_voters_votes_works() { RuntimeOrigin::signed(2), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(2), hash, 1, true)); assert_ok!(Collective::vote(RuntimeOrigin::signed(3), hash, 1, false)); assert_eq!( - Collective::voting(hash), + Collective::voting(&hash), Some(Votes { index: 1, threshold: 2, @@ -703,7 +726,7 @@ fn removal_of_old_voters_votes_works() { ); Collective::change_members_sorted(&[], &[3], &[2, 4]); assert_eq!( - Collective::voting(hash), + Collective::voting(&hash), Some(Votes { index: 1, threshold: 2, @@ -726,12 +749,14 @@ fn removal_of_old_voters_votes_works_with_set_members() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); assert_ok!(Collective::vote(RuntimeOrigin::signed(2), hash, 0, true)); assert_eq!( - Collective::voting(hash), + Collective::voting(&hash), Some(Votes { index: 0, threshold: 2, @@ -747,7 +772,7 @@ fn removal_of_old_voters_votes_works_with_set_members() { MaxMembers::get() )); assert_eq!( - Collective::voting(hash), + Collective::voting(&hash), Some(Votes { index: 0, threshold: 2, @@ -764,12 +789,14 @@ fn removal_of_old_voters_votes_works_with_set_members() { RuntimeOrigin::signed(2), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(2), hash, 1, true)); assert_ok!(Collective::vote(RuntimeOrigin::signed(3), hash, 1, false)); assert_eq!( - Collective::voting(hash), + Collective::voting(&hash), Some(Votes { index: 1, threshold: 2, @@ -785,7 +812,7 @@ fn removal_of_old_voters_votes_works_with_set_members() { MaxMembers::get() )); assert_eq!( - Collective::voting(hash), + Collective::voting(&hash), Some(Votes { index: 1, threshold: 2, @@ -808,12 +835,14 @@ fn propose_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_eq!(*Collective::proposals(), vec![hash]); - assert_eq!(Collective::proposal_of(hash), Some(proposal)); + assert_eq!(Collective::proposal_of(&hash), Some(proposal)); assert_eq!( - Collective::voting(hash), + Collective::voting(&hash), Some(Votes { index: 0, threshold: 2, @@ -847,7 +876,8 @@ fn limit_active_proposals() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64) + TryInto::<::BlockNumber>::try_into(3u64) + .ok() .expect("convert u64 to block number.") )); } @@ -858,7 +888,8 @@ fn limit_active_proposals() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64) + TryInto::<::BlockNumber>::try_into(3u64) + .ok() .expect("convert u64 to block number.") ), Error::::TooManyProposals @@ -879,7 +910,9 @@ fn correct_validate_and_get_proposal() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), length, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); let hash = BlakeTwo256::hash_of(&proposal); @@ -900,7 +933,7 @@ fn correct_validate_and_get_proposal() { Collective::validate_and_get_proposal( &hash, length, - weight - Weight::from_parts(10, 0) + weight - Weight::from_ref_time(10) ), Error::::WrongProposalWeight ); @@ -922,7 +955,8 @@ fn motions_ignoring_non_collective_proposals_works() { RuntimeOrigin::signed(42), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64) + TryInto::<::BlockNumber>::try_into(3u64) + .ok() .expect("convert u64 to block number.") ), Error::::NotMember @@ -940,7 +974,9 @@ fn motions_ignoring_non_collective_votes_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_noop!( Collective::vote(RuntimeOrigin::signed(42), hash, 0, true), @@ -960,7 +996,9 @@ fn motions_ignoring_bad_index_collective_vote_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_noop!( Collective::vote(RuntimeOrigin::signed(2), hash, 1, true), @@ -980,11 +1018,13 @@ fn motions_vote_after_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); // Initially there a no votes when the motion is proposed. assert_eq!( - Collective::voting(hash), + Collective::voting(&hash), Some(Votes { index: 0, threshold: 2, @@ -996,7 +1036,7 @@ fn motions_vote_after_works() { // Cast first aye vote. assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); assert_eq!( - Collective::voting(hash), + Collective::voting(&hash), Some(Votes { index: 0, threshold: 2, @@ -1013,7 +1053,7 @@ fn motions_vote_after_works() { // Cast a nay vote. assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, false)); assert_eq!( - Collective::voting(hash), + Collective::voting(&hash), Some(Votes { index: 0, threshold: 2, @@ -1067,10 +1107,12 @@ fn motions_all_first_vote_free_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_eq!( - Collective::voting(hash), + Collective::voting(&hash), Some(Votes { index: 0, threshold: 2, @@ -1141,7 +1183,9 @@ fn motions_reproposing_disapproved_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, false)); @@ -1159,7 +1203,9 @@ fn motions_reproposing_disapproved_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_eq!(*Collective::proposals(), vec![hash]); }); @@ -1181,7 +1227,9 @@ fn motions_approval_with_enough_votes_and_lower_voting_threshold_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); assert_ok!(Collective::vote(RuntimeOrigin::signed(2), hash, 0, true)); @@ -1237,7 +1285,9 @@ fn motions_approval_with_enough_votes_and_lower_voting_threshold_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 1, true)); assert_ok!(Collective::vote(RuntimeOrigin::signed(2), hash, 1, true)); @@ -1310,7 +1360,9 @@ fn motions_disapproval_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, false)); assert_ok!(Collective::vote(RuntimeOrigin::signed(2), hash, 0, false)); @@ -1369,7 +1421,9 @@ fn motions_approval_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); assert_ok!(Collective::vote(RuntimeOrigin::signed(2), hash, 0, true)); @@ -1432,7 +1486,9 @@ fn motion_with_no_votes_closes_with_disapproval() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); assert_eq!( System::events()[0], @@ -1500,7 +1556,9 @@ fn close_disapprove_does_not_care_about_weight_or_len() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); // First we make the proposal succeed assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); @@ -1544,7 +1602,9 @@ fn disapprove_proposal_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(3u64).expect("convert u64 to block number.") + TryInto::<::BlockNumber>::try_into(3u64) + .ok() + .expect("convert u64 to block number.") )); // Proposal would normally succeed assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); diff --git a/pallets/collective/src/weights.rs b/pallets/collective/src/weights.rs index df233fc24..d8a713118 100644 --- a/pallets/collective/src/weights.rs +++ b/pallets/collective/src/weights.rs @@ -81,15 +81,15 @@ impl WeightInfo for SubstrateWeight { // Minimum execution time: 17_093 nanoseconds. Weight::from_parts(17_284_000, 16586) // Standard Error: 64_700 - .saturating_add(Weight::from_parts(5_143_145, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(5_143_145).saturating_mul(m.into())) // Standard Error: 64_700 - .saturating_add(Weight::from_parts(7_480_941, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(7_480_941).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 7809).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 10238).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(7809).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(10238).saturating_mul(p.into())) } /// Storage: Council Members (r:1 w:0) /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) @@ -102,11 +102,11 @@ impl WeightInfo for SubstrateWeight { // Minimum execution time: 15_972 nanoseconds. Weight::from_parts(14_971_445, 730) // Standard Error: 32 - .saturating_add(Weight::from_parts(1_775, 0).saturating_mul(b.into())) + .saturating_add(Weight::from_ref_time(1_775).saturating_mul(b.into())) // Standard Error: 334 - .saturating_add(Weight::from_parts(17_052, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(17_052).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(32).saturating_mul(m.into())) } /// Storage: Council Members (r:1 w:0) /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) @@ -121,11 +121,11 @@ impl WeightInfo for SubstrateWeight { // Minimum execution time: 17_950 nanoseconds. Weight::from_parts(17_019_558, 3440) // Standard Error: 41 - .saturating_add(Weight::from_parts(1_807, 0).saturating_mul(b.into())) + .saturating_add(Weight::from_ref_time(1_807).saturating_mul(b.into())) // Standard Error: 432 - .saturating_add(Weight::from_parts(27_986, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(27_986).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(64).saturating_mul(m.into())) } /// Storage: Council Members (r:1 w:0) /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) @@ -147,15 +147,15 @@ impl WeightInfo for SubstrateWeight { // Minimum execution time: 24_817 nanoseconds. Weight::from_parts(24_778_955, 6355) // Standard Error: 73 - .saturating_add(Weight::from_parts(2_355, 0).saturating_mul(b.into())) + .saturating_add(Weight::from_ref_time(2_355).saturating_mul(b.into())) // Standard Error: 765 - .saturating_add(Weight::from_parts(20_518, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(20_518).saturating_mul(m.into())) // Standard Error: 755 - .saturating_add(Weight::from_parts(85_670, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(85_670).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_parts(0, 165).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(165).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(180).saturating_mul(p.into())) } /// Storage: Council Members (r:1 w:0) /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) @@ -169,10 +169,10 @@ impl WeightInfo for SubstrateWeight { // Minimum execution time: 19_790 nanoseconds. Weight::from_parts(20_528_275, 4980) // Standard Error: 651 - .saturating_add(Weight::from_parts(48_856, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(48_856).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(Weight::from_parts(0, 128).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(128).saturating_mul(m.into())) } /// Storage: Council Voting (r:1 w:1) /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) @@ -191,13 +191,13 @@ impl WeightInfo for SubstrateWeight { // Minimum execution time: 25_564 nanoseconds. Weight::from_parts(25_535_497, 5893) // Standard Error: 610 - .saturating_add(Weight::from_parts(27_956, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(27_956).saturating_mul(m.into())) // Standard Error: 595 - .saturating_add(Weight::from_parts(84_835, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(84_835).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 260).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 144).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(260).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(144).saturating_mul(p.into())) } /// Storage: Council Voting (r:1 w:1) /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) @@ -217,16 +217,16 @@ impl WeightInfo for SubstrateWeight { // Minimum execution time: 36_515 nanoseconds. Weight::from_parts(36_626_648, 9164) // Standard Error: 98 - .saturating_add(Weight::from_parts(2_295, 0).saturating_mul(b.into())) + .saturating_add(Weight::from_ref_time(2_295).saturating_mul(b.into())) // Standard Error: 1_036 - .saturating_add(Weight::from_parts(22_182, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(22_182).saturating_mul(m.into())) // Standard Error: 1_010 - .saturating_add(Weight::from_parts(100_034, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(100_034).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 4).saturating_mul(b.into())) - .saturating_add(Weight::from_parts(0, 264).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 160).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(4).saturating_mul(b.into())) + .saturating_add(Weight::from_proof_size(264).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(160).saturating_mul(p.into())) } /// Storage: Council Voting (r:1 w:1) /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) @@ -247,13 +247,13 @@ impl WeightInfo for SubstrateWeight { // Minimum execution time: 28_858 nanoseconds. Weight::from_parts(28_050_047, 7095) // Standard Error: 614 - .saturating_add(Weight::from_parts(34_031, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(34_031).saturating_mul(m.into())) // Standard Error: 599 - .saturating_add(Weight::from_parts(85_744, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(85_744).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 325).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(325).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(180).saturating_mul(p.into())) } /// Storage: Council Voting (r:1 w:1) /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) @@ -275,16 +275,16 @@ impl WeightInfo for SubstrateWeight { // Minimum execution time: 38_608 nanoseconds. Weight::from_parts(39_948_329, 10565) // Standard Error: 84 - .saturating_add(Weight::from_parts(2_045, 0).saturating_mul(b.into())) + .saturating_add(Weight::from_ref_time(2_045).saturating_mul(b.into())) // Standard Error: 895 - .saturating_add(Weight::from_parts(22_669, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(22_669).saturating_mul(m.into())) // Standard Error: 872 - .saturating_add(Weight::from_parts(95_525, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(95_525).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 5).saturating_mul(b.into())) - .saturating_add(Weight::from_parts(0, 330).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 200).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(5).saturating_mul(b.into())) + .saturating_add(Weight::from_proof_size(330).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(200).saturating_mul(p.into())) } /// Storage: Council Proposals (r:1 w:1) /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) @@ -300,10 +300,10 @@ impl WeightInfo for SubstrateWeight { // Minimum execution time: 14_785 nanoseconds. Weight::from_parts(16_393_818, 1668) // Standard Error: 612 - .saturating_add(Weight::from_parts(76_786, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(76_786).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 96).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(96).saturating_mul(p.into())) } } @@ -327,15 +327,15 @@ impl WeightInfo for () { // Minimum execution time: 17_093 nanoseconds. Weight::from_parts(17_284_000, 16586) // Standard Error: 64_700 - .saturating_add(Weight::from_parts(5_143_145, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(5_143_145).saturating_mul(m.into())) // Standard Error: 64_700 - .saturating_add(Weight::from_parts(7_480_941, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(7_480_941).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(RocksDbWeight::get().writes(2_u64)) .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 7809).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 10238).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(7809).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(10238).saturating_mul(p.into())) } /// Storage: Council Members (r:1 w:0) /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) @@ -348,11 +348,11 @@ impl WeightInfo for () { // Minimum execution time: 15_972 nanoseconds. Weight::from_parts(14_971_445, 730) // Standard Error: 32 - .saturating_add(Weight::from_parts(1_775, 0).saturating_mul(b.into())) + .saturating_add(Weight::from_ref_time(1_775).saturating_mul(b.into())) // Standard Error: 334 - .saturating_add(Weight::from_parts(17_052, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(17_052).saturating_mul(m.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) - .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(32).saturating_mul(m.into())) } /// Storage: Council Members (r:1 w:0) /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) @@ -367,11 +367,11 @@ impl WeightInfo for () { // Minimum execution time: 17_950 nanoseconds. Weight::from_parts(17_019_558, 3440) // Standard Error: 41 - .saturating_add(Weight::from_parts(1_807, 0).saturating_mul(b.into())) + .saturating_add(Weight::from_ref_time(1_807).saturating_mul(b.into())) // Standard Error: 432 - .saturating_add(Weight::from_parts(27_986, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(27_986).saturating_mul(m.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) - .saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(64).saturating_mul(m.into())) } /// Storage: Council Members (r:1 w:0) /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) @@ -393,15 +393,15 @@ impl WeightInfo for () { // Minimum execution time: 24_817 nanoseconds. Weight::from_parts(24_778_955, 6355) // Standard Error: 73 - .saturating_add(Weight::from_parts(2_355, 0).saturating_mul(b.into())) + .saturating_add(Weight::from_ref_time(2_355).saturating_mul(b.into())) // Standard Error: 765 - .saturating_add(Weight::from_parts(20_518, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(20_518).saturating_mul(m.into())) // Standard Error: 755 - .saturating_add(Weight::from_parts(85_670, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(85_670).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_parts(0, 165).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(165).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(180).saturating_mul(p.into())) } /// Storage: Council Members (r:1 w:0) /// Proof Skipped: Council Members (max_values: Some(1), max_size: None, mode: Measured) @@ -415,10 +415,10 @@ impl WeightInfo for () { // Minimum execution time: 19_790 nanoseconds. Weight::from_parts(20_528_275, 4980) // Standard Error: 651 - .saturating_add(Weight::from_parts(48_856, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(48_856).saturating_mul(m.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) - .saturating_add(Weight::from_parts(0, 128).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(128).saturating_mul(m.into())) } /// Storage: Council Voting (r:1 w:1) /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) @@ -437,13 +437,13 @@ impl WeightInfo for () { // Minimum execution time: 25_564 nanoseconds. Weight::from_parts(25_535_497, 5893) // Standard Error: 610 - .saturating_add(Weight::from_parts(27_956, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(27_956).saturating_mul(m.into())) // Standard Error: 595 - .saturating_add(Weight::from_parts(84_835, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(84_835).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 260).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 144).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(260).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(144).saturating_mul(p.into())) } /// Storage: Council Voting (r:1 w:1) /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) @@ -463,16 +463,16 @@ impl WeightInfo for () { // Minimum execution time: 36_515 nanoseconds. Weight::from_parts(36_626_648, 9164) // Standard Error: 98 - .saturating_add(Weight::from_parts(2_295, 0).saturating_mul(b.into())) + .saturating_add(Weight::from_ref_time(2_295).saturating_mul(b.into())) // Standard Error: 1_036 - .saturating_add(Weight::from_parts(22_182, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(22_182).saturating_mul(m.into())) // Standard Error: 1_010 - .saturating_add(Weight::from_parts(100_034, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(100_034).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 4).saturating_mul(b.into())) - .saturating_add(Weight::from_parts(0, 264).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 160).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(4).saturating_mul(b.into())) + .saturating_add(Weight::from_proof_size(264).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(160).saturating_mul(p.into())) } /// Storage: Council Voting (r:1 w:1) /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) @@ -493,13 +493,13 @@ impl WeightInfo for () { // Minimum execution time: 28_858 nanoseconds. Weight::from_parts(28_050_047, 7095) // Standard Error: 614 - .saturating_add(Weight::from_parts(34_031, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(34_031).saturating_mul(m.into())) // Standard Error: 599 - .saturating_add(Weight::from_parts(85_744, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(85_744).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 325).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 180).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(325).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(180).saturating_mul(p.into())) } /// Storage: Council Voting (r:1 w:1) /// Proof Skipped: Council Voting (max_values: None, max_size: None, mode: Measured) @@ -521,16 +521,16 @@ impl WeightInfo for () { // Minimum execution time: 38_608 nanoseconds. Weight::from_parts(39_948_329, 10565) // Standard Error: 84 - .saturating_add(Weight::from_parts(2_045, 0).saturating_mul(b.into())) + .saturating_add(Weight::from_ref_time(2_045).saturating_mul(b.into())) // Standard Error: 895 - .saturating_add(Weight::from_parts(22_669, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_ref_time(22_669).saturating_mul(m.into())) // Standard Error: 872 - .saturating_add(Weight::from_parts(95_525, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(95_525).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 5).saturating_mul(b.into())) - .saturating_add(Weight::from_parts(0, 330).saturating_mul(m.into())) - .saturating_add(Weight::from_parts(0, 200).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(5).saturating_mul(b.into())) + .saturating_add(Weight::from_proof_size(330).saturating_mul(m.into())) + .saturating_add(Weight::from_proof_size(200).saturating_mul(p.into())) } /// Storage: Council Proposals (r:1 w:1) /// Proof Skipped: Council Proposals (max_values: Some(1), max_size: None, mode: Measured) @@ -546,9 +546,9 @@ impl WeightInfo for () { // Minimum execution time: 14_785 nanoseconds. Weight::from_parts(16_393_818, 1668) // Standard Error: 612 - .saturating_add(Weight::from_parts(76_786, 0).saturating_mul(p.into())) + .saturating_add(Weight::from_ref_time(76_786).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_parts(0, 96).saturating_mul(p.into())) + .saturating_add(Weight::from_proof_size(96).saturating_mul(p.into())) } } diff --git a/pallets/commitments/Cargo.toml b/pallets/commitments/Cargo.toml index 885ace2f5..b3db3cd32 100644 --- a/pallets/commitments/Cargo.toml +++ b/pallets/commitments/Cargo.toml @@ -9,9 +9,6 @@ license = "Unlicense" publish = false repository = "https://github.com/opentensor/subtensor" -[lints] -workspace = true - [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -23,19 +20,19 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = scale-info = { version = "2.1.1", default-features = false, features = [ "derive", ] } -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-runtime = { version = "24", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-std = { version = "8", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-runtime = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-std = { version = "5.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } [dependencies.enumflags2] version = "0.7.7" [dev-dependencies] -sp-core = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-io = { version = "23", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -pallet-balances = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-core = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-io = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +pallet-balances = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } [features] default = ["std"] @@ -46,19 +43,11 @@ std = [ "frame-system/std", "scale-info/std", "sp-std/std", - "sp-runtime/std", - "enumflags2/std" ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", "frame-support/runtime-benchmarks", "frame-system/runtime-benchmarks", "sp-runtime/runtime-benchmarks", - "pallet-balances/runtime-benchmarks" -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "pallet-balances/try-runtime", - "sp-runtime/try-runtime" ] +try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/commitments/src/benchmarking.rs b/pallets/commitments/src/benchmarking.rs index 27b886e3a..cdf076933 100644 --- a/pallets/commitments/src/benchmarking.rs +++ b/pallets/commitments/src/benchmarking.rs @@ -4,10 +4,13 @@ use super::*; #[allow(unused)] use crate::Pallet as Commitments; +use frame_benchmarking::v1::account; use frame_benchmarking::v2::*; use frame_system::RawOrigin; -use sp_runtime::traits::Bounded; +use frame_support::traits::Get; +use sp_runtime::traits::{Bounded, StaticLookup}; +use sp_std::mem::size_of; fn assert_last_event(generic_event: ::RuntimeEvent) { frame_system::Pallet::::assert_last_event(generic_event.into()); @@ -15,8 +18,8 @@ fn assert_last_event(generic_event: ::RuntimeEvent) { // This creates an `IdentityInfo` object with `num_fields` extra fields. // All data is pre-populated with some arbitrary bytes. -fn create_identity_info(_num_fields: u32) -> CommitmentInfo { - let _data = Data::Raw(vec![0; 32].try_into().unwrap()); +fn create_identity_info(num_fields: u32) -> CommitmentInfo { + let data = Data::Raw(vec![0; 32].try_into().unwrap()); CommitmentInfo { fields: Default::default(), diff --git a/pallets/commitments/src/lib.rs b/pallets/commitments/src/lib.rs index fd9b0bbb3..26716d65b 100644 --- a/pallets/commitments/src/lib.rs +++ b/pallets/commitments/src/lib.rs @@ -162,7 +162,7 @@ pub mod pallet { >::insert(netuid, &who, cur_block); Self::deposit_event(Event::Commitment { netuid, who }); - Ok(()) + Ok(().into()) } } } @@ -181,12 +181,16 @@ impl CanCommit for () { /************************************************************ CallType definition ************************************************************/ -#[derive(Debug, PartialEq, Default)] +#[derive(Debug, PartialEq)] pub enum CallType { SetCommitment, - #[default] Other, } +impl Default for CallType { + fn default() -> Self { + CallType::Other + } +} use { frame_support::{ @@ -203,16 +207,6 @@ use { #[derive(Encode, Decode, Clone, Eq, PartialEq, TypeInfo)] pub struct CommitmentsSignedExtension(pub PhantomData); -impl Default for CommitmentsSignedExtension -where - T::RuntimeCall: Dispatchable, - ::RuntimeCall: IsSubType>, -{ - fn default() -> Self { - Self::new() - } -} - impl CommitmentsSignedExtension where T::RuntimeCall: Dispatchable, @@ -225,7 +219,15 @@ where pub fn get_priority_vanilla() -> u64 { // Return high priority so that every extrinsic except set_weights function will // have a higher priority than the set_weights call - u64::max_value() + return u64::max_value(); + } + + pub fn u64_to_balance( + input: u64, + ) -> Option< + <::Currency as Currency<::AccountId>>::Balance, + > { + input.try_into().ok() } } @@ -258,11 +260,12 @@ where _info: &DispatchInfoOf, _len: usize, ) -> TransactionValidity { - call.is_sub_type(); - Ok(ValidTransaction { - priority: Self::get_priority_vanilla(), - ..Default::default() - }) + match call.is_sub_type() { + _ => Ok(ValidTransaction { + priority: Self::get_priority_vanilla(), + ..Default::default() + }), + } } // NOTE: Add later when we put in a pre and post dispatch step. @@ -286,12 +289,17 @@ where } fn post_dispatch( - _maybe_pre: Option, + maybe_pre: Option, _info: &DispatchInfoOf, _post_info: &PostDispatchInfoOf, _len: usize, _result: &DispatchResult, ) -> Result<(), TransactionValidityError> { + if let Some((call_type, _transaction_fee, _who)) = maybe_pre { + match call_type { + _ => (), + } + } Ok(()) } } diff --git a/pallets/commitments/src/tests.rs b/pallets/commitments/src/tests.rs index 9957336b2..4c3b4fffd 100644 --- a/pallets/commitments/src/tests.rs +++ b/pallets/commitments/src/tests.rs @@ -1,21 +1,30 @@ -#![allow(non_camel_case_types)] - -use super::*; +use super::{Event as CommitmentEvent, *}; use crate as pallet_commitments; -use frame_support::traits::ConstU64; +use frame_support::{ + assert_noop, assert_ok, + dispatch::Pays, + parameter_types, + traits::{ConstU32, ConstU64, GenesisBuild, StorageMapShim}, + Hashable, +}; +use frame_system::{EnsureRoot, EventRecord, Phase}; use sp_core::H256; use sp_runtime::{ testing::Header, traits::{BlakeTwo256, ConstU16, IdentityLookup}, + BuildStorage, }; pub type Block = sp_runtime::generic::Block; pub type UncheckedExtrinsic = sp_runtime::generic::UncheckedExtrinsic; frame_support::construct_runtime!( - pub enum Test + pub enum Test where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic { - System: frame_system, + System: frame_system::{Pallet, Call, Event}, Balances: pallet_balances, Commitments: pallet_commitments } @@ -37,19 +46,20 @@ pub type Balance = u64; pub type BlockNumber = u64; impl pallet_balances::Config for Test { - type MaxLocks = (); - type MaxReserves = (); - type ReserveIdentifier = [u8; 8]; - type Balance = u64; + type Balance = Balance; type RuntimeEvent = RuntimeEvent; type DustRemoval = (); - type ExistentialDeposit = ConstU64<1>; - type AccountStore = System; + type ExistentialDeposit = (); + type AccountStore = StorageMapShim< + pallet_balances::Account, + frame_system::Provider, + AccountId, + pallet_balances::AccountData, + >; + type MaxLocks = (); type WeightInfo = (); - type FreezeIdentifier = (); - type MaxFreezes = (); - type RuntimeHoldReason = (); - type MaxHolds = (); + type MaxReserves = (); + type ReserveIdentifier = (); } impl frame_system::Config for Test { @@ -67,15 +77,16 @@ impl frame_system::Config for Test { type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; + type AccountData = (); type OnNewAccount = (); type OnKilledAccount = (); type SystemWeightInfo = (); type SS58Prefix = ConstU16<42>; type OnSetCode = (); + type Index = u32; + type BlockNumber = u64; + type Header = sp_runtime::generic::Header; type MaxConsumers = frame_support::traits::ConstU32<16>; - type Block = Block; - type Nonce = u64; } impl pallet_commitments::Config for Test { @@ -89,12 +100,10 @@ impl pallet_commitments::Config for Test { type RateLimit = frame_support::traits::ConstU64<0>; } -// // Build genesis storage according to the mock runtime. -// pub fn new_test_ext() -> sp_io::TestExternalities { -// let t = frame_system::GenesisConfig::::default() -// .build_storage() -// .unwrap(); -// let mut ext = sp_io::TestExternalities::new(t); -// ext.execute_with(|| System::set_block_number(1)); -// ext -// } +// Build genesis storage according to the mock runtime. +pub fn new_test_ext() -> sp_io::TestExternalities { + frame_system::GenesisConfig::default() + .build_storage::() + .unwrap() + .into() +} diff --git a/pallets/commitments/src/types.rs b/pallets/commitments/src/types.rs index 4753046e5..be8bd589a 100644 --- a/pallets/commitments/src/types.rs +++ b/pallets/commitments/src/types.rs @@ -15,20 +15,22 @@ // See the License for the specific language governing permissions and // limitations under the License. +use super::*; use codec::{Codec, Decode, Encode, MaxEncodedLen}; +use enumflags2::{bitflags, BitFlags}; use frame_support::{ traits::{ConstU32, Get}, BoundedVec, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, }; use scale_info::{ build::{Fields, Variants}, - Path, Type, TypeInfo, + meta_type, Path, Type, TypeInfo, TypeParameter, }; use sp_runtime::{ - traits::{AppendZerosInput, AtLeast32BitUnsigned}, + traits::{AppendZerosInput, AtLeast32BitUnsigned, Block, Zero}, RuntimeDebug, }; -use sp_std::{fmt::Debug, iter::once, prelude::*}; +use sp_std::{fmt::Debug, iter::once, ops::Add, prelude::*}; /// 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. @@ -88,7 +90,7 @@ impl Encode for Data { Data::Raw(ref x) => { let l = x.len().min(128); let mut r = vec![l as u8 + 1; l + 1]; - r[1..].copy_from_slice(&x[..l]); + r[1..].copy_from_slice(&x[..l as usize]); r } Data::BlakeTwo256(ref h) => once(130).chain(h.iter().cloned()).collect(), @@ -316,16 +318,16 @@ pub struct Registration< pub info: CommitmentInfo, } -// impl< -// Balance: Encode + Decode + MaxEncodedLen + Copy + Clone + Debug + Eq + PartialEq + Zero + Add, -// MaxFields: Get, -// Block: Codec + Clone + Ord + Eq + AtLeast32BitUnsigned + MaxEncodedLen + Debug, -// > Registration -// { -// pub(crate) fn total_deposit(&self) -> Balance { -// self.deposit -// } -// } +impl< + Balance: Encode + Decode + MaxEncodedLen + Copy + Clone + Debug + Eq + PartialEq + Zero + Add, + MaxFields: Get, + Block: Codec + Clone + Ord + Eq + AtLeast32BitUnsigned + MaxEncodedLen + Debug, + > Registration +{ + pub(crate) fn total_deposit(&self) -> Balance { + self.deposit + } +} impl< Balance: Encode + Decode + MaxEncodedLen + Copy + Clone + Debug + Eq + PartialEq, @@ -352,7 +354,7 @@ mod tests { let mut registry = scale_info::Registry::new(); let type_id = registry.register_type(&scale_info::meta_type::()); let registry: scale_info::PortableRegistry = registry.into(); - let type_info = registry.resolve(type_id.id).unwrap(); + let type_info = registry.resolve(type_id.id()).unwrap(); let check_type_info = |data: &Data| { let variant_name = match data { @@ -363,20 +365,20 @@ mod tests { Data::ShaThree256(_) => "ShaThree256".to_string(), Data::Raw(bytes) => format!("Raw{}", bytes.len()), }; - if let scale_info::TypeDef::Variant(variant) = &type_info.type_def { + if let scale_info::TypeDef::Variant(variant) = &type_info.type_def() { let variant = variant - .variants + .variants() .iter() .find(|v| v.name == variant_name) - .unwrap_or_else(|| panic!("Expected to find variant {}", variant_name)); + .expect(&format!("Expected to find variant {}", variant_name)); let field_arr_len = variant .fields .first() - .and_then(|f| registry.resolve(f.ty.id)) + .and_then(|f| registry.resolve(f.ty().id())) .map(|ty| { - if let scale_info::TypeDef::Array(arr) = &ty.type_def { - arr.len + if let scale_info::TypeDef::Array(arr) = &ty.type_def() { + arr.len() } else { panic!("Should be an array type") } diff --git a/pallets/registry/Cargo.toml b/pallets/registry/Cargo.toml index 40bc5b960..590da1501 100644 --- a/pallets/registry/Cargo.toml +++ b/pallets/registry/Cargo.toml @@ -9,9 +9,6 @@ license = "Unlicense" publish = false repository = "https://github.com/opentensor/subtensor" -[lints] -workspace = true - [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -23,18 +20,18 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = scale-info = { version = "2.1.1", default-features = false, features = [ "derive", ] } -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-runtime = { version = "24", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-std = { version = "8", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-runtime = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-std = { version = "5.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } [dependencies.enumflags2] version = "0.7.7" [dev-dependencies] -sp-core = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-io = { version = "23", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-core = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-io = { version = "7.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } [features] default = ["std"] @@ -45,8 +42,6 @@ std = [ "frame-system/std", "scale-info/std", "sp-std/std", - "sp-runtime/std", - "enumflags2/std" ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", @@ -54,8 +49,4 @@ runtime-benchmarks = [ "frame-system/runtime-benchmarks", "sp-runtime/runtime-benchmarks", ] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "sp-runtime/try-runtime" -] +try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/registry/src/benchmarking.rs b/pallets/registry/src/benchmarking.rs index fe3866dda..3cbbdb457 100644 --- a/pallets/registry/src/benchmarking.rs +++ b/pallets/registry/src/benchmarking.rs @@ -8,7 +8,9 @@ use frame_benchmarking::v1::account; use frame_benchmarking::v2::*; use frame_system::RawOrigin; -use sp_runtime::traits::Bounded; +use frame_support::traits::Get; +use sp_runtime::traits::{Bounded, StaticLookup}; +use sp_std::mem::size_of; fn assert_last_event(generic_event: ::RuntimeEvent) { frame_system::Pallet::::assert_last_event(generic_event.into()); @@ -16,7 +18,7 @@ fn assert_last_event(generic_event: ::RuntimeEvent) { // This creates an `IdentityInfo` object with `num_fields` extra fields. // All data is pre-populated with some arbitrary bytes. -fn create_identity_info(_num_fields: u32) -> IdentityInfo { +fn create_identity_info(num_fields: u32) -> IdentityInfo { let data = Data::Raw(vec![0; 32].try_into().unwrap()); IdentityInfo { @@ -64,8 +66,7 @@ mod benchmarks { RawOrigin::Signed(caller.clone()).into(), vali_account.clone(), Box::new(create_identity_info::(0)), - ) - .unwrap(); + ); #[extrinsic_call] _(RawOrigin::Signed(caller.clone()), vali_account); diff --git a/pallets/registry/src/lib.rs b/pallets/registry/src/lib.rs index b23dceb42..cc1fe0123 100644 --- a/pallets/registry/src/lib.rs +++ b/pallets/registry/src/lib.rs @@ -135,7 +135,7 @@ pub mod pallet { >::insert(&identified, id); Self::deposit_event(Event::IdentitySet { who: identified }); - Ok(()) + Ok(().into()) } #[pallet::call_index(1)] diff --git a/pallets/registry/src/tests.rs b/pallets/registry/src/tests.rs index d233fe078..36161f82e 100644 --- a/pallets/registry/src/tests.rs +++ b/pallets/registry/src/tests.rs @@ -1 +1,4 @@ +use crate::{Error, Event}; +use frame_support::{assert_noop, assert_ok}; + // Testing diff --git a/pallets/registry/src/types.rs b/pallets/registry/src/types.rs index 9e23b5629..7def07529 100644 --- a/pallets/registry/src/types.rs +++ b/pallets/registry/src/types.rs @@ -15,6 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +use super::*; use codec::{Decode, Encode, MaxEncodedLen}; use enumflags2::{bitflags, BitFlags}; use frame_support::{ @@ -89,7 +90,7 @@ impl Encode for Data { Data::Raw(ref x) => { let l = x.len().min(64); let mut r = vec![l as u8 + 1; l + 1]; - r[1..].copy_from_slice(&x[..l]); + r[1..].copy_from_slice(&x[..l as usize]); r } Data::BlakeTwo256(ref h) => once(66u8).chain(h.iter().cloned()).collect(), @@ -256,7 +257,7 @@ impl Decode for IdentityFields { fn decode(input: &mut I) -> sp_std::result::Result { let field = u64::decode(input)?; Ok(Self( - >::from_bits(field).map_err(|_| "invalid value")?, + >::from_bits(field as u64).map_err(|_| "invalid value")?, )) } } @@ -331,7 +332,7 @@ pub struct IdentityInfo> { } impl> IdentityInfo { - pub fn fields(&self) -> IdentityFields { + pub(crate) fn fields(&self) -> IdentityFields { let mut res = >::empty(); if !self.display.is_none() { res.insert(IdentityField::Display); @@ -411,7 +412,7 @@ mod tests { let mut registry = scale_info::Registry::new(); let type_id = registry.register_type(&scale_info::meta_type::()); let registry: scale_info::PortableRegistry = registry.into(); - let type_info = registry.resolve(type_id.id).unwrap(); + let type_info = registry.resolve(type_id.id()).unwrap(); let check_type_info = |data: &Data| { let variant_name = match data { @@ -422,20 +423,20 @@ mod tests { Data::ShaThree256(_) => "ShaThree256".to_string(), Data::Raw(bytes) => format!("Raw{}", bytes.len()), }; - if let scale_info::TypeDef::Variant(variant) = &type_info.type_def { + if let scale_info::TypeDef::Variant(variant) = &type_info.type_def() { let variant = variant - .variants + .variants() .iter() .find(|v| v.name == variant_name) - .unwrap_or_else(|| panic!("Expected to find variant {}", variant_name)); + .expect(&format!("Expected to find variant {}", variant_name)); let field_arr_len = variant .fields .first() - .and_then(|f| registry.resolve(f.ty.id)) + .and_then(|f| registry.resolve(f.ty().id())) .map(|ty| { - if let scale_info::TypeDef::Array(arr) = &ty.type_def { - arr.len + if let scale_info::TypeDef::Array(arr) = &ty.type_def() { + arr.len() } else { panic!("Should be an array type") } diff --git a/pallets/subtensor/Cargo.toml b/pallets/subtensor/Cargo.toml index a66324744..536db9ed5 100644 --- a/pallets/subtensor/Cargo.toml +++ b/pallets/subtensor/Cargo.toml @@ -9,9 +9,6 @@ license = "Unlicense" publish = false repository = "https://github.com/opentensor/subtensor" -[lints] -workspace = true - [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -19,15 +16,15 @@ targets = ["x86_64-unknown-linux-gnu"] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive", ] } -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } -pallet-balances = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } +pallet-balances = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } scale-info = { version = "2.1.1", default-features = false, features = [ "derive", ] } -frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-io = { version = "23", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-io = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } serde = { version = "1.0.132", default-features = false, features = ["derive"] } serde-tuple-vec-map = { version = "1.0.1", default-features = false } serde_bytes = { version = "0.11.8", default-features = false, features = [ @@ -36,30 +33,30 @@ serde_bytes = { version = "0.11.8", default-features = false, features = [ serde_with = { version = "=2.0.0", default-features = false, features = [ "macros", ] } -sp-runtime = { version = "24", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-runtime = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } log = { version = "0.4.14", default-features = false } substrate-fixed = { git = 'https://github.com/encointer/substrate-fixed.git', tag = "v0.5.9" } -pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } +pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } ndarray = { version = "0.15.0", default-features = false } hex = { version = "0.4", default-features = false } # Used for sudo decentralization pallet-collective = { version = "4.0.0-dev", default-features = false, path = "../collective" } -pallet-membership = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-membership = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } hex-literal = "0.4.1" [dev-dependencies] -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0", features = [ +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39", features = [ "std", ] } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } # Substrate -sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } parity-util-mem = { version = "0.11.0", features = ['primitive-types'] } rand = "0.8" -sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } [features] default = ["std"] @@ -71,41 +68,7 @@ std = [ "scale-info/std", "pallet-collective/std", "pallet-membership/std", - "substrate-fixed/std", - "pallet-balances/std", - "pallet-transaction-payment/std", - "pallet-utility/std", - "sp-core/std", - "sp-io/std", - "sp-runtime/std", - "sp-std/std", - "sp-tracing/std", - "sp-version/std", - "hex/std", - "log/std", - "ndarray/std", - "serde/std", - "serde_bytes/std", - "serde_with/std" -] -runtime-benchmarks = [ - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-membership/runtime-benchmarks", - "pallet-utility/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "pallet-collective/runtime-benchmarks" -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "pallet-balances/try-runtime", - "pallet-membership/try-runtime", - "pallet-transaction-payment/try-runtime", - "pallet-utility/try-runtime", - "sp-runtime/try-runtime", - "pallet-collective/try-runtime" ] +runtime-benchmarks = ["frame-benchmarking/runtime-benchmarks"] +try-runtime = ["frame-support/try-runtime"] pow-faucet = [] diff --git a/pallets/subtensor/rpc/Cargo.toml b/pallets/subtensor/rpc/Cargo.toml index 362e28280..f56d3a769 100644 --- a/pallets/subtensor/rpc/Cargo.toml +++ b/pallets/subtensor/rpc/Cargo.toml @@ -8,9 +8,6 @@ description = "A pallet that adds custom RPC calls to subtensor" license = "MIT" publish = false -[lints] -workspace = true - [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "derive", @@ -23,10 +20,10 @@ jsonrpsee = { version = "0.16.2", features = [ serde = { version = "1.0.132", features = ["derive"], default-features = false } # Substrate packages -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0", default-features = false } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0", default-features = false } -sp-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0", default-features = false } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39", default-features = false } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39", default-features = false } +sp-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39", default-features = false } # local packages @@ -35,12 +32,5 @@ pallet-subtensor = { version = "4.0.0-dev", path = "../../subtensor", default-fe [features] default = ["std"] -std = [ - "sp-api/std", - "sp-runtime/std", - "subtensor-custom-rpc-runtime-api/std", - "pallet-subtensor/std", - "codec/std", - "serde/std" -] +std = ["sp-api/std", "sp-runtime/std", "subtensor-custom-rpc-runtime-api/std"] pow-faucet = [] diff --git a/pallets/subtensor/runtime-api/Cargo.toml b/pallets/subtensor/runtime-api/Cargo.toml index 4648f8e67..6cb297a42 100644 --- a/pallets/subtensor/runtime-api/Cargo.toml +++ b/pallets/subtensor/runtime-api/Cargo.toml @@ -8,23 +8,15 @@ description = "A pallet that adds a custom runtime API to Subtensor" license = "MIT" publish = false -[lints] -workspace = true - [dependencies] -sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0", default-features = false } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } serde = { version = "1.0.132", features = ["derive"], default-features = false } -# local +# local pallet-subtensor = { version = "4.0.0-dev", path = "../../subtensor", default-features = false } [features] default = ["std"] -std = [ - "sp-api/std", - "frame-support/std", - "pallet-subtensor/std", - "serde/std" -] +std = ["sp-api/std"] pow-faucet = [] diff --git a/pallets/subtensor/src/benchmarks.rs b/pallets/subtensor/src/benchmarks.rs index 514e98944..95ccfe499 100644 --- a/pallets/subtensor/src/benchmarks.rs +++ b/pallets/subtensor/src/benchmarks.rs @@ -7,10 +7,10 @@ use crate::Pallet as Subtensor; use crate::*; use frame_benchmarking::{account, benchmarks, whitelisted_caller}; use frame_support::assert_ok; +use frame_support::inherent::Vec; use frame_support::sp_std::vec; use frame_system::RawOrigin; pub use pallet::*; -use sp_std::vec::Vec; //use mock::{Test, new_test_ext}; benchmarks! { @@ -24,12 +24,12 @@ benchmarks! { let seed : u32 = 1; let block_number: u64 = Subtensor::::get_current_block_as_u64(); - let start_nonce: u64 = 39420842u64 + 100u64*netuid as u64; + let start_nonce: u64 = (39420842u64 + 100u64*netuid as u64).into(); let hotkey: T::AccountId = account("Alice", 0, seed); let (nonce, work): (u64, Vec) = Subtensor::::create_work_for_block_number( netuid, block_number, start_nonce, &hotkey); Subtensor::::init_new_network(netuid, tempo); - Subtensor::::set_network_registration_allowed( netuid, true); + Subtensor::::set_network_registration_allowed( netuid.try_into().unwrap(), true.into()); let block_number: u64 = Subtensor::::get_current_block_as_u64(); let coldkey: T::AccountId = account("Test", 0, seed); @@ -46,30 +46,30 @@ benchmarks! { Subtensor::::init_new_network(netuid, tempo); Subtensor::::set_max_allowed_uids( netuid, 4096 ); - Subtensor::::set_network_registration_allowed( netuid, true ); - Subtensor::::set_max_registrations_per_block( netuid, 4096 ); - Subtensor::::set_target_registrations_per_interval( netuid, 4096 ); + Subtensor::::set_network_registration_allowed( netuid.try_into().unwrap(), true.into() ); + Subtensor::::set_max_registrations_per_block( netuid.try_into().unwrap(), 4096 ); + Subtensor::::set_target_registrations_per_interval( netuid.try_into().unwrap(), 4096 ); let mut seed : u32 = 1; let mut dests: Vec = vec![]; let mut weights: Vec = vec![]; let signer : T::AccountId = account("Alice", 0, seed); - for id in 0..4096_u16 { + for id in 0..4096 as u16 { let hotkey: T::AccountId = account("Alice", 0, seed); let coldkey: T::AccountId = account("Test", 0, seed); - seed += 1; + seed = seed +1; Subtensor::::set_burn(netuid, 1); - let amount_to_be_staked = 1000000u32.into(); - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); + let amoun_to_be_staked = Subtensor::::u64_to_balance( 1000000 ); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amoun_to_be_staked.unwrap()); Subtensor::::do_burned_registration(RawOrigin::Signed(coldkey.clone()).into(), netuid, hotkey.clone())?; let uid = Subtensor::::get_uid_for_net_and_hotkey(netuid, &hotkey.clone()).unwrap(); - Subtensor::::set_validator_permit_for_uid(netuid, uid, true); - dests.push(id); - weights.push(id); + Subtensor::::set_validator_permit_for_uid(netuid, uid.clone(), true); + dests.push(id.clone()); + weights.push(id.clone()); } }: set_weights(RawOrigin::Signed( signer.clone() ), netuid, dests, weights, version_key) @@ -89,14 +89,14 @@ benchmarks! { Subtensor::::set_burn(netuid, 1); Subtensor::::set_max_allowed_uids( netuid, 4096 ); - Subtensor::::set_network_registration_allowed( netuid, true); + Subtensor::::set_network_registration_allowed( netuid.try_into().unwrap(), true.into()); assert_eq!(Subtensor::::get_max_allowed_uids(netuid), 4096); let coldkey: T::AccountId = account("Test", 0, seed); let hotkey: T::AccountId = account("Alice", 0, seed); - let amount_to_be_staked = 1000000000u32.into(); - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); + let amoun_to_be_staked = Subtensor::::u64_to_balance( 1000000000); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amoun_to_be_staked.unwrap()); assert_ok!(Subtensor::::do_burned_registration(RawOrigin::Signed(coldkey.clone()).into(), netuid, hotkey.clone())); }: become_delegate(RawOrigin::Signed( coldkey.clone() ), hotkey.clone()) @@ -113,7 +113,7 @@ benchmarks! { Subtensor::::init_new_network(netuid, tempo); Subtensor::::set_burn(netuid, 1); - Subtensor::::set_network_registration_allowed( netuid, true ); + Subtensor::::set_network_registration_allowed( netuid.try_into().unwrap(), true.into() ); Subtensor::::set_max_allowed_uids( netuid, 4096 ); assert_eq!(Subtensor::::get_max_allowed_uids(netuid), 4096); @@ -122,8 +122,8 @@ benchmarks! { let hotkey: T::AccountId = account("Alice", 0, seed); let amount: u64 = 1; - let amount_to_be_staked = 1000000000u64; - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); + let amoun_to_be_staked = Subtensor::::u64_to_balance( 1000000000); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amoun_to_be_staked.unwrap()); assert_ok!(Subtensor::::do_burned_registration(RawOrigin::Signed(coldkey.clone()).into(), netuid, hotkey.clone())); }: add_stake(RawOrigin::Signed( coldkey.clone() ), hotkey, amount) @@ -141,7 +141,7 @@ benchmarks! { Subtensor::::increase_total_stake(1_000_000_000_000); Subtensor::::init_new_network(netuid, tempo); - Subtensor::::set_network_registration_allowed( netuid, true ); + Subtensor::::set_network_registration_allowed( netuid.try_into().unwrap(), true.into() ); Subtensor::::set_max_allowed_uids( netuid, 4096 ); assert_eq!(Subtensor::::get_max_allowed_uids(netuid), 4096); @@ -150,15 +150,16 @@ benchmarks! { let hotkey: T::AccountId = account("Alice", 0, seed); Subtensor::::set_burn(netuid, 1); - let wallet_bal = 1000000u32.into(); - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), wallet_bal); + let wallet_bal = Subtensor::::u64_to_balance(1000000); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), wallet_bal.unwrap()); assert_ok!(Subtensor::::do_burned_registration(RawOrigin::Signed(coldkey.clone()).into(), netuid, hotkey.clone())); assert_ok!(Subtensor::::do_become_delegate(RawOrigin::Signed(coldkey.clone()).into(), hotkey.clone(), Subtensor::::get_default_take())); // Stake 10% of our current total staked TAO let u64_staked_amt = 100_000_000_000; - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), u64_staked_amt); + let amount_to_be_staked = Subtensor::::u64_to_balance(u64_staked_amt); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked.unwrap()); assert_ok!( Subtensor::::add_stake(RawOrigin::Signed( coldkey.clone() ).into() , hotkey.clone(), u64_staked_amt)); @@ -185,8 +186,8 @@ benchmarks! { assert_eq!(Subtensor::::get_max_allowed_uids(netuid), 4096); Subtensor::::set_burn(netuid, 1); - let amount_to_be_staked = 1000000u32.into(); - Subtensor::::add_balance_to_coldkey_account(&caller.clone(), amount_to_be_staked); + let amoun_to_be_staked = Subtensor::::u64_to_balance( 1000000 ); + Subtensor::::add_balance_to_coldkey_account(&caller.clone(), amoun_to_be_staked.unwrap()); assert_ok!(Subtensor::::do_burned_registration(caller_origin.clone(), netuid, caller.clone())); @@ -211,8 +212,8 @@ benchmarks! { assert_eq!(Subtensor::::get_max_allowed_uids(netuid), 4096); Subtensor::::set_burn(netuid, 1); - let amount_to_be_staked = 1000000u32.into(); - Subtensor::::add_balance_to_coldkey_account(&caller.clone(), amount_to_be_staked); + let amoun_to_be_staked = Subtensor::::u64_to_balance( 1000000 ); + Subtensor::::add_balance_to_coldkey_account(&caller.clone(), amoun_to_be_staked.unwrap()); assert_ok!(Subtensor::::do_burned_registration(caller_origin.clone(), netuid, caller.clone())); Subtensor::::set_serving_rate_limit(netuid, 0); @@ -238,8 +239,8 @@ benchmarks! { let hotkey: T::AccountId = account("Alice", 0, seed); let coldkey: T::AccountId = account("Test", 0, seed); - let amount_to_be_staked = balance.into(); - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); + let amoun_to_be_staked = Subtensor::::u64_to_balance( balance ); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amoun_to_be_staked.unwrap()); }: sudo_register(RawOrigin::>::Root, netuid, hotkey, coldkey, stake, balance) */ @@ -254,8 +255,8 @@ benchmarks! { Subtensor::::init_new_network(netuid, tempo); Subtensor::::set_burn(netuid, 1); - let amount_to_be_staked = 1000000u32.into(); - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); + let amoun_to_be_staked = Subtensor::::u64_to_balance( 1000000); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amoun_to_be_staked.unwrap()); }: burned_register(RawOrigin::Signed( coldkey.clone() ), netuid, hotkey) @@ -269,7 +270,7 @@ benchmarks! { Subtensor::::init_new_network(netuid, tempo); Subtensor::::set_burn(netuid, 1); - Subtensor::::set_network_registration_allowed( netuid, true); + Subtensor::::set_network_registration_allowed( netuid.try_into().unwrap(), true.into()); Subtensor::::set_max_allowed_uids( netuid, 4096 ); assert_eq!(Subtensor::::get_max_allowed_uids(netuid), 4096); @@ -278,8 +279,8 @@ benchmarks! { let hotkey: T::AccountId = account("Alice", 0, seed); let amount: u64 = 1; - let amount_to_be_staked = 100_000_000_000_000u64; - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); + let amoun_to_be_staked = Subtensor::::u64_to_balance( 100_000_000_000_000); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amoun_to_be_staked.unwrap()); assert_ok!(Subtensor::::do_burned_registration(RawOrigin::Signed(coldkey.clone()).into(), netuid, hotkey.clone())); }: root_register(RawOrigin::Signed(coldkey), hotkey) @@ -292,8 +293,8 @@ benchmarks! { Subtensor::::set_network_rate_limit(1); let amount: u64 = 1; - let amount_to_be_staked = 100_000_000_000_000u64; - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); + let amoun_to_be_staked = Subtensor::::u64_to_balance(100_000_000_000_000); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amoun_to_be_staked.unwrap()); }: register_network(RawOrigin::Signed(coldkey)) benchmark_dissolve_network { @@ -304,8 +305,8 @@ benchmarks! { Subtensor::::set_network_rate_limit(0); let amount: u64 = 1; - let amount_to_be_staked = 100_000_000_000_000u64; - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); + let amoun_to_be_staked = Subtensor::::u64_to_balance(100_000_000_000_000); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amoun_to_be_staked.unwrap()); assert_ok!(Subtensor::::register_network(RawOrigin::Signed(coldkey.clone()).into())); }: dissolve_network(RawOrigin::Signed(coldkey), 1) @@ -322,7 +323,7 @@ benchmarks! { Subtensor::::set_target_registrations_per_interval(netuid, 256); Subtensor::::set_max_registrations_per_block(netuid, 256); - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), 10_000_000_000u64); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), Subtensor::::u64_to_balance(10_000_000_000).unwrap()); assert_ok!(Subtensor::::burned_register(RawOrigin::Signed(coldkey.clone()).into(), netuid, old_hotkey.clone())); assert_ok!(Subtensor::::become_delegate(RawOrigin::Signed(coldkey.clone()).into(), old_hotkey.clone())); @@ -331,7 +332,7 @@ benchmarks! { let coldkey: T::AccountId = account("Axon", 0, i); let hotkey: T::AccountId = account("Hotkey", 0, i); - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), 10_000_000_000u64); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), Subtensor::::u64_to_balance(10_000_000_000).unwrap()); assert_ok!(Subtensor::::burned_register(RawOrigin::Signed(coldkey.clone()).into(), netuid, hotkey)); assert_ok!(Subtensor::::add_stake(RawOrigin::Signed(coldkey).into(), old_hotkey.clone(), 1_000_000_000)); } diff --git a/pallets/subtensor/src/block_step.rs b/pallets/subtensor/src/block_step.rs index 50c4fc740..6e9d7268e 100644 --- a/pallets/subtensor/src/block_step.rs +++ b/pallets/subtensor/src/block_step.rs @@ -1,4 +1,5 @@ use super::*; +use frame_support::inherent::Vec; use frame_support::storage::IterableStorageDoubleMap; use frame_support::storage::IterableStorageMap; use substrate_fixed::types::I110F18; @@ -42,7 +43,7 @@ impl Pallet { if tempo == 0 { return 1000; } - tempo as u64 - (block_number + netuid as u64 + 1) % (tempo as u64 + 1) + return tempo as u64 - (block_number + netuid as u64 + 1) % (tempo as u64 + 1); } // Helper function returns the number of tuples to drain on a particular step based on @@ -68,9 +69,9 @@ impl Pallet { let to_sink_via_tempo: usize = n_remaining / (tempo as usize / 2); let to_sink_via_blocks_until_epoch: usize = n_remaining / (blocks_until_epoch as usize / 2); if to_sink_via_tempo > to_sink_via_blocks_until_epoch { - to_sink_via_tempo + return to_sink_via_tempo; } else { - to_sink_via_blocks_until_epoch + return to_sink_via_blocks_until_epoch; } } @@ -95,7 +96,7 @@ impl Pallet { let mut total_emitted: u64 = 0; for (hotkey, server_amount, validator_amount) in tuples_to_drain.iter() { Self::emit_inflation_through_hotkey_account( - hotkey, + &hotkey, *server_amount, *validator_amount, ); @@ -139,11 +140,11 @@ impl Pallet { Self::add_balance_to_coldkey_account( &Self::get_subnet_owner(netuid), - cut.to_num::(), + Self::u64_to_balance(cut.to_num::()).unwrap(), ); // We are creating tokens here from the coinbase. - Self::coinbase(cut.to_num::()); + Self::coinbase( cut.to_num::() ); } // --- 5. Add remaining amount to the network's pending emission. PendingEmission::::mutate(netuid, |queued| *queued += remaining.to_num::()); @@ -214,7 +215,7 @@ impl Pallet { // --- 1. Check if the hotkey is a delegate. If not, we simply pass the stake through to the // coldkey - hotkey account as normal. if !Self::hotkey_is_delegate(hotkey) { - Self::increase_stake_on_hotkey_account(hotkey, server_emission + validator_emission); + Self::increase_stake_on_hotkey_account(&hotkey, server_emission + validator_emission); return; } // Then this is a delegate, we distribute validator_emission, then server_emission. @@ -241,7 +242,7 @@ impl Pallet { ); Self::increase_stake_on_coldkey_hotkey_account( &owning_coldkey_i, - hotkey, + &hotkey, stake_proportion, ); log::debug!( @@ -256,14 +257,14 @@ impl Pallet { // --- 5. Last increase final account balance of delegate after 4, since 5 will change the stake proportion of // the delegate and effect calculation in 4. Self::increase_stake_on_hotkey_account( - hotkey, + &hotkey, delegate_take + remaining_validator_emission, ); log::debug!("delkey: {:?} delegate_take: +{:?} ", hotkey, delegate_take); // Also emit the server_emission to the hotkey // The server emission is distributed in-full to the delegate owner. // We do this after 4. for the same reason as above. - Self::increase_stake_on_hotkey_account(hotkey, server_emission); + Self::increase_stake_on_hotkey_account(&hotkey, server_emission); } // Increases the stake on the cold - hot pairing by increment while also incrementing other counters. @@ -319,7 +320,7 @@ impl Pallet { }; let stake_proportion: I64F64 = I64F64::from_num(stake) / I64F64::from_num(total_stake); let proportional_emission: I64F64 = I64F64::from_num(emission) * stake_proportion; - proportional_emission.to_num::() + return proportional_emission.to_num::(); } // Returns the delegated stake 'take' assigned to this key. (If exists, otherwise 0) @@ -329,9 +330,9 @@ impl Pallet { let take_proportion: I64F64 = I64F64::from_num(Delegates::::get(hotkey)) / I64F64::from_num(u16::MAX); let take_emission: I64F64 = take_proportion * I64F64::from_num(emission); - take_emission.to_num::() + return take_emission.to_num::(); } else { - 0 + return 0; } } @@ -346,7 +347,7 @@ impl Pallet { let last_adjustment_block: u64 = Self::get_last_adjustment_block(netuid); let adjustment_interval: u16 = Self::get_adjustment_interval(netuid); let current_block: u64 = Self::get_current_block_as_u64(); - log::debug!("netuid: {:?} last_adjustment_block: {:?} adjustment_interval: {:?} current_block: {:?}", + log::debug!("netuid: {:?} last_adjustment_block: {:?} adjustment_interval: {:?} current_block: {:?}", netuid, last_adjustment_block, adjustment_interval, @@ -372,14 +373,13 @@ impl Pallet { // --- 5. Adjust burn + pow // There are six cases to consider. A, B, C, D, E, F if registrations_this_interval > target_registrations_this_interval { - #[allow(clippy::comparison_chain)] if pow_registrations_this_interval > burn_registrations_this_interval { // A. There are too many registrations this interval and most of them are pow registrations // this triggers an increase in the pow difficulty. // pow_difficulty ++ Self::set_difficulty( netuid, - Self::upgraded_difficulty( + Self::adjust_difficulty( netuid, current_difficulty, registrations_this_interval, @@ -392,7 +392,7 @@ impl Pallet { // burn_cost ++ Self::set_burn( netuid, - Self::upgraded_burn( + Self::adjust_burn( netuid, current_burn, registrations_this_interval, @@ -405,7 +405,7 @@ impl Pallet { // burn_cost ++ Self::set_burn( netuid, - Self::upgraded_burn( + Self::adjust_burn( netuid, current_burn, registrations_this_interval, @@ -415,7 +415,7 @@ impl Pallet { // pow_difficulty ++ Self::set_difficulty( netuid, - Self::upgraded_difficulty( + Self::adjust_difficulty( netuid, current_difficulty, registrations_this_interval, @@ -425,14 +425,13 @@ impl Pallet { } } else { // Not enough registrations this interval. - #[allow(clippy::comparison_chain)] if pow_registrations_this_interval > burn_registrations_this_interval { // C. There are not enough registrations this interval and most of them are pow registrations // this triggers a decrease in the burn cost // burn_cost -- Self::set_burn( netuid, - Self::upgraded_burn( + Self::adjust_burn( netuid, current_burn, registrations_this_interval, @@ -445,7 +444,7 @@ impl Pallet { // pow_difficulty -- Self::set_difficulty( netuid, - Self::upgraded_difficulty( + Self::adjust_difficulty( netuid, current_difficulty, registrations_this_interval, @@ -458,7 +457,7 @@ impl Pallet { // burn_cost -- Self::set_burn( netuid, - Self::upgraded_burn( + Self::adjust_burn( netuid, current_burn, registrations_this_interval, @@ -468,7 +467,7 @@ impl Pallet { // pow_difficulty -- Self::set_difficulty( netuid, - Self::upgraded_difficulty( + Self::adjust_difficulty( netuid, current_difficulty, registrations_this_interval, @@ -492,10 +491,10 @@ impl Pallet { } } - // Calculates the upgraded difficulty by multiplying the current difficulty by the ratio ( reg_actual + reg_target / reg_target + reg_target ) + // Performs the difficulty adjustment by multiplying the current difficulty by the ratio ( reg_actual + reg_target / reg_target * reg_target ) // We use I110F18 to avoid any overflows on u64. Also min_difficulty and max_difficulty bound the range. // - pub fn upgraded_difficulty( + pub fn adjust_difficulty( netuid: u16, current_difficulty: u64, registrations_this_interval: u16, @@ -511,7 +510,7 @@ impl Pallet { let next_value: I110F18 = alpha * I110F18::from_num(current_difficulty) + (I110F18::from_num(1.0) - alpha) * updated_difficulty; if next_value >= I110F18::from_num(Self::get_max_difficulty(netuid)) { - Self::get_max_difficulty(netuid) + return Self::get_max_difficulty(netuid); } else if next_value <= I110F18::from_num(Self::get_min_difficulty(netuid)) { return Self::get_min_difficulty(netuid); } else { @@ -519,10 +518,10 @@ impl Pallet { } } - // Calculates the upgraded burn by multiplying the current burn by the ratio ( reg_actual + reg_target / reg_target + reg_target ) + // Performs the burn adjustment by multiplying the current difficulty by the ratio ( reg_actual + reg_target / reg_target * reg_target ) // We use I110F18 to avoid any overflows on u64. Also min_burn and max_burn bound the range. // - pub fn upgraded_burn( + pub fn adjust_burn( netuid: u16, current_burn: u64, registrations_this_interval: u16, @@ -538,7 +537,7 @@ impl Pallet { let next_value: I110F18 = alpha * I110F18::from_num(current_burn) + (I110F18::from_num(1.0) - alpha) * updated_burn; if next_value >= I110F18::from_num(Self::get_max_burn_as_u64(netuid)) { - Self::get_max_burn_as_u64(netuid) + return Self::get_max_burn_as_u64(netuid); } else if next_value <= I110F18::from_num(Self::get_min_burn_as_u64(netuid)) { return Self::get_min_burn_as_u64(netuid); } else { diff --git a/pallets/subtensor/src/delegate_info.rs b/pallets/subtensor/src/delegate_info.rs index 2d5f38bf3..71af0a878 100644 --- a/pallets/subtensor/src/delegate_info.rs +++ b/pallets/subtensor/src/delegate_info.rs @@ -4,6 +4,7 @@ use frame_support::storage::IterableStorageMap; use frame_support::IterableStorageDoubleMap; use substrate_fixed::types::U64F64; extern crate alloc; +use alloc::vec::Vec; use codec::Compact; use sp_core::hexdisplay::AsBytesRef; @@ -41,7 +42,7 @@ impl Pallet { for netuid in registrations.iter() { let _uid = Self::get_uid_for_net_and_hotkey(*netuid, &delegate.clone()); - if _uid.is_err() { + if !_uid.is_ok() { continue; // this should never happen } else { let uid = _uid.expect("Delegate's UID should be ok"); @@ -94,17 +95,19 @@ impl Pallet { } let delegate_info = Self::get_delegate_by_existing_account(delegate.clone()); - Some(delegate_info) + return Some(delegate_info); } pub fn get_delegates() -> Vec> { let mut delegates = Vec::>::new(); - for delegate in as IterableStorageMap>::iter_keys() { + for delegate in + as IterableStorageMap>::iter_keys().into_iter() + { let delegate_info = Self::get_delegate_by_existing_account(delegate.clone()); delegates.push(delegate_info); } - delegates + return delegates; } pub fn get_delegated(delegatee_account_vec: Vec) -> Vec<(DelegateInfo, Compact)> { @@ -116,7 +119,9 @@ impl Pallet { T::AccountId::decode(&mut delegatee_account_vec.as_bytes_ref()).unwrap(); let mut delegates: Vec<(DelegateInfo, Compact)> = Vec::new(); - for delegate in as IterableStorageMap>::iter_keys() { + for delegate in + as IterableStorageMap>::iter_keys().into_iter() + { let staked_to_this_delegatee = Self::get_stake_for_coldkey_and_hotkey(&delegatee.clone(), &delegate.clone()); if staked_to_this_delegatee == 0 { @@ -127,6 +132,6 @@ impl Pallet { delegates.push((delegate_info, staked_to_this_delegatee.into())); } - delegates + return delegates; } } diff --git a/pallets/subtensor/src/epoch.rs b/pallets/subtensor/src/epoch.rs index 6be44cf99..16398395c 100644 --- a/pallets/subtensor/src/epoch.rs +++ b/pallets/subtensor/src/epoch.rs @@ -1,5 +1,6 @@ use super::*; use crate::math::*; +use frame_support::inherent::Vec; use frame_support::sp_std::vec; use frame_support::storage::IterableStorageDoubleMap; use substrate_fixed::types::{I32F32, I64F64, I96F32}; @@ -702,8 +703,8 @@ impl Pallet { pub fn get_normalized_stake(netuid: u16) -> Vec { let n: usize = Self::get_subnetwork_n(netuid) as usize; let mut stake_64: Vec = vec![I64F64::from_num(0.0); n]; - for (neuron_uid, neuron_stake) in stake_64.iter_mut().enumerate().take(n) { - *neuron_stake = I64F64::from_num(Self::get_stake_for_uid_and_subnetwork( + for neuron_uid in 0..n { + stake_64[neuron_uid] = I64F64::from_num(Self::get_stake_for_uid_and_subnetwork( netuid, neuron_uid as u16, )); @@ -716,9 +717,10 @@ impl Pallet { pub fn get_block_at_registration(netuid: u16) -> Vec { let n: usize = Self::get_subnetwork_n(netuid) as usize; let mut block_at_registration: Vec = vec![0; n]; - for (neuron_uid, block) in block_at_registration.iter_mut().enumerate().take(n) { + for neuron_uid in 0..n { if Keys::::contains_key(netuid, neuron_uid as u16) { - *block = Self::get_neuron_block_at_registration(netuid, neuron_uid as u16); + block_at_registration[neuron_uid] = + Self::get_neuron_block_at_registration(netuid, neuron_uid as u16); } } block_at_registration diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index 8beba51c1..e9b55237f 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -1,6 +1,5 @@ #![cfg_attr(not(feature = "std"), no_std)] #![recursion_limit = "512"] -#![allow(clippy::too_many_arguments)] // Edit this file to define custom logic or remove it if it is not needed. // Learn more about FRAME and the core library of Substrate FRAME pallets: // @@ -12,7 +11,7 @@ use frame_support::{ dispatch, dispatch::{DispatchError, DispatchInfo, DispatchResult, PostDispatchInfo}, ensure, - traits::{tokens::fungible, IsSubType}, + traits::{tokens::WithdrawReasons, Currency, ExistenceRequirement, IsSubType}, }; use codec::{Decode, Encode}; @@ -60,10 +59,10 @@ pub mod pallet { use frame_support::{ dispatch::GetDispatchInfo, + inherent::Vec, pallet_prelude::{DispatchResult, StorageMap, ValueQuery, *}, sp_std::vec, - sp_std::vec::Vec, - traits::{tokens::fungible, UnfilteredDispatchable}, + traits::{Currency, UnfilteredDispatchable}, }; use frame_system::pallet_prelude::*; use sp_runtime::traits::TrailingZeroInput; @@ -75,9 +74,10 @@ pub mod pallet { // Tracks version for migrations. Should be monotonic with respect to the // order of migrations. (i.e. always increasing) - const STORAGE_VERSION: StorageVersion = StorageVersion::new(6); + const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); #[pallet::pallet] + #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] #[pallet::storage_version(STORAGE_VERSION)] pub struct Pallet(_); @@ -97,8 +97,7 @@ pub mod pallet { type CouncilOrigin: EnsureOrigin; // --- Currency type that will be used to place deposits on neurons - type Currency: fungible::Balanced - + fungible::Mutate; + type Currency: Currency + Send + Sync; type SenateMembers: crate::MemberManagement; @@ -195,7 +194,7 @@ pub mod pallet { T::InitialSenateRequiredStakePercentage::get() } - #[pallet::storage] + #[pallet::storage] // --- ITEM ( tx_rate_limit ) pub(super) type SenateRequiredStakePercentage = StorageValue<_, u64, ValueQuery, DefaultSenateRequiredStakePercentage>; @@ -437,7 +436,7 @@ pub mod pallet { T::InitialNetworkRateLimit::get() } - #[pallet::storage] // --- ITEM( maximum_number_of_networks ) + #[pallet::storage] // --- ITEM( total_number_of_existing_networks ) pub type SubnetLimit = StorageValue<_, u16, ValueQuery, DefaultSubnetLimit>; #[pallet::storage] // --- ITEM( total_number_of_existing_networks ) pub type TotalNetworks = StorageValue<_, u16, ValueQuery>; @@ -509,7 +508,7 @@ pub mod pallet { 0 } #[pallet::type_value] - pub fn DefaultLastMechanismStepBlock() -> u64 { + pub fn DefaultLastMechansimStepBlock() -> u64 { 0 } #[pallet::type_value] @@ -533,16 +532,16 @@ pub mod pallet { #[pallet::storage] // --- MAP ( netuid ) --> pending_emission pub type PendingEmission = StorageMap<_, Identity, u16, u64, ValueQuery, DefaultPendingEmission>; - #[pallet::storage] // --- MAP ( netuid ) --> blocks_since_last_step + #[pallet::storage] // --- MAP ( netuid ) --> blocks_since_last_step. pub type BlocksSinceLastStep = StorageMap<_, Identity, u16, u64, ValueQuery, DefaultBlocksSinceLastStep>; #[pallet::storage] // --- MAP ( netuid ) --> last_mechanism_step_block pub type LastMechansimStepBlock = - StorageMap<_, Identity, u16, u64, ValueQuery, DefaultLastMechanismStepBlock>; - #[pallet::storage] // --- MAP ( netuid ) --> subnet_owner + StorageMap<_, Identity, u16, u64, ValueQuery, DefaultLastMechansimStepBlock>; + #[pallet::storage] pub type SubnetOwner = StorageMap<_, Identity, u16, T::AccountId, ValueQuery, DefaultSubnetOwner>; - #[pallet::storage] // --- MAP ( netuid ) --> subnet_locked + #[pallet::storage] pub type SubnetLocked = StorageMap<_, Identity, u16, u64, ValueQuery, DefaultSubnetLocked>; @@ -562,7 +561,7 @@ pub mod pallet { pub ip_type: u8, // --- Axon ip type, 4 for ipv4 and 6 for ipv6. pub protocol: u8, // --- Axon protocol. TCP, UDP, other. pub placeholder1: u8, // --- Axon proto placeholder 1. - pub placeholder2: u8, // --- Axon proto placeholder 2. + pub placeholder2: u8, // --- Axon proto placeholder 1. } // --- Struct for Prometheus. @@ -864,7 +863,7 @@ pub mod pallet { // parameters. [something, who] NetworkAdded(u16, u16), // --- Event created when a new network is added. NetworkRemoved(u16), // --- Event created when a network is removed. - StakeAdded(T::AccountId, u64), // --- Event created when stake has been transferred from the a coldkey account onto the hotkey staking account. + StakeAdded(T::AccountId, u64), // --- Event created when stake has been transfered from the a coldkey account onto the hotkey staking account. StakeRemoved(T::AccountId, u64), // --- Event created when stake has been removed from the hotkey staking account onto the coldkey account. WeightsSet(u16, u16), // ---- Event created when a caller successfully sets their weights on a subnetwork. NeuronRegistered(u16, u16, T::AccountId), // --- Event created when a new neuron account has been registered to the chain. @@ -874,12 +873,12 @@ pub mod pallet { MaxWeightLimitSet(u16, u16), // --- Event created when the max weight limit has been set for a subnetwork. DifficultySet(u16, u64), // --- Event created when the difficulty has been set for a subnet. AdjustmentIntervalSet(u16, u16), // --- Event created when the adjustment interval is set for a subnet. - RegistrationPerIntervalSet(u16, u16), // --- Event created when registration per interval is set for a subnet. + RegistrationPerIntervalSet(u16, u16), // --- Event created when registeration per interval is set for a subnet. MaxRegistrationsPerBlockSet(u16, u16), // --- Event created when we set max registrations per block. ActivityCutoffSet(u16, u16), // --- Event created when an activity cutoff is set for a subnet. RhoSet(u16, u16), // --- Event created when Rho value is set. KappaSet(u16, u16), // --- Event created when Kappa is set for a subnet. - MinAllowedWeightSet(u16, u16), // --- Event created when minimum allowed weight is set for a subnet. + MinAllowedWeightSet(u16, u16), // --- Event created when minimun allowed weight is set for a subnet. ValidatorPruneLenSet(u16, u64), // --- Event created when the validator pruning length has been set. ScalingLawPowerSet(u16, u16), // --- Event created when the scaling law power has been set for a subnet. WeightsSetRateLimitSet(u16, u64), // --- Event created when weights set rate limit has been set for a subnet. @@ -892,8 +891,8 @@ pub mod pallet { DelegateAdded(T::AccountId, T::AccountId, u16), // --- Event created to signal that a hotkey has become a delegate. DefaultTakeSet(u16), // --- Event created when the default take is set. WeightsVersionKeySet(u16, u64), // --- Event created when weights version key is set for a network. - MinDifficultySet(u16, u64), // --- Event created when setting min difficulty on a network. - MaxDifficultySet(u16, u64), // --- Event created when setting max difficulty on a network. + MinDifficultySet(u16, u64), // --- Event created when setting min difficutly on a network. + MaxDifficultySet(u16, u64), // --- Event created when setting max difficutly on a network. ServingRateLimitSet(u16, u64), // --- Event created when setting the prometheus serving rate limit. BurnSet(u16, u64), // --- Event created when setting burn on a network. MaxBurnSet(u16, u64), // --- Event created when setting max burn on a network. @@ -907,7 +906,7 @@ pub mod pallet { WeightsMinStake(u64), // --- Event created when min stake is set for validators to set weights. SenateRequiredStakePercentSet(u64), // Event created when setting the minimum required stake amount for senate registration. AdjustmentAlphaSet(u16, u64), // Event created when setting the adjustment alpha on a subnet. - Faucet(T::AccountId, u64), // Event created when the faucet it called on the test net. + Faucet(T::AccountId, u64), // Event created when the facuet it called on the test net. SubnetOwnerCutSet(u16), // Event created when the subnet owner cut is set. NetworkRateLimitSet(u64), // Event created when the network creation rate limit is set. NetworkImmunityPeriodSet(u64), // Event created when the network immunity period is set. @@ -946,15 +945,14 @@ pub mod pallet { InvalidWorkBlock, // ---- Thrown if the supplied pow hash block is in the future or negative. InvalidDifficulty, // ---- Thrown if the supplied pow hash block does not meet the network difficulty. InvalidSeal, // ---- Thrown if the supplied pow hash seal does not match the supplied work. - MaxAllowedUIdsNotAllowed, // --- Thrown if the value is invalid for MaxAllowedUids. + MaxAllowedUIdsNotAllowed, // --- Thrown if the vaule is invalid for MaxAllowedUids. CouldNotConvertToBalance, // ---- Thrown when the dispatch attempts to convert between a u64 and T::balance but the call fails. - CouldNotConvertToU64, // -- Thrown when the dispatch attempts to convert from a T::Balance to a u64 but the call fails. StakeAlreadyAdded, // --- Thrown when the caller requests adding stake for a hotkey to the total stake which already added. MaxWeightExceeded, // --- Thrown when the dispatch attempts to set weights on chain with where any normalized weight is more than MaxWeightLimit. StorageValueOutOfRange, // --- Thrown when the caller attempts to set a storage value outside of its allowed range. TempoHasNotSet, // --- Thrown when tempo has not set. InvalidTempo, // --- Thrown when tempo is not valid. - EmissionValuesDoesNotMatchNetworks, // --- Thrown when number or received emission rates does not match number of networks. + EmissionValuesDoesNotMatchNetworks, // --- Thrown when number or recieved emission rates does not match number of networks. InvalidEmissionValues, // --- Thrown when emission ratios are not valid (did not sum up to 10^9). AlreadyDelegate, // --- Thrown if the hotkey attempts to become delegate when they are already. SettingWeightsTooFast, // --- Thrown if the hotkey attempts to set weights twice within net_tempo/2 blocks. @@ -979,11 +977,10 @@ pub mod pallet { IncorrectNetuidsLength, // --- Thrown when an incorrect amount of Netuids are passed as input FaucetDisabled, // --- Thrown when the faucet is disabled NotSubnetOwner, - OperationNotPermittedOnRootSubnet, + OperationNotPermittedonRootSubnet, StakeTooLowForRoot, // --- Thrown when a hotkey attempts to join the root subnet with too little stake AllNetworksInImmunity, // --- Thrown when all subnets are in the immunity period NotEnoughBalance, - NoNeuronIdAvailable, // -- Thrown when no neuron id is available /// Thrown a stake would be below the minimum threshold for nominator validations NomStakeBelowMinimumThreshold, } @@ -993,11 +990,13 @@ pub mod pallet { // ================== #[pallet::genesis_config] + #[cfg(feature = "std")] pub struct GenesisConfig { pub stakes: Vec<(T::AccountId, Vec<(T::AccountId, (u64, u16))>)>, pub balances_issuance: u64, } + #[cfg(feature = "std")] impl Default for GenesisConfig { fn default() -> Self { Self { @@ -1008,7 +1007,7 @@ pub mod pallet { } #[pallet::genesis_build] - impl BuildGenesisConfig for GenesisConfig { + impl GenesisBuild for GenesisConfig { fn build(&self) { // Set initial total issuance from balances TotalIssuance::::put(self.balances_issuance); @@ -1172,7 +1171,7 @@ pub mod pallet { // ---- Called on the initialization of this pallet. (the order of on_finalize calls is determined in the runtime) // // # Args: - // * 'n': (BlockNumberFor): + // * 'n': (T::BlockNumber): // - The number of the block we are initializing. fn on_initialize(_block_number: BlockNumberFor) -> Weight { let block_step_result = Self::block_step(); @@ -1180,16 +1179,16 @@ pub mod pallet { Ok(_) => { // --- If the block step was successful, return the weight. log::info!("Successfully ran block step."); - Weight::from_parts(110_634_229_000_u64, 0) - .saturating_add(T::DbWeight::get().reads(8304_u64)) - .saturating_add(T::DbWeight::get().writes(110_u64)) + return Weight::from_ref_time(110_634_229_000 as u64) + .saturating_add(T::DbWeight::get().reads(8304 as u64)) + .saturating_add(T::DbWeight::get().writes(110 as u64)); } Err(e) => { // --- If the block step was unsuccessful, return the weight anyway. log::error!("Error while stepping block: {:?}", e); - Weight::from_parts(110_634_229_000_u64, 0) - .saturating_add(T::DbWeight::get().reads(8304_u64)) - .saturating_add(T::DbWeight::get().writes(110_u64)) + return Weight::from_ref_time(110_634_229_000 as u64) + .saturating_add(T::DbWeight::get().reads(8304 as u64)) + .saturating_add(T::DbWeight::get().writes(110 as u64)); } } } @@ -1197,7 +1196,7 @@ pub mod pallet { fn on_runtime_upgrade() -> frame_support::weights::Weight { // --- Migrate storage use crate::migration; - let mut weight = frame_support::weights::Weight::from_parts(0, 0); + let mut weight = frame_support::weights::Weight::from_ref_time(0); // Hex encoded foundation coldkey let hex = hex_literal::hex![ @@ -1214,7 +1213,7 @@ pub mod pallet { .saturating_add(migration::migrate_delete_subnet_21::()) .saturating_add(migration::migration5_total_issuance::(false)); - weight + return weight; } } @@ -1282,7 +1281,7 @@ pub mod pallet { // * 'MaxWeightExceeded': // - Attempting to set weights with max value exceeding limit. #[pallet::call_index(0)] - #[pallet::weight((Weight::from_parts(10_151_000_000, 0) + #[pallet::weight((Weight::from_ref_time(10_151_000_000) .saturating_add(T::DbWeight::get().reads(4104)) .saturating_add(T::DbWeight::get().writes(2)), DispatchClass::Normal, Pays::No))] pub fn set_weights( @@ -1360,7 +1359,7 @@ pub mod pallet { // // #[pallet::call_index(2)] - #[pallet::weight((Weight::from_parts(65_000_000, 0) + #[pallet::weight((Weight::from_ref_time(65_000_000) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(6)), DispatchClass::Normal, Pays::No))] pub fn add_stake( @@ -1404,8 +1403,8 @@ pub mod pallet { // // #[pallet::call_index(3)] - #[pallet::weight((Weight::from_parts(63_000_000, 0) - .saturating_add(Weight::from_parts(0, 43991)) + #[pallet::weight((Weight::from_ref_time(63_000_000) + .saturating_add(Weight::from_proof_size(43991)) .saturating_add(T::DbWeight::get().reads(14)) .saturating_add(T::DbWeight::get().writes(9)), DispatchClass::Normal, Pays::No))] pub fn remove_stake( @@ -1468,7 +1467,7 @@ pub mod pallet { // - Attempting to set prometheus information withing the rate limit min. // #[pallet::call_index(4)] - #[pallet::weight((Weight::from_parts(19_000_000, 0) + #[pallet::weight((Weight::from_ref_time(19_000_000) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)), DispatchClass::Normal, Pays::No))] pub fn serve_axon( @@ -1496,7 +1495,7 @@ pub mod pallet { } #[pallet::call_index(5)] - #[pallet::weight((Weight::from_parts(17_000_000, 0) + #[pallet::weight((Weight::from_ref_time(17_000_000) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)), DispatchClass::Normal, Pays::No))] pub fn serve_prometheus( @@ -1558,7 +1557,7 @@ pub mod pallet { // - The seal is incorrect. // #[pallet::call_index(6)] - #[pallet::weight((Weight::from_parts(91_000_000, 0) + #[pallet::weight((Weight::from_ref_time(91_000_000) .saturating_add(T::DbWeight::get().reads(27)) .saturating_add(T::DbWeight::get().writes(22)), DispatchClass::Normal, Pays::No))] pub fn register( @@ -1574,7 +1573,7 @@ pub mod pallet { } #[pallet::call_index(62)] - #[pallet::weight((Weight::from_parts(120_000_000, 0) + #[pallet::weight((Weight::from_ref_time(120_000_000) .saturating_add(T::DbWeight::get().reads(23)) .saturating_add(T::DbWeight::get().writes(20)), DispatchClass::Normal, Pays::No))] pub fn root_register(origin: OriginFor, hotkey: T::AccountId) -> DispatchResult { @@ -1582,7 +1581,7 @@ pub mod pallet { } #[pallet::call_index(7)] - #[pallet::weight((Weight::from_parts(89_000_000, 0) + #[pallet::weight((Weight::from_ref_time(89_000_000) .saturating_add(T::DbWeight::get().reads(27)) .saturating_add(T::DbWeight::get().writes(22)), DispatchClass::Normal, Pays::No))] pub fn burned_register( @@ -1627,7 +1626,7 @@ pub mod pallet { /// ## Complexity /// - O(1). #[pallet::call_index(51)] - #[pallet::weight((Weight::from_parts(0, 0), DispatchClass::Operational, Pays::No))] + #[pallet::weight((Weight::from_ref_time(0), DispatchClass::Operational, Pays::No))] pub fn sudo( origin: OriginFor, call: Box, @@ -1668,8 +1667,8 @@ pub mod pallet { } #[pallet::call_index(55)] - #[pallet::weight((Weight::from_parts(0, 0) - .saturating_add(Weight::from_parts(0, 0)) + #[pallet::weight((Weight::from_ref_time(0) + .saturating_add(Weight::from_proof_size(0)) .saturating_add(T::DbWeight::get().reads(0)) .saturating_add(T::DbWeight::get().writes(0)), DispatchClass::Operational))] pub fn vote( @@ -1683,7 +1682,7 @@ pub mod pallet { } #[pallet::call_index(59)] - #[pallet::weight((Weight::from_parts(85_000_000, 0) + #[pallet::weight((Weight::from_ref_time(85_000_000) .saturating_add(T::DbWeight::get().reads(16)) .saturating_add(T::DbWeight::get().writes(28)), DispatchClass::Operational, Pays::No))] pub fn register_network(origin: OriginFor) -> DispatchResult { @@ -1691,7 +1690,7 @@ pub mod pallet { } #[pallet::call_index(60)] - #[pallet::weight((Weight::from_parts(91_000_000, 0) + #[pallet::weight((Weight::from_ref_time(91_000_000) .saturating_add(T::DbWeight::get().reads(27)) .saturating_add(T::DbWeight::get().writes(22)), DispatchClass::Normal, Pays::No))] pub fn faucet( @@ -1708,7 +1707,7 @@ pub mod pallet { } #[pallet::call_index(61)] - #[pallet::weight((Weight::from_parts(70_000_000, 0) + #[pallet::weight((Weight::from_ref_time(70_000_000) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(31)), DispatchClass::Operational, Pays::No))] pub fn dissolve_network(origin: OriginFor, netuid: u16) -> DispatchResult { @@ -1720,21 +1719,25 @@ pub mod pallet { impl Pallet { // --- Returns the transaction priority for setting weights. pub fn get_priority_set_weights(hotkey: &T::AccountId, netuid: u16) -> u64 { - if Uids::::contains_key(netuid, hotkey) { + if Uids::::contains_key(netuid, &hotkey) { let uid = Self::get_uid_for_net_and_hotkey(netuid, &hotkey.clone()).unwrap(); - let _stake = Self::get_total_stake_for_hotkey(hotkey); + let _stake = Self::get_total_stake_for_hotkey(&hotkey); let current_block_number: u64 = Self::get_current_block_as_u64(); let default_priority: u64 = - current_block_number - Self::get_last_update_for_uid(netuid, uid); + current_block_number - Self::get_last_update_for_uid(netuid, uid as u16); return default_priority + u32::max_value() as u64; } - 0 + return 0; } // --- Is the caller allowed to set weights pub fn check_weights_min_stake(hotkey: &T::AccountId) -> bool { // Blacklist weights transactions for low stake peers. - Self::get_total_stake_for_hotkey(hotkey) >= Self::get_weights_min_stake() + if Self::get_total_stake_for_hotkey(&hotkey) >= Self::get_weights_min_stake() { + return true; + } else { + return false; + } } pub fn checked_allowed_register(netuid: u16) -> bool { @@ -1765,7 +1768,7 @@ pub mod pallet { /************************************************************ CallType definition ************************************************************/ -#[derive(Debug, PartialEq, Default)] +#[derive(Debug, PartialEq)] pub enum CallType { SetWeights, AddStake, @@ -1774,23 +1777,17 @@ pub enum CallType { Register, Serve, RegisterNetwork, - #[default] Other, } - -#[derive(Encode, Decode, Clone, Eq, PartialEq, TypeInfo)] -pub struct SubtensorSignedExtension(pub PhantomData); - -impl Default for SubtensorSignedExtension -where - T::RuntimeCall: Dispatchable, - ::RuntimeCall: IsSubType>, -{ +impl Default for CallType { fn default() -> Self { - Self::new() + CallType::Other } } +#[derive(Encode, Decode, Clone, Eq, PartialEq, TypeInfo)] +pub struct SubtensorSignedExtension(pub PhantomData); + impl SubtensorSignedExtension where T::RuntimeCall: Dispatchable, @@ -1803,16 +1800,24 @@ where pub fn get_priority_vanilla() -> u64 { // Return high priority so that every extrinsic except set_weights function will // have a higher priority than the set_weights call - u64::max_value() + return u64::max_value(); } pub fn get_priority_set_weights(who: &T::AccountId, netuid: u16) -> u64 { - Pallet::::get_priority_set_weights(who, netuid) + return Pallet::::get_priority_set_weights(who, netuid); } pub fn check_weights_min_stake(who: &T::AccountId) -> bool { Pallet::::check_weights_min_stake(who) } + + pub fn u64_to_balance( + input: u64, + ) -> Option< + <::Currency as Currency<::AccountId>>::Balance, + > { + input.try_into().ok() + } } impl sp_std::fmt::Debug for SubtensorSignedExtension { @@ -1849,12 +1854,12 @@ where if Self::check_weights_min_stake(who) { let priority: u64 = Self::get_priority_set_weights(who, *netuid); Ok(ValidTransaction { - priority, + priority: priority, longevity: 1, ..Default::default() }) } else { - Err(InvalidTransaction::Call.into()) + return Err(InvalidTransaction::Call.into()); } } Some(Call::add_stake { .. }) => Ok(ValidTransaction { @@ -1869,7 +1874,7 @@ where let registrations_this_interval = Pallet::::get_registrations_this_interval(*netuid); let max_registrations_per_interval = - Pallet::::get_target_registrations_per_interval(*netuid) * 3; + Pallet::::get_target_registrations_per_interval(*netuid); if registrations_this_interval >= max_registrations_per_interval { // If the registration limit for the interval is exceeded, reject the transaction return InvalidTransaction::ExhaustsResources.into(); @@ -1960,12 +1965,7 @@ where } } -use frame_support::sp_std::vec; - -// TODO: unravel this rats nest, for some reason rustc thinks this is unused even though it's -// used not 25 lines below -#[allow(unused)] -use sp_std::vec::Vec; +use frame_support::{inherent::Vec, sp_std::vec}; /// Trait for managing a membership pallet instance in the runtime pub trait MemberManagement { diff --git a/pallets/subtensor/src/math.rs b/pallets/subtensor/src/math.rs index 2b69f38cc..66e0d91d5 100644 --- a/pallets/subtensor/src/math.rs +++ b/pallets/subtensor/src/math.rs @@ -1,12 +1,9 @@ +use frame_support::inherent::Vec; use frame_support::sp_std::vec; use sp_runtime::traits::CheckedAdd; use substrate_fixed::transcendental::exp; use substrate_fixed::types::{I32F32, I64F64}; -// TODO: figure out what cfg gate this needs to not be a warning in rustc -#[allow(unused)] -use sp_std::vec::Vec; - #[allow(dead_code)] pub fn fixed(val: f32) -> I32F32 { I32F32::from_num(val) @@ -54,37 +51,41 @@ pub fn fixed_proportion_to_u16(x: I32F32) -> u16 { #[allow(dead_code)] pub fn vec_fixed32_to_u64(vec: Vec) -> Vec { - vec.into_iter().map(fixed_to_u64).collect() + vec.into_iter().map(|e| fixed_to_u64(e)).collect() } #[allow(dead_code)] pub fn vec_fixed64_to_fixed32(vec: Vec) -> Vec { - vec.into_iter().map(fixed64_to_fixed32).collect() + vec.into_iter().map(|e| fixed64_to_fixed32(e)).collect() } #[allow(dead_code)] pub fn vec_fixed32_to_fixed64(vec: Vec) -> Vec { - vec.into_iter().map(fixed32_to_fixed64).collect() + vec.into_iter().map(|e| fixed32_to_fixed64(e)).collect() } #[allow(dead_code)] pub fn vec_fixed64_to_u64(vec: Vec) -> Vec { - vec.into_iter().map(fixed64_to_u64).collect() + vec.into_iter().map(|e| fixed64_to_u64(e)).collect() } #[allow(dead_code)] pub fn vec_u16_proportions_to_fixed(vec: Vec) -> Vec { - vec.into_iter().map(u16_proportion_to_fixed).collect() + vec.into_iter() + .map(|e| u16_proportion_to_fixed(e)) + .collect() } #[allow(dead_code)] pub fn vec_fixed_proportions_to_u16(vec: Vec) -> Vec { - vec.into_iter().map(fixed_proportion_to_u16).collect() + vec.into_iter() + .map(|e| fixed_proportion_to_u16(e)) + .collect() } #[allow(dead_code)] // Max-upscale vector and convert to u16 so max_value = u16::MAX. Assumes non-negative normalized input. -pub fn vec_max_upscale_to_u16(vec: &[I32F32]) -> Vec { +pub fn vec_max_upscale_to_u16(vec: &Vec) -> Vec { let u16_max: I32F32 = I32F32::from_num(u16::MAX); let threshold: I32F32 = I32F32::from_num(32768); let max_value: Option<&I32F32> = vec.iter().max(); @@ -119,26 +120,30 @@ pub fn vec_max_upscale_to_u16(vec: &[I32F32]) -> Vec { #[allow(dead_code)] // Max-upscale u16 vector and convert to u16 so max_value = u16::MAX. Assumes u16 vector input. -pub fn vec_u16_max_upscale_to_u16(vec: &[u16]) -> Vec { +pub fn vec_u16_max_upscale_to_u16(vec: &Vec) -> Vec { let vec_fixed: Vec = vec.iter().map(|e: &u16| I32F32::from_num(*e)).collect(); vec_max_upscale_to_u16(&vec_fixed) } #[allow(dead_code)] // Checks if u16 vector, when normalized, has a max value not greater than a u16 ratio max_limit. -pub fn check_vec_max_limited(vec: &[u16], max_limit: u16) -> bool { +pub fn check_vec_max_limited(vec: &Vec, max_limit: u16) -> bool { let max_limit_fixed: I32F32 = I32F32::from_num(max_limit) / I32F32::from_num(u16::MAX); let mut vec_fixed: Vec = vec.iter().map(|e: &u16| I32F32::from_num(*e)).collect(); inplace_normalize(&mut vec_fixed); let max_value: Option<&I32F32> = vec_fixed.iter().max(); match max_value { - Some(val) => *val <= max_limit_fixed, - None => true, + Some(val) => { + return *val <= max_limit_fixed; + } + None => { + return true; + } } } #[allow(dead_code)] -pub fn sum(x: &[I32F32]) -> I32F32 { +pub fn sum(x: &Vec) -> I32F32 { x.iter().sum() } @@ -146,11 +151,11 @@ pub fn sum(x: &[I32F32]) -> I32F32 { // Sums a Vector of type that has CheckedAdd trait. // Returns None if overflow occurs during sum using T::checked_add. // Returns Some(T::default()) if input vector is empty. -pub fn checked_sum(x: &[T]) -> Option +pub fn checked_sum(x: &Vec) -> Option where T: Copy + Default + CheckedAdd, { - if x.is_empty() { + if x.len() == 0 { return Some(T::default()); } @@ -166,8 +171,8 @@ where // Return true when vector sum is zero. #[allow(dead_code)] -pub fn is_zero(vector: &[I32F32]) -> bool { - let vector_sum: I32F32 = sum(vector); +pub fn is_zero(vector: &Vec) -> bool { + let vector_sum: I32F32 = sum(&vector); vector_sum == I32F32::from_num(0) } @@ -213,7 +218,7 @@ pub fn sigmoid_safe(input: I32F32, rho: I32F32, kappa: I32F32) -> I32F32 { // Returns a bool vector where an item is true if the vector item is in topk values. #[allow(dead_code)] -pub fn is_topk(vector: &[I32F32], k: usize) -> Vec { +pub fn is_topk(vector: &Vec, k: usize) -> Vec { let n: usize = vector.len(); let mut result: Vec = vec![true; n]; if n < k { @@ -229,56 +234,53 @@ pub fn is_topk(vector: &[I32F32], k: usize) -> Vec { // Returns a normalized (sum to 1 except 0) copy of the input vector. #[allow(dead_code)] -pub fn normalize(x: &[I32F32]) -> Vec { +pub fn normalize(x: &Vec) -> Vec { let x_sum: I32F32 = sum(x); - if x_sum != I32F32::from_num(0.0_f32) { + if x_sum != I32F32::from_num(0.0 as f32) { return x.iter().map(|xi| xi / x_sum).collect(); } else { - x.to_vec() + return x.clone(); } } // Normalizes (sum to 1 except 0) the input vector directly in-place. #[allow(dead_code)] -pub fn inplace_normalize(x: &mut [I32F32]) { +pub fn inplace_normalize(x: &mut Vec) { let x_sum: I32F32 = x.iter().sum(); - if x_sum == I32F32::from_num(0.0_f32) { + if x_sum == I32F32::from_num(0.0 as f32) { return; } - #[allow(clippy::needless_range_loop)] for i in 0..x.len() { - x[i] /= x_sum; + x[i] = x[i] / x_sum; } } // Normalizes (sum to 1 except 0) the input vector directly in-place, using the sum arg. #[allow(dead_code)] -pub fn inplace_normalize_using_sum(x: &mut [I32F32], x_sum: I32F32) { - if x_sum == I32F32::from_num(0.0_f32) { +pub fn inplace_normalize_using_sum(x: &mut Vec, x_sum: I32F32) { + if x_sum == I32F32::from_num(0.0 as f32) { return; } - #[allow(clippy::needless_range_loop)] for i in 0..x.len() { - x[i] /= x_sum; + x[i] = x[i] / x_sum; } } // Normalizes (sum to 1 except 0) the I64F64 input vector directly in-place. #[allow(dead_code)] -pub fn inplace_normalize_64(x: &mut [I64F64]) { +pub fn inplace_normalize_64(x: &mut Vec) { let x_sum: I64F64 = x.iter().sum(); if x_sum == I64F64::from_num(0) { return; } - #[allow(clippy::needless_range_loop)] for i in 0..x.len() { - x[i] /= x_sum; + x[i] = x[i] / x_sum; } } /// Returns x / y for input vectors x and y, if y == 0 return 0. #[allow(dead_code)] -pub fn vecdiv(x: &[I32F32], y: &[I32F32]) -> Vec { +pub fn vecdiv(x: &Vec, y: &Vec) -> Vec { assert_eq!(x.len(), y.len()); let n = x.len(); let mut result: Vec = vec![I32F32::from_num(0); n]; @@ -292,11 +294,10 @@ pub fn vecdiv(x: &[I32F32], y: &[I32F32]) -> Vec { // Normalizes (sum to 1 except 0) each row (dim=0) of a matrix in-place. #[allow(dead_code)] -pub fn inplace_row_normalize(x: &mut [Vec]) { - #[allow(clippy::needless_range_loop)] +pub fn inplace_row_normalize(x: &mut Vec>) { for i in 0..x.len() { let row_sum: I32F32 = x[i].iter().sum(); - if row_sum > I32F32::from_num(0.0_f32) { + if row_sum > I32F32::from_num(0.0 as f32) { x[i].iter_mut() .for_each(|x_ij: &mut I32F32| *x_ij /= row_sum); } @@ -305,7 +306,7 @@ pub fn inplace_row_normalize(x: &mut [Vec]) { // Normalizes (sum to 1 except 0) each row (dim=0) of a sparse matrix in-place. #[allow(dead_code)] -pub fn inplace_row_normalize_sparse(sparse_matrix: &mut [Vec<(u16, I32F32)>]) { +pub fn inplace_row_normalize_sparse(sparse_matrix: &mut Vec>) { for sparse_row in sparse_matrix.iter_mut() { let row_sum: I32F32 = sparse_row.iter().map(|(_j, value)| *value).sum(); if row_sum > I32F32::from_num(0.0) { @@ -318,11 +319,11 @@ pub fn inplace_row_normalize_sparse(sparse_matrix: &mut [Vec<(u16, I32F32)>]) { // Sum across each row (dim=0) of a matrix. #[allow(dead_code)] -pub fn row_sum(x: &[Vec]) -> Vec { - if x.is_empty() { +pub fn row_sum(x: &Vec>) -> Vec { + if x.len() == 0 { return vec![]; } - if x[0].is_empty() { + if x[0].len() == 0 { return vec![]; } let rows = x.len(); @@ -337,7 +338,7 @@ pub fn row_sum(x: &[Vec]) -> Vec { // Sum across each row (dim=0) of a sparse matrix. #[allow(dead_code)] -pub fn row_sum_sparse(sparse_matrix: &[Vec<(u16, I32F32)>]) -> Vec { +pub fn row_sum_sparse(sparse_matrix: &Vec>) -> Vec { let rows = sparse_matrix.len(); let mut result: Vec = vec![I32F32::from_num(0); rows]; for (i, sparse_row) in sparse_matrix.iter().enumerate() { @@ -350,19 +351,17 @@ pub fn row_sum_sparse(sparse_matrix: &[Vec<(u16, I32F32)>]) -> Vec { // Sum across each column (dim=1) of a matrix. #[allow(dead_code)] -pub fn col_sum(x: &[Vec]) -> Vec { - if x.is_empty() { +pub fn col_sum(x: &Vec>) -> Vec { + if x.len() == 0 { return vec![]; } - if x[0].is_empty() { + if x[0].len() == 0 { return vec![]; } let cols = x[0].len(); let mut result: Vec = vec![I32F32::from_num(0); cols]; - #[allow(clippy::needless_range_loop)] for i in 0..x.len() { assert_eq!(x[i].len(), cols); - #[allow(clippy::needless_range_loop)] for j in 0..cols { result[j] += x[i][j]; } @@ -372,7 +371,7 @@ pub fn col_sum(x: &[Vec]) -> Vec { // Sum across each column (dim=1) of a sparse matrix. #[allow(dead_code)] -pub fn col_sum_sparse(sparse_matrix: &[Vec<(u16, I32F32)>], columns: u16) -> Vec { +pub fn col_sum_sparse(sparse_matrix: &Vec>, columns: u16) -> Vec { let mut result: Vec = vec![I32F32::from_num(0); columns as usize]; for sparse_row in sparse_matrix.iter() { for (j, value) in sparse_row.iter() { @@ -384,7 +383,7 @@ pub fn col_sum_sparse(sparse_matrix: &[Vec<(u16, I32F32)>], columns: u16) -> Vec // Normalizes (sum to 1 except 0) each column (dim=1) of a sparse matrix in-place. #[allow(dead_code)] -pub fn inplace_col_normalize_sparse(sparse_matrix: &mut [Vec<(u16, I32F32)>], columns: u16) { +pub fn inplace_col_normalize_sparse(sparse_matrix: &mut Vec>, columns: u16) { let mut col_sum: Vec = vec![I32F32::from_num(0.0); columns as usize]; // assume square matrix, rows=cols for sparse_row in sparse_matrix.iter() { for (j, value) in sparse_row.iter() { @@ -393,7 +392,7 @@ pub fn inplace_col_normalize_sparse(sparse_matrix: &mut [Vec<(u16, I32F32)>], co } for sparse_row in sparse_matrix.iter_mut() { for (j, value) in sparse_row.iter_mut() { - if col_sum[*j as usize] == I32F32::from_num(0.0_f32) { + if col_sum[*j as usize] == I32F32::from_num(0.0 as f32) { continue; } *value /= col_sum[*j as usize]; @@ -403,29 +402,25 @@ pub fn inplace_col_normalize_sparse(sparse_matrix: &mut [Vec<(u16, I32F32)>], co // Normalizes (sum to 1 except 0) each column (dim=1) of a matrix in-place. #[allow(dead_code)] -pub fn inplace_col_normalize(x: &mut [Vec]) { - if x.is_empty() { +pub fn inplace_col_normalize(x: &mut Vec>) { + if x.len() == 0 { return; } - if x[0].is_empty() { + if x[0].len() == 0 { return; } let cols = x[0].len(); let mut col_sum: Vec = vec![I32F32::from_num(0.0); cols]; - #[allow(clippy::needless_range_loop)] for i in 0..x.len() { assert_eq!(x[i].len(), cols); - #[allow(clippy::needless_range_loop)] for j in 0..cols { col_sum[j] += x[i][j]; } } - #[allow(clippy::needless_range_loop)] for j in 0..cols { - if col_sum[j] == I32F32::from_num(0.0_f32) { + if col_sum[j] == I32F32::from_num(0.0 as f32) { continue; } - #[allow(clippy::needless_range_loop)] for i in 0..x.len() { x[i][j] /= col_sum[j]; } @@ -434,7 +429,7 @@ pub fn inplace_col_normalize(x: &mut [Vec]) { // Max-upscale each column (dim=1) of a sparse matrix in-place. #[allow(dead_code)] -pub fn inplace_col_max_upscale_sparse(sparse_matrix: &mut [Vec<(u16, I32F32)>], columns: u16) { +pub fn inplace_col_max_upscale_sparse(sparse_matrix: &mut Vec>, columns: u16) { let mut col_max: Vec = vec![I32F32::from_num(0.0); columns as usize]; // assume square matrix, rows=cols for sparse_row in sparse_matrix.iter() { for (j, value) in sparse_row.iter() { @@ -445,7 +440,7 @@ pub fn inplace_col_max_upscale_sparse(sparse_matrix: &mut [Vec<(u16, I32F32)>], } for sparse_row in sparse_matrix.iter_mut() { for (j, value) in sparse_row.iter_mut() { - if col_max[*j as usize] == I32F32::from_num(0.0_f32) { + if col_max[*j as usize] == I32F32::from_num(0.0 as f32) { continue; } *value /= col_max[*j as usize]; @@ -455,17 +450,15 @@ pub fn inplace_col_max_upscale_sparse(sparse_matrix: &mut [Vec<(u16, I32F32)>], // Max-upscale each column (dim=1) of a matrix in-place. #[allow(dead_code)] -pub fn inplace_col_max_upscale(x: &mut [Vec]) { - if x.is_empty() { +pub fn inplace_col_max_upscale(x: &mut Vec>) { + if x.len() == 0 { return; } - if x[0].is_empty() { + if x[0].len() == 0 { return; } let cols = x[0].len(); let mut col_max: Vec = vec![I32F32::from_num(0.0); cols]; - - #[allow(clippy::needless_range_loop)] for i in 0..x.len() { assert_eq!(x[i].len(), cols); for j in 0..cols { @@ -474,14 +467,10 @@ pub fn inplace_col_max_upscale(x: &mut [Vec]) { } } } - - #[allow(clippy::needless_range_loop)] for j in 0..cols { - if col_max[j] == I32F32::from_num(0.0_f32) { + if col_max[j] == I32F32::from_num(0.0 as f32) { continue; } - - #[allow(clippy::needless_range_loop)] for i in 0..x.len() { x[i][j] /= col_max[j]; } @@ -490,8 +479,8 @@ pub fn inplace_col_max_upscale(x: &mut [Vec]) { // Apply mask to vector, mask=true will mask out, i.e. set to 0. #[allow(dead_code)] -pub fn inplace_mask_vector(mask: &[bool], vector: &mut [I32F32]) { - if mask.is_empty() { +pub fn inplace_mask_vector(mask: &Vec, vector: &mut Vec) { + if mask.len() == 0 { return; } assert_eq!(mask.len(), vector.len()); @@ -505,11 +494,11 @@ pub fn inplace_mask_vector(mask: &[bool], vector: &mut [I32F32]) { // Apply mask to matrix, mask=true will mask out, i.e. set to 0. #[allow(dead_code)] -pub fn inplace_mask_matrix(mask: &[Vec], matrix: &mut [Vec]) { - if mask.is_empty() { +pub fn inplace_mask_matrix(mask: &Vec>, matrix: &mut Vec>) { + if mask.len() == 0 { return; } - if mask[0].is_empty() { + if mask[0].len() == 0 { return; } assert_eq!(mask.len(), matrix.len()); @@ -525,7 +514,7 @@ pub fn inplace_mask_matrix(mask: &[Vec], matrix: &mut [Vec]) { // Apply row mask to matrix, mask=true will mask out, i.e. set to 0. #[allow(dead_code)] -pub fn inplace_mask_rows(mask: &[bool], matrix: &mut [Vec]) { +pub fn inplace_mask_rows(mask: &Vec, matrix: &mut Vec>) { let rows = matrix.len(); if rows == 0 { return; @@ -542,16 +531,15 @@ pub fn inplace_mask_rows(mask: &[bool], matrix: &mut [Vec]) { // Mask out the diagonal of the input matrix in-place. #[allow(dead_code)] -pub fn inplace_mask_diag(matrix: &mut [Vec]) { - if matrix.is_empty() { +pub fn inplace_mask_diag(matrix: &mut Vec>) { + if matrix.len() == 0 { return; } - if matrix[0].is_empty() { + if matrix[0].len() == 0 { return; } assert_eq!(matrix.len(), matrix[0].len()); let zero: I32F32 = I32F32::from_num(0.0); - #[allow(clippy::needless_range_loop)] for i in 0..matrix.len() { matrix[i][i] = zero; } @@ -560,8 +548,8 @@ pub fn inplace_mask_diag(matrix: &mut [Vec]) { // Return a new sparse matrix that replaces masked rows with an empty vector placeholder. #[allow(dead_code)] pub fn mask_rows_sparse( - mask: &[bool], - sparse_matrix: &[Vec<(u16, I32F32)>], + mask: &Vec, + sparse_matrix: &Vec>, ) -> Vec> { let n: usize = sparse_matrix.len(); assert_eq!(n, mask.len()); @@ -576,7 +564,7 @@ pub fn mask_rows_sparse( // Return a new sparse matrix with a masked out diagonal of input sparse matrix. #[allow(dead_code)] -pub fn mask_diag_sparse(sparse_matrix: &[Vec<(u16, I32F32)>]) -> Vec> { +pub fn mask_diag_sparse(sparse_matrix: &Vec>) -> Vec> { let n: usize = sparse_matrix.len(); let mut result: Vec> = vec![vec![]; n]; for (i, sparse_row) in sparse_matrix.iter().enumerate() { @@ -592,9 +580,9 @@ pub fn mask_diag_sparse(sparse_matrix: &[Vec<(u16, I32F32)>]) -> Vec], - first_vector: &[u64], - second_vector: &[u64], + sparse_matrix: &Vec>, + first_vector: &Vec, + second_vector: &Vec, mask_fn: &dyn Fn(u64, u64) -> bool, ) -> Vec> { let n: usize = sparse_matrix.len(); @@ -611,11 +599,11 @@ pub fn vec_mask_sparse_matrix( // Row-wise matrix-vector hadamard product. #[allow(dead_code)] -pub fn row_hadamard(matrix: &[Vec], vector: &[I32F32]) -> Vec> { - if matrix.is_empty() { +pub fn row_hadamard(matrix: &Vec>, vector: &Vec) -> Vec> { + if matrix.len() == 0 { return vec![vec![]]; } - if matrix[0].is_empty() { + if matrix[0].len() == 0 { return vec![vec![]]; } let mut result: Vec> = @@ -631,10 +619,10 @@ pub fn row_hadamard(matrix: &[Vec], vector: &[I32F32]) -> Vec], - vector: &[I32F32], + sparse_matrix: &Vec>, + vector: &Vec, ) -> Vec> { - let mut result: Vec> = sparse_matrix.to_vec(); + let mut result: Vec> = sparse_matrix.clone(); for (i, sparse_row) in result.iter_mut().enumerate() { for (_j, value) in sparse_row.iter_mut() { *value *= vector[i]; @@ -645,18 +633,16 @@ pub fn row_hadamard_sparse( // Row-wise matrix-vector product, column-wise sum: result_j = SUM(i) vector_i * matrix_ij. #[allow(dead_code)] -pub fn matmul(matrix: &[Vec], vector: &[I32F32]) -> Vec { - if matrix.is_empty() { +pub fn matmul(matrix: &Vec>, vector: &Vec) -> Vec { + if matrix.len() == 0 { return vec![]; } - if matrix[0].is_empty() { + if matrix[0].len() == 0 { return vec![]; } assert!(matrix.len() == vector.len()); let mut result: Vec = vec![I32F32::from_num(0.0); matrix[0].len()]; - #[allow(clippy::needless_range_loop)] for i in 0..matrix.len() { - #[allow(clippy::needless_range_loop)] for j in 0..matrix[i].len() { // Compute ranks: r_j = SUM(i) w_ij * s_i // Compute trust scores: t_j = SUM(i) w_ij * s_i @@ -669,18 +655,16 @@ pub fn matmul(matrix: &[Vec], vector: &[I32F32]) -> Vec { // Row-wise matrix-vector product, column-wise sum: result_j = SUM(i) vector_i * matrix_ij. #[allow(dead_code)] -pub fn matmul_64(matrix: &[Vec], vector: &[I64F64]) -> Vec { - if matrix.is_empty() { +pub fn matmul_64(matrix: &Vec>, vector: &Vec) -> Vec { + if matrix.len() == 0 { return vec![]; } - if matrix[0].is_empty() { + if matrix[0].len() == 0 { return vec![]; } assert!(matrix.len() == vector.len()); let mut result: Vec = vec![I64F64::from_num(0.0); matrix[0].len()]; - #[allow(clippy::needless_range_loop)] for i in 0..matrix.len() { - #[allow(clippy::needless_range_loop)] for j in 0..matrix[i].len() { // Compute ranks: r_j = SUM(i) w_ij * s_i // Compute trust scores: t_j = SUM(i) w_ij * s_i @@ -693,18 +677,16 @@ pub fn matmul_64(matrix: &[Vec], vector: &[I64F64]) -> Vec { // Column-wise matrix-vector product, row-wise sum: result_i = SUM(j) vector_j * matrix_ij. #[allow(dead_code)] -pub fn matmul_transpose(matrix: &[Vec], vector: &[I32F32]) -> Vec { - if matrix.is_empty() { +pub fn matmul_transpose(matrix: &Vec>, vector: &Vec) -> Vec { + if matrix.len() == 0 { return vec![]; } - if matrix[0].is_empty() { + if matrix[0].len() == 0 { return vec![]; } assert!(matrix[0].len() == vector.len()); let mut result: Vec = vec![I32F32::from_num(0.0); matrix.len()]; - #[allow(clippy::needless_range_loop)] for i in 0..matrix.len() { - #[allow(clippy::needless_range_loop)] for j in 0..matrix[i].len() { // Compute dividends: d_j = SUM(i) b_ji * inc_i // result_j = SUM(i) vector_i * matrix_ji @@ -718,8 +700,8 @@ pub fn matmul_transpose(matrix: &[Vec], vector: &[I32F32]) -> Vec], - vector: &[I32F32], + sparse_matrix: &Vec>, + vector: &Vec, columns: u16, ) -> Vec { let mut result: Vec = vec![I32F32::from_num(0.0); columns as usize]; @@ -737,8 +719,8 @@ pub fn matmul_sparse( // Column-wise sparse_matrix-vector product, row-wise sum: result_i = SUM(j) vector_j * matrix_ij. #[allow(dead_code)] pub fn matmul_transpose_sparse( - sparse_matrix: &[Vec<(u16, I32F32)>], - vector: &[I32F32], + sparse_matrix: &Vec>, + vector: &Vec, ) -> Vec { let mut result: Vec = vec![I32F32::from_num(0.0); sparse_matrix.len()]; for (i, sparse_row) in sparse_matrix.iter().enumerate() { @@ -754,8 +736,7 @@ pub fn matmul_transpose_sparse( // Set inplace matrix values above column threshold to threshold value. #[allow(dead_code)] -pub fn inplace_col_clip(x: &mut [Vec], col_threshold: &[I32F32]) { - #[allow(clippy::needless_range_loop)] +pub fn inplace_col_clip(x: &mut Vec>, col_threshold: &Vec) { for i in 0..x.len() { for j in 0..x[i].len() { if x[i][j] > col_threshold[j] { @@ -768,8 +749,8 @@ pub fn inplace_col_clip(x: &mut [Vec], col_threshold: &[I32F32]) { // Return sparse matrix with values above column threshold set to threshold value. #[allow(dead_code)] pub fn col_clip_sparse( - sparse_matrix: &[Vec<(u16, I32F32)>], - col_threshold: &[I32F32], + sparse_matrix: &Vec>, + col_threshold: &Vec, ) -> Vec> { let mut result: Vec> = vec![vec![]; sparse_matrix.len()]; for (i, sparse_row) in sparse_matrix.iter().enumerate() { @@ -789,13 +770,13 @@ pub fn col_clip_sparse( // Set matrix values below threshold to lower, and equal-above to upper. #[allow(dead_code)] pub fn clip( - x: &[Vec], + x: &Vec>, threshold: I32F32, upper: I32F32, lower: I32F32, ) -> Vec> { // Check Nill length. - if x.is_empty() { + if x.len() == 0 { return vec![vec![]]; } let mut result: Vec> = vec![vec![lower; x[0].len()]; x.len()]; @@ -811,8 +792,7 @@ pub fn clip( // Set inplace matrix values below threshold to lower, and equal-above to upper. #[allow(dead_code)] -pub fn inplace_clip(x: &mut [Vec], threshold: I32F32, upper: I32F32, lower: I32F32) { - #[allow(clippy::needless_range_loop)] +pub fn inplace_clip(x: &mut Vec>, threshold: I32F32, upper: I32F32, lower: I32F32) { for i in 0..x.len() { for j in 0..x[i].len() { if x[i][j] >= threshold { @@ -828,7 +808,7 @@ pub fn inplace_clip(x: &mut [Vec], threshold: I32F32, upper: I32F32, low // Does not add missing elements (0 value assumed) when lower!=0. #[allow(dead_code)] pub fn clip_sparse( - sparse_matrix: &[Vec<(u16, I32F32)>], + sparse_matrix: &Vec>, threshold: I32F32, upper: I32F32, lower: I32F32, @@ -851,13 +831,13 @@ pub fn clip_sparse( // Assumes relatively random score order for efficiency, typically less than O(nlogn) complexity. // // # Args: -// * 'stake': ( &[I32F32] ): +// * 'stake': ( &Vec ): // - stake, assumed to be normalized. // -// * 'score': ( &[I32F32] ): +// * 'score': ( &Vec ): // - score for which median is sought, 0 <= score <= 1 // -// * 'partition_idx' ( &[usize] ): +// * 'partition_idx' ( &Vec ): // - indices as input partition // // * 'minority' ( I32F32 ): @@ -875,9 +855,9 @@ pub fn clip_sparse( // #[allow(dead_code)] pub fn weighted_median( - stake: &[I32F32], - score: &[I32F32], - partition_idx: &[usize], + stake: &Vec, + score: &Vec, + partition_idx: &Vec, minority: I32F32, partition_lo: I32F32, partition_hi: I32F32, @@ -910,7 +890,7 @@ pub fn weighted_median( } if (partition_lo + lo_stake <= minority) && (minority < partition_hi - hi_stake) { return pivot; - } else if (minority < partition_lo + lo_stake) && (!lower.is_empty()) { + } else if (minority < partition_lo + lo_stake) && (lower.len() > 0) { return weighted_median( stake, score, @@ -919,7 +899,7 @@ pub fn weighted_median( partition_lo, partition_lo + lo_stake, ); - } else if (partition_hi - hi_stake <= minority) && (!upper.is_empty()) { + } else if (partition_hi - hi_stake <= minority) && (upper.len() > 0) { return weighted_median( stake, score, @@ -935,16 +915,14 @@ pub fn weighted_median( /// Column-wise weighted median, e.g. stake-weighted median scores per server (column) over all validators (rows). #[allow(dead_code)] pub fn weighted_median_col( - stake: &[I32F32], - score: &[Vec], + stake: &Vec, + score: &Vec>, majority: I32F32, ) -> Vec { let rows = stake.len(); let columns = score[0].len(); let zero: I32F32 = I32F32::from_num(0); let mut median: Vec = vec![zero; columns]; - - #[allow(clippy::needless_range_loop)] for c in 0..columns { let mut use_stake: Vec = vec![]; let mut use_score: Vec = vec![]; @@ -955,14 +933,14 @@ pub fn weighted_median_col( use_score.push(score[r][c]); } } - if !use_stake.is_empty() { + if use_stake.len() > 0 { inplace_normalize(&mut use_stake); let stake_sum: I32F32 = use_stake.iter().sum(); let minority: I32F32 = stake_sum - majority; median[c] = weighted_median( &use_stake, &use_score, - (0..use_stake.len()).collect::>().as_slice(), + &(0..use_stake.len()).collect(), minority, zero, stake_sum, @@ -975,8 +953,8 @@ pub fn weighted_median_col( /// Column-wise weighted median, e.g. stake-weighted median scores per server (column) over all validators (rows). #[allow(dead_code)] pub fn weighted_median_col_sparse( - stake: &[I32F32], - score: &[Vec<(u16, I32F32)>], + stake: &Vec, + score: &Vec>, columns: u16, majority: I32F32, ) -> Vec { @@ -1014,12 +992,12 @@ pub fn weighted_median_col_sparse( // Element-wise product of two matrices. #[allow(dead_code)] -pub fn hadamard(mat1: &[Vec], mat2: &[Vec]) -> Vec> { +pub fn hadamard(mat1: &Vec>, mat2: &Vec>) -> Vec> { assert!(mat1.len() == mat2.len()); - if mat1.is_empty() { + if mat1.len() == 0 { return vec![vec![]; 1]; } - if mat1[0].is_empty() { + if mat1[0].len() == 0 { return vec![vec![]; 1]; } let mut result: Vec> = vec![vec![I32F32::from_num(0); mat1[0].len()]; mat1.len()]; @@ -1035,8 +1013,8 @@ pub fn hadamard(mat1: &[Vec], mat2: &[Vec]) -> Vec> // Element-wise product of two sparse matrices. #[allow(dead_code)] pub fn hadamard_sparse( - mat1: &[Vec<(u16, I32F32)>], - mat2: &[Vec<(u16, I32F32)>], + mat1: &Vec>, + mat2: &Vec>, columns: u16, ) -> Vec> { assert!(mat1.len() == mat2.len()); @@ -1066,11 +1044,11 @@ pub fn hadamard_sparse( // `alpha` is the EMA coefficient, how much to add of the new observation, typically small, // higher alpha discounts older observations faster. #[allow(dead_code)] -pub fn mat_ema(new: &[Vec], old: &[Vec], alpha: I32F32) -> Vec> { - if new.is_empty() { +pub fn mat_ema(new: &Vec>, old: &Vec>, alpha: I32F32) -> Vec> { + if new.len() == 0 { return vec![vec![]; 1]; } - if new[0].is_empty() { + if new[0].len() == 0 { return vec![vec![]; 1]; } let one_minus_alpha: I32F32 = I32F32::from_num(1.0) - alpha; @@ -1090,8 +1068,8 @@ pub fn mat_ema(new: &[Vec], old: &[Vec], alpha: I32F32) -> Vec], - old: &[Vec<(u16, I32F32)>], + new: &Vec>, + old: &Vec>, alpha: I32F32, ) -> Vec> { assert!(new.len() == old.len()); @@ -1118,12 +1096,12 @@ pub fn mat_ema_sparse( // Return sparse matrix only with elements >= threshold of an input sparse matrix. #[allow(dead_code)] -pub fn sparse_threshold(w: &[Vec<(u16, I32F32)>], threshold: I32F32) -> Vec> { +pub fn sparse_threshold(w: &Vec>, threshold: I32F32) -> Vec> { let mut sparse_threshold_result: Vec> = vec![vec![]; w.len()]; for (uid_i, weights_i) in w.iter().enumerate() { for (uid_j, weight_ij) in weights_i.iter() { if *weight_ij >= threshold { - sparse_threshold_result[uid_i].push((*uid_j, *weight_ij)); + sparse_threshold_result[uid_i as usize].push((*uid_j, *weight_ij)); } } } @@ -1134,7 +1112,8 @@ pub fn sparse_threshold(w: &[Vec<(u16, I32F32)>], threshold: I32F32) -> Vec, vb: &Vec, epsilon: I32F32) { assert!(va.len() == vb.len()); for i in 0..va.len() { assert_float_compare(va[i], vb[i], epsilon); } } - fn assert_vec_compare_64(va: &[I64F64], vb: &[I64F64], epsilon: I64F64) { + fn assert_vec_compare_64(va: &Vec, vb: &Vec, epsilon: I64F64) { assert!(va.len() == vb.len()); for i in 0..va.len() { assert_float_compare_64(va[i], vb[i], epsilon); } } - fn assert_vec_compare_u16(va: &[u16], vb: &[u16]) { + fn assert_vec_compare_u16(va: &Vec, vb: &Vec) { assert!(va.len() == vb.len()); for i in 0..va.len() { assert_eq!(va[i], vb[i]); } } - fn assert_mat_compare(ma: &[Vec], mb: &[Vec], epsilon: I32F32) { + fn assert_mat_compare(ma: &Vec>, mb: &Vec>, epsilon: I32F32) { assert!(ma.len() == mb.len()); for row in 0..ma.len() { assert!(ma[row].len() == mb[row].len()); @@ -1176,8 +1155,8 @@ mod tests { } fn assert_sparse_mat_compare( - ma: &[Vec<(u16, I32F32)>], - mb: &[Vec<(u16, I32F32)>], + ma: &Vec>, + mb: &Vec>, epsilon: I32F32, ) { assert!(ma.len() == mb.len()); @@ -1190,41 +1169,41 @@ mod tests { } } - fn vec_to_fixed(vector: &[f32]) -> Vec { + fn vec_to_fixed(vector: &Vec) -> Vec { vector.iter().map(|x| I32F32::from_num(*x)).collect() } #[test] fn test_vec_max_upscale_to_u16() { - let vector: Vec = vec_to_fixed(&[]); + let vector: Vec = vec_to_fixed(&vec![]); let target: Vec = vec![]; let result: Vec = vec_max_upscale_to_u16(&vector); assert_vec_compare_u16(&result, &target); - let vector: Vec = vec_to_fixed(&[0.]); + let vector: Vec = vec_to_fixed(&vec![0.]); let target: Vec = vec![0]; let result: Vec = vec_max_upscale_to_u16(&vector); assert_vec_compare_u16(&result, &target); - let vector: Vec = vec_to_fixed(&[0., 0.]); + let vector: Vec = vec_to_fixed(&vec![0., 0.]); let target: Vec = vec![0, 0]; let result: Vec = vec_max_upscale_to_u16(&vector); assert_vec_compare_u16(&result, &target); - let vector: Vec = vec_to_fixed(&[0., 1.]); + let vector: Vec = vec_to_fixed(&vec![0., 1.]); let target: Vec = vec![0, 65535]; let result: Vec = vec_max_upscale_to_u16(&vector); assert_vec_compare_u16(&result, &target); - let vector: Vec = vec_to_fixed(&[0., 0.000000001]); + let vector: Vec = vec_to_fixed(&vec![0., 0.000000001]); let target: Vec = vec![0, 65535]; let result: Vec = vec_max_upscale_to_u16(&vector); assert_vec_compare_u16(&result, &target); - let vector: Vec = vec_to_fixed(&[0., 0.000016, 1.]); + let vector: Vec = vec_to_fixed(&vec![0., 0.000016, 1.]); let target: Vec = vec![0, 1, 65535]; let result: Vec = vec_max_upscale_to_u16(&vector); assert_vec_compare_u16(&result, &target); - let vector: Vec = vec_to_fixed(&[0.000000001, 0.000000001]); + let vector: Vec = vec_to_fixed(&vec![0.000000001, 0.000000001]); let target: Vec = vec![65535, 65535]; let result: Vec = vec_max_upscale_to_u16(&vector); assert_vec_compare_u16(&result, &target); - let vector: Vec = vec_to_fixed(&[ + let vector: Vec = vec_to_fixed(&vec![ 0.000001, 0.000006, 0.000007, 0.0001, 0.001, 0.01, 0.1, 0.2, 0.3, 0.4, ]); let target: Vec = vec![0, 1, 1, 16, 164, 1638, 16384, 32768, 49151, 65535]; @@ -1250,15 +1229,15 @@ mod tests { let target: Vec = vec![65535]; let result: Vec = vec_max_upscale_to_u16(&vector); assert_vec_compare_u16(&result, &target); - let vector: Vec = vec_to_fixed(&[0., 1., 65535.]); + let vector: Vec = vec_to_fixed(&vec![0., 1., 65535.]); let target: Vec = vec![0, 1, 65535]; let result: Vec = vec_max_upscale_to_u16(&vector); assert_vec_compare_u16(&result, &target); - let vector: Vec = vec_to_fixed(&[0., 0.5, 1., 1.5, 2., 32768.]); + let vector: Vec = vec_to_fixed(&vec![0., 0.5, 1., 1.5, 2., 32768.]); let target: Vec = vec![0, 1, 2, 3, 4, 65535]; let result: Vec = vec_max_upscale_to_u16(&vector); assert_vec_compare_u16(&result, &target); - let vector: Vec = vec_to_fixed(&[0., 0.5, 1., 1.5, 2., 32768., 32769.]); + let vector: Vec = vec_to_fixed(&vec![0., 0.5, 1., 1.5, 2., 32768., 32769.]); let target: Vec = vec![0, 1, 2, 3, 4, 65533, 65535]; let result: Vec = vec_max_upscale_to_u16(&vector); assert_vec_compare_u16(&result, &target); @@ -1360,7 +1339,7 @@ mod tests { // let prod_96: I96F32 = (I96F32::from_num(max_32) + one) * I96F32::from_num(max_u64); // overflows let _prod_110: I110F18 = I110F18::from_num(max_32) * I110F18::from_num(max_u64); - let bonds_moving_average_val: u64 = 900_000_u64; + let bonds_moving_average_val: u64 = 900_000 as u64; let bonds_moving_average: I64F64 = I64F64::from_num(bonds_moving_average_val) / I64F64::from_num(1_000_000); let alpha: I32F32 = I32F32::from_num(1) - I32F32::from_num(bonds_moving_average); @@ -1464,7 +1443,7 @@ mod tests { } // Reshape vector to matrix with specified number of rows, cast to I32F32. - fn vec_to_mat_fixed(vector: &[f32], rows: usize, transpose: bool) -> Vec> { + fn vec_to_mat_fixed(vector: &Vec, rows: usize, transpose: bool) -> Vec> { assert!( vector.len() % rows == 0, "Vector of len {:?} cannot reshape to {rows} rows.", @@ -1473,15 +1452,15 @@ mod tests { let cols: usize = vector.len() / rows; let mut mat: Vec> = vec![]; if transpose { - for col in 0..cols { + for col in 0..cols as usize { let mut vals: Vec = vec![]; - for row in 0..rows { + for row in 0..rows as usize { vals.push(I32F32::from_num(vector[row * cols + col])); } mat.push(vals); } } else { - for row in 0..rows { + for row in 0..rows as usize { mat.push( vector[row * cols..(row + 1) * cols] .iter() @@ -1514,7 +1493,7 @@ mod tests { // Reshape vector to sparse matrix with specified number of input rows, cast f32 to I32F32. fn vec_to_sparse_mat_fixed( - vector: &[f32], + vector: &Vec, rows: usize, transpose: bool, ) -> Vec> { @@ -1526,9 +1505,9 @@ mod tests { let cols: usize = vector.len() / rows; let mut mat: Vec> = vec![]; if transpose { - for col in 0..cols { + for col in 0..cols as usize { let mut row_vec: Vec<(u16, I32F32)> = vec![]; - for row in 0..rows { + for row in 0..rows as usize { if vector[row * cols + col] > 0. { row_vec.push((row as u16, I32F32::from_num(vector[row * cols + col]))); } @@ -1536,9 +1515,9 @@ mod tests { mat.push(row_vec); } } else { - for row in 0..rows { + for row in 0..rows as usize { let mut row_vec: Vec<(u16, I32F32)> = vec![]; - for col in 0..cols { + for col in 0..cols as usize { if vector[row * cols + col] > 0. { row_vec.push((col as u16, I32F32::from_num(vector[row * cols + col]))); } @@ -1553,10 +1532,13 @@ mod tests { fn test_math_vec_to_sparse_mat_fixed() { let vector: Vec = vec![0., 1., 2., 0., 10., 100.]; let target: Vec> = vec![ - vec![(1_u16, I32F32::from_num(1.)), (2_u16, I32F32::from_num(2.))], vec![ - (1_u16, I32F32::from_num(10.)), - (2_u16, I32F32::from_num(100.)), + (1 as u16, I32F32::from_num(1.)), + (2 as u16, I32F32::from_num(2.)), + ], + vec![ + (1 as u16, I32F32::from_num(10.)), + (2 as u16, I32F32::from_num(100.)), ], ]; let mat = vec_to_sparse_mat_fixed(&vector, 2, false); @@ -1569,12 +1551,12 @@ mod tests { let target: Vec> = vec![ vec![], vec![ - (0_u16, I32F32::from_num(1.)), - (1_u16, I32F32::from_num(10.)), + (0 as u16, I32F32::from_num(1.)), + (1 as u16, I32F32::from_num(10.)), ], vec![ - (0_u16, I32F32::from_num(2.)), - (1_u16, I32F32::from_num(100.)), + (0 as u16, I32F32::from_num(2.)), + (1 as u16, I32F32::from_num(100.)), ], ]; let mat = vec_to_sparse_mat_fixed(&vector, 2, true); @@ -1620,7 +1602,7 @@ mod tests { .iter() .map(|t: &I32F32| sigmoid_safe(*t, I32F32::max_value(), I32F32::max_value())) .collect(); - let target: Vec = vec_to_fixed(&[ + let target: Vec = vec_to_fixed(&vec![ 0.0000000019, 0.0000000019, 0.0000000019, @@ -1634,7 +1616,7 @@ mod tests { .iter() .map(|t: &I32F32| sigmoid_safe(*t, I32F32::min_value(), I32F32::min_value())) .collect(); - let target: Vec = vec_to_fixed(&[ + let target: Vec = vec_to_fixed(&vec![ 0.5, 0.0000000019, 0.0000000019, @@ -1660,7 +1642,7 @@ mod tests { let target: Vec = target.iter().map(|c: &f64| I32F32::from_num(*c)).collect(); assert_eq!(&consensus, &target); let trust: Vec = - vec_to_fixed(&[0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.]); + vec_to_fixed(&vec![0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.]); let consensus: Vec = trust .iter() .map(|t: &I32F32| sigmoid_safe(*t, I32F32::from_num(40), I32F32::from_num(0.5))) @@ -1684,11 +1666,11 @@ mod tests { #[test] fn test_math_is_topk() { - let vector: Vec = vec_to_fixed(&[]); + let vector: Vec = vec_to_fixed(&vec![]); let result = is_topk(&vector, 5); let target: Vec = vec![]; assert_eq!(&result, &target); - let vector: Vec = vec_to_fixed(&[0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]); + let vector: Vec = vec_to_fixed(&vec![0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]); let result = is_topk(&vector, 0); let target: Vec = vec![ false, false, false, false, false, false, false, false, false, false, @@ -1704,25 +1686,26 @@ mod tests { assert_eq!(&result, &target); let result = is_topk(&vector, 100); assert_eq!(&result, &target); - let vector: Vec = vec_to_fixed(&[9., 8., 7., 6., 5., 4., 3., 2., 1., 0.]); + let vector: Vec = vec_to_fixed(&vec![9., 8., 7., 6., 5., 4., 3., 2., 1., 0.]); let result = is_topk(&vector, 5); let target: Vec = vec![ true, true, true, true, true, false, false, false, false, false, ]; assert_eq!(&result, &target); - let vector: Vec = vec_to_fixed(&[9., 0., 8., 1., 7., 2., 6., 3., 5., 4.]); + let vector: Vec = vec_to_fixed(&vec![9., 0., 8., 1., 7., 2., 6., 3., 5., 4.]); let result = is_topk(&vector, 5); let target: Vec = vec![ true, false, true, false, true, false, true, false, true, false, ]; assert_eq!(&result, &target); - let vector: Vec = vec_to_fixed(&[0.9, 0., 0.8, 0.1, 0.7, 0.2, 0.6, 0.3, 0.5, 0.4]); + let vector: Vec = + vec_to_fixed(&vec![0.9, 0., 0.8, 0.1, 0.7, 0.2, 0.6, 0.3, 0.5, 0.4]); let result = is_topk(&vector, 5); let target: Vec = vec![ true, false, true, false, true, false, true, false, true, false, ]; assert_eq!(&result, &target); - let vector: Vec = vec_to_fixed(&[0., 1., 2., 3., 4., 5., 5., 5., 5., 6.]); + let vector: Vec = vec_to_fixed(&vec![0., 1., 2., 3., 4., 5., 5., 5., 5., 6.]); let result = is_topk(&vector, 5); let target: Vec = vec![ false, false, false, false, false, true, true, true, true, true, @@ -1732,16 +1715,16 @@ mod tests { #[test] fn test_math_sum() { - assert!(sum(&[]) == I32F32::from_num(0)); + assert!(sum(&vec![]) == I32F32::from_num(0)); assert!( - sum(&[ + sum(&vec![ I32F32::from_num(1.0), I32F32::from_num(10.0), I32F32::from_num(30.0) ]) == I32F32::from_num(41) ); assert!( - sum(&[ + sum(&vec![ I32F32::from_num(-1.0), I32F32::from_num(10.0), I32F32::from_num(30.0) @@ -1763,7 +1746,7 @@ mod tests { let y: Vec = normalize(&x); assert_vec_compare( &y, - &[ + &vec![ I32F32::from_num(0.0243902437), I32F32::from_num(0.243902439), I32F32::from_num(0.7317073171), @@ -1779,7 +1762,7 @@ mod tests { let y: Vec = normalize(&x); assert_vec_compare( &y, - &[ + &vec![ I32F32::from_num(-0.0256410255), I32F32::from_num(0.2564102563), I32F32::from_num(0.769230769), @@ -1800,7 +1783,7 @@ mod tests { inplace_normalize(&mut x1); assert_vec_compare( &x1, - &[ + &vec![ I32F32::from_num(0.0243902437), I32F32::from_num(0.243902439), I32F32::from_num(0.7317073171), @@ -1815,7 +1798,7 @@ mod tests { inplace_normalize(&mut x2); assert_vec_compare( &x2, - &[ + &vec![ I32F32::from_num(-0.0256410255), I32F32::from_num(0.2564102563), I32F32::from_num(0.769230769), @@ -1835,7 +1818,7 @@ mod tests { inplace_normalize_64(&mut x1); assert_vec_compare_64( &x1, - &[ + &vec![ I64F64::from_num(0.0243902437), I64F64::from_num(0.243902439), I64F64::from_num(0.7317073171), @@ -1850,7 +1833,7 @@ mod tests { inplace_normalize_64(&mut x2); assert_vec_compare_64( &x2, - &[ + &vec![ I64F64::from_num(-0.0256410255), I64F64::from_num(0.2564102563), I64F64::from_num(0.769230769), @@ -1861,18 +1844,18 @@ mod tests { #[test] fn test_math_vecdiv() { - let x: Vec = vec_to_fixed(&[]); - let y: Vec = vec_to_fixed(&[]); - let result: Vec = vec_to_fixed(&[]); + let x: Vec = vec_to_fixed(&vec![]); + let y: Vec = vec_to_fixed(&vec![]); + let result: Vec = vec_to_fixed(&vec![]); assert_eq!(result, vecdiv(&x, &y)); - let x: Vec = vec_to_fixed(&[0., 1., 0., 1.]); - let y: Vec = vec_to_fixed(&[0., 1., 1., 0.]); - let result: Vec = vec_to_fixed(&[0., 1., 0., 0.]); + let x: Vec = vec_to_fixed(&vec![0., 1., 0., 1.]); + let y: Vec = vec_to_fixed(&vec![0., 1., 1., 0.]); + let result: Vec = vec_to_fixed(&vec![0., 1., 0., 0.]); assert_eq!(result, vecdiv(&x, &y)); - let x: Vec = vec_to_fixed(&[1., 1., 10.]); - let y: Vec = vec_to_fixed(&[2., 3., 2.]); + let x: Vec = vec_to_fixed(&vec![1., 1., 10.]); + let y: Vec = vec_to_fixed(&vec![2., 3., 2.]); let result: Vec = vec![fixed(1.) / fixed(2.), fixed(1.) / fixed(3.), fixed(5.)]; assert_eq!(result, vecdiv(&x, &y)); } @@ -2033,18 +2016,18 @@ mod tests { #[test] fn test_math_inplace_mask_vector() { let mask: Vec = vec![false, false, false]; - let mut vector: Vec = vec_to_fixed(&[0., 1., 2.]); - let target: Vec = vec_to_fixed(&[0., 1., 2.]); + let mut vector: Vec = vec_to_fixed(&vec![0., 1., 2.]); + let target: Vec = vec_to_fixed(&vec![0., 1., 2.]); inplace_mask_vector(&mask, &mut vector); assert_vec_compare(&vector, &target, I32F32::from_num(0)); let mask: Vec = vec![false, true, false]; - let mut vector: Vec = vec_to_fixed(&[0., 1., 2.]); - let target: Vec = vec_to_fixed(&[0., 0., 2.]); + let mut vector: Vec = vec_to_fixed(&vec![0., 1., 2.]); + let target: Vec = vec_to_fixed(&vec![0., 0., 2.]); inplace_mask_vector(&mask, &mut vector); assert_vec_compare(&vector, &target, I32F32::from_num(0)); let mask: Vec = vec![true, true, true]; - let mut vector: Vec = vec_to_fixed(&[0., 1., 2.]); - let target: Vec = vec_to_fixed(&[0., 0., 0.]); + let mut vector: Vec = vec_to_fixed(&vec![0., 1., 2.]); + let target: Vec = vec_to_fixed(&vec![0., 0., 0.]); inplace_mask_vector(&mask, &mut vector); assert_vec_compare(&vector, &target, I32F32::from_num(0)); } @@ -2256,7 +2239,7 @@ mod tests { #[test] fn test_math_row_hadamard() { - let vector: Vec = vec_to_fixed(&[1., 2., 3., 4.]); + let vector: Vec = vec_to_fixed(&vec![1., 2., 3., 4.]); let matrix: Vec = vec![1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.]; let matrix = vec_to_mat_fixed(&matrix, 4, false); let result = row_hadamard(&matrix, &vector); @@ -2267,7 +2250,7 @@ mod tests { #[test] fn test_math_row_hadamard_sparse() { - let vector: Vec = vec_to_fixed(&[1., 2., 3., 4.]); + let vector: Vec = vec_to_fixed(&vec![1., 2., 3., 4.]); let matrix: Vec = vec![1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = row_hadamard_sparse(&matrix, &vector); @@ -2293,7 +2276,7 @@ mod tests { let matrix: Vec = vec![1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.]; let matrix = vec_to_mat_fixed(&matrix, 4, false); let result = row_sum(&matrix); - let target: Vec = vec_to_fixed(&[6., 15., 24., 33.]); + let target: Vec = vec_to_fixed(&vec![6., 15., 24., 33.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); } @@ -2302,22 +2285,22 @@ mod tests { let matrix: Vec = vec![1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = row_sum_sparse(&matrix); - let target: Vec = vec_to_fixed(&[6., 15., 24., 33.]); + let target: Vec = vec_to_fixed(&vec![6., 15., 24., 33.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); let matrix: Vec = vec![0., 2., 3., 4., 0., 6., 7., 8., 0., 10., 11., 12.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = row_sum_sparse(&matrix); - let target: Vec = vec_to_fixed(&[5., 10., 15., 33.]); + let target: Vec = vec_to_fixed(&vec![5., 10., 15., 33.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); let matrix: Vec = vec![1., 2., 3., 0., 0., 0., 7., 8., 9., 10., 11., 12.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = row_sum_sparse(&matrix); - let target: Vec = vec_to_fixed(&[6., 0., 24., 33.]); + let target: Vec = vec_to_fixed(&vec![6., 0., 24., 33.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); let matrix: Vec = vec![0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = row_sum_sparse(&matrix); - let target: Vec = vec_to_fixed(&[0., 0., 0., 0.]); + let target: Vec = vec_to_fixed(&vec![0., 0., 0., 0.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); } @@ -2326,7 +2309,7 @@ mod tests { let matrix: Vec = vec![1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.]; let matrix = vec_to_mat_fixed(&matrix, 4, false); let result = col_sum(&matrix); - let target: Vec = vec_to_fixed(&[22., 26., 30.]); + let target: Vec = vec_to_fixed(&vec![22., 26., 30.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); } @@ -2335,88 +2318,88 @@ mod tests { let matrix: Vec = vec![1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = col_sum_sparse(&matrix, 3); - let target: Vec = vec_to_fixed(&[22., 26., 30.]); + let target: Vec = vec_to_fixed(&vec![22., 26., 30.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); let matrix: Vec = vec![0., 2., 3., 4., 0., 6., 7., 8., 0., 10., 11., 12.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = col_sum_sparse(&matrix, 3); - let target: Vec = vec_to_fixed(&[21., 21., 21.]); + let target: Vec = vec_to_fixed(&vec![21., 21., 21.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); let matrix: Vec = vec![1., 0., 3., 4., 0., 6., 7., 0., 9., 10., 0., 12.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = col_sum_sparse(&matrix, 3); - let target: Vec = vec_to_fixed(&[22., 0., 30.]); + let target: Vec = vec_to_fixed(&vec![22., 0., 30.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); let matrix: Vec = vec![0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = col_sum_sparse(&matrix, 3); - let target: Vec = vec_to_fixed(&[0., 0., 0.]); + let target: Vec = vec_to_fixed(&vec![0., 0., 0.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); } #[test] fn test_math_matmul() { - let vector: Vec = vec_to_fixed(&[1., 2., 3., 4.]); + let vector: Vec = vec_to_fixed(&vec![1., 2., 3., 4.]); let matrix: Vec = vec![1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.]; let matrix = vec_to_mat_fixed(&matrix, 4, false); let result = matmul(&matrix, &vector); - let target: Vec = vec_to_fixed(&[70., 80., 90.]); + let target: Vec = vec_to_fixed(&vec![70., 80., 90.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); } #[test] fn test_math_matmul_transpose() { - let vector: Vec = vec_to_fixed(&[1., 2., 3.]); + let vector: Vec = vec_to_fixed(&vec![1., 2., 3.]); let matrix: Vec = vec![1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.]; let matrix = vec_to_mat_fixed(&matrix, 4, false); let result = matmul_transpose(&matrix, &vector); - let target: Vec = vec_to_fixed(&[14., 32., 50., 68.]); + let target: Vec = vec_to_fixed(&vec![14., 32., 50., 68.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); } #[test] fn test_math_sparse_matmul() { - let vector: Vec = vec_to_fixed(&[1., 2., 3., 4.]); + let vector: Vec = vec_to_fixed(&vec![1., 2., 3., 4.]); let matrix: Vec = vec![1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = matmul_sparse(&matrix, &vector, 3); - let target: Vec = vec_to_fixed(&[70., 80., 90.]); + let target: Vec = vec_to_fixed(&vec![70., 80., 90.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); let matrix: Vec = vec![0., 2., 3., 4., 0., 6., 7., 8., 0., 10., 11., 12.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = matmul_sparse(&matrix, &vector, 3); - let target: Vec = vec_to_fixed(&[69., 70., 63.]); + let target: Vec = vec_to_fixed(&vec![69., 70., 63.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); let matrix: Vec = vec![0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = matmul_sparse(&matrix, &vector, 3); - let target: Vec = vec_to_fixed(&[0., 0., 0.]); + let target: Vec = vec_to_fixed(&vec![0., 0., 0.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); } #[test] fn test_math_sparse_matmul_transpose() { - let vector: Vec = vec_to_fixed(&[1., 2., 3.]); + let vector: Vec = vec_to_fixed(&vec![1., 2., 3.]); let matrix: Vec = vec![1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = matmul_transpose_sparse(&matrix, &vector); - let target: Vec = vec_to_fixed(&[14., 32., 50., 68.]); + let target: Vec = vec_to_fixed(&vec![14., 32., 50., 68.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); let matrix: Vec = vec![0., 2., 3., 4., 0., 6., 7., 8., 0., 10., 11., 12.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = matmul_transpose_sparse(&matrix, &vector); - let target: Vec = vec_to_fixed(&[13., 22., 23., 68.]); + let target: Vec = vec_to_fixed(&vec![13., 22., 23., 68.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); let matrix: Vec = vec![0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let result = matmul_transpose_sparse(&matrix, &vector); - let target: Vec = vec_to_fixed(&[0., 0., 0., 0.]); + let target: Vec = vec_to_fixed(&vec![0., 0., 0., 0.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); } #[test] fn test_math_inplace_col_clip() { - let vector: Vec = vec_to_fixed(&[0., 5., 12.]); + let vector: Vec = vec_to_fixed(&vec![0., 5., 12.]); let matrix: Vec = vec![0., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.]; let mut matrix = vec_to_mat_fixed(&matrix, 4, false); let target: Vec = vec![0., 2., 3., 0., 5., 6., 0., 5., 9., 0., 5., 12.]; @@ -2427,7 +2410,7 @@ mod tests { #[test] fn test_math_col_clip_sparse() { - let vector: Vec = vec_to_fixed(&[0., 5., 12.]); + let vector: Vec = vec_to_fixed(&vec![0., 5., 12.]); let matrix: Vec = vec![0., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.]; let matrix = vec_to_sparse_mat_fixed(&matrix, 4, false); let target: Vec = vec![0., 2., 3., 0., 5., 6., 0., 5., 9., 0., 5., 12.]; @@ -2499,165 +2482,165 @@ mod tests { let zero: I32F32 = fixed(0.); let one: I32F32 = fixed(1.); for _ in 0..100 { - let stake: Vec = vec_to_fixed(&[]); - let score: Vec = vec_to_fixed(&[]); + let stake: Vec = vec_to_fixed(&vec![]); + let score: Vec = vec_to_fixed(&vec![]); let majority: I32F32 = fixed(0.51); assert_eq!( zero, weighted_median( &stake, &score, - (0..stake.len()).collect::>().as_slice(), + &(0..stake.len()).collect(), one - majority, zero, stake.iter().sum() ) ); - let stake: Vec = normalize(&vec_to_fixed(&[0.51])); - let score: Vec = vec_to_fixed(&[1.]); + let stake: Vec = normalize(&vec_to_fixed(&vec![0.51])); + let score: Vec = vec_to_fixed(&vec![1.]); let majority: I32F32 = fixed(0.51); assert_eq!( one, weighted_median( &stake, &score, - (0..stake.len()).collect::>().as_slice(), + &(0..stake.len()).collect(), one - majority, zero, stake.iter().sum() ) ); - let stake: Vec = vec_to_fixed(&[0.49, 0.51]); - let score: Vec = vec_to_fixed(&[0.5, 1.]); + let stake: Vec = vec_to_fixed(&vec![0.49, 0.51]); + let score: Vec = vec_to_fixed(&vec![0.5, 1.]); let majority: I32F32 = fixed(0.51); assert_eq!( one, weighted_median( &stake, &score, - (0..stake.len()).collect::>().as_slice(), + &(0..stake.len()).collect(), one - majority, zero, stake.iter().sum() ) ); - let stake: Vec = vec_to_fixed(&[0.51, 0.49]); - let score: Vec = vec_to_fixed(&[0.5, 1.]); + let stake: Vec = vec_to_fixed(&vec![0.51, 0.49]); + let score: Vec = vec_to_fixed(&vec![0.5, 1.]); let majority: I32F32 = fixed(0.51); assert_eq!( fixed(0.5), weighted_median( &stake, &score, - (0..stake.len()).collect::>().as_slice(), + &(0..stake.len()).collect(), one - majority, zero, stake.iter().sum() ) ); - let stake: Vec = vec_to_fixed(&[0.49, 0., 0.51]); - let score: Vec = vec_to_fixed(&[0.5, 0.7, 1.]); + let stake: Vec = vec_to_fixed(&vec![0.49, 0., 0.51]); + let score: Vec = vec_to_fixed(&vec![0.5, 0.7, 1.]); let majority: I32F32 = fixed(0.51); assert_eq!( one, weighted_median( &stake, &score, - (0..stake.len()).collect::>().as_slice(), + &(0..stake.len()).collect(), one - majority, zero, stake.iter().sum() ) ); - let stake: Vec = vec_to_fixed(&[0.49, 0.01, 0.5]); - let score: Vec = vec_to_fixed(&[0.5, 0.7, 1.]); + let stake: Vec = vec_to_fixed(&vec![0.49, 0.01, 0.5]); + let score: Vec = vec_to_fixed(&vec![0.5, 0.7, 1.]); let majority: I32F32 = fixed(0.51); assert_eq!( fixed(0.7), weighted_median( &stake, &score, - (0..stake.len()).collect::>().as_slice(), + &(0..stake.len()).collect(), one - majority, zero, stake.iter().sum() ) ); - let stake: Vec = vec_to_fixed(&[0.49, 0.51, 0.0]); - let score: Vec = vec_to_fixed(&[0.5, 0.7, 1.]); + let stake: Vec = vec_to_fixed(&vec![0.49, 0.51, 0.0]); + let score: Vec = vec_to_fixed(&vec![0.5, 0.7, 1.]); let majority: I32F32 = fixed(0.51); assert_eq!( fixed(0.7), weighted_median( &stake, &score, - (0..stake.len()).collect::>().as_slice(), + &(0..stake.len()).collect(), one - majority, zero, stake.iter().sum() ) ); - let stake: Vec = vec_to_fixed(&[0.0, 0.49, 0.51]); - let score: Vec = vec_to_fixed(&[0.5, 0.7, 1.]); + let stake: Vec = vec_to_fixed(&vec![0.0, 0.49, 0.51]); + let score: Vec = vec_to_fixed(&vec![0.5, 0.7, 1.]); let majority: I32F32 = fixed(0.51); assert_eq!( one, weighted_median( &stake, &score, - (0..stake.len()).collect::>().as_slice(), + &(0..stake.len()).collect(), one - majority, zero, stake.iter().sum() ) ); - let stake: Vec = vec_to_fixed(&[0.0, 0.49, 0.0, 0.51]); - let score: Vec = vec_to_fixed(&[0.5, 0.5, 1., 1.]); + let stake: Vec = vec_to_fixed(&vec![0.0, 0.49, 0.0, 0.51]); + let score: Vec = vec_to_fixed(&vec![0.5, 0.5, 1., 1.]); let majority: I32F32 = fixed(0.51); assert_eq!( one, weighted_median( &stake, &score, - (0..stake.len()).collect::>().as_slice(), + &(0..stake.len()).collect(), one - majority, zero, stake.iter().sum() ) ); - let stake: Vec = vec_to_fixed(&[0.0, 0.49, 0.0, 0.51, 0.0]); - let score: Vec = vec_to_fixed(&[0.5, 0.5, 1., 1., 0.5]); + let stake: Vec = vec_to_fixed(&vec![0.0, 0.49, 0.0, 0.51, 0.0]); + let score: Vec = vec_to_fixed(&vec![0.5, 0.5, 1., 1., 0.5]); let majority: I32F32 = fixed(0.51); assert_eq!( one, weighted_median( &stake, &score, - (0..stake.len()).collect::>().as_slice(), + &(0..stake.len()).collect(), one - majority, zero, stake.iter().sum() ) ); - let stake: Vec = vec_to_fixed(&[0.2, 0.2, 0.2, 0.2, 0.2]); - let score: Vec = vec_to_fixed(&[0.8, 0.2, 1., 0.6, 0.4]); + let stake: Vec = vec_to_fixed(&vec![0.2, 0.2, 0.2, 0.2, 0.2]); + let score: Vec = vec_to_fixed(&vec![0.8, 0.2, 1., 0.6, 0.4]); let majority: I32F32 = fixed(0.51); assert_eq!( fixed(0.6), weighted_median( &stake, &score, - (0..stake.len()).collect::>().as_slice(), + &(0..stake.len()).collect(), one - majority, zero, stake.iter().sum() @@ -2665,16 +2648,16 @@ mod tests { ); let stake: Vec = - vec_to_fixed(&[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]); + vec_to_fixed(&vec![0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]); let score: Vec = - vec_to_fixed(&[0.8, 0.8, 0.2, 0.2, 1.0, 1.0, 0.6, 0.6, 0.4, 0.4]); + vec_to_fixed(&vec![0.8, 0.8, 0.2, 0.2, 1.0, 1.0, 0.6, 0.6, 0.4, 0.4]); let majority: I32F32 = fixed(0.51); assert_eq!( fixed(0.6), weighted_median( &stake, &score, - (0..stake.len()).collect::>().as_slice(), + &(0..stake.len()).collect(), one - majority, zero, stake.iter().sum() @@ -2682,10 +2665,21 @@ mod tests { ); let n: usize = 100; - for majority in vec_to_fixed(&[ - 0., 0.0000001, 0.25, 0.49, 0.49, 0.49, 0.5, 0.51, 0.51, 0.51, 0.9999999, 1., + for majority in vec_to_fixed(&vec![ + 0., + 0.0000001, + 0.25, + 0.48999999999999, + 0.49, + 0.49000000000001, + 0.5, + 0.509999999999, + 0.51, + 0.5100000000001, + 0.9999999, + 1., ]) { - for allow_equal in [false, true] { + for allow_equal in vec![false, true] { let mut stake: Vec = vec![]; let mut score: Vec = vec![]; let mut last_score: I32F32 = zero; @@ -2695,8 +2689,9 @@ mod tests { 1 => stake.push(one), _ => stake.push(zero), } - if rng.gen_range(0..2) == 1 { - last_score += one + match rng.gen_range(0..2) { + 1 => last_score += one, + _ => (), } score.push(last_score); } else { @@ -2732,7 +2727,7 @@ mod tests { } } } - if medians.is_empty() { + if medians.len() == 0 { medians.push(zero); } let stake_idx: Vec = (0..stake.len()).collect(); @@ -2761,76 +2756,76 @@ mod tests { #[test] fn test_math_weighted_median_col() { - let stake: Vec = vec_to_fixed(&[]); + let stake: Vec = vec_to_fixed(&vec![]); let weights: Vec> = vec![vec![]]; - let median: Vec = vec_to_fixed(&[]); + let median: Vec = vec_to_fixed(&vec![]); assert_eq!(median, weighted_median_col(&stake, &weights, fixed(0.5))); - let stake: Vec = vec_to_fixed(&[0., 0.]); + let stake: Vec = vec_to_fixed(&vec![0., 0.]); let weights: Vec = vec![0., 0., 0., 0.]; let weights: Vec> = vec_to_mat_fixed(&weights, 2, false); - let median: Vec = vec_to_fixed(&[0., 0.]); + let median: Vec = vec_to_fixed(&vec![0., 0.]); assert_eq!(median, weighted_median_col(&stake, &weights, fixed(0.5))); - let stake: Vec = vec_to_fixed(&[0., 0.75, 0.25, 0.]); + let stake: Vec = vec_to_fixed(&vec![0., 0.75, 0.25, 0.]); let weights: Vec = vec![0., 0.1, 0., 0., 0.2, 0.4, 0., 0.3, 0.1, 0., 0.4, 0.5]; let weights: Vec> = vec_to_mat_fixed(&weights, 4, false); - let median: Vec = vec_to_fixed(&[0., 0.3, 0.4]); + let median: Vec = vec_to_fixed(&vec![0., 0.3, 0.4]); assert_eq!(median, weighted_median_col(&stake, &weights, fixed(0.24))); - let median: Vec = vec_to_fixed(&[0., 0.2, 0.4]); + let median: Vec = vec_to_fixed(&vec![0., 0.2, 0.4]); assert_eq!(median, weighted_median_col(&stake, &weights, fixed(0.26))); - let median: Vec = vec_to_fixed(&[0., 0.2, 0.1]); + let median: Vec = vec_to_fixed(&vec![0., 0.2, 0.1]); assert_eq!(median, weighted_median_col(&stake, &weights, fixed(0.76))); - let stake: Vec = vec_to_fixed(&[0., 0.3, 0.2, 0.5]); + let stake: Vec = vec_to_fixed(&vec![0., 0.3, 0.2, 0.5]); let weights: Vec = vec![0., 0.1, 0., 0., 0.2, 0.4, 0., 0.3, 0.1, 0., 0., 0.5]; let weights: Vec> = vec_to_mat_fixed(&weights, 4, false); - let median: Vec = vec_to_fixed(&[0., 0., 0.4]); + let median: Vec = vec_to_fixed(&vec![0., 0., 0.4]); assert_eq!(median, weighted_median_col(&stake, &weights, fixed(0.51))); } #[test] fn test_math_weighted_median_col_sparse() { - let stake: Vec = vec_to_fixed(&[]); + let stake: Vec = vec_to_fixed(&vec![]); let weights: Vec> = vec![vec![]]; - let median: Vec = vec_to_fixed(&[]); + let median: Vec = vec_to_fixed(&vec![]); assert_eq!( median, weighted_median_col_sparse(&stake, &weights, 0, fixed(0.5)) ); - let stake: Vec = vec_to_fixed(&[0., 0.]); + let stake: Vec = vec_to_fixed(&vec![0., 0.]); let weights: Vec = vec![0., 0., 0., 0.]; let weights: Vec> = vec_to_sparse_mat_fixed(&weights, 2, false); - let median: Vec = vec_to_fixed(&[0., 0.]); + let median: Vec = vec_to_fixed(&vec![0., 0.]); assert_eq!( median, weighted_median_col_sparse(&stake, &weights, 2, fixed(0.5)) ); - let stake: Vec = vec_to_fixed(&[0., 0.75, 0.25, 0.]); + let stake: Vec = vec_to_fixed(&vec![0., 0.75, 0.25, 0.]); let weights: Vec = vec![0., 0.1, 0., 0., 0.2, 0.4, 0., 0.3, 0.1, 0., 0.4, 0.5]; let weights: Vec> = vec_to_sparse_mat_fixed(&weights, 4, false); - let median: Vec = vec_to_fixed(&[0., 0.3, 0.4]); + let median: Vec = vec_to_fixed(&vec![0., 0.3, 0.4]); assert_eq!( median, weighted_median_col_sparse(&stake, &weights, 3, fixed(0.24)) ); - let median: Vec = vec_to_fixed(&[0., 0.2, 0.4]); + let median: Vec = vec_to_fixed(&vec![0., 0.2, 0.4]); assert_eq!( median, weighted_median_col_sparse(&stake, &weights, 3, fixed(0.26)) ); - let median: Vec = vec_to_fixed(&[0., 0.2, 0.1]); + let median: Vec = vec_to_fixed(&vec![0., 0.2, 0.1]); assert_eq!( median, weighted_median_col_sparse(&stake, &weights, 3, fixed(0.76)) ); - let stake: Vec = vec_to_fixed(&[0., 0.3, 0.2, 0.5]); + let stake: Vec = vec_to_fixed(&vec![0., 0.3, 0.2, 0.5]); let weights: Vec = vec![0., 0.1, 0., 0., 0.2, 0.4, 0., 0.3, 0.1, 0., 0., 0.5]; let weights: Vec> = vec_to_sparse_mat_fixed(&weights, 4, false); - let median: Vec = vec_to_fixed(&[0., 0., 0.4]); + let median: Vec = vec_to_fixed(&vec![0., 0., 0.4]); assert_eq!( median, weighted_median_col_sparse(&stake, &weights, 3, fixed(0.51)) @@ -2992,8 +2987,8 @@ mod tests { let epsilon: I32F32 = I32F32::from_num(0.0001); let w: Vec> = vec![vec![I32F32::from_num(1.0); 3]; 3]; assert_vec_compare( - &matmul(&w, &[I32F32::from_num(1.0); 3]), - &[ + &matmul(&w, &vec![I32F32::from_num(1.0); 3]), + &vec![ I32F32::from_num(3), I32F32::from_num(3), I32F32::from_num(3), @@ -3001,8 +2996,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &[I32F32::from_num(2.0); 3]), - &[ + &matmul(&w, &vec![I32F32::from_num(2.0); 3]), + &vec![ I32F32::from_num(6), I32F32::from_num(6), I32F32::from_num(6), @@ -3010,8 +3005,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &[I32F32::from_num(3.0); 3]), - &[ + &matmul(&w, &vec![I32F32::from_num(3.0); 3]), + &vec![ I32F32::from_num(9), I32F32::from_num(9), I32F32::from_num(9), @@ -3019,8 +3014,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &[I32F32::from_num(-1.0); 3]), - &[ + &matmul(&w, &vec![I32F32::from_num(-1.0); 3]), + &vec![ I32F32::from_num(-3), I32F32::from_num(-3), I32F32::from_num(-3), @@ -3029,8 +3024,8 @@ mod tests { ); let w: Vec> = vec![vec![I32F32::from_num(-1.0); 3]; 3]; assert_vec_compare( - &matmul(&w, &[I32F32::from_num(1.0); 3]), - &[ + &matmul(&w, &vec![I32F32::from_num(1.0); 3]), + &vec![ I32F32::from_num(-3), I32F32::from_num(-3), I32F32::from_num(-3), @@ -3038,8 +3033,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &[I32F32::from_num(2.0); 3]), - &[ + &matmul(&w, &vec![I32F32::from_num(2.0); 3]), + &vec![ I32F32::from_num(-6), I32F32::from_num(-6), I32F32::from_num(-6), @@ -3047,8 +3042,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &[I32F32::from_num(3.0); 3]), - &[ + &matmul(&w, &vec![I32F32::from_num(3.0); 3]), + &vec![ I32F32::from_num(-9), I32F32::from_num(-9), I32F32::from_num(-9), @@ -3056,8 +3051,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &[I32F32::from_num(-1.0); 3]), - &[ + &matmul(&w, &vec![I32F32::from_num(-1.0); 3]), + &vec![ I32F32::from_num(3), I32F32::from_num(3), I32F32::from_num(3), @@ -3070,8 +3065,8 @@ mod tests { vec![I32F32::from_num(3.0); 3], ]; assert_vec_compare( - &matmul(&w, &[I32F32::from_num(0.0); 3]), - &[ + &matmul(&w, &vec![I32F32::from_num(0.0); 3]), + &vec![ I32F32::from_num(0.0), I32F32::from_num(0.0), I32F32::from_num(0.0), @@ -3079,8 +3074,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &[I32F32::from_num(2.0); 3]), - &[ + &matmul(&w, &vec![I32F32::from_num(2.0); 3]), + &vec![ I32F32::from_num(12), I32F32::from_num(12), I32F32::from_num(12), @@ -3096,8 +3091,8 @@ mod tests { 3 ]; assert_vec_compare( - &matmul(&w, &[I32F32::from_num(0.0); 3]), - &[ + &matmul(&w, &vec![I32F32::from_num(0.0); 3]), + &vec![ I32F32::from_num(0.0), I32F32::from_num(0.0), I32F32::from_num(0.0), @@ -3105,8 +3100,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &[I32F32::from_num(2.0); 3]), - &[ + &matmul(&w, &vec![I32F32::from_num(2.0); 3]), + &vec![ I32F32::from_num(6), I32F32::from_num(12), I32F32::from_num(18), @@ -3186,7 +3181,7 @@ mod tests { assert_eq!(fixed64_to_fixed32(I64F64::from_num(expected)), expected); let expected = u32::MAX / 2; - let input = u64::from(expected); + let input = u64::try_from(expected).unwrap(); assert_eq!(fixed64_to_fixed32(I64F64::from_num(input)), expected); } diff --git a/pallets/subtensor/src/migration.rs b/pallets/subtensor/src/migration.rs index 700df4723..41a351bac 100644 --- a/pallets/subtensor/src/migration.rs +++ b/pallets/subtensor/src/migration.rs @@ -1,10 +1,10 @@ use super::*; use frame_support::traits::DefensiveResult; use frame_support::{ + inherent::Vec, pallet_prelude::{Identity, OptionQuery}, - sp_std::vec::Vec, storage_alias, - traits::{fungible::Inspect as _, Get, GetStorageVersion, StorageVersion}, + traits::{Get, GetStorageVersion, StorageVersion}, weights::Weight, }; use log::info; @@ -165,8 +165,8 @@ pub fn migrate_create_root_network() -> Weight { // Empty senate members entirely, they will be filled by by registrations // on the subnet. for hotkey_i in T::SenateMembers::members().iter() { - T::TriumvirateInterface::remove_votes(hotkey_i).defensive_ok(); - T::SenateMembers::remove_member(hotkey_i).defensive_ok(); + T::TriumvirateInterface::remove_votes(&hotkey_i).defensive_ok(); + T::SenateMembers::remove_member(&hotkey_i).defensive_ok(); weight.saturating_accrue(T::DbWeight::get().reads_writes(2, 2)); } @@ -361,7 +361,7 @@ pub fn migrate_to_v1_separate_emission() -> Weight { for netuid in curr_loaded_emission { // Iterates over the netuids weight.saturating_accrue(T::DbWeight::get().reads(1)); - if old::LoadedEmission::::try_get(netuid).is_err() { + if let Err(_) = old::LoadedEmission::::try_get(netuid) { weight.saturating_accrue(T::DbWeight::get().writes(1)); old::LoadedEmission::::remove(netuid); log::warn!( @@ -379,13 +379,13 @@ pub fn migrate_to_v1_separate_emission() -> Weight { info!(target: LOG_TARGET, " Do migration of netuid: {:?}...", netuid); // We will assume all loaded emission is validator emissions, - // so this will get distributed over delegatees (nominators), if there are any - // This will NOT effect any servers that are not (also) a delegate validator. + // so this will get distributed over delegatees (nominators), if there are any + // This will NOT effect any servers that are not (also) a delegate validator. // server_emission will be 0 for any alread loaded emission. let mut new_netuid_emissions = Vec::new(); for (server, validator_emission) in netuid_emissions { - new_netuid_emissions.push((server, 0_u64, validator_emission)); + new_netuid_emissions.push((server, 0 as u64, validator_emission)); } // One read (old) and write (new) per netuid diff --git a/pallets/subtensor/src/neuron_info.rs b/pallets/subtensor/src/neuron_info.rs index e3b84ab20..e40c17fe0 100644 --- a/pallets/subtensor/src/neuron_info.rs +++ b/pallets/subtensor/src/neuron_info.rs @@ -2,6 +2,7 @@ use super::*; use frame_support::pallet_prelude::{Decode, Encode}; use frame_support::storage::IterableStorageDoubleMap; extern crate alloc; +use alloc::vec::Vec; use codec::Compact; #[derive(Decode, Encode, PartialEq, Eq, Clone, Debug)] @@ -60,10 +61,17 @@ impl Pallet { let mut neurons = Vec::new(); let n = Self::get_subnetwork_n(netuid); for uid in 0..n { - let neuron = match Self::get_neuron_subnet_exists(netuid, uid) { - Some(n) => n, - None => break, // No more neurons - }; + let uid = uid; + let netuid = netuid; + + let _neuron = Self::get_neuron_subnet_exists(netuid, uid); + let neuron; + if _neuron.is_none() { + break; // No more neurons + } else { + // No error, hotkey was registered + neuron = _neuron.expect("Neuron should exist"); + } neurons.push(neuron); } @@ -71,10 +79,14 @@ impl Pallet { } fn get_neuron_subnet_exists(netuid: u16, uid: u16) -> Option> { - let hotkey = match Self::get_hotkey_for_net_and_uid(netuid, uid) { - Ok(h) => h, - Err(_) => return None, - }; + let _hotkey = Self::get_hotkey_for_net_and_uid(netuid, uid); + let hotkey; + if _hotkey.is_err() { + return None; + } else { + // No error, hotkey was registered + hotkey = _hotkey.expect("Hotkey should exist"); + } let axon_info = Self::get_axon_info(netuid, &hotkey.clone()); @@ -82,17 +94,17 @@ impl Pallet { let coldkey = Owner::::get(hotkey.clone()).clone(); - let active = Self::get_active_for_uid(netuid, uid); - let rank = Self::get_rank_for_uid(netuid, uid); - let emission = Self::get_emission_for_uid(netuid, uid); - let incentive = Self::get_incentive_for_uid(netuid, uid); - let consensus = Self::get_consensus_for_uid(netuid, uid); - let trust = Self::get_trust_for_uid(netuid, uid); - let validator_trust = Self::get_validator_trust_for_uid(netuid, uid); - let dividends = Self::get_dividends_for_uid(netuid, uid); - let pruning_score = Self::get_pruning_score_for_uid(netuid, uid); - let last_update = Self::get_last_update_for_uid(netuid, uid); - let validator_permit = Self::get_validator_permit_for_uid(netuid, uid); + let active = Self::get_active_for_uid(netuid, uid as u16); + let rank = Self::get_rank_for_uid(netuid, uid as u16); + let emission = Self::get_emission_for_uid(netuid, uid as u16); + let incentive = Self::get_incentive_for_uid(netuid, uid as u16); + let consensus = Self::get_consensus_for_uid(netuid, uid as u16); + let trust = Self::get_trust_for_uid(netuid, uid as u16); + let validator_trust = Self::get_validator_trust_for_uid(netuid, uid as u16); + let dividends = Self::get_dividends_for_uid(netuid, uid as u16); + let pruning_score = Self::get_pruning_score_for_uid(netuid, uid as u16); + let last_update = Self::get_last_update_for_uid(netuid, uid as u16); + let validator_permit = Self::get_validator_permit_for_uid(netuid, uid as u16); let weights = >::get(netuid, uid) .iter() @@ -146,7 +158,7 @@ impl Pallet { pruning_score: pruning_score.into(), }; - Some(neuron) + return Some(neuron); } pub fn get_neuron(netuid: u16, uid: u16) -> Option> { @@ -154,14 +166,19 @@ impl Pallet { return None; } - Self::get_neuron_subnet_exists(netuid, uid) + let neuron = Self::get_neuron_subnet_exists(netuid, uid); + neuron } fn get_neuron_lite_subnet_exists(netuid: u16, uid: u16) -> Option> { - let hotkey = match Self::get_hotkey_for_net_and_uid(netuid, uid) { - Ok(h) => h, - Err(_) => return None, - }; + let _hotkey = Self::get_hotkey_for_net_and_uid(netuid, uid); + let hotkey; + if _hotkey.is_err() { + return None; + } else { + // No error, hotkey was registered + hotkey = _hotkey.expect("Hotkey should exist"); + } let axon_info = Self::get_axon_info(netuid, &hotkey.clone()); @@ -169,17 +186,17 @@ impl Pallet { let coldkey = Owner::::get(hotkey.clone()).clone(); - let active = Self::get_active_for_uid(netuid, uid); - let rank = Self::get_rank_for_uid(netuid, uid); - let emission = Self::get_emission_for_uid(netuid, uid); - let incentive = Self::get_incentive_for_uid(netuid, uid); - let consensus = Self::get_consensus_for_uid(netuid, uid); - let trust = Self::get_trust_for_uid(netuid, uid); - let validator_trust = Self::get_validator_trust_for_uid(netuid, uid); - let dividends = Self::get_dividends_for_uid(netuid, uid); - let pruning_score = Self::get_pruning_score_for_uid(netuid, uid); - let last_update = Self::get_last_update_for_uid(netuid, uid); - let validator_permit = Self::get_validator_permit_for_uid(netuid, uid); + let active = Self::get_active_for_uid(netuid, uid as u16); + let rank = Self::get_rank_for_uid(netuid, uid as u16); + let emission = Self::get_emission_for_uid(netuid, uid as u16); + let incentive = Self::get_incentive_for_uid(netuid, uid as u16); + let consensus = Self::get_consensus_for_uid(netuid, uid as u16); + let trust = Self::get_trust_for_uid(netuid, uid as u16); + let validator_trust = Self::get_validator_trust_for_uid(netuid, uid as u16); + let dividends = Self::get_dividends_for_uid(netuid, uid as u16); + let pruning_score = Self::get_pruning_score_for_uid(netuid, uid as u16); + let last_update = Self::get_last_update_for_uid(netuid, uid as u16); + let validator_permit = Self::get_validator_permit_for_uid(netuid, uid as u16); let stake: Vec<(T::AccountId, Compact)> = as IterableStorageDoubleMap>::iter_prefix( @@ -209,7 +226,7 @@ impl Pallet { pruning_score: pruning_score.into(), }; - Some(neuron) + return Some(neuron); } pub fn get_neurons_lite(netuid: u16) -> Vec> { @@ -220,10 +237,16 @@ impl Pallet { let mut neurons: Vec> = Vec::new(); let n = Self::get_subnetwork_n(netuid); for uid in 0..n { - let neuron = match Self::get_neuron_lite_subnet_exists(netuid, uid) { - Some(n) => n, - None => break, // No more neurons - }; + let uid = uid; + + let _neuron = Self::get_neuron_lite_subnet_exists(netuid, uid); + let neuron; + if _neuron.is_none() { + break; // No more neurons + } else { + // No error, hotkey was registered + neuron = _neuron.expect("Neuron should exist"); + } neurons.push(neuron); } @@ -235,6 +258,7 @@ impl Pallet { return None; } - Self::get_neuron_lite_subnet_exists(netuid, uid) + let neuron = Self::get_neuron_lite_subnet_exists(netuid, uid); + neuron } } diff --git a/pallets/subtensor/src/registration.rs b/pallets/subtensor/src/registration.rs index 4d43a3683..b653e66a0 100644 --- a/pallets/subtensor/src/registration.rs +++ b/pallets/subtensor/src/registration.rs @@ -1,12 +1,14 @@ use super::*; use frame_support::pallet_prelude::{DispatchResult, DispatchResultWithPostInfo}; use frame_support::storage::IterableStorageDoubleMap; +use frame_system::ensure_signed; use sp_core::{Get, H256, U256}; use sp_io::hashing::{keccak_256, sha2_256}; use sp_runtime::MultiAddress; -use system::pallet_prelude::BlockNumberFor; +use sp_std::convert::TryInto; +use sp_std::vec::Vec; -const LOG_TARGET: &str = "runtime::subtensor::registration"; +const LOG_TARGET: &'static str = "runtime::subtensor::registration"; impl Pallet { // ---- The implementation for the extrinsic do_burned_registration: registering by burning TAO. @@ -53,7 +55,7 @@ impl Pallet { // --- 2. Ensure the passed network is valid. ensure!( netuid != Self::get_root_netuid(), - Error::::OperationNotPermittedOnRootSubnet + Error::::OperationNotPermittedonRootSubnet ); ensure!( Self::if_subnet_exist(netuid), @@ -94,18 +96,22 @@ impl Pallet { // --- 7. Ensure the callers coldkey has enough stake to perform the transaction. let current_block_number: u64 = Self::get_current_block_as_u64(); - let registration_cost = Self::get_burn_as_u64(netuid); + let registration_cost_as_u64 = Self::get_burn_as_u64(netuid); + let registration_cost_as_balance = Self::u64_to_balance(registration_cost_as_u64).unwrap(); ensure!( - Self::can_remove_balance_from_coldkey_account(&coldkey, registration_cost), + Self::can_remove_balance_from_coldkey_account(&coldkey, registration_cost_as_balance), Error::::NotEnoughBalanceToStake ); // --- 8. Ensure the remove operation from the coldkey is a success. - let actual_burn_amount = - Self::remove_balance_from_coldkey_account(&coldkey, registration_cost)?; + ensure!( + Self::remove_balance_from_coldkey_account(&coldkey, registration_cost_as_balance) + == true, + Error::::BalanceWithdrawalError + ); // The burn occurs here. - Self::burn_tokens(actual_burn_amount); + Self::burn_tokens(Self::get_burn_as_u64(netuid)); // --- 9. If the network account does not exist we will create it here. Self::create_account_if_non_existent(&coldkey, &hotkey); @@ -123,7 +129,7 @@ impl Pallet { // Possibly there is no neuron slots at all. ensure!( Self::get_max_allowed_uids(netuid) != 0, - Error::::NoNeuronIdAvailable + Error::::NetworkDoesNotExist ); if current_subnetwork_n < Self::get_max_allowed_uids(netuid) { @@ -235,7 +241,7 @@ impl Pallet { // --- 2. Ensure the passed network is valid. ensure!( netuid != Self::get_root_netuid(), - Error::::OperationNotPermittedOnRootSubnet + Error::::OperationNotPermittedonRootSubnet ); ensure!( Self::if_subnet_exist(netuid), @@ -291,7 +297,7 @@ impl Pallet { // --- 7. Check Work is the product of the nonce, the block number, and hotkey. Add this as used work. let seal: H256 = Self::create_seal_hash(block_number, nonce, &hotkey); ensure!(seal == work_hash, Error::::InvalidSeal); - UsedWork::::insert(work.clone(), current_block_number); + UsedWork::::insert(&work.clone(), current_block_number); // DEPRECATED --- 8. Ensure that the key passes the registration requirement // ensure!( @@ -315,7 +321,7 @@ impl Pallet { // Possibly there is no neuron slots at all. ensure!( Self::get_max_allowed_uids(netuid) != 0, - Error::::NoNeuronIdAvailable + Error::::NetworkDoesNotExist ); if current_subnetwork_n < Self::get_max_allowed_uids(netuid) { @@ -390,13 +396,14 @@ impl Pallet { // --- 4. Check Work is the product of the nonce, the block number, and hotkey. Add this as used work. let seal: H256 = Self::create_seal_hash(block_number, nonce, &coldkey); ensure!(seal == work_hash, Error::::InvalidSeal); - UsedWork::::insert(work.clone(), current_block_number); + UsedWork::::insert(&work.clone(), current_block_number); // --- 5. Add Balance via faucet. let balance_to_add: u64 = 100_000_000_000; Self::coinbase(100_000_000_000); // We are creating tokens here from the coinbase. - Self::add_balance_to_coldkey_account(&coldkey, balance_to_add); + let balance_to_be_added_as_balance = Self::u64_to_balance(balance_to_add); + Self::add_balance_to_coldkey_account(&coldkey, balance_to_be_added_as_balance.unwrap()); // --- 6. Deposit successful event. log::info!( @@ -412,9 +419,9 @@ impl Pallet { pub fn vec_to_hash(vec_hash: Vec) -> H256 { let de_ref_hash = &vec_hash; // b: &Vec - let de_de_ref_hash: &[u8] = de_ref_hash; // c: &[u8] + let de_de_ref_hash: &[u8] = &de_ref_hash; // c: &[u8] let real_hash: H256 = H256::from_slice(de_de_ref_hash); - real_hash + return real_hash; } // Determine which peer to prune from the network by finding the element with the lowest pruning score out of @@ -425,19 +432,15 @@ impl Pallet { let mut min_score_in_immunity_period = u16::MAX; let mut uid_with_min_score = 0; let mut uid_with_min_score_in_immunity_period: u16 = 0; - - let neurons_n = Self::get_subnetwork_n(netuid); - if neurons_n == 0 { - return 0; // If there are no neurons in this network. - } - - let current_block: u64 = Self::get_current_block_as_u64(); - let immunity_period: u64 = Self::get_immunity_period(netuid) as u64; - for neuron_uid_i in 0..neurons_n { + if Self::get_subnetwork_n(netuid) == 0 { + return 0; + } // If there are no neurons in this network. + for neuron_uid_i in 0..Self::get_subnetwork_n(netuid) { let pruning_score: u16 = Self::get_pruning_score_for_uid(netuid, neuron_uid_i); let block_at_registration: u64 = Self::get_neuron_block_at_registration(netuid, neuron_uid_i); - #[allow(clippy::comparison_chain)] + let current_block: u64 = Self::get_current_block_as_u64(); + let immunity_period: u64 = Self::get_immunity_period(netuid) as u64; if min_score == pruning_score { if current_block - block_at_registration < immunity_period { //neuron is in immunity period @@ -446,6 +449,7 @@ impl Pallet { uid_with_min_score_in_immunity_period = neuron_uid_i; } } else { + min_score = pruning_score; uid_with_min_score = neuron_uid_i; } } @@ -470,13 +474,13 @@ impl Pallet { uid_with_min_score_in_immunity_period, u16::MAX, ); - uid_with_min_score_in_immunity_period + return uid_with_min_score_in_immunity_period; } else { // We replace the pruning score here with u16 max to ensure that all peers always have a // pruning score. In the event that every peer has been pruned this function will prune // the last element in the network continually. Self::set_pruning_score_for_uid(netuid, uid_with_min_score, u16::MAX); - uid_with_min_score + return uid_with_min_score; } } @@ -485,7 +489,7 @@ impl Pallet { // overflows the bounds of U256, then the product (and thus the hash) // was too high. pub fn hash_meets_difficulty(hash: &H256, difficulty: U256) -> bool { - let bytes: &[u8] = hash.as_bytes(); + let bytes: &[u8] = &hash.as_bytes(); let num_hash: U256 = U256::from(bytes); let (value, overflowed) = num_hash.overflowing_mul(difficulty); @@ -503,12 +507,12 @@ impl Pallet { } pub fn get_block_hash_from_u64(block_number: u64) -> H256 { - let block_number: BlockNumberFor = TryInto::>::try_into(block_number) + let block_number: T::BlockNumber = TryInto::::try_into(block_number) .ok() .expect("convert u64 to block number."); let block_hash_at_number: ::Hash = system::Pallet::::block_hash(block_number); - let vec_hash: Vec = block_hash_at_number.as_ref().to_vec(); + let vec_hash: Vec = block_hash_at_number.as_ref().into_iter().cloned().collect(); let deref_vec_hash: &[u8] = &vec_hash; // c: &[u8] let real_hash: H256 = H256::from_slice(deref_vec_hash); @@ -520,13 +524,13 @@ impl Pallet { real_hash ); - real_hash + return real_hash; } pub fn hash_to_vec(hash: H256) -> Vec { let hash_as_bytes: &[u8] = hash.as_bytes(); - let hash_as_vec: Vec = hash_as_bytes.to_vec(); - hash_as_vec + let hash_as_vec: Vec = hash_as_bytes.iter().cloned().collect(); + return hash_as_vec; } pub fn hash_block_and_hotkey(block_hash_bytes: &[u8], hotkey: &T::AccountId) -> H256 { @@ -604,7 +608,7 @@ impl Pallet { let keccak_256_seal_hash_vec: [u8; 32] = keccak_256(full_bytes); let seal_hash: H256 = H256::from_slice(&keccak_256_seal_hash_vec); - seal_hash + return seal_hash; } pub fn create_seal_hash(block_number_u64: u64, nonce_u64: u64, hotkey: &T::AccountId) -> H256 { @@ -672,7 +676,7 @@ impl Pallet { seal_hash ); - seal_hash + return seal_hash; } // Helper function for creating nonce and work. @@ -684,13 +688,13 @@ impl Pallet { ) -> (u64, Vec) { let difficulty: U256 = Self::get_difficulty(netuid); let mut nonce: u64 = start_nonce; - let mut work: H256 = Self::create_seal_hash(block_number, nonce, hotkey); + let mut work: H256 = Self::create_seal_hash(block_number, nonce, &hotkey); while !Self::hash_meets_difficulty(&work, difficulty) { - nonce += 1; - work = Self::create_seal_hash(block_number, nonce, hotkey); + nonce = nonce + 1; + work = Self::create_seal_hash(block_number, nonce, &hotkey); } let vec_work: Vec = Self::hash_to_vec(work); - (nonce, vec_work) + return (nonce, vec_work); } pub fn do_swap_hotkey( @@ -724,12 +728,16 @@ impl Pallet { .saturating_accrue(T::DbWeight::get().reads((TotalNetworks::::get() + 1u16) as u64)); let swap_cost = 1_000_000_000u64; + let swap_cost_as_balance = Self::u64_to_balance(swap_cost).unwrap(); ensure!( - Self::can_remove_balance_from_coldkey_account(&coldkey, swap_cost), + Self::can_remove_balance_from_coldkey_account(&coldkey, swap_cost_as_balance), Error::::NotEnoughBalance ); - let actual_burn_amount = Self::remove_balance_from_coldkey_account(&coldkey, swap_cost)?; - Self::burn_tokens(actual_burn_amount); + ensure!( + Self::remove_balance_from_coldkey_account(&coldkey, swap_cost_as_balance) == true, + Error::::BalanceWithdrawalError + ); + Self::burn_tokens(swap_cost); Owner::::remove(old_hotkey); Owner::::insert(new_hotkey, coldkey.clone()); diff --git a/pallets/subtensor/src/root.rs b/pallets/subtensor/src/root.rs index b4e9ae8b2..28d5a7e8c 100644 --- a/pallets/subtensor/src/root.rs +++ b/pallets/subtensor/src/root.rs @@ -18,6 +18,7 @@ use super::*; use crate::math::*; use frame_support::dispatch::{DispatchResultWithPostInfo, Pays}; +use frame_support::inherent::Vec; use frame_support::sp_std::vec; use frame_support::storage::{IterableStorageDoubleMap, IterableStorageMap}; use frame_support::traits::Get; @@ -108,7 +109,7 @@ impl Pallet { // * 'bool': Whether the subnet exists. // pub fn if_subnet_exist(netuid: u16) -> bool { - NetworksAdded::::get(netuid) + return NetworksAdded::::get(netuid); } // Returns a list of subnet netuid equal to total networks. @@ -120,9 +121,9 @@ impl Pallet { // * 'Vec': Netuids of added subnets. // pub fn get_all_subnet_netuids() -> Vec { - as IterableStorageMap>::iter() + return as IterableStorageMap>::iter() .map(|(netuid, _)| netuid) - .collect() + .collect(); } /// Calculates the block emission based on the total issuance. /// @@ -137,13 +138,14 @@ impl Pallet { /// pub fn get_block_emission() -> Result { // Convert the total issuance to a fixed-point number for calculation. - Self::get_block_emission_for_issuance(Self::get_total_issuance()) + Self::get_block_emission_for_issuance( Self::get_total_issuance() ) } // Returns the block emission for an issuance value. - pub fn get_block_emission_for_issuance(issuance: u64) -> Result { + pub fn get_block_emission_for_issuance( issuance: u64 ) -> Result { + // Convert issuance to a float for calculations below. - let total_issuance: I96F32 = I96F32::from_num(issuance); + let total_issuance: I96F32 = I96F32::from_num( issuance ); // Check to prevent division by zero when the total supply is reached // and creating an issuance greater than the total supply. if total_issuance >= I96F32::from_num(TotalSupply::::get()) { @@ -189,7 +191,7 @@ impl Pallet { // # Returns: // * 'bool': 'true' if any of the UIDs are invalid, 'false' otherwise. // - pub fn contains_invalid_root_uids(netuids: &[u16]) -> bool { + pub fn contains_invalid_root_uids(netuids: &Vec) -> bool { for netuid in netuids { if !Self::if_subnet_exist(*netuid) { log::debug!( @@ -205,7 +207,7 @@ impl Pallet { // Sets the emission values for each netuid // // - pub fn set_emission_values(netuids: &[u16], emission: Vec) -> Result<(), &'static str> { + pub fn set_emission_values(netuids: &Vec, emission: Vec) -> Result<(), &'static str> { log::debug!( "set_emission_values: netuids: {:?} emission:{:?}", netuids, @@ -375,8 +377,11 @@ impl Pallet { } for trust_score in trust.iter_mut() { - if let Some(quotient) = trust_score.checked_div(total_stake) { - *trust_score = quotient; + match trust_score.checked_div(total_stake) { + Some(quotient) => { + *trust_score = quotient; + } + None => {} } } @@ -417,7 +422,7 @@ impl Pallet { let netuids: Vec = Self::get_all_subnet_netuids(); log::debug!("netuids: {:?} values: {:?}", netuids, emission_u64); - Self::set_emission_values(&netuids, emission_u64) + return Self::set_emission_values(&netuids, emission_u64); } // Registers a user's hotkey to the root network. @@ -544,7 +549,7 @@ impl Pallet { if last_stake < current_stake { T::SenateMembers::swap_member(last, &hotkey)?; - T::TriumvirateInterface::remove_votes(last)?; + T::TriumvirateInterface::remove_votes(&last)?; } } } else { @@ -585,13 +590,13 @@ impl Pallet { // --- 2. Ensure that the calling coldkey owns the associated hotkey. ensure!( - Self::coldkey_owns_hotkey(&coldkey, hotkey), + Self::coldkey_owns_hotkey(&coldkey, &hotkey), Error::::NonAssociatedColdKey ); // --- 3. Ensure that the calling hotkey is a member of the senate. ensure!( - T::SenateMembers::is_member(hotkey), + T::SenateMembers::is_member(&hotkey), Error::::NotSenateMember ); @@ -603,10 +608,10 @@ impl Pallet { let members = T::SenateMembers::members(); let member_count = members.len() as u32; let vote_weight = Weight::from_parts(20_528_275, 4980) - .saturating_add(Weight::from_parts(48_856, 0).saturating_mul(member_count.into())) + .saturating_add(Weight::from_ref_time(48_856).saturating_mul(member_count.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(Weight::from_parts(0, 128).saturating_mul(member_count.into())); + .saturating_add(Weight::from_proof_size(128).saturating_mul(member_count.into())); Ok(( Some(vote_weight), @@ -646,9 +651,14 @@ impl Pallet { // --- 2. Calculate and lock the required tokens. let lock_amount: u64 = Self::get_network_lock_cost(); - log::debug!("network lock_amount: {:?}", lock_amount); + let lock_as_balance = Self::u64_to_balance(lock_amount); + log::debug!("network lock_amount: {:?}", lock_amount,); + ensure!( + lock_as_balance.is_some(), + Error::::CouldNotConvertToBalance + ); ensure!( - Self::can_remove_balance_from_coldkey_account(&coldkey, lock_amount), + Self::can_remove_balance_from_coldkey_account(&coldkey, lock_as_balance.unwrap()), Error::::NotEnoughBalanceToStake ); @@ -681,9 +691,12 @@ impl Pallet { }; // --- 5. Perform the lock operation. - let actual_lock_amount = Self::remove_balance_from_coldkey_account(&coldkey, lock_amount)?; - Self::set_subnet_locked_balance(netuid_to_register, actual_lock_amount); - Self::set_network_last_lock(actual_lock_amount); + ensure!( + Self::remove_balance_from_coldkey_account(&coldkey, lock_as_balance.unwrap()) == true, + Error::::BalanceWithdrawalError + ); + Self::set_subnet_locked_balance(netuid_to_register, lock_amount); + Self::set_network_last_lock(lock_amount); // --- 6. Set initial and custom parameters for the network. Self::init_new_network(netuid_to_register, 360); @@ -844,6 +857,12 @@ impl Pallet { let owner_coldkey = SubnetOwner::::get(netuid); let reserved_amount = Self::get_subnet_locked_balance(netuid); + // Ensure that we can convert this u64 to a balance. + let reserved_amount_as_bal = Self::u64_to_balance(reserved_amount); + if !reserved_amount_as_bal.is_some() { + return; + } + // --- 2. Remove network count. SubnetworkN::::remove(netuid); @@ -913,7 +932,7 @@ impl Pallet { BurnRegistrationsThisInterval::::remove(netuid); // --- 12. Add the balance back to the owner. - Self::add_balance_to_coldkey_account(&owner_coldkey, reserved_amount); + Self::add_balance_to_coldkey_account(&owner_coldkey, reserved_amount_as_bal.unwrap()); Self::set_subnet_locked_balance(netuid, 0); SubnetOwner::::remove(netuid); } diff --git a/pallets/subtensor/src/serving.rs b/pallets/subtensor/src/serving.rs index a926132e5..c18ab2e54 100644 --- a/pallets/subtensor/src/serving.rs +++ b/pallets/subtensor/src/serving.rs @@ -1,4 +1,5 @@ use super::*; +use frame_support::inherent::Vec; use frame_support::sp_std::vec; impl Pallet { @@ -223,7 +224,7 @@ impl Pallet { ) -> bool { let rate_limit: u64 = Self::get_serving_rate_limit(netuid); let last_serve = prev_axon_info.block; - rate_limit == 0 || last_serve == 0 || current_block - last_serve >= rate_limit + return rate_limit == 0 || last_serve == 0 || current_block - last_serve >= rate_limit; } pub fn prometheus_passes_rate_limit( @@ -233,22 +234,22 @@ impl Pallet { ) -> bool { let rate_limit: u64 = Self::get_serving_rate_limit(netuid); let last_serve = prev_prometheus_info.block; - rate_limit == 0 || last_serve == 0 || current_block - last_serve >= rate_limit + return rate_limit == 0 || last_serve == 0 || current_block - last_serve >= rate_limit; } pub fn has_axon_info(netuid: u16, hotkey: &T::AccountId) -> bool { - Axons::::contains_key(netuid, hotkey) + return Axons::::contains_key(netuid, hotkey); } pub fn has_prometheus_info(netuid: u16, hotkey: &T::AccountId) -> bool { - Prometheus::::contains_key(netuid, hotkey) + return Prometheus::::contains_key(netuid, hotkey); } pub fn get_axon_info(netuid: u16, hotkey: &T::AccountId) -> AxonInfoOf { if Self::has_axon_info(netuid, hotkey) { - Axons::::get(netuid, hotkey).unwrap() + return Axons::::get(netuid, hotkey).unwrap(); } else { - AxonInfo { + return AxonInfo { block: 0, version: 0, ip: 0, @@ -257,27 +258,27 @@ impl Pallet { protocol: 0, placeholder1: 0, placeholder2: 0, - } + }; } } pub fn get_prometheus_info(netuid: u16, hotkey: &T::AccountId) -> PrometheusInfoOf { if Self::has_prometheus_info(netuid, hotkey) { - Prometheus::::get(netuid, hotkey).unwrap() + return Prometheus::::get(netuid, hotkey).unwrap(); } else { - PrometheusInfo { + return PrometheusInfo { block: 0, version: 0, ip: 0, port: 0, ip_type: 0, - } + }; } } pub fn is_valid_ip_type(ip_type: u8) -> bool { let allowed_values: Vec = vec![4, 6]; - allowed_values.contains(&ip_type) + return allowed_values.contains(&ip_type); } // @todo (Parallax 2-1-2021) : Implement exclusion of private IP ranges @@ -310,11 +311,11 @@ impl Pallet { return false; } // IPv6 localhost } - true + return true; } pub fn validate_axon_data(axon_info: &AxonInfoOf) -> Result> { - if axon_info.port.clamp(0, u16::MAX) == 0 { + if axon_info.port.clamp(0, u16::MAX) <= 0 { return Err(Error::::InvalidPort); } @@ -324,7 +325,7 @@ impl Pallet { pub fn validate_prometheus_data( prom_info: &PrometheusInfoOf, ) -> Result> { - if prom_info.port.clamp(0, u16::MAX) == 0 { + if prom_info.port.clamp(0, u16::MAX) <= 0 { return Err(Error::::InvalidPort); } diff --git a/pallets/subtensor/src/stake_info.rs b/pallets/subtensor/src/stake_info.rs index b6f0fd38e..796baf018 100644 --- a/pallets/subtensor/src/stake_info.rs +++ b/pallets/subtensor/src/stake_info.rs @@ -1,6 +1,7 @@ use super::*; use frame_support::pallet_prelude::{Decode, Encode}; extern crate alloc; +use alloc::vec::Vec; use codec::Compact; use sp_core::hexdisplay::AsBytesRef; @@ -15,7 +16,7 @@ impl Pallet { fn _get_stake_info_for_coldkeys( coldkeys: Vec, ) -> Vec<(T::AccountId, Vec>)> { - if coldkeys.is_empty() { + if coldkeys.len() == 0 { return Vec::new(); // No coldkeys to check } @@ -36,7 +37,7 @@ impl Pallet { stake_info.push((coldkey_, stake_info_for_coldkey)); } - stake_info + return stake_info; } pub fn get_stake_info_for_coldkeys( @@ -52,11 +53,13 @@ impl Pallet { coldkeys.push(coldkey); } - if coldkeys.is_empty() { + if coldkeys.len() == 0 { return Vec::new(); // Invalid coldkey } - Self::_get_stake_info_for_coldkeys(coldkeys) + let stake_info = Self::_get_stake_info_for_coldkeys(coldkeys); + + return stake_info; } pub fn get_stake_info_for_coldkey(coldkey_account_vec: Vec) -> Vec> { @@ -68,10 +71,10 @@ impl Pallet { T::AccountId::decode(&mut coldkey_account_vec.as_bytes_ref()).unwrap(); let stake_info = Self::_get_stake_info_for_coldkeys(vec![coldkey]); - if stake_info.is_empty() { - Vec::new() // Invalid coldkey + if stake_info.len() == 0 { + return Vec::new(); // Invalid coldkey } else { - return stake_info.first().unwrap().1.clone(); + return stake_info.get(0).unwrap().1.clone(); } } } diff --git a/pallets/subtensor/src/staking.rs b/pallets/subtensor/src/staking.rs index 15caa2467..ce3d3a1c0 100644 --- a/pallets/subtensor/src/staking.rs +++ b/pallets/subtensor/src/staking.rs @@ -1,14 +1,5 @@ use super::*; -use frame_support::{ - storage::IterableStorageDoubleMap, - traits::{ - tokens::{ - fungible::{Balanced as _, Inspect as _, Mutate as _}, - Fortitude, Precision, Preservation, - }, - Imbalance, - }, -}; +use frame_support::storage::IterableStorageDoubleMap; impl Pallet { // ---- The implementation for the extrinsic become_delegate: signals that this hotkey allows delegated stake. @@ -132,7 +123,7 @@ impl Pallet { hotkey: T::AccountId, stake_to_be_added: u64, ) -> dispatch::DispatchResult { - // We check that the transaction is signed by the caller and retrieve the T::AccountId coldkey information. + // --- 1. We check that the transaction is signed by the caller and retrieve the T::AccountId coldkey information. let coldkey = ensure_signed(origin)?; log::info!( "do_add_stake( origin:{:?} hotkey:{:?}, stake_to_be_added:{:?} )", @@ -141,25 +132,32 @@ impl Pallet { stake_to_be_added ); - // Ensure the callers coldkey has enough stake to perform the transaction. + // --- 2. We convert the stake u64 into a balancer. + let stake_as_balance = Self::u64_to_balance(stake_to_be_added); ensure!( - Self::can_remove_balance_from_coldkey_account(&coldkey, stake_to_be_added), + stake_as_balance.is_some(), + Error::::CouldNotConvertToBalance + ); + + // --- 3. Ensure the callers coldkey has enough stake to perform the transaction. + ensure!( + Self::can_remove_balance_from_coldkey_account(&coldkey, stake_as_balance.unwrap()), Error::::NotEnoughBalanceToStake ); - // Ensure that the hotkey account exists this is only possible through registration. + // --- 4. Ensure that the hotkey account exists this is only possible through registration. ensure!( Self::hotkey_account_exists(&hotkey), Error::::NotRegistered ); - // Ensure that the hotkey allows delegation or that the hotkey is owned by the calling coldkey. + // --- 5. Ensure that the hotkey allows delegation or that the hotkey is owned by the calling coldkey. ensure!( Self::hotkey_is_delegate(&hotkey) || Self::coldkey_owns_hotkey(&coldkey, &hotkey), Error::::NonAssociatedColdKey ); - // Ensure we don't exceed stake rate limit + // --- 6. Ensure we don't exceed stake rate limit let stakes_this_interval = Self::get_stakes_this_interval_for_coldkey_hotkey(&coldkey, &hotkey); ensure!( @@ -167,7 +165,7 @@ impl Pallet { Error::::StakeRateLimitExceeded ); - // If this is a nomination stake, check if total stake after adding will be above + // --- 7. If this is a nomination stake, check if total stake after adding will be above // the minimum required stake. // If coldkey is not owner of the hotkey, it's a nomination stake. @@ -181,18 +179,20 @@ impl Pallet { ); } - // Ensure the remove operation from the coldkey is a success. - let actual_amount_to_stake = - Self::remove_balance_from_coldkey_account(&coldkey, stake_to_be_added)?; + // --- 8. Ensure the remove operation from the coldkey is a success. + ensure!( + Self::remove_balance_from_coldkey_account(&coldkey, stake_as_balance.unwrap()) == true, + Error::::BalanceWithdrawalError + ); - // If we reach here, add the balance to the hotkey. - Self::increase_stake_on_coldkey_hotkey_account(&coldkey, &hotkey, actual_amount_to_stake); + // --- 9. If we reach here, add the balance to the hotkey. + Self::increase_stake_on_coldkey_hotkey_account(&coldkey, &hotkey, stake_to_be_added); // Set last block for rate limiting let block: u64 = Self::get_current_block_as_u64(); Self::set_last_tx_block(&coldkey, block); - // Emit the staking event. + // --- 9. Emit the staking event. Self::set_stakes_this_interval_for_coldkey_hotkey( &coldkey, &hotkey, @@ -202,11 +202,11 @@ impl Pallet { log::info!( "StakeAdded( hotkey:{:?}, stake_to_be_added:{:?} )", hotkey, - actual_amount_to_stake + stake_to_be_added ); - Self::deposit_event(Event::StakeAdded(hotkey, actual_amount_to_stake)); + Self::deposit_event(Event::StakeAdded(hotkey, stake_to_be_added)); - // Ok and return. + // --- 10. Ok and return. Ok(()) } @@ -248,7 +248,7 @@ impl Pallet { hotkey: T::AccountId, stake_to_be_removed: u64, ) -> dispatch::DispatchResult { - // We check the transaction is signed by the caller and retrieve the T::AccountId coldkey information. + // --- 1. We check the transaction is signed by the caller and retrieve the T::AccountId coldkey information. let coldkey = ensure_signed(origin)?; log::info!( "do_remove_stake( origin:{:?} hotkey:{:?}, stake_to_be_removed:{:?} )", @@ -257,31 +257,38 @@ impl Pallet { stake_to_be_removed ); - // Ensure that the hotkey account exists this is only possible through registration. + // --- 2. Ensure that the hotkey account exists this is only possible through registration. ensure!( Self::hotkey_account_exists(&hotkey), Error::::NotRegistered ); - // Ensure that the hotkey allows delegation or that the hotkey is owned by the calling coldkey. + // --- 3. Ensure that the hotkey allows delegation or that the hotkey is owned by the calling coldkey. ensure!( Self::hotkey_is_delegate(&hotkey) || Self::coldkey_owns_hotkey(&coldkey, &hotkey), Error::::NonAssociatedColdKey ); - // Ensure that the stake amount to be removed is above zero. + // --- Ensure that the stake amount to be removed is above zero. ensure!( stake_to_be_removed > 0, Error::::NotEnoughStaketoWithdraw ); - // Ensure that the hotkey has enough stake to withdraw. + // --- 4. Ensure that the hotkey has enough stake to withdraw. ensure!( Self::has_enough_stake(&coldkey, &hotkey, stake_to_be_removed), Error::::NotEnoughStaketoWithdraw ); - // Ensure we don't exceed stake rate limit + // --- 5. Ensure that we can conver this u64 to a balance. + let stake_to_be_added_as_currency = Self::u64_to_balance(stake_to_be_removed); + ensure!( + stake_to_be_added_as_currency.is_some(), + Error::::CouldNotConvertToBalance + ); + + // --- 6. Ensure we don't exceed stake rate limit let unstakes_this_interval = Self::get_stakes_this_interval_for_coldkey_hotkey(&coldkey, &hotkey); ensure!( @@ -289,7 +296,7 @@ impl Pallet { Error::::UnstakeRateLimitExceeded ); - // If this is a nomination stake, check if total stake after removing will be above + // --- 7. If this is a nomination stake, check if total stake after removing will be above // the minimum required stake. // If coldkey is not owner of the hotkey, it's a nomination stake. @@ -303,17 +310,17 @@ impl Pallet { ); } - // We remove the balance from the hotkey. + // --- 8. We remove the balance from the hotkey. Self::decrease_stake_on_coldkey_hotkey_account(&coldkey, &hotkey, stake_to_be_removed); - // We add the balancer to the coldkey. If the above fails we will not credit this coldkey. - Self::add_balance_to_coldkey_account(&coldkey, stake_to_be_removed); + // --- 9. We add the balancer to the coldkey. If the above fails we will not credit this coldkey. + Self::add_balance_to_coldkey_account(&coldkey, stake_to_be_added_as_currency.unwrap()); // Set last block for rate limiting let block: u64 = Self::get_current_block_as_u64(); Self::set_last_tx_block(&coldkey, block); - // Emit the unstaking event. + // --- 10. Emit the unstaking event. Self::set_stakes_this_interval_for_coldkey_hotkey( &coldkey, &hotkey, @@ -327,14 +334,14 @@ impl Pallet { ); Self::deposit_event(Event::StakeRemoved(hotkey, stake_to_be_removed)); - // Done and ok. + // --- 11. Done and ok. Ok(()) } // Returns true if the passed hotkey allow delegative staking. // pub fn hotkey_is_delegate(hotkey: &T::AccountId) -> bool { - Delegates::::contains_key(hotkey) + return Delegates::::contains_key(hotkey); } // Sets the hotkey as a delegate with take. @@ -346,7 +353,7 @@ impl Pallet { // Returns the total amount of stake in the staking table. // pub fn get_total_stake() -> u64 { - TotalStake::::get() + return TotalStake::::get(); } // Increases the total amount of stake by the passed amount. @@ -364,19 +371,19 @@ impl Pallet { // Returns the total amount of stake under a hotkey (delegative or otherwise) // pub fn get_total_stake_for_hotkey(hotkey: &T::AccountId) -> u64 { - TotalHotkeyStake::::get(hotkey) + return TotalHotkeyStake::::get(hotkey); } // Returns the total amount of stake held by the coldkey (delegative or otherwise) // pub fn get_total_stake_for_coldkey(coldkey: &T::AccountId) -> u64 { - TotalColdkeyStake::::get(coldkey) + return TotalColdkeyStake::::get(coldkey); } // Returns the stake under the cold - hot pairing in the staking table. // pub fn get_stake_for_coldkey_and_hotkey(coldkey: &T::AccountId, hotkey: &T::AccountId) -> u64 { - Stake::::get(hotkey, coldkey) + return Stake::::get(hotkey, coldkey); } // Retrieves the total stakes for a given hotkey (account ID) for the current staking interval. @@ -416,7 +423,7 @@ impl Pallet { } pub fn get_target_stakes_per_interval() -> u64 { - TargetStakesPerInterval::::get() + return TargetStakesPerInterval::::get(); } // Creates a cold - hot pairing account if the hotkey is not already an active account. @@ -431,29 +438,29 @@ impl Pallet { // Returns the coldkey owning this hotkey. This function should only be called for active accounts. // pub fn get_owning_coldkey_for_hotkey(hotkey: &T::AccountId) -> T::AccountId { - Owner::::get(hotkey) + return Owner::::get(hotkey); } // Returns true if the hotkey account has been created. // pub fn hotkey_account_exists(hotkey: &T::AccountId) -> bool { - Owner::::contains_key(hotkey) + return Owner::::contains_key(hotkey); } // Return true if the passed coldkey owns the hotkey. // pub fn coldkey_owns_hotkey(coldkey: &T::AccountId, hotkey: &T::AccountId) -> bool { if Self::hotkey_account_exists(hotkey) { - Owner::::get(hotkey) == *coldkey + return Owner::::get(hotkey) == *coldkey; } else { - false + return false; } } // Returns true if the cold-hot staking account has enough balance to fufil the decrement. // pub fn has_enough_stake(coldkey: &T::AccountId, hotkey: &T::AccountId, decrement: u64) -> bool { - Self::get_stake_for_coldkey_and_hotkey(coldkey, hotkey) >= decrement + return Self::get_stake_for_coldkey_and_hotkey(coldkey, hotkey) >= decrement; } // Increases the stake on the hotkey account under its owning coldkey. @@ -546,14 +553,15 @@ impl Pallet { stake: u64, ) { // Verify if the account is a nominator account by checking ownership of the hotkey by the coldkey. - if !Self::coldkey_owns_hotkey(coldkey, hotkey) { + if !Self::coldkey_owns_hotkey(&coldkey, &hotkey) { // If the stake is below the minimum required, it's considered a small nomination and needs to be cleared. if stake < Self::get_nominator_min_required_stake() { // Remove the stake from the nominator account. (this is a more forceful unstake operation which ) // Actually deletes the staking account. - Self::empty_stake_on_coldkey_hotkey_account(coldkey, hotkey); + Self::empty_stake_on_coldkey_hotkey_account(&coldkey, &hotkey); // Convert the removed stake back to balance and add it to the coldkey account. - Self::add_balance_to_coldkey_account(coldkey, stake); + let stake_as_balance = Self::u64_to_balance(stake); + Self::add_balance_to_coldkey_account(&coldkey, stake_as_balance.unwrap()); } } } @@ -569,24 +577,31 @@ impl Pallet { } } + pub fn u64_to_balance( + input: u64, + ) -> Option< + <::Currency as Currency<::AccountId>>::Balance, + > { + input.try_into().ok() + } + pub fn add_balance_to_coldkey_account( coldkey: &T::AccountId, - amount: <::Currency as fungible::Inspect<::AccountId>>::Balance, + amount: <::Currency as Currency<::AccountId>>::Balance, ) { - // infallible - let _ = T::Currency::deposit(coldkey, amount, Precision::BestEffort); + T::Currency::deposit_creating(&coldkey, amount); // Infallibe } pub fn set_balance_on_coldkey_account( coldkey: &T::AccountId, - amount: <::Currency as fungible::Inspect<::AccountId>>::Balance, + amount: <::Currency as Currency<::AccountId>>::Balance, ) { - T::Currency::set_balance(coldkey, amount); + T::Currency::make_free_balance_be(&coldkey, amount); } pub fn can_remove_balance_from_coldkey_account( coldkey: &T::AccountId, - amount: <::Currency as fungible::Inspect<::AccountId>>::Balance, + amount: <::Currency as Currency<::AccountId>>::Balance, ) -> bool { let current_balance = Self::get_coldkey_balance(coldkey); if amount > current_balance { @@ -594,43 +609,36 @@ impl Pallet { } // This bit is currently untested. @todo - - T::Currency::can_withdraw(coldkey, amount) - .into_result(false) - .is_ok() + let new_potential_balance = current_balance - amount; + let can_withdraw = T::Currency::ensure_can_withdraw( + &coldkey, + amount, + WithdrawReasons::except(WithdrawReasons::TIP), + new_potential_balance, + ) + .is_ok(); + can_withdraw } pub fn get_coldkey_balance( coldkey: &T::AccountId, - ) -> <::Currency as fungible::Inspect<::AccountId>>::Balance - { - T::Currency::reducible_balance(coldkey, Preservation::Expendable, Fortitude::Polite) + ) -> <::Currency as Currency<::AccountId>>::Balance { + return T::Currency::free_balance(&coldkey); } - #[must_use = "Balance must be used to preserve total issuance of token"] pub fn remove_balance_from_coldkey_account( coldkey: &T::AccountId, - amount: <::Currency as fungible::Inspect<::AccountId>>::Balance, - ) -> Result { - if amount == 0 { - return Ok(0); - } - - let credit = T::Currency::withdraw( - coldkey, + amount: <::Currency as Currency<::AccountId>>::Balance, + ) -> bool { + return match T::Currency::withdraw( + &coldkey, amount, - Precision::BestEffort, - Preservation::Preserve, - Fortitude::Polite, - ) - .map_err(|_| Error::::BalanceWithdrawalError)? - .peek(); - - if credit == 0 { - return Err(Error::::BalanceWithdrawalError.into()); - } - - Ok(credit) + WithdrawReasons::except(WithdrawReasons::TIP), + ExistenceRequirement::KeepAlive, + ) { + Ok(_result) => true, + Err(_error) => false, + }; } pub fn unstake_all_coldkeys_from_hotkey_account(hotkey: &T::AccountId) { @@ -640,13 +648,26 @@ impl Pallet { hotkey, ) { - // Stake is successfully converted to balance. - - // Remove the stake from the coldkey - hotkey pairing. - Self::decrease_stake_on_coldkey_hotkey_account(&delegate_coldkey_i, hotkey, stake_i); - - // Add the balance to the coldkey account. - Self::add_balance_to_coldkey_account(&delegate_coldkey_i, stake_i); + // Convert to balance and add to the coldkey account. + let stake_i_as_balance = Self::u64_to_balance(stake_i); + if stake_i_as_balance.is_none() { + continue; // Don't unstake if we can't convert to balance. + } else { + // Stake is successfully converted to balance. + + // Remove the stake from the coldkey - hotkey pairing. + Self::decrease_stake_on_coldkey_hotkey_account( + &delegate_coldkey_i, + hotkey, + stake_i, + ); + + // Add the balance to the coldkey account. + Self::add_balance_to_coldkey_account( + &delegate_coldkey_i, + stake_i_as_balance.unwrap(), + ); + } } } } diff --git a/pallets/subtensor/src/subnet_info.rs b/pallets/subtensor/src/subnet_info.rs index b9203da0e..f2346fafb 100644 --- a/pallets/subtensor/src/subnet_info.rs +++ b/pallets/subtensor/src/subnet_info.rs @@ -2,6 +2,7 @@ use super::*; use frame_support::pallet_prelude::{Decode, Encode}; use frame_support::storage::IterableStorageMap; extern crate alloc; +use alloc::vec::Vec; use codec::Compact; #[derive(Decode, Encode, PartialEq, Eq, Clone, Debug)] @@ -80,10 +81,10 @@ impl Pallet { // network_connect.push([_netuid_, con_req]); // } - Some(SubnetInfo { + return Some(SubnetInfo { rho: rho.into(), kappa: kappa.into(), - difficulty, + difficulty: difficulty.into(), immunity_period: immunity_period.into(), netuid: netuid.into(), max_allowed_validators: max_allowed_validators.into(), @@ -98,8 +99,8 @@ impl Pallet { network_connect, emission_values: emission_values.into(), burn, - owner: Self::get_subnet_owner(netuid), - }) + owner: Self::get_subnet_owner(netuid).into(), + }); } pub fn get_subnets_info() -> Vec>> { @@ -121,7 +122,7 @@ impl Pallet { } } - subnets_info + return subnets_info; } pub fn get_subnet_hyperparams(netuid: u16) -> Option { @@ -152,7 +153,8 @@ impl Pallet { let adjustment_alpha = Self::get_adjustment_alpha(netuid); let difficulty = Self::get_difficulty_as_u64(netuid); - Some(SubnetHyperparams { + + return Some(SubnetHyperparams { rho: rho.into(), kappa: kappa.into(), immunity_period: immunity_period.into(), @@ -174,7 +176,7 @@ impl Pallet { serving_rate_limit: serving_rate_limit.into(), max_validators: max_validators.into(), adjustment_alpha: adjustment_alpha.into(), - difficulty: difficulty.into(), - }) + difficulty: difficulty.into() + }); } } diff --git a/pallets/subtensor/src/uids.rs b/pallets/subtensor/src/uids.rs index 88c5b0e09..306d4f9b5 100644 --- a/pallets/subtensor/src/uids.rs +++ b/pallets/subtensor/src/uids.rs @@ -1,13 +1,15 @@ use super::*; +use frame_support::pallet_prelude::DispatchError; use frame_support::sp_std::vec; use frame_support::storage::IterableStorageDoubleMap; use frame_support::storage::IterableStorageMap; +use sp_std::vec::Vec; impl Pallet { // Returns the number of filled slots on a network. /// pub fn get_subnetwork_n(netuid: u16) -> u16 { - SubnetworkN::::get(netuid) + return SubnetworkN::::get(netuid); } // Replace the neuron under this uid. @@ -85,13 +87,13 @@ impl Pallet { // Returns true if the uid is set on the network. // pub fn is_uid_exist_on_network(netuid: u16, uid: u16) -> bool { - Keys::::contains_key(netuid, uid) + return Keys::::contains_key(netuid, uid); } // Returns true if the hotkey holds a slot on the network. // pub fn is_hotkey_registered_on_network(netuid: u16, hotkey: &T::AccountId) -> bool { - Uids::::contains_key(netuid, hotkey) + return Uids::::contains_key(netuid, hotkey); } // Returs the hotkey under the network uid as a Result. Ok if the uid is taken. @@ -109,18 +111,19 @@ impl Pallet { netuid: u16, hotkey: &T::AccountId, ) -> Result { - Uids::::try_get(netuid, hotkey).map_err(|_err| Error::::NotRegistered.into()) + return Uids::::try_get(netuid, &hotkey) + .map_err(|_err| Error::::NotRegistered.into()); } // Returns the stake of the uid on network or 0 if it doesnt exist. // pub fn get_stake_for_uid_and_subnetwork(netuid: u16, neuron_uid: u16) -> u64 { if Self::is_uid_exist_on_network(netuid, neuron_uid) { - Self::get_total_stake_for_hotkey( + return Self::get_total_stake_for_hotkey( &Self::get_hotkey_for_net_and_uid(netuid, neuron_uid).unwrap(), - ) + ); } else { - 0 + return 0; } } @@ -129,9 +132,9 @@ impl Pallet { pub fn get_number_of_subnets() -> u16 { let mut number_of_subnets: u16 = 0; for (_, _) in as IterableStorageMap>::iter() { - number_of_subnets += 1; + number_of_subnets = number_of_subnets + 1; } - number_of_subnets + return number_of_subnets; } // Return a list of all networks a hotkey is registered on. diff --git a/pallets/subtensor/src/utils.rs b/pallets/subtensor/src/utils.rs index 91b2d0b26..258d5e306 100644 --- a/pallets/subtensor/src/utils.rs +++ b/pallets/subtensor/src/utils.rs @@ -1,5 +1,7 @@ use super::*; use crate::system::{ensure_root, ensure_signed_or_root}; +use frame_support::inherent::Vec; +use frame_support::pallet_prelude::DispatchResult; use sp_core::U256; impl Pallet { @@ -10,7 +12,7 @@ impl Pallet { let coldkey = ensure_signed_or_root(o); match coldkey { Ok(Some(who)) if SubnetOwner::::get(netuid) == who => Ok(()), - Ok(Some(_)) => Err(DispatchError::BadOrigin), + Ok(Some(_)) => Err(DispatchError::BadOrigin.into()), Ok(None) => Ok(()), Err(x) => Err(x.into()), } @@ -138,17 +140,8 @@ impl Pallet { pub fn set_target_stakes_per_interval(target_stakes_per_interval: u64) { TargetStakesPerInterval::::set(target_stakes_per_interval) } - pub fn set_stakes_this_interval_for_coldkey_hotkey( - coldkey: &T::AccountId, - hotkey: &T::AccountId, - stakes_this_interval: u64, - last_staked_block_number: u64, - ) { - TotalHotkeyColdkeyStakesThisInterval::::insert( - coldkey, - hotkey, - (stakes_this_interval, last_staked_block_number), - ); + pub fn set_stakes_this_interval_for_coldkey_hotkey(coldkey: &T::AccountId, hotkey: &T::AccountId, stakes_this_interval: u64, last_staked_block_number: u64) { + TotalHotkeyColdkeyStakesThisInterval::::insert(coldkey, hotkey, (stakes_this_interval, last_staked_block_number)); } pub fn set_stake_interval(block: u64) { StakeInterval::::set(block); @@ -156,89 +149,89 @@ impl Pallet { pub fn get_rank_for_uid(netuid: u16, uid: u16) -> u16 { let vec = Rank::::get(netuid); if (uid as usize) < vec.len() { - vec[uid as usize] + return vec[uid as usize]; } else { - 0 + return 0; } } pub fn get_trust_for_uid(netuid: u16, uid: u16) -> u16 { let vec = Trust::::get(netuid); if (uid as usize) < vec.len() { - vec[uid as usize] + return vec[uid as usize]; } else { - 0 + return 0; } } pub fn get_emission_for_uid(netuid: u16, uid: u16) -> u64 { let vec = Emission::::get(netuid); if (uid as usize) < vec.len() { - vec[uid as usize] + return vec[uid as usize]; } else { - 0 + return 0; } } pub fn get_active_for_uid(netuid: u16, uid: u16) -> bool { let vec = Active::::get(netuid); if (uid as usize) < vec.len() { - vec[uid as usize] + return vec[uid as usize]; } else { - false + return false; } } pub fn get_consensus_for_uid(netuid: u16, uid: u16) -> u16 { let vec = Consensus::::get(netuid); if (uid as usize) < vec.len() { - vec[uid as usize] + return vec[uid as usize]; } else { - 0 + return 0; } } pub fn get_incentive_for_uid(netuid: u16, uid: u16) -> u16 { let vec = Incentive::::get(netuid); if (uid as usize) < vec.len() { - vec[uid as usize] + return vec[uid as usize]; } else { - 0 + return 0; } } pub fn get_dividends_for_uid(netuid: u16, uid: u16) -> u16 { let vec = Dividends::::get(netuid); if (uid as usize) < vec.len() { - vec[uid as usize] + return vec[uid as usize]; } else { - 0 + return 0; } } pub fn get_last_update_for_uid(netuid: u16, uid: u16) -> u64 { let vec = LastUpdate::::get(netuid); if (uid as usize) < vec.len() { - vec[uid as usize] + return vec[uid as usize]; } else { - 0 + return 0; } } pub fn get_pruning_score_for_uid(netuid: u16, uid: u16) -> u16 { let vec = PruningScores::::get(netuid); if (uid as usize) < vec.len() { - vec[uid as usize] + return vec[uid as usize]; } else { - u16::MAX + return u16::MAX; } } pub fn get_validator_trust_for_uid(netuid: u16, uid: u16) -> u16 { let vec = ValidatorTrust::::get(netuid); if (uid as usize) < vec.len() { - vec[uid as usize] + return vec[uid as usize]; } else { - 0 + return 0; } } pub fn get_validator_permit_for_uid(netuid: u16, uid: u16) -> bool { let vec = ValidatorPermit::::get(netuid); if (uid as usize) < vec.len() { - vec[uid as usize] + return vec[uid as usize]; } else { - false + return false; } } pub fn get_weights_min_stake() -> u64 { @@ -300,7 +293,7 @@ impl Pallet { return false; } - current_block - prev_tx_block <= rate_limit + return current_block - prev_tx_block <= rate_limit; } // ======================== @@ -309,7 +302,7 @@ impl Pallet { pub fn burn_tokens(amount: u64) { TotalIssuance::::put(TotalIssuance::::get().saturating_sub(amount)); } - pub fn coinbase(amount: u64) { + pub fn coinbase(amount: u64 ){ TotalIssuance::::put(TotalIssuance::::get().saturating_add(amount)); } pub fn get_default_take() -> u16 { diff --git a/pallets/subtensor/src/weights.rs b/pallets/subtensor/src/weights.rs index 6969a3a67..4584dfb62 100644 --- a/pallets/subtensor/src/weights.rs +++ b/pallets/subtensor/src/weights.rs @@ -1,6 +1,7 @@ use super::*; use crate::math::*; use frame_support::sp_std::vec; +use sp_std::vec::Vec; impl Pallet { // ---- The implementation for the extrinsic set_weights. @@ -121,8 +122,8 @@ impl Pallet { Error::::IncorrectNetworkVersionKey ); - // --- 9. Get the neuron uid of associated hotkey on network netuid. - + // --- 8. Get the neuron uid of associated hotkey on network netuid. + let neuron_uid; let net_neuron_uid = Self::get_uid_for_net_and_hotkey(netuid, &hotkey); ensure!( net_neuron_uid.is_ok(), @@ -131,7 +132,7 @@ impl Pallet { .unwrap_or(Error::::NotRegistered.into()) ); - let neuron_uid = net_neuron_uid.unwrap(); + neuron_uid = net_neuron_uid.unwrap(); // --- 9. Ensure the uid is not setting weights faster than the weights_set_rate_limit. let current_block: u64 = Self::get_current_block_as_u64(); @@ -211,7 +212,7 @@ impl Pallet { network_version_key, version_key ); - network_version_key == 0 || version_key >= network_version_key + return network_version_key == 0 || version_key >= network_version_key; } // Checks if the neuron has set weights within the weights_set_rate_limit. @@ -226,11 +227,11 @@ impl Pallet { return current_block - last_set_weights >= Self::get_weights_set_rate_limit(netuid); } // --- 3. Non registered peers cant pass. - false + return false; } // Checks for any invalid uids on this network. - pub fn contains_invalid_uids(netuid: u16, uids: &[u16]) -> bool { + pub fn contains_invalid_uids(netuid: u16, uids: &Vec) -> bool { for uid in uids { if !Self::is_uid_exist_on_network(netuid, *uid) { log::debug!( @@ -241,28 +242,33 @@ impl Pallet { return true; } } - false + return false; } // Returns true if the passed uids have the same length of the passed values. - pub fn uids_match_values(uids: &[u16], values: &[u16]) -> bool { - uids.len() == values.len() + pub fn uids_match_values(uids: &Vec, values: &Vec) -> bool { + return uids.len() == values.len(); } // Returns true if the items contain duplicates. - pub fn has_duplicate_uids(items: &[u16]) -> bool { + pub fn has_duplicate_uids(items: &Vec) -> bool { let mut parsed: Vec = Vec::new(); for item in items { - if parsed.contains(item) { + if parsed.contains(&item) { return true; } - parsed.push(*item); + parsed.push(item.clone()); } - false + return false; } // Returns True if setting self-weight or has validator permit. - pub fn check_validator_permit(netuid: u16, uid: u16, uids: &[u16], weights: &[u16]) -> bool { + pub fn check_validator_permit( + netuid: u16, + uid: u16, + uids: &Vec, + weights: &Vec, + ) -> bool { // Check self weight. Allowed to set single value for self weight. if Self::is_self_weight(uid, uids, weights) { return true; @@ -272,7 +278,7 @@ impl Pallet { } // Returns True if the uids and weights are have a valid length for uid on network. - pub fn check_length(netuid: u16, uid: u16, uids: &[u16], weights: &[u16]) -> bool { + pub fn check_length(netuid: u16, uid: u16, uids: &Vec, weights: &Vec) -> bool { let subnet_n: usize = Self::get_subnetwork_n(netuid) as usize; let min_allowed_length: usize = Self::get_min_allowed_weights(netuid) as usize; let min_allowed: usize = { @@ -293,7 +299,7 @@ impl Pallet { return true; } // To few weights. - false + return false; } // Implace normalizes the passed positive integer weights so that they sum to u16 max value. @@ -305,11 +311,11 @@ impl Pallet { weights.iter_mut().for_each(|x| { *x = (*x as u64 * u16::max_value() as u64 / sum) as u16; }); - weights + return weights; } // Returns False if the weights exceed the max_weight_limit for this network. - pub fn max_weight_limited(netuid: u16, uid: u16, uids: &[u16], weights: &[u16]) -> bool { + pub fn max_weight_limited(netuid: u16, uid: u16, uids: &Vec, weights: &Vec) -> bool { // Allow self weights to exceed max weight limit. if Self::is_self_weight(uid, uids, weights) { return true; @@ -326,20 +332,20 @@ impl Pallet { } // Returns true if the uids and weights correspond to a self weight on the uid. - pub fn is_self_weight(uid: u16, uids: &[u16], weights: &[u16]) -> bool { + pub fn is_self_weight(uid: u16, uids: &Vec, weights: &Vec) -> bool { if weights.len() != 1 { return false; } if uid != uids[0] { return false; } - true + return true; } // Returns False is the number of uids exceeds the allowed number of uids for this network. - pub fn check_len_uids_within_allowed(netuid: u16, uids: &[u16]) -> bool { + pub fn check_len_uids_within_allowed(netuid: u16, uids: &Vec) -> bool { let subnetwork_n: u16 = Self::get_subnetwork_n(netuid); // we should expect at most subnetwork_n uids. - uids.len() <= subnetwork_n as usize + return uids.len() <= subnetwork_n as usize; } } diff --git a/pallets/subtensor/tests/block_step.rs b/pallets/subtensor/tests/block_step.rs index ce32ad0e4..c3fad4cf7 100644 --- a/pallets/subtensor/tests/block_step.rs +++ b/pallets/subtensor/tests/block_step.rs @@ -6,7 +6,7 @@ use sp_core::U256; #[test] fn test_loaded_emission() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let n: u16 = 100; let netuid: u16 = 1; let tempo: u16 = 10; @@ -15,7 +15,7 @@ fn test_loaded_emission() { add_network(netuid, tempo, 0); SubtensorModule::set_max_allowed_uids(netuid, n); SubtensorModule::set_adjustment_alpha(netuid, 58000); // Set to old value. - SubtensorModule::set_emission_values(&netuids, emission).unwrap(); + SubtensorModule::set_emission_values(&netuids, emission); for i in 0..n { SubtensorModule::append_neuron(netuid, &U256::from(i), 0); } @@ -86,7 +86,7 @@ fn test_loaded_emission() { #[test] fn test_tuples_to_drain_this_block() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { // pub fn tuples_to_drain_this_block( netuid: u16, tempo: u16, block_number: u64, n_remaining: usize ) -> usize { assert_eq!(SubtensorModule::tuples_to_drain_this_block(0, 1, 0, 10), 10); // drain all epoch block. assert_eq!(SubtensorModule::tuples_to_drain_this_block(0, 0, 0, 10), 10); // drain all no tempo. @@ -125,7 +125,7 @@ fn test_tuples_to_drain_this_block() { #[test] fn test_blocks_until_epoch() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { // Check tempo = 0 block = * netuid = * assert_eq!(SubtensorModule::blocks_until_next_epoch(0, 0, 0), 1000); @@ -147,9 +147,9 @@ fn test_blocks_until_epoch() { } // Check general case. - for netuid in 0..30_u16 { - for block in 0..30_u64 { - for tempo in 1..30_u16 { + for netuid in 0..30 as u16 { + for block in 0..30 as u64 { + for tempo in 1..30 as u16 { assert_eq!( SubtensorModule::blocks_until_next_epoch(netuid, tempo, block), tempo as u64 - (block + netuid as u64 + 1) % (tempo as u64 + 1) @@ -165,7 +165,7 @@ fn test_blocks_until_epoch() { // *********************************************/ #[test] fn test_burn_adjustment() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let burn_cost: u64 = 1000; @@ -215,7 +215,7 @@ fn test_burn_adjustment() { #[test] fn test_burn_adjustment_with_moving_average() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let burn_cost: u64 = 1000; @@ -269,7 +269,7 @@ fn test_burn_adjustment_case_a() { // ==================== // There are too many registrations this interval and most of them are pow registrations // this triggers an increase in the pow difficulty. - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let burn_cost: u64 = 1000; @@ -362,7 +362,7 @@ fn test_burn_adjustment_case_b() { // ==================== // There are too many registrations this interval and most of them are burn registrations // this triggers an increase in the burn cost. - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let burn_cost: u64 = 1000; @@ -444,7 +444,7 @@ fn test_burn_adjustment_case_c() { // ==================== // There are not enough registrations this interval and most of them are POW registrations // this triggers a decrease in the burn cost - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let burn_cost: u64 = 1000; @@ -536,7 +536,7 @@ fn test_burn_adjustment_case_d() { // ==================== // There are not enough registrations this interval and most of them are BURN registrations // this triggers a decrease in the POW difficulty - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let burn_cost: u64 = 1000; @@ -619,7 +619,7 @@ fn test_burn_adjustment_case_e() { // ==================== // There are not enough registrations this interval and nobody registered either POW or BURN // this triggers a decrease in the BURN cost and POW difficulty - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let burn_cost: u64 = 1000; @@ -694,7 +694,7 @@ fn test_burn_adjustment_case_f() { // ==================== // There are too many registrations this interval and the pow and burn registrations are equal // this triggers an increase in the burn cost and pow difficulty - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let burn_cost: u64 = 1000; @@ -769,7 +769,7 @@ fn test_burn_adjustment_case_e_zero_registrations() { // this triggers a decrease in the BURN cost and POW difficulty // BUT there are zero registrations this interval. - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let burn_cost: u64 = 1000; diff --git a/pallets/subtensor/tests/difficulty.rs b/pallets/subtensor/tests/difficulty.rs index 24552261d..6c561b84a 100644 --- a/pallets/subtensor/tests/difficulty.rs +++ b/pallets/subtensor/tests/difficulty.rs @@ -5,7 +5,7 @@ use sp_core::U256; #[test] #[cfg(not(tarpaulin))] fn test_registration_difficulty_adjustment() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { // Create Net 1 let netuid: u16 = 1; let tempo: u16 = 1; @@ -18,7 +18,10 @@ fn test_registration_difficulty_adjustment() { SubtensorModule::set_adjustment_alpha(netuid, 58000); SubtensorModule::set_target_registrations_per_interval(netuid, 2); SubtensorModule::set_adjustment_interval(netuid, 100); - assert!(SubtensorModule::get_network_registration_allowed(netuid)); // Default registration allowed. + assert_eq!( + SubtensorModule::get_network_registration_allowed(netuid), + true + ); // Default registration allowed. // Set values and check. SubtensorModule::set_difficulty(netuid, 20000); @@ -35,7 +38,10 @@ fn test_registration_difficulty_adjustment() { ); // Check set adjustment interval. assert_eq!(SubtensorModule::get_max_registrations_per_block(netuid), 3); // Check set registrations per block. assert_eq!(SubtensorModule::get_max_allowed_uids(netuid), 3); // Check set registrations per block. - assert!(SubtensorModule::get_network_registration_allowed(netuid)); // Check set registration allowed + assert_eq!( + SubtensorModule::get_network_registration_allowed(netuid), + true + ); // Check set registration allowed // Lets register 3 neurons... let hotkey0 = U256::from(0); @@ -68,10 +74,7 @@ fn test_registration_difficulty_adjustment() { assert_eq!(SubtensorModule::get_difficulty_as_u64(netuid), 20000); // Difficulty is unchanged. step_block(1); assert_eq!(SubtensorModule::get_registrations_this_block(netuid), 0); // Registrations have been erased. - - // TODO: are we OK with this change? - assert_eq!(SubtensorModule::get_last_adjustment_block(netuid), 2); // We just adjusted on the first block. - + assert_eq!(SubtensorModule::get_last_adjustment_block(netuid), 1); // We just adjusted on the first block. assert_eq!(SubtensorModule::get_difficulty_as_u64(netuid), 40000); // Difficulty is increased ( 20000 * ( 3 + 1 ) / ( 1 + 1 ) ) = 80_000 assert_eq!(SubtensorModule::get_registrations_this_interval(netuid), 0); // Registrations this interval has been wiped. @@ -105,10 +108,7 @@ fn test_registration_difficulty_adjustment() { assert_eq!(SubtensorModule::get_registrations_this_interval(netuid), 3); // Registrations this interval = 3 step_block(1); // Step - - // TODO: are we OK with this change? - assert_eq!(SubtensorModule::get_last_adjustment_block(netuid), 2); // Still previous adjustment block. - + assert_eq!(SubtensorModule::get_last_adjustment_block(netuid), 1); // Still previous adjustment block. assert_eq!(SubtensorModule::get_registrations_this_block(netuid), 0); // Registrations have been erased. assert_eq!(SubtensorModule::get_registrations_this_interval(netuid), 3); // Registrations this interval = 3 diff --git a/pallets/subtensor/tests/epoch.rs b/pallets/subtensor/tests/epoch.rs index 0bfd11ba4..cfa25757f 100644 --- a/pallets/subtensor/tests/epoch.rs +++ b/pallets/subtensor/tests/epoch.rs @@ -4,7 +4,8 @@ use frame_system::Config; use rand::{distributions::Uniform, rngs::StdRng, seq::SliceRandom, thread_rng, Rng, SeedableRng}; use sp_core::U256; use std::time::Instant; -use substrate_fixed::types::I32F32; +use substrate_fixed::transcendental::{cos, ln, sqrt, PI}; +use substrate_fixed::types::{I32F32, I64F64}; mod mock; pub fn fixed(val: f32) -> I32F32 { @@ -21,13 +22,13 @@ pub fn fixed_proportion_to_u16(x: I32F32) -> u16 { // Normalizes (sum to 1 except 0) the input vector directly in-place. #[allow(dead_code)] -pub fn inplace_normalize(x: &mut [I32F32]) { +pub fn inplace_normalize(x: &mut Vec) { let x_sum: I32F32 = x.iter().sum(); - if x_sum == I32F32::from_num(0.0_f32) { + if x_sum == I32F32::from_num(0.0 as f32) { return; } - for i in x.iter_mut() { - *i /= x_sum; + for i in 0..x.len() { + x[i] = x[i] / x_sum; } } @@ -40,45 +41,45 @@ fn normalize_weights(mut weights: Vec) -> Vec { weights.iter_mut().for_each(|x| { *x = (*x as u64 * u16::max_value() as u64 / sum) as u16; }); - weights + return weights; } -// // Return as usize an I32F32 ratio of a usize input, avoiding the 0% and 100% extremes. -// fn non_extreme_fixed_ratio(ratio: I32F32, total: usize) -> usize { -// if total == 0 { -// return total; -// } -// let mut subset: usize = (ratio * I32F32::from_num(total)).to_num::(); -// if subset == 0 { -// subset = 1; -// } else if subset == total { -// subset = total - 1; -// } -// return subset; -// } +// Return as usize an I32F32 ratio of a usize input, avoiding the 0% and 100% extremes. +fn non_extreme_fixed_ratio(ratio: I32F32, total: usize) -> usize { + if total == 0 { + return total; + } + let mut subset: usize = (ratio * I32F32::from_num(total)).to_num::(); + if subset == 0 { + subset = 1; + } else if subset == total { + subset = total - 1; + } + return subset; +} -// // Box-Muller Transform converting two uniform random samples to a normal random sample. -// fn normal(size: usize, rng: &mut StdRng, dist: &Uniform) -> Vec { -// let max: I32F32 = I32F32::from_num(u16::MAX); -// let two: I32F32 = I32F32::from_num(2); -// let eps: I32F32 = I32F32::from_num(0.000001); -// let pi: I32F32 = I32F32::from_num(PI); - -// let uniform_u16: Vec = (0..(2 * size)).map(|_| rng.sample(&dist)).collect(); -// let uniform: Vec = uniform_u16 -// .iter() -// .map(|&x| I32F32::from_num(x) / max) -// .collect(); -// let mut normal: Vec = vec![I32F32::from_num(0); size as usize]; - -// for i in 0..size { -// let u1: I32F32 = uniform[i] + eps; -// let u2: I32F32 = uniform[i + size] + eps; -// normal[i] = sqrt::(-two * ln::(u1).expect("")).expect("") -// * cos(two * pi * u2); -// } -// normal -// } +// Box-Muller Transform converting two uniform random samples to a normal random sample. +fn normal(size: usize, rng: &mut StdRng, dist: &Uniform) -> Vec { + let max: I32F32 = I32F32::from_num(u16::MAX); + let two: I32F32 = I32F32::from_num(2); + let eps: I32F32 = I32F32::from_num(0.000001); + let pi: I32F32 = I32F32::from_num(PI); + + let uniform_u16: Vec = (0..(2 * size)).map(|_| rng.sample(&dist)).collect(); + let uniform: Vec = uniform_u16 + .iter() + .map(|&x| I32F32::from_num(x) / max) + .collect(); + let mut normal: Vec = vec![I32F32::from_num(0); size as usize]; + + for i in 0..size { + let u1: I32F32 = uniform[i] + eps; + let u2: I32F32 = uniform[i + size] + eps; + normal[i] = sqrt::(-two * ln::(u1).expect("")).expect("") + * cos(two * pi * u2); + } + normal +} // Returns validators and servers uids with either blockwise, regular, or random interleaving. fn distribute_nodes( @@ -103,11 +104,11 @@ fn distribute_nodes( // random interleaving let mut permuted_uids: Vec = (0..network_n as u16).collect(); permuted_uids.shuffle(&mut thread_rng()); - validators = permuted_uids[0..validators_n].into(); - servers = permuted_uids[validators_n..network_n].into(); + validators = permuted_uids[0..validators_n as usize].into(); + servers = permuted_uids[validators_n as usize..network_n as usize].into(); } - (validators, servers) + return (validators, servers); } #[allow(dead_code)] @@ -139,18 +140,17 @@ fn uid_stats(netuid: u16, uid: u16) { ); } -#[allow(clippy::too_many_arguments)] fn init_run_epochs( netuid: u16, n: u16, - validators: &[u16], - servers: &[u16], + validators: &Vec, + servers: &Vec, epochs: u16, stake_per_validator: u64, server_self: bool, - input_stake: &[u64], + input_stake: &Vec, use_input_stake: bool, - input_weights: &[Vec<(u16, u16)>], + input_weights: &Vec>, use_input_weights: bool, random_weights: bool, random_seed: u64, @@ -162,22 +162,23 @@ fn init_run_epochs( // === Register uids SubtensorModule::set_max_allowed_uids(netuid, n); for key in 0..n { - let stake = if use_input_stake { - input_stake[key as usize] - } else if validators.contains(&key) { - stake_per_validator + let stake: u64; + if use_input_stake { + stake = input_stake[key as usize]; } else { - // only validators receive stake - 0 - }; - + stake = if validators.contains(&key) { + stake_per_validator + } else { + 0 + }; // only validators receive stake + } // let stake: u64 = 1; // alternative test: all nodes receive stake, should be same outcome, except stake SubtensorModule::add_balance_to_coldkey_account(&(U256::from(key)), stake); SubtensorModule::append_neuron(netuid, &(U256::from(key)), 0); SubtensorModule::increase_stake_on_coldkey_hotkey_account( &U256::from(key), &U256::from(key), - stake, + stake as u64, ); } assert_eq!(SubtensorModule::get_subnetwork_n(netuid), n); @@ -194,10 +195,10 @@ fn init_run_epochs( // === Set weights let mut rng = StdRng::seed_from_u64(random_seed); // constant seed so weights over multiple runs are equal let range = Uniform::new(0, u16::MAX); - let mut weights: Vec = vec![u16::MAX / n; servers.len()]; + let mut weights: Vec = vec![u16::MAX / n; servers.len() as usize]; for uid in validators { if random_weights { - weights = (0..servers.len()).map(|_| rng.sample(range)).collect(); + weights = (0..servers.len()).map(|_| rng.sample(&range)).collect(); weights = normalize_weights(weights); // assert_eq!(weights.iter().map(|x| *x as u64).sum::(), u16::MAX as u64); // normalized weight sum not always u16::MAX } @@ -216,7 +217,7 @@ fn init_run_epochs( assert_ok!(SubtensorModule::set_weights( RuntimeOrigin::signed(U256::from(*uid as u64)), netuid, - servers.to_vec(), + servers.clone(), weights.clone(), 0 )); @@ -227,7 +228,7 @@ fn init_run_epochs( assert_ok!(SubtensorModule::set_weights( RuntimeOrigin::signed(U256::from(*uid as u64)), netuid, - vec![*uid], + vec![*uid as u16], vec![u16::MAX], 0 )); // server self-weight @@ -258,141 +259,141 @@ fn init_run_epochs( // } } -// // Generate a random graph that is split into a major and minor set, each setting specific weight on itself and the complement on the other. -// fn split_graph( -// major_stake: I32F32, -// major_weight: I32F32, -// minor_weight: I32F32, -// weight_stddev: I32F32, -// validators_n: usize, -// network_n: usize, -// interleave: usize, -// ) -> ( -// Vec, -// Vec, -// Vec, -// Vec, -// Vec, -// Vec, -// Vec, -// Vec>, -// I32F32, -// ) { -// let servers_n: usize = network_n - validators_n; -// let major_servers_n: usize = non_extreme_fixed_ratio(major_stake, servers_n); -// let major_validators_n: usize = non_extreme_fixed_ratio(major_stake, validators_n); - -// let (validators, servers) = distribute_nodes(validators_n, network_n, interleave as usize); -// let major_validators: Vec = (0..major_validators_n).map(|i| validators[i]).collect(); -// let minor_validators: Vec = (major_validators_n..validators_n) -// .map(|i| validators[i]) -// .collect(); -// let major_servers: Vec = (0..major_servers_n).map(|i| servers[i]).collect(); -// let minor_servers: Vec = (major_servers_n..servers_n).map(|i| servers[i]).collect(); - -// let zero: I32F32 = I32F32::from_num(0); -// let one: I32F32 = I32F32::from_num(1); -// let stddev: I32F32 = I32F32::from_num(0.3); -// let total_stake: I64F64 = I64F64::from_num(21_000_000_000_000_000 as u64); -// let mut rng = StdRng::seed_from_u64(0); // constant seed so weights over multiple runs are equal -// let dist = Uniform::new(0, u16::MAX); - -// let mut stake: Vec = vec![0; network_n]; -// let mut stake_fixed: Vec = vec![zero; network_n]; -// for (ratio, vals) in vec![ -// (major_stake, &major_validators), -// (one - major_stake, &minor_validators), -// ] { -// let mut sample = normal(vals.len(), &mut rng, &dist) -// .iter() -// .map(|x: &I32F32| { -// let v: I32F32 = (stddev * x) + one; -// if v < zero { -// zero -// } else { -// v -// } -// }) -// .collect(); -// inplace_normalize(&mut sample); -// for (i, &val) in vals.iter().enumerate() { -// stake[val as usize] = -// (I64F64::from_num(ratio) * I64F64::from_num(sample[i]) * total_stake) -// .to_num::(); -// stake_fixed[val as usize] = -// I32F32::from_num(I64F64::from_num(ratio) * I64F64::from_num(sample[i])); -// } -// } +// Generate a random graph that is split into a major and minor set, each setting specific weight on itself and the complement on the other. +fn split_graph( + major_stake: I32F32, + major_weight: I32F32, + minor_weight: I32F32, + weight_stddev: I32F32, + validators_n: usize, + network_n: usize, + interleave: usize, +) -> ( + Vec, + Vec, + Vec, + Vec, + Vec, + Vec, + Vec, + Vec>, + I32F32, +) { + let servers_n: usize = network_n - validators_n; + let major_servers_n: usize = non_extreme_fixed_ratio(major_stake, servers_n); + let major_validators_n: usize = non_extreme_fixed_ratio(major_stake, validators_n); + + let (validators, servers) = distribute_nodes(validators_n, network_n, interleave as usize); + let major_validators: Vec = (0..major_validators_n).map(|i| validators[i]).collect(); + let minor_validators: Vec = (major_validators_n..validators_n) + .map(|i| validators[i]) + .collect(); + let major_servers: Vec = (0..major_servers_n).map(|i| servers[i]).collect(); + let minor_servers: Vec = (major_servers_n..servers_n).map(|i| servers[i]).collect(); + + let zero: I32F32 = I32F32::from_num(0); + let one: I32F32 = I32F32::from_num(1); + let stddev: I32F32 = I32F32::from_num(0.3); + let total_stake: I64F64 = I64F64::from_num(21_000_000_000_000_000 as u64); + let mut rng = StdRng::seed_from_u64(0); // constant seed so weights over multiple runs are equal + let dist = Uniform::new(0, u16::MAX); + + let mut stake: Vec = vec![0; network_n]; + let mut stake_fixed: Vec = vec![zero; network_n]; + for (ratio, vals) in vec![ + (major_stake, &major_validators), + (one - major_stake, &minor_validators), + ] { + let mut sample = normal(vals.len(), &mut rng, &dist) + .iter() + .map(|x: &I32F32| { + let v: I32F32 = (stddev * x) + one; + if v < zero { + zero + } else { + v + } + }) + .collect(); + inplace_normalize(&mut sample); + for (i, &val) in vals.iter().enumerate() { + stake[val as usize] = + (I64F64::from_num(ratio) * I64F64::from_num(sample[i]) * total_stake) + .to_num::(); + stake_fixed[val as usize] = + I32F32::from_num(I64F64::from_num(ratio) * I64F64::from_num(sample[i])); + } + } -// let mut weights: Vec> = vec![vec![]; network_n as usize]; -// let mut weights_fixed: Vec> = vec![vec![zero; network_n]; network_n]; -// for (first, second, vals) in vec![ -// (major_weight, one - major_weight, &major_validators), -// (one - minor_weight, minor_weight, &minor_validators), -// ] { -// for &val in vals { -// for (weight, srvs) in vec![(first, &major_servers), (second, &minor_servers)] { -// let mut sample: Vec = normal(srvs.len(), &mut rng, &dist) -// .iter() -// .map(|x: &I32F32| { -// let v: I32F32 = (weight_stddev * x) + one; -// if v < zero { -// zero -// } else { -// v -// } -// }) -// .collect(); -// inplace_normalize(&mut sample); - -// for (i, &srv) in srvs.iter().enumerate() { -// weights[val as usize].push((srv, fixed_proportion_to_u16(weight * sample[i]))); -// weights_fixed[val as usize][srv as usize] = weight * sample[i]; -// } -// } -// inplace_normalize(&mut weights_fixed[val as usize]); -// } -// } + let mut weights: Vec> = vec![vec![]; network_n as usize]; + let mut weights_fixed: Vec> = vec![vec![zero; network_n]; network_n]; + for (first, second, vals) in vec![ + (major_weight, one - major_weight, &major_validators), + (one - minor_weight, minor_weight, &minor_validators), + ] { + for &val in vals { + for (weight, srvs) in vec![(first, &major_servers), (second, &minor_servers)] { + let mut sample: Vec = normal(srvs.len(), &mut rng, &dist) + .iter() + .map(|x: &I32F32| { + let v: I32F32 = (weight_stddev * x) + one; + if v < zero { + zero + } else { + v + } + }) + .collect(); + inplace_normalize(&mut sample); + + for (i, &srv) in srvs.iter().enumerate() { + weights[val as usize].push((srv, fixed_proportion_to_u16(weight * sample[i]))); + weights_fixed[val as usize][srv as usize] = weight * sample[i]; + } + } + inplace_normalize(&mut weights_fixed[val as usize]); + } + } -// inplace_normalize(&mut stake_fixed); + inplace_normalize(&mut stake_fixed); -// // Calculate stake-weighted mean per server -// let mut weight_mean: Vec = vec![zero; network_n]; -// for val in 0..network_n { -// if stake_fixed[val] > zero { -// for srv in 0..network_n { -// weight_mean[srv] += stake_fixed[val] * weights_fixed[val][srv]; -// } -// } -// } + // Calculate stake-weighted mean per server + let mut weight_mean: Vec = vec![zero; network_n]; + for val in 0..network_n { + if stake_fixed[val] > zero { + for srv in 0..network_n { + weight_mean[srv] += stake_fixed[val] * weights_fixed[val][srv]; + } + } + } -// // Calculate stake-weighted absolute standard deviation -// let mut weight_dev: Vec = vec![zero; network_n]; -// for val in 0..network_n { -// if stake_fixed[val] > zero { -// for srv in 0..network_n { -// weight_dev[srv] += -// stake_fixed[val] * (weight_mean[srv] - weights_fixed[val][srv]).abs(); -// } -// } -// } + // Calculate stake-weighted absolute standard deviation + let mut weight_dev: Vec = vec![zero; network_n]; + for val in 0..network_n { + if stake_fixed[val] > zero { + for srv in 0..network_n { + weight_dev[srv] += + stake_fixed[val] * (weight_mean[srv] - weights_fixed[val][srv]).abs(); + } + } + } -// // Calculate rank-weighted mean of weight_dev -// let avg_weight_dev: I32F32 = -// weight_dev.iter().sum::() / weight_mean.iter().sum::(); - -// ( -// validators, -// servers, -// major_validators, -// minor_validators, -// major_servers, -// minor_servers, -// stake, -// weights, -// avg_weight_dev, -// ) -// } + // Calculate rank-weighted mean of weight_dev + let avg_weight_dev: I32F32 = + weight_dev.iter().sum::() / weight_mean.iter().sum::(); + + ( + validators, + servers, + major_validators, + minor_validators, + major_servers, + minor_servers, + stake, + weights, + avg_weight_dev, + ) +} // Test consensus guarantees with an epoch on a graph with 4096 nodes, of which the first 128 are validators, the graph is split into a major and minor set, each setting specific weight on itself and the complement on the other. Asserts that the major emission ratio >= major stake ratio. // #[test] @@ -439,7 +440,7 @@ fn init_run_epochs( // interleave as usize, // ); -// new_test_ext(1).execute_with(|| { +// new_test_ext().execute_with(|| { // init_run_epochs( // netuid, // network_n, @@ -481,7 +482,7 @@ fn init_run_epochs( // Test an epoch on an empty graph. // #[test] // fn test_overflow() { -// new_test_ext(1).execute_with(|| { +// new_test_ext().execute_with(|| { // log::info!("test_overflow:"); // let netuid: u16 = 1; // add_network(netuid, 0, 0); @@ -535,7 +536,7 @@ fn init_run_epochs( // Test an epoch on an empty graph. // #[test] // fn test_nill_epoch_subtensor() { -// new_test_ext(1).execute_with(|| { +// new_test_ext().execute_with(|| { // log::info!("test_nill_epoch:"); // SubtensorModule::epoch(0, 0); // }); @@ -544,7 +545,7 @@ fn init_run_epochs( // Test an epoch on a graph with a single item. #[test] fn test_1_graph() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { log::info!("test_1_graph:"); let netuid: u16 = 1; let coldkey = U256::from(0); @@ -561,13 +562,13 @@ fn test_1_graph() { assert_ok!(SubtensorModule::set_weights( RuntimeOrigin::signed(U256::from(uid)), netuid, - vec![uid], + vec![uid as u16], vec![u16::MAX], 0 )); // SubtensorModule::set_weights_for_testing( netuid, i as u16, vec![ ( 0, u16::MAX )]); // doesn't set update status // SubtensorModule::set_bonds_for_testing( netuid, uid, vec![ ( 0, u16::MAX )]); // rather, bonds are calculated in epoch - SubtensorModule::set_emission_values(&[netuid], vec![1_000_000_000]).unwrap(); + SubtensorModule::set_emission_values(&vec![netuid], vec![1_000_000_000]); assert_eq!( SubtensorModule::get_subnet_emission_value(netuid), 1_000_000_000 @@ -592,7 +593,7 @@ fn test_1_graph() { // Test an epoch on a graph with two items. #[test] fn test_10_graph() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { log::info!("test_10_graph"); // Function for adding a nodes to the graph. pub fn add_node(netuid: u16, coldkey: U256, hotkey: U256, uid: u16, stake_amount: u64) { @@ -664,7 +665,7 @@ fn test_512_graph() { let epochs: u16 = 3; log::info!("test_{network_n:?}_graph ({validators_n:?} validators)"); for interleave in 0..3 { - for server_self in [false, true] { + for server_self in vec![false, true] { // server-self weight off/on let (validators, servers) = distribute_nodes( validators_n as usize, @@ -673,7 +674,7 @@ fn test_512_graph() { ); let server: usize = servers[0] as usize; let validator: usize = validators[0] as usize; - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { init_run_epochs( netuid, network_n, @@ -682,9 +683,9 @@ fn test_512_graph() { epochs, max_stake_per_validator, server_self, - &[], + &vec![], false, - &[], + &vec![], false, false, 0, @@ -734,7 +735,7 @@ fn test_512_graph_random_weights() { let epochs: u16 = 1; log::info!("test_{network_n:?}_graph_random_weights ({validators_n:?} validators)"); for interleave in 0..3 { - for server_self in [false, true] { + for server_self in vec![false, true] { // server-self weight off/on let (validators, servers) = distribute_nodes( validators_n as usize, @@ -743,7 +744,6 @@ fn test_512_graph_random_weights() { ); let server: usize = servers[0] as usize; let validator: usize = validators[0] as usize; - #[allow(clippy::type_complexity)] let (mut rank, mut incentive, mut dividend, mut emission, mut bondv, mut bonds): ( Vec, Vec, @@ -754,7 +754,7 @@ fn test_512_graph_random_weights() { ) = (vec![], vec![], vec![], vec![], vec![], vec![]); // Dense epoch - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { init_run_epochs( netuid, network_n, @@ -763,9 +763,9 @@ fn test_512_graph_random_weights() { epochs, 1, server_self, - &[], + &vec![], false, - &[], + &vec![], false, true, interleave as u64, @@ -784,7 +784,7 @@ fn test_512_graph_random_weights() { }); // Sparse epoch (same random seed as dense) - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { init_run_epochs( netuid, network_n, @@ -793,9 +793,9 @@ fn test_512_graph_random_weights() { epochs, 1, server_self, - &[], + &vec![], false, - &[], + &vec![], false, true, interleave as u64, @@ -846,9 +846,9 @@ fn test_4096_graph() { ); let server: usize = servers[0] as usize; let validator: usize = validators[0] as usize; - for server_self in [false, true] { + for server_self in vec![false, true] { // server-self weight off/on - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { init_run_epochs( netuid, network_n, @@ -857,9 +857,9 @@ fn test_4096_graph() { epochs, max_stake_per_validator, server_self, - &[], + &vec![], false, - &[], + &vec![], false, false, 0, @@ -907,7 +907,7 @@ fn test_4096_graph() { // #[test] #[allow(dead_code)] fn test_16384_graph_sparse() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let n: u16 = 16384; let validators_n: u16 = 512; @@ -924,9 +924,9 @@ fn test_16384_graph_sparse() { epochs, 1, false, - &[], + &vec![], false, - &[], + &vec![], false, false, 0, @@ -970,14 +970,14 @@ fn test_16384_graph_sparse() { // Test bonds exponential moving average over a sequence of epochs. #[test] fn test_bonds() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let sparse: bool = true; let n: u16 = 8; let netuid: u16 = 1; let tempo: u16 = u16::MAX - 1; // high tempo to skip automatic epochs in on_initialize, use manual epochs instead + let block_number: u64 = 0; let max_stake: u64 = 4; let stakes: Vec = vec![1, 2, 3, 4, 0, 0, 0, 0]; - let block_number = System::block_number(); add_network(netuid, tempo, 0); SubtensorModule::set_max_allowed_uids( netuid, n ); assert_eq!(SubtensorModule::get_max_allowed_uids(netuid), n); @@ -1001,7 +1001,7 @@ fn test_bonds() { SubtensorModule::set_max_allowed_validators(netuid, n); assert_eq!( SubtensorModule::get_max_allowed_validators(netuid), n); SubtensorModule::epoch( netuid, 1_000_000_000 ); // run first epoch to set allowed validators - next_block(); // run to next block to ensure weights are set on nodes after their registration block + run_to_block( 1 ); // run to next block to ensure weights are set on nodes after their registration block // === Set weights [val->srv1: 0.1, val->srv2: 0.2, val->srv3: 0.3, val->srv4: 0.4] for uid in 0..(n/2) as u64 { @@ -1051,7 +1051,7 @@ fn test_bonds() { // === Set self-weight only on val1 let uid = 0; assert_ok!(SubtensorModule::set_weights(RuntimeOrigin::signed(U256::from(uid)), netuid, vec![uid], vec![u16::MAX], 0)); - next_block(); + run_to_block(2); if sparse { SubtensorModule::epoch( netuid, 1_000_000_000 ); } else { SubtensorModule::epoch_dense( netuid, 1_000_000_000 ); } /* n: 8 @@ -1098,7 +1098,7 @@ fn test_bonds() { // === Set self-weight only on val2 let uid = 1; assert_ok!(SubtensorModule::set_weights(RuntimeOrigin::signed(U256::from(uid)), netuid, vec![uid], vec![u16::MAX], 0)); - next_block(); + run_to_block(3); if sparse { SubtensorModule::epoch( netuid, 1_000_000_000 ); } else { SubtensorModule::epoch_dense( netuid, 1_000_000_000 ); } /* current_block: 3 @@ -1134,7 +1134,7 @@ fn test_bonds() { // === Set self-weight only on val3 let uid = 2; assert_ok!(SubtensorModule::set_weights(RuntimeOrigin::signed(U256::from(uid)), netuid, vec![uid], vec![u16::MAX], 0)); - next_block(); + run_to_block(4); if sparse { SubtensorModule::epoch( netuid, 1_000_000_000 ); } else { SubtensorModule::epoch_dense( netuid, 1_000_000_000 ); } /* current_block: 4 @@ -1169,7 +1169,7 @@ fn test_bonds() { // === Set val3->srv4: 1 assert_ok!(SubtensorModule::set_weights(RuntimeOrigin::signed(U256::from(2)), netuid, vec![7], vec![u16::MAX], 0)); - next_block(); + run_to_block(5); if sparse { SubtensorModule::epoch( netuid, 1_000_000_000 ); } else { SubtensorModule::epoch_dense( netuid, 1_000_000_000 ); } /* current_block: 5 @@ -1202,7 +1202,7 @@ fn test_bonds() { assert_eq!(bonds[2][7], 49150); assert_eq!(bonds[3][7], 65535); - next_block(); + run_to_block(6); if sparse { SubtensorModule::epoch( netuid, 1_000_000_000 ); } else { SubtensorModule::epoch_dense( netuid, 1_000_000_000 ); } /* current_block: 6 @@ -1223,7 +1223,7 @@ fn test_bonds() { assert_eq!(bonds[2][7], 49150); assert_eq!(bonds[3][7], 65535); - next_block(); + run_to_block(7); if sparse { SubtensorModule::epoch( netuid, 1_000_000_000 ); } else { SubtensorModule::epoch_dense( netuid, 1_000_000_000 ); } /* current_block: 7 @@ -1244,7 +1244,7 @@ fn test_bonds() { assert_eq!(bonds[2][7], 49150); assert_eq!(bonds[3][7], 65535); - next_block(); + run_to_block(8); if sparse { SubtensorModule::epoch( netuid, 1_000_000_000 ); } else { SubtensorModule::epoch_dense( netuid, 1_000_000_000 ); } /* current_block: 8 @@ -1265,13 +1265,12 @@ fn test_bonds() { // Test that epoch masks out inactive stake of validators with outdated weights beyond activity cutoff. #[test] fn test_active_stake() { - new_test_ext(1).execute_with(|| { - System::set_block_number(0); + new_test_ext().execute_with(|| { let sparse: bool = true; let n: u16 = 4; let netuid: u16 = 1; let tempo: u16 = u16::MAX - 1; // high tempo to skip automatic epochs in on_initialize, use manual epochs instead - let block_number: u64 = System::block_number(); + let block_number: u64 = 0; let stake: u64 = 1; add_network(netuid, tempo, 0); SubtensorModule::set_max_allowed_uids(netuid, n); @@ -1312,7 +1311,7 @@ fn test_active_stake() { SubtensorModule::set_max_allowed_validators(netuid, n); assert_eq!(SubtensorModule::get_max_allowed_validators(netuid), n); SubtensorModule::epoch(netuid, 1_000_000_000); // run first epoch to set allowed validators - next_block(); // run to next block to ensure weights are set on nodes after their registration block + run_to_block(1); // run to next block to ensure weights are set on nodes after their registration block // === Set weights [val1->srv1: 0.5, val1->srv2: 0.5, val2->srv1: 0.5, val2->srv2: 0.5] for uid in 0..(n / 2) as u64 { @@ -1330,7 +1329,7 @@ fn test_active_stake() { SubtensorModule::epoch_dense(netuid, 1_000_000_000); } let bonds = SubtensorModule::get_bonds(netuid); - for uid in 0..n { + for uid in 0..n as u16 { // log::info!("\n{uid}" ); // uid_stats(netuid, uid); // log::info!("bonds: {:?}", bonds[uid as usize]); @@ -1343,13 +1342,12 @@ fn test_active_stake() { 250000000 ); // Note E = 0.5 / (n/2) * 1_000_000_000 = 250_000_000 } - for bond in bonds.iter().take((n / 2) as usize) { - // for on_validator in 0..(n / 2) as usize { - for i in bond.iter().take((n / 2) as usize) { - assert_eq!(*i, 0); + for validator in 0..(n / 2) as usize { + for on_validator in 0..(n / 2) as usize { + assert_eq!(bonds[validator][on_validator], 0); } - for i in bond.iter().take(n as usize).skip((n / 2) as usize) { - assert_eq!(*i, I32F32::from_num(65_535)); // floor(0.5*(2^16-1))/(2^16-1), then max-upscale to 65_535 + for server in ((n / 2) as usize)..n as usize { + assert_eq!(bonds[validator][server], I32F32::from_num(65_535)); // floor(0.5*(2^16-1))/(2^16-1), then max-upscale to 65_535 } } let activity_cutoff: u64 = SubtensorModule::get_activity_cutoff(netuid) as u64; @@ -1400,7 +1398,7 @@ fn test_active_stake() { for server in ((n / 2) as usize)..n as usize { assert_eq!(bonds[0][server], I32F32::from_num(65_535)); // floor(0.55*(2^16-1))/(2^16-1), then max-upscale } - for validator in 1..(n / 2) { + for validator in 1..(n / 2) as u16 { assert_eq!( SubtensorModule::get_dividends_for_uid(netuid, validator), 29490 @@ -1472,12 +1470,12 @@ fn test_active_stake() { // Test that epoch masks out outdated weights and bonds of validators on deregistered servers. #[test] fn test_outdated_weights() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let sparse: bool = true; let n: u16 = 4; let netuid: u16 = 1; let tempo: u16 = u16::MAX - 1; // high tempo to skip automatic epochs in on_initialize, use manual epochs instead - let mut block_number: u64 = System::block_number(); + let mut block_number: u64 = 0; let stake: u64 = 1; add_network(netuid, tempo, 0); SubtensorModule::set_max_allowed_uids(netuid, n); @@ -1486,7 +1484,6 @@ fn test_outdated_weights() { SubtensorModule::set_target_registrations_per_interval(netuid, n); SubtensorModule::set_min_allowed_weights(netuid, 0); SubtensorModule::set_max_weight_limit(netuid, u16::MAX); - assert_eq!(SubtensorModule::get_registrations_this_block(netuid), 0); // === Register [validator1, validator2, server1, server2] for key in 0..n as u64 { @@ -1513,15 +1510,13 @@ fn test_outdated_weights() { ); } assert_eq!(SubtensorModule::get_subnetwork_n(netuid), n); - assert_eq!(SubtensorModule::get_registrations_this_block(netuid), 4); // === Issue validator permits SubtensorModule::set_max_allowed_validators(netuid, n); assert_eq!(SubtensorModule::get_max_allowed_validators(netuid), n); SubtensorModule::epoch(netuid, 1_000_000_000); // run first epoch to set allowed validators - assert_eq!(SubtensorModule::get_registrations_this_block(netuid), 4); - block_number = next_block(); // run to next block to ensure weights are set on nodes after their registration block - assert_eq!(SubtensorModule::get_registrations_this_block(netuid), 0); + run_to_block(1); + block_number += 1; // run to next block to ensure weights are set on nodes after their registration block // === Set weights [val1->srv1: 2/3, val1->srv2: 1/3, val2->srv1: 2/3, val2->srv2: 1/3, srv1->srv1: 1, srv2->srv2: 1] for uid in 0..(n / 2) as u64 { @@ -1583,9 +1578,6 @@ fn test_outdated_weights() { 0, &U256::from(new_key), ); - assert_eq!(System::block_number(), block_number); - assert_eq!(SubtensorModule::get_max_registrations_per_block(netuid), n); - assert_eq!(SubtensorModule::get_registrations_this_block(netuid), 0); assert_ok!(SubtensorModule::register( <::RuntimeOrigin>::signed(U256::from(new_key)), netuid, @@ -1601,7 +1593,7 @@ fn test_outdated_weights() { SubtensorModule::get_hotkey_for_net_and_uid(netuid, deregistered_uid) .expect("Not registered") ); - next_block(); // run to next block to outdate weights and bonds set on deregistered uid + run_to_block(2); // run to next block to outdate weights and bonds set on deregistered uid // === Update weights from only uid=0 assert_ok!(SubtensorModule::set_weights( @@ -1657,7 +1649,7 @@ fn test_outdated_weights() { // Test the zero emission handling and fallback under zero effective weight conditions, to ensure non-zero effective emission. #[test] fn test_zero_weights() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let sparse: bool = true; let n: u16 = 2; let netuid: u16 = 1; @@ -1713,13 +1705,13 @@ fn test_zero_weights() { B: [[], []]; B (outdatedmask): [[], []]; B (mask+norm): [[], []]; ΔB: [[], []]; ΔB (norm): [[], []]; emaB: [[], []]; D: [0, 0] E: [1000000000, 0]; P: [1, 0] */ - for validator in 0..(n / 2) { + for validator in 0..(n / 2) as u16 { assert_eq!( SubtensorModule::get_emission_for_uid(netuid, validator), 1000000000 ); // Note E = 1 * 1_000_000_000 } - for server in (n / 2)..n { + for server in (n / 2)..n as u16 { assert_eq!(SubtensorModule::get_emission_for_uid(netuid, server), 0); // no stake } @@ -1749,13 +1741,13 @@ fn test_zero_weights() { B: [[], []]: B (outdatedmask): [[], []]; B (mask+norm): [[], []] ΔB: [[], []]; ΔB (norm): [[], []]; emaB: [[], []]; D: [0, 0] E: [1000000000, 0]; P: [1, 0] */ - for validator in 0..(n / 2) { + for validator in 0..(n / 2) as u16 { assert_eq!( SubtensorModule::get_emission_for_uid(netuid, validator), 1000000000 ); // Note E = 1 * 1_000_000_000 } - for server in (n / 2)..n { + for server in (n / 2)..n as u16 { assert_eq!(SubtensorModule::get_emission_for_uid(netuid, server), 0); // no stake } @@ -1804,13 +1796,13 @@ fn test_zero_weights() { B: [[], []]; B (outdatedmask): [[], []]; B (mask+norm): [[], []]; ΔB: [[], []]; ΔB (norm): [[], []]; emaB: [[], []]; D: [0, 0]; E: [1000000000, 0]; P: [1, 0] */ - for validator in 0..(n / 2) { + for validator in 0..(n / 2) as u16 { assert_eq!( SubtensorModule::get_emission_for_uid(netuid, validator), 1000000000 ); // Note E = 1 * 1_000_000_000 } - for server in (n / 2)..n { + for server in (n / 2)..n as u16 { assert_eq!(SubtensorModule::get_emission_for_uid(netuid, server), 0); // no stake } @@ -1838,7 +1830,7 @@ fn test_zero_weights() { B: [[], []]; B (outdatedmask): [[], []]; B (mask+norm): [[], []]; ΔB: [[(1, 1)], []]; ΔB (norm): [[(1, 1)], []]; emaB: [[(1, 1)], []]; D: [1, 0]; emaB (max-upscale): [[(1, 1)], []] E: [500000000, 500000000]; P: [0.5, 0.5] */ - for validator in 0..n { + for validator in 0..n as u16 { assert_eq!( SubtensorModule::get_emission_for_uid(netuid, validator), 1000000000 / (n as u64) @@ -1854,10 +1846,13 @@ fn test_validator_permits() { let netuid: u16 = 1; let tempo: u16 = u16::MAX - 1; // high tempo to skip automatic epochs in on_initialize, use manual epochs instead for interleave in 0..3 { - for (network_n, validators_n) in [(2, 1), (4, 2), (8, 4)] { + for (network_n, validators_n) in vec![(2, 1), (4, 2), (8, 4)] { for assignment in 0..=1 { - let (validators, servers) = - distribute_nodes(validators_n as usize, network_n, interleave as usize); + let (validators, servers) = distribute_nodes( + validators_n as usize, + network_n as usize, + interleave as usize, + ); let correct: bool = true; let mut stake: Vec = vec![0; network_n]; for validator in &validators { @@ -1872,7 +1867,7 @@ fn test_validator_permits() { _ => 0, }; } - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let block_number: u64 = 0; add_network(netuid, tempo, 0); SubtensorModule::set_max_allowed_uids(netuid, network_n as u16); @@ -2047,7 +2042,7 @@ fn test_validator_permits() { // interleave as usize, // ); -// new_test_ext(1).execute_with(|| { +// new_test_ext().execute_with(|| { // init_run_epochs(netuid, network_n, &validators, &servers, epochs, 1, true, &stake, true, &weights, true, false, 0, true); // let mut major_emission: I64F64 = I64F64::from_num(0); diff --git a/pallets/subtensor/tests/migration.rs b/pallets/subtensor/tests/migration.rs index 2f634d7c0..4b681e621 100644 --- a/pallets/subtensor/tests/migration.rs +++ b/pallets/subtensor/tests/migration.rs @@ -6,7 +6,7 @@ use sp_core::U256; #[test] fn test_migration_fix_total_stake_maps() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let ck1 = U256::from(1); let ck2 = U256::from(2); let ck3 = U256::from(3); @@ -106,7 +106,7 @@ fn test_migration_fix_total_stake_maps() { // To run this test with cargo, use the following command: // cargo test --package pallet-subtensor --test migration test_migration5_total_issuance fn test_migration5_total_issuance() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { // Run the migration to check total issuance. let test: bool = true; @@ -134,7 +134,7 @@ fn test_migration5_total_issuance() { // To run this test with cargo, use the following command: // cargo test --package pallet-subtensor --test migration test_total_issuance_global fn test_total_issuance_global() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { // Initialize network unique identifier and keys for testing. let netuid: u16 = 1; // Network unique identifier set to 1 for testing. let coldkey = U256::from(0); // Coldkey initialized to 0, representing an account's public key for non-transactional operations. @@ -155,8 +155,8 @@ fn test_total_issuance_global() { // Test the migration's effect on total issuance after adding balance to a coldkey account. let account_balance: u64 = 20000; - let _hotkey_account_id_1 = U256::from(1); // Define a hotkey account ID for further operations. - let _coldkey_account_id_1 = U256::from(1); // Define a coldkey account ID for further operations. + let hotkey_account_id_1 = U256::from(1); // Define a hotkey account ID for further operations. + let coldkey_account_id_1 = U256::from(1); // Define a coldkey account ID for further operations. assert_eq!(SubtensorModule::get_total_issuance(), lockcost); // Ensure the total issuance starts at 0 before the migration. SubtensorModule::add_balance_to_coldkey_account(&coldkey, account_balance); // Add a balance of 20000 to the coldkey account. pallet_subtensor::migration::migration5_total_issuance::(true); // Execute the migration to update total issuance. @@ -208,7 +208,7 @@ fn test_total_issuance_global() { // Set emission values for the network and verify. let emission: u64 = 1_000_000_000; SubtensorModule::set_tempo(netuid, 1); - SubtensorModule::set_emission_values(&[netuid], vec![emission]).unwrap(); // Set the emission value for the network to 1_000_000_000. + SubtensorModule::set_emission_values(&vec![netuid], vec![emission]); // Set the emission value for the network to 1_000_000_000. assert_eq!(SubtensorModule::get_subnet_emission_value(netuid), emission); // Verify the emission value is set correctly for the network. assert_eq!( SubtensorModule::get_total_issuance(), @@ -229,7 +229,7 @@ fn test_total_issuance_global() { #[test] fn test_migration_transfer_nets_to_foundation() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { // Create subnet 1 add_network(1, 1, 0); // Create subnet 11 @@ -249,28 +249,28 @@ fn test_migration_transfer_nets_to_foundation() { #[test] fn test_migration_delete_subnet_3() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { // Create subnet 3 add_network(3, 1, 0); - assert!(SubtensorModule::if_subnet_exist(3)); + assert_eq!(SubtensorModule::if_subnet_exist(3), true); // Run the migration to transfer ownership pallet_subtensor::migration::migrate_delete_subnet_3::(); - assert!(!SubtensorModule::if_subnet_exist(3)); + assert_eq!(SubtensorModule::if_subnet_exist(3), false); }) } #[test] fn test_migration_delete_subnet_21() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { // Create subnet 21 add_network(21, 1, 0); - assert!(SubtensorModule::if_subnet_exist(21)); + assert_eq!(SubtensorModule::if_subnet_exist(21), true); // Run the migration to transfer ownership pallet_subtensor::migration::migrate_delete_subnet_21::(); - assert!(!SubtensorModule::if_subnet_exist(21)); + assert_eq!(SubtensorModule::if_subnet_exist(21), false); }) } diff --git a/pallets/subtensor/tests/mock.rs b/pallets/subtensor/tests/mock.rs index 3075bd102..2a4424d40 100644 --- a/pallets/subtensor/tests/mock.rs +++ b/pallets/subtensor/tests/mock.rs @@ -1,4 +1,4 @@ -use frame_support::traits::Hash; +use frame_support::traits::{Hash, StorageMapShim}; use frame_support::{ assert_ok, parameter_types, traits::{Everything, Hooks}, @@ -8,19 +8,24 @@ use frame_system as system; use frame_system::{limits, EnsureNever, EnsureRoot, RawOrigin}; use sp_core::{Get, H256, U256}; use sp_runtime::{ + testing::Header, traits::{BlakeTwo256, IdentityLookup}, - BuildStorage, DispatchResult, + DispatchResult, }; use pallet_collective::MemberCount; +type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; type Block = frame_system::mocking::MockBlock; // Configure a mock runtime to test the pallet. frame_support::construct_runtime!( - pub enum Test + pub enum Test where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic, { - System: frame_system::{Pallet, Call, Config, Storage, Event}, + System: frame_system::{Pallet, Call, Config, Storage, Event}, Balances: pallet_balances::{Pallet, Call, Config, Storage, Event}, Triumvirate: pallet_collective::::{Pallet, Call, Storage, Origin, Event, Config}, TriumvirateMembers: pallet_membership::::{Pallet, Call, Storage, Event, Config}, @@ -67,17 +72,17 @@ impl pallet_balances::Config for Test { type Balance = Balance; type RuntimeEvent = RuntimeEvent; type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; + type ExistentialDeposit = (); + type AccountStore = StorageMapShim< + pallet_balances::Account, + frame_system::Provider, + AccountId, + pallet_balances::AccountData, + >; type MaxLocks = (); type WeightInfo = (); type MaxReserves = (); type ReserveIdentifier = (); - - type RuntimeHoldReason = (); - type FreezeIdentifier = (); - type MaxHolds = (); - type MaxFreezes = (); } impl system::Config for Test { @@ -87,30 +92,31 @@ impl system::Config for Test { type DbWeight = (); type RuntimeOrigin = RuntimeOrigin; type RuntimeCall = RuntimeCall; + type Index = u64; + type BlockNumber = u64; type Hash = H256; type Hashing = BlakeTwo256; type AccountId = U256; type Lookup = IdentityLookup; + type Header = Header; type RuntimeEvent = RuntimeEvent; type BlockHashCount = BlockHashCount; type Version = (); type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; + type AccountData = (); type OnNewAccount = (); type OnKilledAccount = (); type SystemWeightInfo = (); type SS58Prefix = SS58Prefix; type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; - type Nonce = u64; - type Block = Block; } parameter_types! { pub const InitialMinAllowedWeights: u16 = 0; pub const InitialEmissionValue: u16 = 0; pub const InitialMaxWeightsLimit: u16 = u16::MAX; - pub BlockWeights: limits::BlockWeights = limits::BlockWeights::simple_max(weights::Weight::from_parts(1024, 0)); + pub BlockWeights: limits::BlockWeights = limits::BlockWeights::simple_max(weights::Weight::from_ref_time(1024)); pub const ExistentialDeposit: Balance = 1; pub const TransactionByteFee: Balance = 100; pub const SDebug:u64 = 1; @@ -236,7 +242,7 @@ impl CollectiveInterface for TriumvirateVotes { index: u32, approve: bool, ) -> Result { - Triumvirate::do_vote(*hotkey, proposal, index, approve) + Triumvirate::do_vote(hotkey.clone(), proposal, index, approve) } } @@ -361,23 +367,26 @@ impl pallet_utility::Config for Test { type WeightInfo = pallet_utility::weights::SubstrateWeight; } -#[allow(dead_code)] // Build genesis storage according to the mock runtime. -pub fn new_test_ext(block_number: BlockNumber) -> sp_io::TestExternalities { +//pub fn new_test_ext() -> sp_io::TestExternalities { +// system::GenesisConfig::default().build_storage::().unwrap().into() +//} + +// Build genesis storage according to the mock runtime. +#[allow(dead_code)] +pub fn new_test_ext() -> sp_io::TestExternalities { sp_tracing::try_init_simple(); - let t = frame_system::GenesisConfig::::default() - .build_storage() - .unwrap(); - let mut ext = sp_io::TestExternalities::new(t); - ext.execute_with(|| System::set_block_number(block_number)); - ext + frame_system::GenesisConfig::default() + .build_storage::() + .unwrap() + .into() } #[allow(dead_code)] pub fn test_ext_with_balances(balances: Vec<(U256, u128)>) -> sp_io::TestExternalities { sp_tracing::try_init_simple(); - let mut t = frame_system::GenesisConfig::::default() - .build_storage() + let mut t = frame_system::GenesisConfig::default() + .build_storage::() .unwrap(); pallet_balances::GenesisConfig:: { @@ -414,20 +423,6 @@ pub(crate) fn run_to_block(n: u64) { } } -/// Increments current block by `1`, running all hooks associated with doing so, and asserts -/// that the block number was in fact incremented. -/// -/// Returns the new block number. -#[allow(dead_code)] -#[cfg(test)] -pub(crate) fn next_block() -> u64 { - let mut block = System::block_number(); - block += 1; - run_to_block(block); - assert_eq!(System::block_number(), block); - block -} - #[allow(dead_code)] pub fn register_ok_neuron( netuid: u16, diff --git a/pallets/subtensor/tests/networks.rs b/pallets/subtensor/tests/networks.rs index 2680d9321..2ecf88d3a 100644 --- a/pallets/subtensor/tests/networks.rs +++ b/pallets/subtensor/tests/networks.rs @@ -35,7 +35,7 @@ // assert_eq!( // call.get_dispatch_info(), // DispatchInfo { -// weight: frame_support::weights::Weight::from_parts(50000000, 0), +// weight: frame_support::weights::Weight::from_ref_time(50000000), // class: DispatchClass::Operational, // pays_fee: Pays::No // } @@ -176,7 +176,7 @@ // assert_eq!( // call.get_dispatch_info(), // DispatchInfo { -// weight: frame_support::weights::Weight::from_parts(28000000, 0), +// weight: frame_support::weights::Weight::from_ref_time(28000000), // class: DispatchClass::Operational, // pays_fee: Pays::No // } diff --git a/pallets/subtensor/tests/neuron_info.rs b/pallets/subtensor/tests/neuron_info.rs index 10df1c07d..3eef0ce6b 100644 --- a/pallets/subtensor/tests/neuron_info.rs +++ b/pallets/subtensor/tests/neuron_info.rs @@ -5,7 +5,7 @@ use sp_core::U256; #[test] fn test_get_neuron_none() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let uid: u16 = 42; @@ -17,7 +17,7 @@ fn test_get_neuron_none() { #[test] #[cfg(not(tarpaulin))] fn test_get_neuron_some() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 2; @@ -38,7 +38,7 @@ fn test_get_neuron_some() { /* @TODO: Add more neurons to list */ #[test] fn test_get_neurons_list() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 2; @@ -50,8 +50,8 @@ fn test_get_neurons_list() { let neuron_count = 1; for index in 0..neuron_count { - let hotkey = U256::from(index); - let coldkey = U256::from(index); + let hotkey = U256::from(0 + index); + let coldkey = U256::from(0 + index); let nonce: u64 = 39420842 + index; register_ok_neuron(netuid, hotkey, coldkey, nonce); } @@ -63,7 +63,7 @@ fn test_get_neurons_list() { #[test] fn test_get_neurons_empty() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let neuron_count = 0; diff --git a/pallets/subtensor/tests/registration.rs b/pallets/subtensor/tests/registration.rs index 6787291b9..89bea4355 100644 --- a/pallets/subtensor/tests/registration.rs +++ b/pallets/subtensor/tests/registration.rs @@ -3,7 +3,7 @@ use frame_support::traits::Currency; use crate::mock::*; use frame_support::dispatch::{DispatchClass, DispatchInfo, GetDispatchInfo, Pays}; use frame_support::sp_runtime::{transaction_validity::InvalidTransaction, DispatchError}; -use frame_support::{assert_err, assert_noop, assert_ok}; +use frame_support::{assert_err, assert_ok}; use frame_system::Config; use pallet_subtensor::{AxonInfoOf, Error, SubtensorSignedExtension}; use sp_core::U256; @@ -18,7 +18,7 @@ mod mock; // Tests a basic registration dispatch passes. #[test] fn test_registration_subscribe_ok_dispatch_info_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let block_number: u64 = 0; let nonce: u64 = 0; let netuid: u16 = 1; @@ -36,7 +36,7 @@ fn test_registration_subscribe_ok_dispatch_info_ok() { assert_eq!( call.get_dispatch_info(), DispatchInfo { - weight: frame_support::weights::Weight::from_parts(91000000, 0), + weight: frame_support::weights::Weight::from_ref_time(91000000), class: DispatchClass::Normal, pays_fee: Pays::No } @@ -46,14 +46,14 @@ fn test_registration_subscribe_ok_dispatch_info_ok() { #[test] fn test_registration_difficulty() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { assert_eq!(SubtensorModule::get_difficulty(1).as_u64(), 10000); }); } #[test] fn test_registration_invalid_seal_hotkey() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -100,7 +100,7 @@ fn test_registration_invalid_seal_hotkey() { #[test] fn test_registration_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -154,52 +154,17 @@ fn test_registration_ok() { }); } -#[test] -fn test_registration_without_neuron_slot() { - new_test_ext(1).execute_with(|| { - let block_number: u64 = 0; - let netuid: u16 = 1; - let tempo: u16 = 13; - let hotkey_account_id: U256 = U256::from(1); - let coldkey_account_id = U256::from(667); // Neighbour of the beast, har har - let (nonce, work): (u64, Vec) = SubtensorModule::create_work_for_block_number( - netuid, - block_number, - 129123813, - &hotkey_account_id, - ); - - //add network - add_network(netuid, tempo, 0); - SubtensorModule::set_max_allowed_uids(netuid, 0); - - assert_noop!( - SubtensorModule::register( - <::RuntimeOrigin>::signed(hotkey_account_id), - netuid, - block_number, - nonce, - work, - hotkey_account_id, - coldkey_account_id - ), - Error::::NoNeuronIdAvailable - ); - }); -} - #[test] fn test_registration_under_limit() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let block_number: u64 = 0; let hotkey_account_id: U256 = U256::from(1); let coldkey_account_id = U256::from(667); let who: ::AccountId = hotkey_account_id; - let target_registrants = 2; - let max_registrants = target_registrants * 3; // Maximum is 3 times the target - SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + let max_registrants = 2; + SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); let (nonce, work) = SubtensorModule::create_work_for_block_number( netuid, @@ -236,25 +201,23 @@ fn test_registration_under_limit() { )); let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); - assert!(current_registrants <= max_registrants); // Should be less than 3 times the target + let target_registrants = SubtensorModule::get_target_registrations_per_interval(netuid); + assert!(current_registrants <= target_registrants); }); } #[test] fn test_registration_rate_limit_exceeded() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let block_number: u64 = 0; let hotkey_account_id: U256 = U256::from(1); let coldkey_account_id = U256::from(667); let who: ::AccountId = hotkey_account_id; - let target_registrants = 1; - let max_registrants = target_registrants * 3; // Maximum is 3 times the target - - SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); - // Set the current registrations to the maximum; should not be able to register more - SubtensorModule::set_registrations_this_interval(netuid, max_registrants); + let max_registrants = 1; + SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); + SubtensorModule::set_registrations_this_interval(netuid, 1); let (nonce, work) = SubtensorModule::create_work_for_block_number( netuid, @@ -283,83 +246,28 @@ fn test_registration_rate_limit_exceeded() { }); } +/******************************************** + registration::do_burned_registration tests +*********************************************/ + #[test] -fn test_registration_rate_limit_allows_difficulty_adjustment() { - // We need to be able to register more than the *target* registrations per interval - new_test_ext(1).execute_with(|| { +fn test_burned_registration_under_limit() { + new_test_ext().execute_with(|| { let netuid: u16 = 1; - let block_number: u64 = 0; let hotkey_account_id: U256 = U256::from(1); let coldkey_account_id = U256::from(667); let who: ::AccountId = hotkey_account_id; + let block_number: u64 = 0; - let target_registrants = 1; // Target is 1, but we can register more than that, up to some maximum. - SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); - // Set the current registrations to above the target; we should be able to register at least 1 more - SubtensorModule::set_registrations_this_interval(netuid, target_registrants); - - // Register one more, so the current registrations are above the target let (nonce, work) = SubtensorModule::create_work_for_block_number( netuid, block_number, 129123813, &hotkey_account_id, ); - let work_clone = work.clone(); - let call = pallet_subtensor::Call::register { - netuid, - block_number, - nonce, - work: work_clone, - hotkey: hotkey_account_id, - coldkey: coldkey_account_id, - }; - let info: DispatchInfo = - DispatchInfoOf::<::RuntimeCall>::default(); - let extension = SubtensorSignedExtension::::new(); - //does not actually call register - let result = extension.validate(&who, &call.into(), &info, 10); - assert_ok!(result); - - //actually call register - add_network(netuid, 13, 0); - assert_ok!(SubtensorModule::register( - <::RuntimeOrigin>::signed(hotkey_account_id), - netuid, - block_number, - nonce, - work, - hotkey_account_id, - coldkey_account_id - )); - let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); - assert!(current_registrants > target_registrants); - }); -} - -/******************************************** - registration::do_burned_registration tests -*********************************************/ - -#[test] -fn test_burned_registration_under_limit() { - new_test_ext(1).execute_with(|| { - let netuid: u16 = 1; - let hotkey_account_id: U256 = U256::from(1); - let coldkey_account_id = U256::from(667); - let who: ::AccountId = coldkey_account_id; - let burn_cost = 1000; - // Set the burn cost - SubtensorModule::set_burn(netuid, burn_cost); - - add_network(netuid, 13, 0); // Add the network - // Give it some TAO to the coldkey balance; more than the burn cost - SubtensorModule::add_balance_to_coldkey_account(&coldkey_account_id, burn_cost + 10_000); - - let target_registrants = 2; - let max_registrants = target_registrants * 3; // Maximum is 3 times the target - SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + let max_registrants = 2; + SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); let call_burned_register: pallet_subtensor::Call = pallet_subtensor::Call::burned_register { @@ -375,32 +283,34 @@ fn test_burned_registration_under_limit() { extension.validate(&who, &call_burned_register.into(), &info, 10); assert_ok!(burned_register_result); + add_network(netuid, 13, 0); //actually call register - assert_ok!(SubtensorModule::burned_register( - <::RuntimeOrigin>::signed(coldkey_account_id), + assert_ok!(SubtensorModule::register( + <::RuntimeOrigin>::signed(hotkey_account_id), netuid, + block_number, + nonce, + work, hotkey_account_id, + coldkey_account_id )); let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); - assert!(current_registrants <= max_registrants); + let target_registrants = SubtensorModule::get_target_registrations_per_interval(netuid); + assert!(current_registrants <= target_registrants); }); } #[test] fn test_burned_registration_rate_limit_exceeded() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let hotkey_account_id: U256 = U256::from(1); - let coldkey_account_id = U256::from(667); - let who: ::AccountId = coldkey_account_id; - - let target_registrants = 1; - let max_registrants = target_registrants * 3; // Maximum is 3 times the target + let who: ::AccountId = hotkey_account_id; + let max_registrants = 1; - SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); - // Set the current registrations to the maximum; should not be able to register more - SubtensorModule::set_registrations_this_interval(netuid, max_registrants); + SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); + SubtensorModule::set_registrations_this_interval(netuid, 1); let call_burned_register: pallet_subtensor::Call = pallet_subtensor::Call::burned_register { @@ -425,58 +335,9 @@ fn test_burned_registration_rate_limit_exceeded() { }); } -#[test] -fn test_burned_registration_rate_allows_burn_adjustment() { - // We need to be able to register more than the *target* registrations per interval - new_test_ext(1).execute_with(|| { - let netuid: u16 = 1; - let hotkey_account_id: U256 = U256::from(1); - let coldkey_account_id = U256::from(667); - let who: ::AccountId = coldkey_account_id; - - let burn_cost = 1000; - // Set the burn cost - SubtensorModule::set_burn(netuid, burn_cost); - - add_network(netuid, 13, 0); // Add the network - // Give it some TAO to the coldkey balance; more than the burn cost - SubtensorModule::add_balance_to_coldkey_account(&coldkey_account_id, burn_cost + 10_000); - - let target_registrants = 1; // Target is 1, but we can register more than that, up to some maximum. - SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); - // Set the current registrations to above the target; we should be able to register at least 1 more - SubtensorModule::set_registrations_this_interval(netuid, target_registrants); - - // Register one more, so the current registrations are above the target - let call_burned_register: pallet_subtensor::Call = - pallet_subtensor::Call::burned_register { - netuid, - hotkey: hotkey_account_id, - }; - - let info: DispatchInfo = - DispatchInfoOf::<::RuntimeCall>::default(); - let extension = SubtensorSignedExtension::::new(); - //does not actually call register - let burned_register_result = - extension.validate(&who, &call_burned_register.into(), &info, 10); - assert_ok!(burned_register_result); - - //actually call register - assert_ok!(SubtensorModule::burned_register( - <::RuntimeOrigin>::signed(coldkey_account_id), - netuid, - hotkey_account_id - )); - - let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); - assert!(current_registrants > target_registrants); // Should be able to register more than the target - }); -} - #[test] fn test_burned_registration_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let hotkey_account_id = U256::from(1); @@ -495,7 +356,7 @@ fn test_burned_registration_ok() { )); // Check if balance has decreased to pay for the burn. assert_eq!( - SubtensorModule::get_coldkey_balance(&coldkey_account_id), + SubtensorModule::get_coldkey_balance(&coldkey_account_id) as u64, 10000 - burn_cost ); // funds drained on reg. // Check if neuron has added to the specified network(netuid) @@ -521,35 +382,9 @@ fn test_burned_registration_ok() { }); } -#[test] -fn test_burn_registration_without_neuron_slot() { - new_test_ext(1).execute_with(|| { - let netuid: u16 = 1; - let tempo: u16 = 13; - let hotkey_account_id = U256::from(1); - let burn_cost = 1000; - let coldkey_account_id = U256::from(667); // Neighbour of the beast, har har - //add network - SubtensorModule::set_burn(netuid, burn_cost); - add_network(netuid, tempo, 0); - // Give it some $$$ in his coldkey balance - SubtensorModule::add_balance_to_coldkey_account(&coldkey_account_id, 10000); - SubtensorModule::set_max_allowed_uids(netuid, 0); - - assert_noop!( - SubtensorModule::burned_register( - <::RuntimeOrigin>::signed(coldkey_account_id), - netuid, - hotkey_account_id - ), - Error::::NoNeuronIdAvailable - ); - }); -} - #[test] fn test_burn_adjustment() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let burn_cost: u64 = 1000; @@ -596,7 +431,7 @@ fn test_burn_adjustment() { #[test] #[cfg(not(tarpaulin))] fn test_registration_too_many_registrations_per_block() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; add_network(netuid, tempo, 0); @@ -792,7 +627,7 @@ fn test_registration_too_many_registrations_per_block() { #[test] fn test_registration_too_many_registrations_per_interval() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; add_network(netuid, tempo, 0); @@ -983,7 +818,7 @@ fn test_registration_immunity_period() { //impl this test when epoch impl and ca #[test] fn test_registration_already_active_hotkey() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -1033,7 +868,7 @@ fn test_registration_already_active_hotkey() { #[test] fn test_registration_invalid_seal() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -1060,8 +895,7 @@ fn test_registration_invalid_seal() { #[test] fn test_registration_invalid_block_number() { - new_test_ext(1).execute_with(|| { - System::set_block_number(0); + new_test_ext().execute_with(|| { let block_number: u64 = 1; let netuid: u16 = 1; let tempo: u16 = 13; @@ -1092,7 +926,7 @@ fn test_registration_invalid_block_number() { #[test] fn test_registration_invalid_difficulty() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -1125,7 +959,7 @@ fn test_registration_invalid_difficulty() { #[test] fn test_registration_failed_no_signature() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let block_number: u64 = 1; let netuid: u16 = 1; let hotkey_account_id = U256::from(1); @@ -1147,17 +981,16 @@ fn test_registration_failed_no_signature() { hotkey_account_id, coldkey_account_id, ); - assert_eq!(result, Err(DispatchError::BadOrigin)); + assert_eq!(result, Err(DispatchError::BadOrigin.into())); }); } #[test] fn test_registration_get_uid_to_prune_all_in_immunity_period() { - new_test_ext(1).execute_with(|| { - System::set_block_number(0); + new_test_ext().execute_with(|| { let netuid: u16 = 1; add_network(netuid, 0, 0); - log::info!("add network"); + log::info!("add netweork"); register_ok_neuron(netuid, U256::from(0), U256::from(0), 39420842); register_ok_neuron(netuid, U256::from(1), U256::from(1), 12412392); SubtensorModule::set_pruning_score_for_uid(netuid, 0, 100); @@ -1177,11 +1010,10 @@ fn test_registration_get_uid_to_prune_all_in_immunity_period() { #[test] fn test_registration_get_uid_to_prune_none_in_immunity_period() { - new_test_ext(1).execute_with(|| { - System::set_block_number(0); + new_test_ext().execute_with(|| { let netuid: u16 = 1; add_network(netuid, 0, 0); - log::info!("add network"); + log::info!("add netweork"); register_ok_neuron(netuid, U256::from(0), U256::from(0), 39420842); register_ok_neuron(netuid, U256::from(1), U256::from(1), 12412392); SubtensorModule::set_pruning_score_for_uid(netuid, 0, 100); @@ -1203,7 +1035,7 @@ fn test_registration_get_uid_to_prune_none_in_immunity_period() { #[test] fn test_registration_pruning() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let block_number: u64 = 0; let tempo: u16 = 13; @@ -1279,7 +1111,7 @@ fn test_registration_pruning() { #[test] fn test_registration_get_neuron_metadata() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let block_number: u64 = 0; let tempo: u16 = 13; @@ -1315,7 +1147,7 @@ fn test_registration_get_neuron_metadata() { #[test] fn test_registration_add_network_size() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let netuid2: u16 = 2; let block_number: u64 = 0; @@ -1385,7 +1217,7 @@ fn test_registration_add_network_size() { #[test] fn test_burn_registration_increase_recycled_rao() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let netuid2: u16 = 2; @@ -1393,8 +1225,10 @@ fn test_burn_registration_increase_recycled_rao() { let coldkey_account_id = U256::from(667); // Give funds for burn. 1000 TAO - let _ = - Balances::deposit_creating(&coldkey_account_id, Balance::from(1_000_000_000_000_u64)); + let _ = Balances::deposit_creating( + &coldkey_account_id, + Balance::from(1_000_000_000_000 as u64), + ); add_network(netuid, 13, 0); assert_eq!(SubtensorModule::get_subnetwork_n(netuid), 0); @@ -1433,7 +1267,7 @@ fn test_burn_registration_increase_recycled_rao() { #[test] fn test_full_pass_through() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { // Create 3 networks. let netuid0: u16 = 1; let netuid1: u16 = 2; @@ -1667,7 +1501,7 @@ fn test_full_pass_through() { // DEPRECATED #[test] // fn test_network_connection_requirement() { -// new_test_ext(1).execute_with(|| { +// new_test_ext().execute_with(|| { // // Add a networks and connection requirements. // let netuid_a: u16 = 0; // let netuid_b: u16 = 1; @@ -1851,7 +1685,7 @@ fn test_full_pass_through() { #[test] fn test_registration_origin_hotkey_mismatch() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -1883,7 +1717,7 @@ fn test_registration_origin_hotkey_mismatch() { #[test] fn test_registration_disabled() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -1917,7 +1751,7 @@ fn test_registration_disabled() { #[ignore] #[test] fn test_hotkey_swap_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let hotkey_account_id = U256::from(1); @@ -1957,7 +1791,7 @@ fn test_hotkey_swap_ok() { #[ignore] #[test] fn test_hotkey_swap_not_owner() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let hotkey_account_id = U256::from(1); @@ -1993,7 +1827,7 @@ fn test_hotkey_swap_not_owner() { #[ignore] #[test] fn test_hotkey_swap_same_key() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let hotkey_account_id = U256::from(1); @@ -2027,7 +1861,7 @@ fn test_hotkey_swap_same_key() { #[ignore] #[test] fn test_hotkey_swap_registered_key() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let hotkey_account_id = U256::from(1); diff --git a/pallets/subtensor/tests/root.rs b/pallets/subtensor/tests/root.rs index 27a652851..58bc892de 100644 --- a/pallets/subtensor/tests/root.rs +++ b/pallets/subtensor/tests/root.rs @@ -2,6 +2,7 @@ use crate::mock::*; use frame_support::assert_ok; use frame_system::Config; use frame_system::{EventRecord, Phase}; +use log::info; use pallet_subtensor::migration; use pallet_subtensor::Error; use sp_core::{Get, H256, U256}; @@ -19,8 +20,9 @@ fn record(event: RuntimeEvent) -> EventRecord { #[test] fn test_root_register_network_exist() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { migration::migrate_create_root_network::(); + let root_netuid: u16 = 0; let hotkey_account_id: U256 = U256::from(1); let coldkey_account_id = U256::from(667); assert_ok!(SubtensorModule::root_register( @@ -32,7 +34,7 @@ fn test_root_register_network_exist() { #[test] fn test_root_register_normal_on_root_fails() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { migration::migrate_create_root_network::(); // Test fails because normal registrations are not allowed // on the root network. @@ -49,7 +51,7 @@ fn test_root_register_normal_on_root_fails() { root_netuid, hotkey_account_id ), - Err(Error::::OperationNotPermittedOnRootSubnet.into()) + Err(Error::::OperationNotPermittedonRootSubnet.into()) ); // Pow registration fails. let block_number: u64 = SubtensorModule::get_current_block_as_u64(); @@ -69,14 +71,14 @@ fn test_root_register_normal_on_root_fails() { hotkey_account_id, coldkey_account_id, ), - Err(Error::::OperationNotPermittedOnRootSubnet.into()) + Err(Error::::OperationNotPermittedonRootSubnet.into()) ); }); } #[test] fn test_root_register_stake_based_pruning_works() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { migration::migrate_create_root_network::(); // Add two networks. let root_netuid: u16 = 0; @@ -109,7 +111,7 @@ fn test_root_register_stake_based_pruning_works() { hot, 1000 + (i as u64) )); - // Check successful registration. + // Check succesfull registration. assert!(SubtensorModule::get_uid_for_net_and_hotkey(other_netuid, &hot).is_ok()); // Check that they are NOT all delegates assert!(!SubtensorModule::hotkey_is_delegate(&hot)); @@ -123,7 +125,7 @@ fn test_root_register_stake_based_pruning_works() { <::RuntimeOrigin>::signed(cold), hot, )); - // Check successful registration. + // Check succesfull registration. assert!(SubtensorModule::get_uid_for_net_and_hotkey(root_netuid, &hot).is_ok()); // Check that they are all delegates assert!(SubtensorModule::hotkey_is_delegate(&hot)); @@ -138,12 +140,12 @@ fn test_root_register_stake_based_pruning_works() { <::RuntimeOrigin>::signed(cold), hot, )); - // Check successful registration. + // Check succesfull registration. assert!(SubtensorModule::get_uid_for_net_and_hotkey(root_netuid, &hot).is_ok()); } // Register the first 64 accounts again, this time failing because they - // don't have enough stake. + // dont have enough stake. for i in 0..64 { let hot: U256 = U256::from(i); let cold: U256 = U256::from(i); @@ -154,8 +156,8 @@ fn test_root_register_stake_based_pruning_works() { ), Err(Error::::StakeTooLowForRoot.into()) ); - // Check for unsuccessful registration. - assert!(SubtensorModule::get_uid_for_net_and_hotkey(root_netuid, &hot).is_err()); + // Check for unsuccesfull registration. + assert!(!SubtensorModule::get_uid_for_net_and_hotkey(root_netuid, &hot).is_ok()); // Check that they are NOT senate members assert!(!SubtensorModule::is_senate_member(&hot)); } @@ -164,8 +166,7 @@ fn test_root_register_stake_based_pruning_works() { #[test] fn test_root_set_weights() { - new_test_ext(1).execute_with(|| { - System::set_block_number(0); + new_test_ext().execute_with(|| { migration::migrate_create_root_network::(); let n: usize = 10; @@ -266,8 +267,7 @@ fn test_root_set_weights() { #[test] fn test_root_set_weights_out_of_order_netuids() { - new_test_ext(1).execute_with(|| { - System::set_block_number(0); + new_test_ext().execute_with(|| { migration::migrate_create_root_network::(); let n: usize = 10; @@ -383,8 +383,7 @@ fn test_root_set_weights_out_of_order_netuids() { #[test] fn test_root_subnet_creation_deletion() { - new_test_ext(1).execute_with(|| { - System::set_block_number(0); + new_test_ext().execute_with(|| { migration::migrate_create_root_network::(); // Owner of subnets. let owner: U256 = U256::from(0); @@ -463,8 +462,7 @@ fn test_root_subnet_creation_deletion() { #[test] fn test_network_pruning() { - new_test_ext(1).execute_with(|| { - System::set_block_number(0); + new_test_ext().execute_with(|| { migration::migrate_create_root_network::(); assert_eq!(SubtensorModule::get_total_issuance(), 0); @@ -543,7 +541,7 @@ fn test_network_pruning() { #[test] fn test_network_prune_results() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { migration::migrate_create_root_network::(); SubtensorModule::set_network_immunity_period(3); @@ -569,22 +567,22 @@ fn test_network_prune_results() { step_block(3); // lowest emission - SubtensorModule::set_emission_values(&[1u16, 2u16, 3u16], vec![5u64, 4u64, 4u64]).unwrap(); + SubtensorModule::set_emission_values(&vec![1u16, 2u16, 3u16], vec![5u64, 4u64, 4u64]); assert_eq!(SubtensorModule::get_subnet_to_prune(), 2u16); // equal emission, creation date - SubtensorModule::set_emission_values(&[1u16, 2u16, 3u16], vec![5u64, 5u64, 4u64]).unwrap(); + SubtensorModule::set_emission_values(&vec![1u16, 2u16, 3u16], vec![5u64, 5u64, 4u64]); assert_eq!(SubtensorModule::get_subnet_to_prune(), 3u16); // equal emission, creation date - SubtensorModule::set_emission_values(&[1u16, 2u16, 3u16], vec![4u64, 5u64, 5u64]).unwrap(); + SubtensorModule::set_emission_values(&vec![1u16, 2u16, 3u16], vec![4u64, 5u64, 5u64]); assert_eq!(SubtensorModule::get_subnet_to_prune(), 1u16); }); } #[test] fn test_weights_after_network_pruning() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { migration::migrate_create_root_network::(); assert_eq!(SubtensorModule::get_total_issuance(), 0); @@ -595,13 +593,14 @@ fn test_weights_after_network_pruning() { SubtensorModule::set_network_immunity_period(3); SubtensorModule::set_max_registrations_per_block(root_netuid, n as u16); SubtensorModule::set_max_subnets(n as u16); - SubtensorModule::set_weights_set_rate_limit(root_netuid, 0_u64); + SubtensorModule::set_weights_set_rate_limit(root_netuid, 0 as u64); // No validators yet. assert_eq!(SubtensorModule::get_subnetwork_n(root_netuid), 0); for i in 0..n { // Register a validator + let hot: U256 = U256::from(i); let cold: U256 = U256::from(i); SubtensorModule::add_balance_to_coldkey_account(&cold, 1_000_000_000_000); @@ -650,7 +649,7 @@ fn test_weights_after_network_pruning() { ); log::info!("Max subnets: {:?}", SubtensorModule::get_max_subnets()); let i = (n as u16) + 1; - // let _hot: U256 = U256::from(i); + let hot: U256 = U256::from(i); let cold: U256 = U256::from(i); SubtensorModule::add_balance_to_coldkey_account(&cold, 1_000_000_000_000_000_000); @@ -671,7 +670,7 @@ fn test_weights_after_network_pruning() { )); // Subnet should not exist, as it would replace a previous subnet. - assert!(!SubtensorModule::if_subnet_exist(i + 1)); + assert!(!SubtensorModule::if_subnet_exist((i as u16) + 1)); log::info!( "Root network weights: {:?}", @@ -694,12 +693,12 @@ fn test_weights_after_network_pruning() { /// `cargo test --package pallet-subtensor --test root test_issance_bounds` #[test] fn test_issance_bounds() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { // Simulate 100 halvings convergence to 21M. Note that the total issuance never reaches 21M because of rounding errors. // We converge to 20_999_999_989_500_000 (< 1 TAO away). let n_halvings: usize = 100; let mut total_issuance: u64 = 0; - for _ in 0..n_halvings { + for i in 0..n_halvings { let block_emission_10_500_000x: u64 = SubtensorModule::get_block_emission_for_issuance(total_issuance).unwrap() * 10_500_000; @@ -714,7 +713,7 @@ fn test_issance_bounds() { /// `cargo test --package pallet-subtensor --test root test_halving` #[test] fn test_halving() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let expected_emissions: [(u64, u64); 43] = [ (0, 1_000_000_000), // Testing at zero issuance. (1_776_000, 1_000_000_000), @@ -777,15 +776,13 @@ fn test_halving() { #[test] fn test_get_emission_across_entire_issuance_range() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let total_supply: u64 = pallet_subtensor::TotalSupply::::get(); let original_emission: u64 = pallet_subtensor::DefaultBlockEmission::::get(); let halving_issuance: u64 = total_supply / 2; + let mut step: usize = original_emission as usize; - let mut issuance = 0; - - // Issuance won't reach total supply. - while issuance <= 20_900_000_000_000_000 { + for issuance in (0..=total_supply).step_by(step) { SubtensorModule::set_total_issuance(issuance); let issuance_f64 = issuance as f64; @@ -804,8 +801,7 @@ fn test_get_emission_across_entire_issuance_range() { "Issuance: {}", issuance_f64 ); - - issuance += expected_emission; + step = expected_emission as usize; } }); } diff --git a/pallets/subtensor/tests/senate.rs b/pallets/subtensor/tests/senate.rs index a1bdae56d..ca252c39c 100644 --- a/pallets/subtensor/tests/senate.rs +++ b/pallets/subtensor/tests/senate.rs @@ -9,7 +9,6 @@ use sp_runtime::{ BuildStorage, }; -use frame_system::pallet_prelude::*; use frame_system::Config; use pallet_collective::Event as CollectiveEvent; use pallet_subtensor::migration; @@ -18,7 +17,7 @@ use pallet_subtensor::Error; pub fn new_test_ext() -> sp_io::TestExternalities { sp_tracing::try_init_simple(); - let mut ext: sp_io::TestExternalities = RuntimeGenesisConfig { + let mut ext: sp_io::TestExternalities = GenesisConfig { senate_members: pallet_membership::GenesisConfig:: { members: bounded_vec![1.into(), 2.into(), 3.into(), 4.into(), 5.into()], phantom: Default::default(), @@ -76,8 +75,8 @@ fn test_senate_join_works() { )); // Check if balance has decreased to pay for the burn. assert_eq!( - SubtensorModule::get_coldkey_balance(&coldkey_account_id), - (10000 - burn_cost) + SubtensorModule::get_coldkey_balance(&coldkey_account_id) as u64, + 10000 - burn_cost ); // funds drained on reg. // Check if neuron has added to the specified network(netuid) assert_eq!(SubtensorModule::get_subnetwork_n(netuid), 1); @@ -104,18 +103,18 @@ fn test_senate_join_works() { )); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&staker_coldkey, &hotkey_account_id), - 99_999 + 100_000 ); assert_eq!( SubtensorModule::get_total_stake_for_hotkey(&hotkey_account_id), - 99_999 + 100_000 ); assert_ok!(SubtensorModule::root_register( <::RuntimeOrigin>::signed(coldkey_account_id), hotkey_account_id )); - assert!(Senate::is_member(&hotkey_account_id)); + assert_eq!(Senate::is_member(&hotkey_account_id), true); }); } @@ -145,8 +144,8 @@ fn test_senate_vote_works() { )); // Check if balance has decreased to pay for the burn. assert_eq!( - SubtensorModule::get_coldkey_balance(&coldkey_account_id), - (10000 - burn_cost) + SubtensorModule::get_coldkey_balance(&coldkey_account_id) as u64, + 10000 - burn_cost ); // funds drained on reg. // Check if neuron has added to the specified network(netuid) assert_eq!(SubtensorModule::get_subnetwork_n(netuid), 1); @@ -173,18 +172,18 @@ fn test_senate_vote_works() { )); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&staker_coldkey, &hotkey_account_id), - 99_999 + 100_000 ); assert_eq!( SubtensorModule::get_total_stake_for_hotkey(&hotkey_account_id), - 99_999 + 100_000 ); assert_ok!(SubtensorModule::root_register( <::RuntimeOrigin>::signed(coldkey_account_id), hotkey_account_id )); - assert!(Senate::is_member(&hotkey_account_id)); + assert_eq!(Senate::is_member(&hotkey_account_id), true); System::reset_events(); @@ -195,7 +194,8 @@ fn test_senate_vote_works() { RuntimeOrigin::signed(senate_hotkey), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(100u64) + TryInto::<::BlockNumber>::try_into(100u64) + .ok() .expect("convert u64 to block number.") )); @@ -253,8 +253,8 @@ fn test_senate_vote_not_member() { )); // Check if balance has decreased to pay for the burn. assert_eq!( - SubtensorModule::get_coldkey_balance(&coldkey_account_id), - (10000 - burn_cost) + SubtensorModule::get_coldkey_balance(&coldkey_account_id) as u64, + 10000 - burn_cost ); // funds drained on reg. // Check if neuron has added to the specified network(netuid) assert_eq!(SubtensorModule::get_subnetwork_n(netuid), 1); @@ -271,7 +271,8 @@ fn test_senate_vote_not_member() { RuntimeOrigin::signed(senate_hotkey), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(100u64) + TryInto::<::BlockNumber>::try_into(100u64) + .ok() .expect("convert u64 to block number.") )); @@ -313,8 +314,8 @@ fn test_senate_leave_works() { )); // Check if balance has decreased to pay for the burn. assert_eq!( - SubtensorModule::get_coldkey_balance(&coldkey_account_id), - (10000 - burn_cost) + SubtensorModule::get_coldkey_balance(&coldkey_account_id) as u64, + 10000 - burn_cost ); // funds drained on reg. // Check if neuron has added to the specified network(netuid) assert_eq!(SubtensorModule::get_subnetwork_n(netuid), 1); @@ -341,18 +342,18 @@ fn test_senate_leave_works() { )); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&staker_coldkey, &hotkey_account_id), - 99_999 + 100_000 ); assert_eq!( SubtensorModule::get_total_stake_for_hotkey(&hotkey_account_id), - 99_999 + 100_000 ); assert_ok!(SubtensorModule::root_register( <::RuntimeOrigin>::signed(coldkey_account_id), hotkey_account_id )); - assert!(Senate::is_member(&hotkey_account_id)); + assert_eq!(Senate::is_member(&hotkey_account_id), true); }); } @@ -383,8 +384,8 @@ fn test_senate_leave_vote_removal() { )); // Check if balance has decreased to pay for the burn. assert_eq!( - SubtensorModule::get_coldkey_balance(&coldkey_account_id), - (10000 - burn_cost) + SubtensorModule::get_coldkey_balance(&coldkey_account_id) as u64, + 10000 - burn_cost ); // funds drained on reg. // Check if neuron has added to the specified network(netuid) assert_eq!(SubtensorModule::get_subnetwork_n(netuid), 1); @@ -411,18 +412,18 @@ fn test_senate_leave_vote_removal() { )); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&staker_coldkey, &hotkey_account_id), - 99_999 + 100_000 ); assert_eq!( SubtensorModule::get_total_stake_for_hotkey(&hotkey_account_id), - 99_999 + 100_000 ); assert_ok!(SubtensorModule::root_register( coldkey_origin.clone(), hotkey_account_id )); - assert!(Senate::is_member(&hotkey_account_id)); + assert_eq!(Senate::is_member(&hotkey_account_id), true); let proposal = make_proposal(42); let proposal_len: u32 = proposal.using_encoded(|p| p.len() as u32); @@ -431,7 +432,8 @@ fn test_senate_leave_vote_removal() { RuntimeOrigin::signed(senate_hotkey), Box::new(proposal.clone()), proposal_len, - TryInto::>::try_into(100u64) + TryInto::<::BlockNumber>::try_into(100u64) + .ok() .expect("convert u64 to block number.") )); @@ -483,7 +485,7 @@ fn test_senate_leave_vote_removal() { } // No longer a root member assert!( - SubtensorModule::get_uid_for_net_and_hotkey(root_netuid, &hotkey_account_id).is_err() + !SubtensorModule::get_uid_for_net_and_hotkey(root_netuid, &hotkey_account_id).is_ok() ); assert_eq!( Triumvirate::has_voted(hash, 0, &hotkey_account_id), @@ -519,8 +521,8 @@ fn test_senate_not_leave_when_stake_removed() { )); // Check if balance has decreased to pay for the burn. assert_eq!( - SubtensorModule::get_coldkey_balance(&coldkey_account_id), - (10000 - burn_cost) + SubtensorModule::get_coldkey_balance(&coldkey_account_id) as u64, + 10000 - burn_cost ); // funds drained on reg. // Check if neuron has added to the specified network(netuid) assert_eq!(SubtensorModule::get_subnetwork_n(netuid), 1); @@ -548,26 +550,26 @@ fn test_senate_not_leave_when_stake_removed() { )); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&staker_coldkey, &hotkey_account_id), - stake_amount - 1 // Need to account for ED + stake_amount ); assert_eq!( SubtensorModule::get_total_stake_for_hotkey(&hotkey_account_id), - stake_amount - 1 // Need to account for ED + stake_amount ); assert_ok!(SubtensorModule::root_register( <::RuntimeOrigin>::signed(coldkey_account_id), hotkey_account_id )); - assert!(Senate::is_member(&hotkey_account_id)); + assert_eq!(Senate::is_member(&hotkey_account_id), true); step_block(100); assert_ok!(SubtensorModule::remove_stake( <::RuntimeOrigin>::signed(staker_coldkey), hotkey_account_id, - stake_amount - 1 + stake_amount )); - assert!(Senate::is_member(&hotkey_account_id)); + assert_eq!(Senate::is_member(&hotkey_account_id), true); }); } diff --git a/pallets/subtensor/tests/serving.rs b/pallets/subtensor/tests/serving.rs index c637028c3..50895fd1a 100644 --- a/pallets/subtensor/tests/serving.rs +++ b/pallets/subtensor/tests/serving.rs @@ -12,9 +12,8 @@ mod test { use std::net::{Ipv4Addr, Ipv6Addr}; // Generates an ipv6 address based on 8 ipv6 words and returns it as u128 - #[allow(clippy::too_many_arguments)] pub fn ipv6(a: u16, b: u16, c: u16, d: u16, e: u16, f: u16, g: u16, h: u16) -> u128 { - Ipv6Addr::new(a, b, c, d, e, f, g, h).into() + return Ipv6Addr::new(a, b, c, d, e, f, g, h).into(); } // Generate an ipv4 address based on 4 bytes and returns the corresponding u128, so it can be fed @@ -22,13 +21,13 @@ mod test { pub fn ipv4(a: u8, b: u8, c: u8, d: u8) -> u128 { let ipv4: Ipv4Addr = Ipv4Addr::new(a, b, c, d); let integer: u32 = ipv4.into(); - u128::from(integer) + return u128::from(integer); } } #[test] fn test_serving_subscribe_ok_dispatch_info_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let version: u32 = 2; let ip: u128 = 1676056785; @@ -50,7 +49,7 @@ fn test_serving_subscribe_ok_dispatch_info_ok() { assert_eq!( call.get_dispatch_info(), DispatchInfo { - weight: frame_support::weights::Weight::from_parts(19000000, 0), + weight: frame_support::weights::Weight::from_ref_time(19000000), class: DispatchClass::Normal, pays_fee: Pays::No } @@ -60,7 +59,7 @@ fn test_serving_subscribe_ok_dispatch_info_ok() { #[test] fn test_serving_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -98,7 +97,7 @@ fn test_serving_ok() { #[test] fn test_serving_set_metadata_update() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -163,7 +162,7 @@ fn test_serving_set_metadata_update() { #[test] #[cfg(not(tarpaulin))] fn test_axon_serving_rate_limit_exceeded() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -245,7 +244,7 @@ fn test_axon_serving_rate_limit_exceeded() { #[test] fn test_axon_invalid_port() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -279,7 +278,7 @@ fn test_axon_invalid_port() { #[test] fn test_prometheus_serving_subscribe_ok_dispatch_info_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let version: u32 = 2; let ip: u128 = 1676056785; @@ -295,7 +294,7 @@ fn test_prometheus_serving_subscribe_ok_dispatch_info_ok() { assert_eq!( call.get_dispatch_info(), DispatchInfo { - weight: frame_support::weights::Weight::from_parts(17000000, 0), + weight: frame_support::weights::Weight::from_ref_time(17000000), class: DispatchClass::Normal, pays_fee: Pays::No } @@ -305,7 +304,7 @@ fn test_prometheus_serving_subscribe_ok_dispatch_info_ok() { #[test] fn test_prometheus_serving_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -334,7 +333,7 @@ fn test_prometheus_serving_ok() { #[test] fn test_prometheus_serving_set_metadata_update() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -381,7 +380,7 @@ fn test_prometheus_serving_set_metadata_update() { #[test] #[cfg(not(tarpaulin))] fn test_prometheus_serving_rate_limit_exceeded() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -444,7 +443,7 @@ fn test_prometheus_serving_rate_limit_exceeded() { #[test] fn test_prometheus_invalid_port() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -472,81 +471,84 @@ fn test_prometheus_invalid_port() { #[test] fn test_serving_is_valid_ip_type_ok_ipv4() { - new_test_ext(1).execute_with(|| { - assert!(SubtensorModule::is_valid_ip_type(4)); + new_test_ext().execute_with(|| { + assert_eq!(SubtensorModule::is_valid_ip_type(4), true); }); } #[test] fn test_serving_is_valid_ip_type_ok_ipv6() { - new_test_ext(1).execute_with(|| { - assert!(SubtensorModule::is_valid_ip_type(6)); + new_test_ext().execute_with(|| { + assert_eq!(SubtensorModule::is_valid_ip_type(6), true); }); } #[test] fn test_serving_is_valid_ip_type_nok() { - new_test_ext(1).execute_with(|| { - assert!(!SubtensorModule::is_valid_ip_type(10)); + new_test_ext().execute_with(|| { + assert_eq!(SubtensorModule::is_valid_ip_type(10), false); }); } #[test] fn test_serving_is_valid_ip_address_ipv4() { - new_test_ext(1).execute_with(|| { - assert!(SubtensorModule::is_valid_ip_address( - 4, - test::ipv4(8, 8, 8, 8) - )); + new_test_ext().execute_with(|| { + assert_eq!( + SubtensorModule::is_valid_ip_address(4, test::ipv4(8, 8, 8, 8)), + true + ); }); } #[test] fn test_serving_is_valid_ip_address_ipv6() { - new_test_ext(1).execute_with(|| { - assert!(SubtensorModule::is_valid_ip_address( - 6, - test::ipv6(1, 2, 3, 4, 5, 6, 7, 8) - )); - assert!(SubtensorModule::is_valid_ip_address( - 6, - test::ipv6(1, 2, 3, 4, 5, 6, 7, 8) - )); + new_test_ext().execute_with(|| { + assert_eq!( + SubtensorModule::is_valid_ip_address(6, test::ipv6(1, 2, 3, 4, 5, 6, 7, 8)), + true + ); + assert_eq!( + SubtensorModule::is_valid_ip_address(6, test::ipv6(1, 2, 3, 4, 5, 6, 7, 8)), + true + ); }); } #[test] fn test_serving_is_invalid_ipv4_address() { - new_test_ext(1).execute_with(|| { - assert!(!SubtensorModule::is_valid_ip_address( - 4, - test::ipv4(0, 0, 0, 0) - )); - assert!(!SubtensorModule::is_valid_ip_address( - 4, - test::ipv4(255, 255, 255, 255) - )); - assert!(!SubtensorModule::is_valid_ip_address( - 4, - test::ipv4(127, 0, 0, 1) - )); - assert!(!SubtensorModule::is_valid_ip_address( - 4, - test::ipv6(0xffff, 2, 3, 4, 5, 6, 7, 8) - )); + new_test_ext().execute_with(|| { + assert_eq!( + SubtensorModule::is_valid_ip_address(4, test::ipv4(0, 0, 0, 0)), + false + ); + assert_eq!( + SubtensorModule::is_valid_ip_address(4, test::ipv4(255, 255, 255, 255)), + false + ); + assert_eq!( + SubtensorModule::is_valid_ip_address(4, test::ipv4(127, 0, 0, 1)), + false + ); + assert_eq!( + SubtensorModule::is_valid_ip_address(4, test::ipv6(0xffff, 2, 3, 4, 5, 6, 7, 8)), + false + ); }); } #[test] fn test_serving_is_invalid_ipv6_address() { - new_test_ext(1).execute_with(|| { - assert!(!SubtensorModule::is_valid_ip_address( - 6, - test::ipv6(0, 0, 0, 0, 0, 0, 0, 0) - )); - assert!(!SubtensorModule::is_valid_ip_address( - 4, - test::ipv6(0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff) - )); + new_test_ext().execute_with(|| { + assert_eq!( + SubtensorModule::is_valid_ip_address(6, test::ipv6(0, 0, 0, 0, 0, 0, 0, 0)), + false + ); + assert_eq!( + SubtensorModule::is_valid_ip_address( + 4, + test::ipv6(0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff) + ), + false + ); }); } diff --git a/pallets/subtensor/tests/staking.rs b/pallets/subtensor/tests/staking.rs index da157cb5b..595ab8737 100644 --- a/pallets/subtensor/tests/staking.rs +++ b/pallets/subtensor/tests/staking.rs @@ -14,7 +14,7 @@ use sp_core::{H256, U256}; #[test] #[cfg(not(tarpaulin))] fn test_add_stake_dispatch_info_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey = U256::from(0); let amount_staked = 5000; let call = RuntimeCall::SubtensorModule(SubtensorCall::add_stake { @@ -24,7 +24,7 @@ fn test_add_stake_dispatch_info_ok() { assert_eq!( call.get_dispatch_info(), DispatchInfo { - weight: frame_support::weights::Weight::from_parts(65000000, 0), + weight: frame_support::weights::Weight::from_ref_time(65000000), class: DispatchClass::Normal, pays_fee: Pays::No } @@ -33,7 +33,7 @@ fn test_add_stake_dispatch_info_ok() { } #[test] fn test_add_stake_ok_no_emission() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(533453); let coldkey_account_id = U256::from(55453); let netuid: u16 = 1; @@ -68,20 +68,20 @@ fn test_add_stake_ok_no_emission() { // Check if stake has increased assert_eq!( SubtensorModule::get_total_stake_for_hotkey(&hotkey_account_id), - 9999 + 10000 ); - // Check if balance has decreased - assert_eq!(SubtensorModule::get_coldkey_balance(&coldkey_account_id), 1); + // Check if balance has decreased + assert_eq!(SubtensorModule::get_coldkey_balance(&coldkey_account_id), 0); // Check if total stake has increased accordingly. - assert_eq!(SubtensorModule::get_total_stake(), 9999); + assert_eq!(SubtensorModule::get_total_stake(), 10000); }); } #[test] fn test_dividends_with_run_to_block() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let neuron_src_hotkey_id = U256::from(1); let neuron_dest_hotkey_id = U256::from(2); let coldkey_account_id = U256::from(667); @@ -131,7 +131,7 @@ fn test_dividends_with_run_to_block() { #[test] fn test_add_stake_err_signature() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(654); // bogus let amount = 20000; // Not used @@ -146,7 +146,7 @@ fn test_add_stake_err_signature() { #[test] fn test_add_stake_not_registered_key_pair() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_account_id = U256::from(435445); let hotkey_account_id = U256::from(54544); let amount = 1337; @@ -164,7 +164,7 @@ fn test_add_stake_not_registered_key_pair() { #[test] fn test_add_stake_err_neuron_does_not_belong_to_coldkey() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_id = U256::from(544); let hotkey_id = U256::from(54544); let other_cold_key = U256::from(99498); @@ -191,7 +191,7 @@ fn test_add_stake_err_neuron_does_not_belong_to_coldkey() { #[test] fn test_add_stake_err_not_enough_belance() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_id = U256::from(544); let hotkey_id = U256::from(54544); let netuid: u16 = 1; @@ -220,7 +220,7 @@ fn test_add_stake_err_not_enough_belance() { fn test_add_stake_total_balance_no_change() { // When we add stake, the total balance of the coldkey account should not change // this is because the stake should be part of the coldkey account balance (reserved/locked) - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(551337); let coldkey_account_id = U256::from(51337); let netuid: u16 = 1; @@ -277,7 +277,7 @@ fn test_add_stake_total_balance_no_change() { fn test_add_stake_total_issuance_no_change() { // When we add stake, the total issuance of the balances pallet should not change // this is because the stake should be part of the coldkey account balance (reserved/locked) - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(561337); let coldkey_account_id = U256::from(61337); let netuid: u16 = 1; @@ -335,7 +335,7 @@ fn test_add_stake_total_issuance_no_change() { #[test] fn test_reset_stakes_per_interval() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey = U256::from(561330); let hotkey = U256::from(561337); @@ -366,7 +366,7 @@ fn test_reset_stakes_per_interval() { #[test] fn test_add_stake_under_limit() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(561337); let coldkey_account_id = U256::from(61337); let netuid: u16 = 1; @@ -399,7 +399,7 @@ fn test_add_stake_under_limit() { #[test] fn test_add_stake_rate_limit_exceeded() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(561337); let coldkey_account_id = U256::from(61337); let netuid: u16 = 1; @@ -441,7 +441,7 @@ fn test_add_stake_rate_limit_exceeded() { // ************************************************************/ #[test] fn test_remove_stake_under_limit() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(561337); let coldkey_account_id = U256::from(61337); let netuid: u16 = 1; @@ -476,7 +476,7 @@ fn test_remove_stake_under_limit() { #[test] fn test_remove_stake_rate_limit_exceeded() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(561337); let coldkey_account_id = U256::from(61337); let netuid: u16 = 1; @@ -517,7 +517,7 @@ fn test_remove_stake_rate_limit_exceeded() { #[test] #[cfg(not(tarpaulin))] fn test_remove_stake_dispatch_info_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey = U256::from(0); let amount_unstaked = 5000; let call = RuntimeCall::SubtensorModule(SubtensorCall::remove_stake { @@ -527,7 +527,7 @@ fn test_remove_stake_dispatch_info_ok() { assert_eq!( call.get_dispatch_info(), DispatchInfo { - weight: frame_support::weights::Weight::from_parts(63000000, 0) + weight: frame_support::weights::Weight::from_ref_time(63000000) .add_proof_size(43991), class: DispatchClass::Normal, pays_fee: Pays::No @@ -538,7 +538,7 @@ fn test_remove_stake_dispatch_info_ok() { #[test] fn test_remove_stake_ok_no_emission() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_account_id = U256::from(4343); let hotkey_account_id = U256::from(4968585); let amount = 10000; @@ -584,7 +584,7 @@ fn test_remove_stake_ok_no_emission() { #[test] fn test_remove_stake_amount_zero() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_account_id = U256::from(4343); let hotkey_account_id = U256::from(4968585); let amount = 10000; @@ -623,7 +623,7 @@ fn test_remove_stake_amount_zero() { #[test] fn test_remove_stake_err_signature() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(4968585); let amount = 10000; // Amount to be removed @@ -638,7 +638,7 @@ fn test_remove_stake_err_signature() { #[test] fn test_remove_stake_err_hotkey_does_not_belong_to_coldkey() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_id = U256::from(544); let hotkey_id = U256::from(54544); let other_cold_key = U256::from(99498); @@ -663,7 +663,7 @@ fn test_remove_stake_err_hotkey_does_not_belong_to_coldkey() { #[test] fn test_remove_stake_no_enough_stake() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_id = U256::from(544); let hotkey_id = U256::from(54544); let amount = 10000; @@ -692,7 +692,7 @@ fn test_remove_stake_total_balance_no_change() { // When we remove stake, the total balance of the coldkey account should not change // this is because the stake should be part of the coldkey account balance (reserved/locked) // then the removed stake just becomes free balance - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(571337); let coldkey_account_id = U256::from(71337); let netuid: u16 = 1; @@ -748,7 +748,7 @@ fn test_remove_stake_total_issuance_no_change() { // When we remove stake, the total issuance of the balances pallet should not change // this is because the stake should be part of the coldkey account balance (reserved/locked) // then the removed stake just becomes free balance - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(581337); let coldkey_account_id = U256::from(81337); let netuid: u16 = 1; @@ -809,7 +809,7 @@ fn test_remove_stake_total_issuance_no_change() { ************************************************************/ #[test] fn test_get_coldkey_balance_no_balance() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_account_id = U256::from(5454); // arbitrary let result = SubtensorModule::get_coldkey_balance(&coldkey_account_id); @@ -820,7 +820,7 @@ fn test_get_coldkey_balance_no_balance() { #[test] fn test_get_coldkey_balance_with_balance() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_account_id = U256::from(5454); // arbitrary let amount = 1337; @@ -839,7 +839,7 @@ fn test_get_coldkey_balance_with_balance() { // ************************************************************/ #[test] fn test_add_stake_to_hotkey_account_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_id = U256::from(5445); let coldkey_id = U256::from(5443433); let amount: u64 = 10000; @@ -873,7 +873,7 @@ fn test_add_stake_to_hotkey_account_ok() { ************************************************************/ #[test] fn test_remove_stake_from_hotkey_account() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_id = U256::from(5445); let coldkey_id = U256::from(5443433); let amount: u64 = 10000; @@ -909,7 +909,7 @@ fn test_remove_stake_from_hotkey_account() { #[test] fn test_remove_stake_from_hotkey_account_registered_in_various_networks() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_id = U256::from(5445); let coldkey_id = U256::from(5443433); let amount: u64 = 10000; @@ -925,18 +925,17 @@ fn test_remove_stake_from_hotkey_account_registered_in_various_networks() { register_ok_neuron(netuid_ex, hotkey_id, coldkey_id, 48141209); //let neuron_uid = SubtensorModule::get_uid_for_net_and_hotkey(netuid, &hotkey_id); - - let neuron_uid = match SubtensorModule::get_uid_for_net_and_hotkey(netuid, &hotkey_id) { - Ok(k) => k, + let neuron_uid; + match SubtensorModule::get_uid_for_net_and_hotkey(netuid, &hotkey_id) { + Ok(k) => neuron_uid = k, Err(e) => panic!("Error: {:?}", e), - }; + } //let neuron_uid_ex = SubtensorModule::get_uid_for_net_and_hotkey(netuid_ex, &hotkey_id); - - let neuron_uid_ex = match SubtensorModule::get_uid_for_net_and_hotkey(netuid_ex, &hotkey_id) - { - Ok(k) => k, + let neuron_uid_ex; + match SubtensorModule::get_uid_for_net_and_hotkey(netuid_ex, &hotkey_id) { + Ok(k) => neuron_uid_ex = k, Err(e) => panic!("Error: {:?}", e), - }; + } //Add some stake that can be removed SubtensorModule::increase_stake_on_hotkey_account(&hotkey_id, amount); @@ -968,7 +967,7 @@ fn test_remove_stake_from_hotkey_account_registered_in_various_networks() { // ************************************************************/ #[test] fn test_increase_total_stake_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let increment = 10000; assert_eq!(SubtensorModule::get_total_stake(), 0); SubtensorModule::increase_total_stake(increment); @@ -981,7 +980,7 @@ fn test_increase_total_stake_ok() { // ************************************************************/ #[test] fn test_decrease_total_stake_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let initial_total_stake = 10000; let decrement = 5000; @@ -1001,7 +1000,7 @@ fn test_decrease_total_stake_ok() { // ************************************************************/ #[test] fn test_add_balance_to_coldkey_account_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_id = U256::from(4444322); let amount = 50000; SubtensorModule::add_balance_to_coldkey_account(&coldkey_id, amount); @@ -1014,7 +1013,7 @@ fn test_add_balance_to_coldkey_account_ok() { // ************************************************************/ #[test] fn test_remove_balance_from_coldkey_account_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_account_id = U256::from(434324); // Random let ammount = 10000; // Arbitrary // Put some $$ on the bank @@ -1026,13 +1025,13 @@ fn test_remove_balance_from_coldkey_account_ok() { // Should be able to withdraw without hassle let result = SubtensorModule::remove_balance_from_coldkey_account(&coldkey_account_id, ammount); - assert!(result.is_ok()); + assert_eq!(result, true); }); } #[test] fn test_remove_balance_from_coldkey_account_failed() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_account_id = U256::from(434324); // Random let ammount = 10000; // Arbitrary @@ -1040,7 +1039,7 @@ fn test_remove_balance_from_coldkey_account_failed() { // as there is no balance, nor does the account exist let result = SubtensorModule::remove_balance_from_coldkey_account(&coldkey_account_id, ammount); - assert_eq!(result, Err(Error::::BalanceWithdrawalError.into())); + assert_eq!(result, false); }); } @@ -1049,7 +1048,7 @@ fn test_remove_balance_from_coldkey_account_failed() { // ************************************************************/ #[test] fn test_hotkey_belongs_to_coldkey_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_id = U256::from(4434334); let coldkey_id = U256::from(34333); let netuid: u16 = 1; @@ -1068,29 +1067,29 @@ fn test_hotkey_belongs_to_coldkey_ok() { // ************************************************************/ #[test] fn test_can_remove_balane_from_coldkey_account_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_id = U256::from(87987984); let initial_amount = 10000; let remove_amount = 5000; SubtensorModule::add_balance_to_coldkey_account(&coldkey_id, initial_amount); - assert!(SubtensorModule::can_remove_balance_from_coldkey_account( - &coldkey_id, - remove_amount - )); + assert_eq!( + SubtensorModule::can_remove_balance_from_coldkey_account(&coldkey_id, remove_amount), + true + ); }); } #[test] fn test_can_remove_balance_from_coldkey_account_err_insufficient_balance() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey_id = U256::from(87987984); let initial_amount = 10000; let remove_amount = 20000; SubtensorModule::add_balance_to_coldkey_account(&coldkey_id, initial_amount); - assert!(!SubtensorModule::can_remove_balance_from_coldkey_account( - &coldkey_id, - remove_amount - )); + assert_eq!( + SubtensorModule::can_remove_balance_from_coldkey_account(&coldkey_id, remove_amount), + false + ); }); } /************************************************************ @@ -1098,7 +1097,7 @@ fn test_can_remove_balance_from_coldkey_account_err_insufficient_balance() { ************************************************************/ #[test] fn test_has_enough_stake_yes() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_id = U256::from(4334); let coldkey_id = U256::from(87989); let intial_amount = 10000; @@ -1116,17 +1115,16 @@ fn test_has_enough_stake_yes() { SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey_id, &hotkey_id), 10000 ); - assert!(SubtensorModule::has_enough_stake( - &coldkey_id, - &hotkey_id, - 5000 - )); + assert_eq!( + SubtensorModule::has_enough_stake(&coldkey_id, &hotkey_id, 5000), + true + ); }); } #[test] fn test_has_enough_stake_no() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_id = U256::from(4334); let coldkey_id = U256::from(87989); let intial_amount = 0; @@ -1136,17 +1134,16 @@ fn test_has_enough_stake_no() { add_network(netuid, tempo, 0); register_ok_neuron(netuid, hotkey_id, coldkey_id, start_nonce); SubtensorModule::increase_stake_on_hotkey_account(&hotkey_id, intial_amount); - assert!(!SubtensorModule::has_enough_stake( - &coldkey_id, - &hotkey_id, - 5000 - )); + assert_eq!( + SubtensorModule::has_enough_stake(&coldkey_id, &hotkey_id, 5000), + false + ); }); } #[test] fn test_non_existent_account() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { SubtensorModule::increase_stake_on_coldkey_hotkey_account( &U256::from(0), &(U256::from(0)), @@ -1169,7 +1166,7 @@ fn test_non_existent_account() { #[test] fn test_delegate_stake_division_by_zero_check() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 1; let hotkey = U256::from(1); @@ -1187,7 +1184,7 @@ fn test_delegate_stake_division_by_zero_check() { #[test] #[cfg(not(tarpaulin))] fn test_full_with_delegating() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid = 1; // Make two accounts. let hotkey0 = U256::from(1); @@ -1769,7 +1766,7 @@ fn test_full_with_delegating() { // Verify delegates with servers get the full server inflation. #[test] fn test_full_with_delegating_some_servers() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid = 1; // Make two accounts. let hotkey0 = U256::from(1); @@ -2097,7 +2094,7 @@ fn test_full_with_delegating_some_servers() { #[test] fn test_full_block_emission_occurs() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let netuid = 1; // Make two accounts. let hotkey0 = U256::from(1); @@ -2256,7 +2253,7 @@ fn test_full_block_emission_occurs() { #[test] fn test_unstake_all_coldkeys_from_hotkey_account() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_id = U256::from(123570); let coldkey0_id = U256::from(123560); @@ -2344,7 +2341,7 @@ fn test_unstake_all_coldkeys_from_hotkey_account() { #[test] fn test_unstake_all_coldkeys_from_hotkey_account_single_staker() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_id = U256::from(123570); let coldkey0_id = U256::from(123560); @@ -2395,7 +2392,7 @@ fn test_unstake_all_coldkeys_from_hotkey_account_single_staker() { #[test] fn test_faucet_ok() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let coldkey = U256::from(123560); log::info!("Creating work for submission to faucet..."); @@ -2405,7 +2402,7 @@ fn test_faucet_ok() { let mut nonce: u64 = 0; let mut work: H256 = SubtensorModule::create_seal_hash(block_number, nonce, &coldkey); while !SubtensorModule::hash_meets_difficulty(&work, difficulty) { - nonce += 1; + nonce = nonce + 1; work = SubtensorModule::create_seal_hash(block_number, nonce, &coldkey); } let vec_work: Vec = SubtensorModule::hash_to_vec(work); @@ -2415,7 +2412,7 @@ fn test_faucet_ok() { #[cfg(feature = "pow-faucet")] assert_ok!(SubtensorModule::do_faucet( <::RuntimeOrigin>::signed(coldkey), - block_number, + 0, nonce, vec_work )); @@ -2423,7 +2420,7 @@ fn test_faucet_ok() { #[cfg(not(feature = "pow-faucet"))] assert_ok!(SubtensorModule::do_faucet( <::RuntimeOrigin>::signed(coldkey), - block_number, + 0, nonce, vec_work )); @@ -2436,7 +2433,7 @@ fn test_faucet_ok() { /// Run this test using: cargo test --package pallet-subtensor --test staking test_clear_small_nominations #[test] fn test_clear_small_nominations() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { System::set_block_number(1); // Create accounts. @@ -2545,8 +2542,8 @@ fn test_clear_small_nominations() { let total_cold2_stake_before = TotalColdkeyStake::::get(cold2); let total_hot1_stake_before = TotalHotkeyStake::::get(hot1); let total_hot2_stake_before = TotalHotkeyStake::::get(hot2); - let _ = Stake::::try_get(hot2, cold1).unwrap(); // ensure exists before - let _ = Stake::::try_get(hot1, cold2).unwrap(); // ensure exists before + let _ = Stake::::try_get(&hot2, &cold1).unwrap(); // ensure exists before + let _ = Stake::::try_get(&hot1, &cold2).unwrap(); // ensure exists before let total_stake_before = TotalStake::::get(); SubtensorModule::set_nominator_min_required_stake(10); @@ -2582,8 +2579,8 @@ fn test_clear_small_nominations() { TotalHotkeyStake::::get(hot2), total_hot2_stake_before - 1 ); - Stake::::try_get(hot2, cold1).unwrap_err(); - Stake::::try_get(hot1, cold2).unwrap_err(); + Stake::::try_get(&hot2, &cold1).unwrap_err(); + Stake::::try_get(&hot1, &cold2).unwrap_err(); assert_eq!( TotalColdkeyStake::::get(cold1), total_cold1_stake_before - 1 @@ -2592,7 +2589,7 @@ fn test_clear_small_nominations() { TotalHotkeyStake::::get(hot1), total_hot1_stake_before - 1 ); - Stake::::try_get(hot2, cold1).unwrap_err(); + Stake::::try_get(&hot2, &cold1).unwrap_err(); assert_eq!(TotalStake::::get(), total_stake_before - 2); }); } @@ -2600,7 +2597,7 @@ fn test_clear_small_nominations() { /// Test that the nominator minimum staking threshold is enforced when stake is added. #[test] fn test_add_stake_below_minimum_threshold() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let coldkey1 = U256::from(0); let hotkey1 = U256::from(1); @@ -2646,7 +2643,7 @@ fn test_add_stake_below_minimum_threshold() { /// Test that the nominator minimum staking threshold is enforced when stake is removed. #[test] fn test_remove_stake_below_minimum_threshold() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let coldkey1 = U256::from(0); let hotkey1 = U256::from(1); diff --git a/pallets/subtensor/tests/uids.rs b/pallets/subtensor/tests/uids.rs index b8a969943..772fcbc22 100644 --- a/pallets/subtensor/tests/uids.rs +++ b/pallets/subtensor/tests/uids.rs @@ -15,7 +15,7 @@ mod mock; #[test] fn test_replace_neuron() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -80,7 +80,7 @@ fn test_replace_neuron() { #[test] fn test_replace_neuron_multiple_subnets() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let netuid1: u16 = 2; @@ -171,7 +171,7 @@ fn test_replace_neuron_multiple_subnets() { #[test] fn test_replace_neuron_multiple_subnets_unstake_all() { - new_test_ext(1).execute_with(|| { + new_test_ext().execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let netuid1: u16 = 2; @@ -336,7 +336,7 @@ fn test_replace_neuron_multiple_subnets_unstake_all() { ), 0 ); - assert_eq!(Balances::free_balance(coldkey_account_id), stake_amount); + assert_eq!(Balances::free_balance(&coldkey_account_id), stake_amount); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey( @@ -346,7 +346,7 @@ fn test_replace_neuron_multiple_subnets_unstake_all() { 0 ); assert_eq!( - Balances::free_balance(coldkey_account1_id), + Balances::free_balance(&coldkey_account1_id), stake_amount + 1 ); @@ -358,7 +358,7 @@ fn test_replace_neuron_multiple_subnets_unstake_all() { 0 ); assert_eq!( - Balances::free_balance(coldkey_account2_id), + Balances::free_balance(&coldkey_account2_id), stake_amount + 2 ); diff --git a/pallets/subtensor/tests/weights.rs b/pallets/subtensor/tests/weights.rs index c1467abda..fcce1c167 100644 --- a/pallets/subtensor/tests/weights.rs +++ b/pallets/subtensor/tests/weights.rs @@ -3,6 +3,7 @@ use frame_support::{ assert_ok, dispatch::{DispatchClass, GetDispatchInfo, Pays}, }; +use frame_system::Config; use mock::*; use pallet_subtensor::Error; use sp_core::U256; @@ -17,7 +18,7 @@ use substrate_fixed::types::I32F32; #[test] #[cfg(not(tarpaulin))] fn test_set_weights_dispatch_info_ok() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let dests = vec![1, 1]; let weights = vec![1, 1]; let netuid: u16 = 1; @@ -38,7 +39,7 @@ fn test_set_weights_dispatch_info_ok() { // Test ensures that uid has validator permit to set non-self weights. #[test] fn test_weights_err_no_validator_permit() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(55); let netuid: u16 = 1; let tempo: u16 = 13; @@ -82,7 +83,7 @@ fn test_weights_err_no_validator_permit() { #[test] #[cfg(not(tarpaulin))] fn test_set_weights_min_stake_failed() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let dests = vec![0]; let weights = vec![1]; let netuid: u16 = 1; @@ -95,11 +96,11 @@ fn test_set_weights_min_stake_failed() { // Check the signed extension function. assert_eq!(SubtensorModule::get_weights_min_stake(), 20_000_000_000_000); - assert!(!SubtensorModule::check_weights_min_stake(&hotkey)); + assert_eq!(SubtensorModule::check_weights_min_stake(&hotkey), false); SubtensorModule::increase_stake_on_hotkey_account(&hotkey, 19_000_000_000_000); - assert!(!SubtensorModule::check_weights_min_stake(&hotkey)); + assert_eq!(SubtensorModule::check_weights_min_stake(&hotkey), false); SubtensorModule::increase_stake_on_hotkey_account(&hotkey, 20_000_000_000_000); - assert!(SubtensorModule::check_weights_min_stake(&hotkey)); + assert_eq!(SubtensorModule::check_weights_min_stake(&hotkey), true); // Check that it fails at the pallet level. SubtensorModule::set_weights_min_stake(100_000_000_000_000); @@ -128,7 +129,7 @@ fn test_set_weights_min_stake_failed() { // Test ensures that a uid can only set weights if it has the valid weights set version key. #[test] fn test_weights_version_key() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey = U256::from(55); let coldkey = U256::from(66); let netuid0: u16 = 1; @@ -204,7 +205,7 @@ fn test_weights_version_key() { // Test ensures that uid has validator permit to set non-self weights. #[test] fn test_weights_err_setting_weights_too_fast() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(55); let netuid: u16 = 1; let tempo: u16 = 13; @@ -259,7 +260,7 @@ fn test_weights_err_setting_weights_too_fast() { // Test ensures that uids -- weights must have the same size. #[test] fn test_weights_err_weights_vec_not_equal_size() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(55); let netuid: u16 = 1; let tempo: u16 = 13; @@ -285,7 +286,7 @@ fn test_weights_err_weights_vec_not_equal_size() { // Test ensures that uids can have not duplicates #[test] fn test_weights_err_has_duplicate_ids() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(666); let netuid: u16 = 1; let tempo: u16 = 13; @@ -335,7 +336,7 @@ fn test_weights_err_has_duplicate_ids() { #[test] fn test_weights_err_max_weight_limit() { //TO DO SAM: uncomment when we implement run_to_block fn - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { // Add network. let netuid: u16 = 1; let tempo: u16 = 100; @@ -419,18 +420,18 @@ fn test_weights_err_max_weight_limit() { // Tests the call requires a valid origin. #[test] fn test_no_signature() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let uids: Vec = vec![]; let values: Vec = vec![]; let result = SubtensorModule::set_weights(RuntimeOrigin::none(), 1, uids, values, 0); - assert_eq!(result, Err(DispatchError::BadOrigin)); + assert_eq!(result, Err(DispatchError::BadOrigin.into())); }); } // Tests that weights cannot be set BY non-registered hotkeys. #[test] fn test_set_weights_err_not_active() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; add_network(netuid, tempo, 0); @@ -457,7 +458,7 @@ fn test_set_weights_err_not_active() { // Tests that set weights fails if you pass invalid uids. #[test] fn test_set_weights_err_invalid_uid() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let hotkey_account_id = U256::from(55); let netuid: u16 = 1; let tempo: u16 = 13; @@ -480,10 +481,10 @@ fn test_set_weights_err_invalid_uid() { }); } -// Tests that set weights fails if you don't pass enough values. +// Tests that set weights fails if you dont pass enough values. #[test] fn test_set_weight_not_enough_values() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let account_id = U256::from(1); @@ -538,7 +539,7 @@ fn test_set_weight_not_enough_values() { // Tests that the weights set fails if you pass too many uids for the subnet #[test] fn test_set_weight_too_many_uids() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; add_network(netuid, tempo, 0); @@ -580,7 +581,7 @@ fn test_set_weight_too_many_uids() { // Tests that the weights set doesn't panic if you pass weights that sum to larger than u16 max. #[test] fn test_set_weights_sum_larger_than_u16_max() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; add_network(netuid, tempo, 0); @@ -611,7 +612,7 @@ fn test_set_weights_sum_larger_than_u16_max() { // Get max-upscaled unnormalized weights. let all_weights: Vec> = SubtensorModule::get_weights(netuid); - let weights_set: &[I32F32] = &all_weights[neuron_uid as usize]; + let weights_set: &Vec = &all_weights[neuron_uid as usize]; assert_eq!(weights_set[0], I32F32::from_num(u16::MAX)); assert_eq!(weights_set[1], I32F32::from_num(u16::MAX)); }); @@ -620,7 +621,7 @@ fn test_set_weights_sum_larger_than_u16_max() { /// Check _truthy_ path for self weight #[test] fn test_check_length_allows_singleton() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let max_allowed: u16 = 1; @@ -629,7 +630,7 @@ fn test_check_length_allows_singleton() { SubtensorModule::set_min_allowed_weights(netuid, min_allowed_weights); let uids: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); - let uid: u16 = uids[0]; + let uid: u16 = uids[0].clone(); let weights: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); let expected = true; @@ -642,7 +643,7 @@ fn test_check_length_allows_singleton() { /// Check _truthy_ path for weights within allowed range #[test] fn test_check_length_weights_length_exceeds_min_allowed() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let max_allowed: u16 = 3; @@ -651,7 +652,7 @@ fn test_check_length_weights_length_exceeds_min_allowed() { SubtensorModule::set_min_allowed_weights(netuid, min_allowed_weights); let uids: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); - let uid: u16 = uids[0]; + let uid: u16 = uids[0].clone(); let weights: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); let expected = true; @@ -664,7 +665,7 @@ fn test_check_length_weights_length_exceeds_min_allowed() { /// Check _falsey_ path for weights outside allowed range #[test] fn test_check_length_to_few_weights() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let min_allowed_weights = 3; @@ -684,7 +685,7 @@ fn test_check_length_to_few_weights() { let uids: Vec = Vec::from_iter((0..2).map(|id| id + 1)); let weights: Vec = Vec::from_iter((0..2).map(|id| id + 1)); - let uid: u16 = uids[0]; + let uid: u16 = uids[0].clone(); let expected = false; let result = SubtensorModule::check_length(netuid, uid, &uids, &weights); @@ -696,7 +697,7 @@ fn test_check_length_to_few_weights() { /// Check do nothing path #[test] fn test_normalize_weights_does_not_mutate_when_sum_is_zero() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let max_allowed: u16 = 3; let weights: Vec = Vec::from_iter((0..max_allowed).map(|_| 0)); @@ -714,10 +715,10 @@ fn test_normalize_weights_does_not_mutate_when_sum_is_zero() { /// Check do something path #[test] fn test_normalize_weights_does_not_mutate_when_sum_not_zero() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let max_allowed: u16 = 3; - let weights: Vec = Vec::from_iter(0..max_allowed); + let weights: Vec = Vec::from_iter((0..max_allowed).map(|weight| weight)); let expected = weights.clone(); let result = SubtensorModule::normalize_weights(weights); @@ -729,12 +730,12 @@ fn test_normalize_weights_does_not_mutate_when_sum_not_zero() { /// Check _truthy_ path for weights length #[test] fn test_max_weight_limited_allow_self_weights_to_exceed_max_weight_limit() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let max_allowed: u16 = 1; let netuid: u16 = 1; let uids: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); - let uid: u16 = uids[0]; + let uid: u16 = uids[0].clone(); let weights: Vec = vec![0]; let expected = true; @@ -750,12 +751,12 @@ fn test_max_weight_limited_allow_self_weights_to_exceed_max_weight_limit() { /// Check _truthy_ path for max weight limit #[test] fn test_max_weight_limited_when_weight_limit_is_u16_max() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let max_allowed: u16 = 3; let netuid: u16 = 1; let uids: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); - let uid: u16 = uids[0]; + let uid: u16 = uids[0].clone(); let weights: Vec = Vec::from_iter((0..max_allowed).map(|_id| u16::MAX)); let expected = true; @@ -771,13 +772,13 @@ fn test_max_weight_limited_when_weight_limit_is_u16_max() { /// Check _truthy_ path for max weight limit #[test] fn test_max_weight_limited_when_max_weight_is_within_limit() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let max_allowed: u16 = 1; let max_weight_limit = u16::MAX / 5; let netuid: u16 = 1; let uids: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); - let uid: u16 = uids[0]; + let uid: u16 = uids[0].clone(); let weights: Vec = Vec::from_iter((0..max_allowed).map(|id| max_weight_limit - id)); SubtensorModule::set_max_weight_limit(netuid, max_weight_limit); @@ -795,13 +796,13 @@ fn test_max_weight_limited_when_max_weight_is_within_limit() { /// Check _falsey_ path #[test] fn test_max_weight_limited_when_guard_checks_are_not_triggered() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let max_allowed: u16 = 3; let max_weight_limit = u16::MAX / 5; let netuid: u16 = 1; let uids: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); - let uid: u16 = uids[0]; + let uid: u16 = uids[0].clone(); let weights: Vec = Vec::from_iter((0..max_allowed).map(|id| max_weight_limit + id)); SubtensorModule::set_max_weight_limit(netuid, max_weight_limit); @@ -819,11 +820,11 @@ fn test_max_weight_limited_when_guard_checks_are_not_triggered() { /// Check _falsey_ path for weights length #[test] fn test_is_self_weight_weights_length_not_one() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let max_allowed: u16 = 3; let uids: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); - let uid: u16 = uids[0]; + let uid: u16 = uids[0].clone(); let weights: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); let expected = false; @@ -839,11 +840,11 @@ fn test_is_self_weight_weights_length_not_one() { /// Check _falsey_ path for uid vs uids[0] #[test] fn test_is_self_weight_uid_not_in_uids() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let max_allowed: u16 = 3; let uids: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); - let uid: u16 = uids[1]; + let uid: u16 = uids[1].clone(); let weights: Vec = vec![0]; let expected = false; @@ -860,11 +861,11 @@ fn test_is_self_weight_uid_not_in_uids() { /// @TODO: double-check if this really be desired behavior #[test] fn test_is_self_weight_uid_in_uids() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let max_allowed: u16 = 1; let uids: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); - let uid: u16 = uids[0]; + let uid: u16 = uids[0].clone(); let weights: Vec = vec![0]; let expected = true; @@ -880,7 +881,7 @@ fn test_is_self_weight_uid_in_uids() { /// Check _truthy_ path #[test] fn test_check_len_uids_within_allowed_within_network_pool() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; @@ -899,7 +900,7 @@ fn test_check_len_uids_within_allowed_within_network_pool() { SubtensorModule::set_max_allowed_uids(netuid, max_allowed); SubtensorModule::set_max_registrations_per_block(netuid, max_registrations_per_block); - let uids: Vec = Vec::from_iter(0..max_allowed); + let uids: Vec = Vec::from_iter((0..max_allowed).map(|uid| uid)); let expected = true; let result = SubtensorModule::check_len_uids_within_allowed(netuid, &uids); @@ -913,7 +914,7 @@ fn test_check_len_uids_within_allowed_within_network_pool() { /// Check _falsey_ path #[test] fn test_check_len_uids_within_allowed_not_within_network_pool() { - new_test_ext(0).execute_with(|| { + new_test_ext().execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; @@ -932,7 +933,7 @@ fn test_check_len_uids_within_allowed_not_within_network_pool() { SubtensorModule::set_max_allowed_uids(netuid, max_allowed); SubtensorModule::set_max_registrations_per_block(netuid, max_registrations_per_block); - let uids: Vec = Vec::from_iter(0..(max_allowed + 1)); + let uids: Vec = Vec::from_iter((0..(max_allowed + 1)).map(|uid| uid)); let expected = false; let result = SubtensorModule::check_len_uids_within_allowed(netuid, &uids); diff --git a/recipe.json b/recipe.json index f9967366a..5908dccca 100644 --- a/recipe.json +++ b/recipe.json @@ -1,48 +1 @@ -{ - "skeleton": { - "manifests": [ - { - "relative_path": "Cargo.toml", - "contents": "[workspace]\nmembers = [\"node\", \"pallets/subtensor\", \"runtime\"]\n[profile.release]\npanic = \"unwind\"\n\n[profile.release.package]\n\n[profile.test]\nopt-level = 3\n\n[profile.test.package]\n" - }, - { - "relative_path": "node/Cargo.toml", - "contents": "bench = []\ntest = []\nexample = []\n\n[[bin]]\nname = \"node-subtensor\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nrequired-features = []\n\n[package]\nname = \"node-subtensor\"\nedition = \"2021\"\nversion = \"0.0.1\"\nbuild = \"build.rs\"\nauthors = [\"Substrate DevHub \"]\ndescription = \"A fresh FRAME-based Substrate node, ready for hacking.\"\nhomepage = \"https://substrate.io/\"\nlicense = \"Unlicense\"\nrepository = \"https://github.com/opentensor/subtensor\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\npublish = false\n[package.metadata.docs.rs]\ntargets = [\"x86_64-unknown-linux-gnu\"]\n\n[dependencies]\nmemmap2 = \"0.5.0\"\nserde_json = \"1.0.85\"\n\n[dependencies.clap]\nversion = \"4.0.9\"\nfeatures = [\"derive\"]\n\n[dependencies.frame-benchmarking]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.frame-benchmarking-cli]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.frame-system]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.futures]\nversion = \"0.3.21\"\nfeatures = [\"thread-pool\"]\n\n[dependencies.jsonrpsee]\nversion = \"0.16.2\"\nfeatures = [\"server\"]\n\n[dependencies.node-subtensor-runtime]\nversion = \"0.0.1\"\npath = \"../runtime\"\n\n[dependencies.pallet-transaction-payment]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.pallet-transaction-payment-rpc]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-basic-authorship]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-cli]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-client-api]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-consensus]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-consensus-aura]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-executor]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-consensus-grandpa]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-keystore]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-rpc]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-rpc-api]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-service]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-telemetry]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-transaction-pool]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sc-transaction-pool-api]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.serde]\nversion = \"1.0.145\"\nfeatures = [\"derive\"]\n\n[dependencies.sp-api]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sp-block-builder]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sp-blockchain]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sp-consensus]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sp-consensus-aura]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sp-core]\nversion = \"24\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sp-consensus-grandpa]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sp-inherents]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sp-io]\nversion = \"24\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sp-keyring]\nversion = \"24\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sp-runtime]\nversion = \"24\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.sp-timestamp]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.substrate-frame-rpc-system]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[dependencies.subtensor-custom-rpc]\npath = \"../pallets/subtensor/rpc\"\n\n[dependencies.subtensor-custom-rpc-runtime-api]\npath = \"../pallets/subtensor/runtime-api\"\n\n[dependencies.try-runtime-cli]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\noptional = true\n[build-dependencies.substrate-build-script-utils]\nversion = \"3.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\n\n[features]\ndefault = []\nruntime-benchmarks = [\"node-subtensor-runtime/runtime-benchmarks\", \"frame-benchmarking/runtime-benchmarks\", \"frame-benchmarking-cli/runtime-benchmarks\"]\ntry-runtime = [\"node-subtensor-runtime/try-runtime\", \"try-runtime-cli/try-runtime\"]\n\n[lib]\npath = \"src/lib.rs\"\nname = \"node_subtensor\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\ncrate-type = [\"rlib\"]\n" - }, - { - "relative_path": "pallets/subtensor/Cargo.toml", - "contents": "bin = []\nbench = []\nexample = []\n\n[[test]]\npath = \"tests/block_step.rs\"\nname = \"block_step\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/difficulty.rs\"\nname = \"difficulty\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/epoch.rs\"\nname = \"epoch\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/mock.rs\"\nname = \"mock\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/networks.rs\"\nname = \"networks\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/registration.rs\"\nname = \"registration\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/serving.rs\"\nname = \"serving\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/staking.rs\"\nname = \"staking\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/sudo.rs\"\nname = \"sudo\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/weights.rs\"\nname = \"weights\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[package]\nname = \"pallet-subtensor\"\nedition = \"2021\"\nversion = \"0.0.1\"\nauthors = [\"Bittensor Nucleus Team\"]\ndescription = \"FRAME pallet for runtime logic of Subtensor Blockchain.\"\nhomepage = \"https://bittensor.com\"\nlicense = \"Unlicense\"\nrepository = \"https://github.com/opentensor/subtensor\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\npublish = false\n[package.metadata.docs.rs]\ntargets = [\"x86_64-unknown-linux-gnu\"]\n[dependencies.codec]\nversion = \"3.0.0\"\nfeatures = [\"derive\"]\ndefault-features = false\npackage = \"parity-scale-codec\"\n\n[dependencies.frame-benchmarking]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\noptional = true\ndefault-features = false\n\n[dependencies.frame-support]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.frame-system]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.log]\nversion = \"0.4.14\"\ndefault-features = false\n\n[dependencies.ndarray]\nversion = \"0.15.0\"\ndefault-features = false\n\n[dependencies.pallet-balances]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.pallet-transaction-payment]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.scale-info]\nversion = \"2.1.1\"\nfeatures = [\"derive\"]\ndefault-features = false\n\n[dependencies.serde]\nversion = \"1.0.132\"\nfeatures = [\"derive\"]\ndefault-features = false\n\n[dependencies.serde-tuple-vec-map]\nversion = \"1.0.1\"\ndefault-features = false\n\n[dependencies.serde_bytes]\nversion = \"0.11.8\"\nfeatures = [\"alloc\"]\ndefault-features = false\n\n[dependencies.serde_with]\nversion = \"=2.0.0\"\nfeatures = [\"macros\"]\ndefault-features = false\n\n[dependencies.sp-core]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-io]\nversion = \"24\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-runtime]\nversion = \"24\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-std]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.substrate-fixed]\ngit = \"https://github.com/encointer/substrate-fixed.git\"\ntag = \"v0.5.9\"\n\n[dev-dependencies]\nrand = \"0.8\"\n\n[dev-dependencies.pallet-balances]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v1.0.0\"\nfeatures = [\"std\"]\ndefault-features = false\n\n[dev-dependencies.parity-util-mem]\nversion = \"0.11.0\"\nfeatures = [\"primitive-types\"]\n\n[dev-dependencies.sp-core]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dev-dependencies.sp-tracing]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dev-dependencies.sp-version]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[features]\ndefault = [\"std\"]\nruntime-benchmarks = [\"frame-benchmarking/runtime-benchmarks\"]\nstd = [\"codec/std\", \"frame-benchmarking/std\", \"frame-support/std\", \"frame-system/std\", \"scale-info/std\"]\ntry-runtime = [\"frame-support/try-runtime\"]\n\n[lib]\npath = \"src/lib.rs\"\nname = \"pallet_subtensor\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\ncrate-type = [\"rlib\"]\n" - }, - { - "relative_path": "pallets/subtensor/rpc/Cargo.toml", - "contents": "bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"subtensor-custom-rpc\"\nedition = \"2021\"\nversion = \"0.0.1\"\nauthors = [\"Cameron Fairchild \"]\ndescription = \"A pallet that adds custom RPC calls to subtensor\"\nlicense = \"MIT\"\nrepository = \"https://github.com/opentensor/subtensor\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\npublish = false\n[dependencies.codec]\nversion = \"3.0.0\"\nfeatures = [\"derive\"]\ndefault-features = false\npackage = \"parity-scale-codec\"\n\n[dependencies.jsonrpsee]\nversion = \"0.16.2\"\nfeatures = [\"client-core\", \"server\", \"macros\"]\ndefault-features = false\n\n[dependencies.pallet-subtensor]\nversion = \"0.0.1\"\npath = \"../../subtensor\"\ndefault-features = false\n\n[dependencies.serde]\nversion = \"1.0.132\"\nfeatures = [\"derive\"]\ndefault-features = false\n\n[dependencies.sp-api]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-blockchain]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-rpc]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-runtime]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.subtensor-custom-rpc-runtime-api]\nversion = \"0.0.1\"\npath = \"../runtime-api\"\ndefault-features = false\n\n[features]\ndefault = [\"std\"]\nstd = [\"sp-api/std\", \"sp-runtime/std\", \"subtensor-custom-rpc-runtime-api/std\"]\n\n[lib]\npath = \"src/lib.rs\"\nname = \"subtensor_custom_rpc\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\ncrate-type = [\"rlib\"]\n" - }, - { - "relative_path": "pallets/subtensor/runtime-api/Cargo.toml", - "contents": "bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"subtensor-custom-rpc-runtime-api\"\nedition = \"2021\"\nversion = \"0.0.1\"\nauthors = [\"Cameron Fairchild \"]\ndescription = \"A pallet that adds a custom runtime API to Subtensor\"\nlicense = \"MIT\"\nrepository = \"https://github.com/opentensor/subtensor\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\npublish = false\n[dependencies.frame-support]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.pallet-subtensor]\nversion = \"0.0.1\"\npath = \"../../subtensor\"\ndefault-features = false\n\n[dependencies.serde]\nversion = \"1.0.132\"\nfeatures = [\"derive\"]\ndefault-features = false\n\n[dependencies.sp-api]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[features]\ndefault = [\"std\"]\nstd = [\"sp-api/std\"]\n\n[lib]\npath = \"src/lib.rs\"\nname = \"subtensor_custom_rpc_runtime_api\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\ncrate-type = [\"rlib\"]\n" - }, - { - "relative_path": "runtime/Cargo.toml", - "contents": "bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"node-subtensor-runtime\"\nedition = \"2021\"\nversion = \"0.0.1\"\nbuild = \"build.rs\"\nauthors = [\"Substrate DevHub \"]\ndescription = \"A fresh FRAME-based Substrate node, ready for hacking.\"\nhomepage = \"https://substrate.io/\"\nlicense = \"Unlicense\"\nrepository = \"https://github.com/substrate-developer-hub/substrate-node-subtensor/\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\npublish = false\n[package.metadata.docs.rs]\ntargets = [\"x86_64-unknown-linux-gnu\"]\n\n[dependencies]\nsmallvec = \"1.6.1\"\n\n[dependencies.codec]\nversion = \"3.0.0\"\nfeatures = [\"derive\"]\ndefault-features = false\npackage = \"parity-scale-codec\"\n\n[dependencies.frame-benchmarking]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\noptional = true\ndefault-features = false\n\n[dependencies.frame-executive]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.frame-support]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.frame-system]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.frame-system-benchmarking]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\noptional = true\ndefault-features = false\n\n[dependencies.frame-system-rpc-runtime-api]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.frame-try-runtime]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\noptional = true\ndefault-features = false\n\n[dependencies.pallet-aura]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.pallet-balances]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.pallet-grandpa]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.pallet-randomness-collective-flip]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.pallet-subtensor]\nversion = \"0.0.1\"\npath = \"../pallets/subtensor\"\ndefault-features = false\n\n[dependencies.pallet-sudo]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.pallet-timestamp]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.pallet-transaction-payment]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.pallet-transaction-payment-rpc-runtime-api]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.scale-info]\nversion = \"2.1.1\"\nfeatures = [\"derive\"]\ndefault-features = false\n\n[dependencies.sp-api]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-block-builder]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-consensus-aura]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-core]\nversion = \"24\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-inherents]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-offchain]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-runtime]\nversion = \"24\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-session]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-std]\nversion = \"5.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-transaction-pool]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.sp-version]\nversion = \"5.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\ndefault-features = false\n\n[dependencies.subtensor-custom-rpc-runtime-api]\nversion = \"0.0.1\"\npath = \"../pallets/subtensor/runtime-api\"\ndefault-features = false\n[build-dependencies.substrate-wasm-builder]\nversion = \"5.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v1.0.0\"\noptional = true\n\n[features]\ndefault = [\"std\"]\nruntime-benchmarks = [\"frame-benchmarking/runtime-benchmarks\", \"frame-support/runtime-benchmarks\", \"frame-system-benchmarking/runtime-benchmarks\", \"frame-system/runtime-benchmarks\", \"pallet-balances/runtime-benchmarks\", \"pallet-grandpa/runtime-benchmarks\", \"pallet-timestamp/runtime-benchmarks\", \"sp-runtime/runtime-benchmarks\", \"pallet-subtensor/runtime-benchmarks\"]\nstd = [\"frame-try-runtime?/std\", \"frame-system-benchmarking?/std\", \"frame-benchmarking/std\", \"codec/std\", \"scale-info/std\", \"frame-executive/std\", \"frame-support/std\", \"frame-system-rpc-runtime-api/std\", \"frame-system/std\", \"frame-try-runtime/std\", \"pallet-subtensor/std\", \"pallet-aura/std\", \"pallet-balances/std\", \"pallet-grandpa/std\", \"pallet-randomness-collective-flip/std\", \"pallet-sudo/std\", \"pallet-timestamp/std\", \"pallet-transaction-payment-rpc-runtime-api/std\", \"pallet-transaction-payment/std\", \"sp-api/std\", \"sp-block-builder/std\", \"sp-consensus-aura/std\", \"sp-core/std\", \"sp-inherents/std\", \"sp-offchain/std\", \"sp-runtime/std\", \"sp-session/std\", \"sp-std/std\", \"sp-transaction-pool/std\", \"sp-version/std\", \"substrate-wasm-builder\"]\ntry-runtime = [\"frame-try-runtime/try-runtime\", \"frame-executive/try-runtime\", \"frame-system/try-runtime\", \"frame-support/try-runtime\", \"pallet-aura/try-runtime\", \"pallet-balances/try-runtime\", \"pallet-grandpa/try-runtime\", \"pallet-randomness-collective-flip/try-runtime\", \"pallet-sudo/try-runtime\", \"pallet-timestamp/try-runtime\", \"pallet-transaction-payment/try-runtime\", \"pallet-subtensor/try-runtime\"]\n\n[lib]\npath = \"src/lib.rs\"\nname = \"node_subtensor_runtime\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\ncrate-type = [\"rlib\"]\n[profile.test]\nopt-level = 3\n\n[profile.test.package]\n" - }, - { - "relative_path": "target/debug/wbuild/node-subtensor-runtime/Cargo.toml", - "contents": "bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"node-subtensor-runtime-wasm\"\nedition = \"2021\"\nversion = \"0.0.1\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\n\n[workspace]\nmembers = []\n[dependencies.wasm-project]\npath = \"/Users/alashaabana/.bittensor/subtensorv3/runtime\"\nfeatures = [\"frame-try-runtime\", \"frame-benchmarking\"]\ndefault-features = false\npackage = \"node-subtensor-runtime\"\n\n[lib]\nname = \"node_subtensor_runtime\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nrequired-features = []\ncrate-type = [\"cdylib\"]\n[profile.release]\nlto = \"thin\"\npanic = \"abort\"\n\n[profile.release.package]\n\n[profile.dev]\npanic = \"abort\"\n\n[profile.dev.package]\n\n[profile.production]\ninherits = \"release\"\nlto = \"fat\"\ncodegen-units = 1\n\n[profile.production.package]\n" - }, - { - "relative_path": "target/debug/wbuild/node-template-runtime/Cargo.toml", - "contents": "bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"node-template-runtime-wasm\"\nedition = \"2021\"\nversion = \"0.0.1\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\n\n[workspace]\nmembers = []\n[dependencies.wasm-project]\npath = \"/Users/alashaabana/.bittensor/subtensorv3/runtime\"\nfeatures = [\"frame-try-runtime\"]\ndefault-features = false\npackage = \"node-template-runtime\"\n\n[lib]\nname = \"node_template_runtime\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nrequired-features = []\ncrate-type = [\"cdylib\"]\n[profile.release]\nlto = \"thin\"\npanic = \"abort\"\n\n[profile.release.package]\n\n[profile.dev]\npanic = \"abort\"\n\n[profile.dev.package]\n\n[profile.production]\ninherits = \"release\"\nlto = \"fat\"\ncodegen-units = 1\n\n[profile.production.package]\n" - }, - { - "relative_path": "target/release/wbuild/node-subtensor-runtime/Cargo.toml", - "contents": "bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"node-subtensor-runtime-wasm\"\nedition = \"2021\"\nversion = \"0.0.1\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\n\n[workspace]\nmembers = []\n[dependencies.wasm-project]\npath = \"/Users/alashaabana/.bittensor/subtensorv3/runtime\"\nfeatures = [\"frame-system-benchmarking\", \"frame-try-runtime\", \"frame-benchmarking\", \"runtime-benchmarks\"]\ndefault-features = false\npackage = \"node-subtensor-runtime\"\n\n[lib]\nname = \"node_subtensor_runtime\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nrequired-features = []\ncrate-type = [\"cdylib\"]\n[profile.release]\nlto = \"thin\"\npanic = \"abort\"\n\n[profile.release.package]\n\n[profile.dev]\npanic = \"abort\"\n\n[profile.dev.package]\n\n[profile.production]\ninherits = \"release\"\nlto = \"fat\"\ncodegen-units = 1\n\n[profile.production.package]\n" - }, - { - "relative_path": "target/release/wbuild/node-template-runtime/Cargo.toml", - "contents": "bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"node-template-runtime-wasm\"\nedition = \"2021\"\nversion = \"0.0.1\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\n\n[workspace]\nmembers = []\n[dependencies.wasm-project]\npath = \"/Users/alashaabana/.bittensor/subtensorv3/runtime\"\nfeatures = [\"frame-system-benchmarking\", \"runtime-benchmarks\", \"frame-try-runtime\", \"frame-benchmarking\"]\ndefault-features = false\npackage = \"node-template-runtime\"\n\n[lib]\nname = \"node_template_runtime\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nrequired-features = []\ncrate-type = [\"cdylib\"]\n[profile.release]\nlto = \"thin\"\npanic = \"abort\"\n\n[profile.release.package]\n\n[profile.dev]\npanic = \"abort\"\n\n[profile.dev.package]\n\n[profile.production]\ninherits = \"release\"\nlto = \"fat\"\ncodegen-units = 1\n\n[profile.production.package]\n" - } - ], - "config_file": null, - "lock_file": "version = 3\n\n[[package]]\nname = \"Inflector\"\nversion = \"0.11.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3\"\ndependencies = [\"lazy_static\", \"regex\"]\n\n[[package]]\nname = \"addr2line\"\nversion = \"0.17.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b\"\ndependencies = [\"gimli 0.26.2\"]\n\n[[package]]\nname = \"addr2line\"\nversion = \"0.19.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97\"\ndependencies = [\"gimli 0.27.1\"]\n\n[[package]]\nname = \"adler\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe\"\n\n[[package]]\nname = \"aead\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331\"\ndependencies = [\"generic-array 0.14.6\"]\n\n[[package]]\nname = \"aead\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877\"\ndependencies = [\"generic-array 0.14.6\", \"rand_core 0.6.4\"]\n\n[[package]]\nname = \"aes\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561\"\ndependencies = [\"aes-soft\", \"aesni\", \"cipher 0.2.5\"]\n\n[[package]]\nname = \"aes\"\nversion = \"0.7.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8\"\ndependencies = [\"cfg-if\", \"cipher 0.3.0\", \"cpufeatures\", \"opaque-debug 0.3.0\"]\n\n[[package]]\nname = \"aes-gcm\"\nversion = \"0.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da\"\ndependencies = [\"aead 0.3.2\", \"aes 0.6.0\", \"cipher 0.2.5\", \"ctr 0.6.0\", \"ghash 0.3.1\", \"subtle\"]\n\n[[package]]\nname = \"aes-gcm\"\nversion = \"0.9.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6\"\ndependencies = [\"aead 0.4.3\", \"aes 0.7.5\", \"cipher 0.3.0\", \"ctr 0.8.0\", \"ghash 0.4.4\", \"subtle\"]\n\n[[package]]\nname = \"aes-soft\"\nversion = \"0.6.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072\"\ndependencies = [\"cipher 0.2.5\", \"opaque-debug 0.3.0\"]\n\n[[package]]\nname = \"aesni\"\nversion = \"0.10.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce\"\ndependencies = [\"cipher 0.2.5\", \"opaque-debug 0.3.0\"]\n\n[[package]]\nname = \"ahash\"\nversion = \"0.7.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47\"\ndependencies = [\"getrandom 0.2.8\", \"once_cell\", \"version_check\"]\n\n[[package]]\nname = \"aho-corasick\"\nversion = \"0.7.20\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac\"\ndependencies = [\"memchr\"]\n\n[[package]]\nname = \"android_system_properties\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"ansi_term\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2\"\ndependencies = [\"winapi\"]\n\n[[package]]\nname = \"anyhow\"\nversion = \"1.0.69\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800\"\n\n[[package]]\nname = \"approx\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6\"\ndependencies = [\"num-traits\"]\n\n[[package]]\nname = \"arc-swap\"\nversion = \"1.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6\"\n\n[[package]]\nname = \"array-bytes\"\nversion = \"4.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6\"\n\n[[package]]\nname = \"arrayref\"\nversion = \"0.3.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544\"\n\n[[package]]\nname = \"arrayvec\"\nversion = \"0.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b\"\n\n[[package]]\nname = \"arrayvec\"\nversion = \"0.7.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6\"\n\n[[package]]\nname = \"asn1-rs\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33\"\ndependencies = [\"asn1-rs-derive 0.1.0\", \"asn1-rs-impl\", \"displaydoc\", \"nom\", \"num-traits\", \"rusticata-macros\", \"thiserror\", \"time 0.3.17\"]\n\n[[package]]\nname = \"asn1-rs\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4\"\ndependencies = [\"asn1-rs-derive 0.4.0\", \"asn1-rs-impl\", \"displaydoc\", \"nom\", \"num-traits\", \"rusticata-macros\", \"thiserror\", \"time 0.3.17\"]\n\n[[package]]\nname = \"asn1-rs-derive\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\", \"synstructure\"]\n\n[[package]]\nname = \"asn1-rs-derive\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\", \"synstructure\"]\n\n[[package]]\nname = \"asn1-rs-impl\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"asn1_der\"\nversion = \"0.7.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21\"\n\n[[package]]\nname = \"async-io\"\nversion = \"1.12.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794\"\ndependencies = [\"async-lock\", \"autocfg\", \"concurrent-queue\", \"futures-lite\", \"libc\", \"log\", \"parking\", \"polling\", \"slab\", \"socket2\", \"waker-fn\", \"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"async-lock\"\nversion = \"2.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685\"\ndependencies = [\"event-listener\", \"futures-lite\"]\n\n[[package]]\nname = \"async-trait\"\nversion = \"0.1.64\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"asynchronous-codec\"\nversion = \"0.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"06a0daa378f5fd10634e44b0a29b2a87b890657658e072a30d6f26e57ddee182\"\ndependencies = [\"bytes\", \"futures-sink\", \"futures-util\", \"memchr\", \"pin-project-lite 0.2.9\"]\n\n[[package]]\nname = \"atomic-waker\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599\"\n\n[[package]]\nname = \"atty\"\nversion = \"0.2.14\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8\"\ndependencies = [\"hermit-abi 0.1.19\", \"libc\", \"winapi\"]\n\n[[package]]\nname = \"autocfg\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa\"\n\n[[package]]\nname = \"backtrace\"\nversion = \"0.3.67\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca\"\ndependencies = [\"addr2line 0.19.0\", \"cc\", \"cfg-if\", \"libc\", \"miniz_oxide\", \"object 0.30.3\", \"rustc-demangle\"]\n\n[[package]]\nname = \"base-x\"\nversion = \"0.2.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270\"\n\n[[package]]\nname = \"base16ct\"\nversion = \"0.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce\"\n\n[[package]]\nname = \"base58\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581\"\n\n[[package]]\nname = \"base64\"\nversion = \"0.13.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8\"\n\n[[package]]\nname = \"base64\"\nversion = \"0.21.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a\"\n\n[[package]]\nname = \"base64ct\"\nversion = \"1.5.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf\"\n\n[[package]]\nname = \"beef\"\nversion = \"0.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"bincode\"\nversion = \"1.3.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"bindgen\"\nversion = \"0.60.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6\"\ndependencies = [\"bitflags\", \"cexpr\", \"clang-sys\", \"lazy_static\", \"lazycell\", \"peeking_take_while\", \"proc-macro2\", \"quote\", \"regex\", \"rustc-hash\", \"shlex\"]\n\n[[package]]\nname = \"bitflags\"\nversion = \"1.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a\"\n\n[[package]]\nname = \"bitvec\"\nversion = \"1.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c\"\ndependencies = [\"funty\", \"radium\", \"tap\", \"wyz\"]\n\n[[package]]\nname = \"blake2\"\nversion = \"0.10.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe\"\ndependencies = [\"digest 0.10.6\"]\n\n[[package]]\nname = \"blake2b_simd\"\nversion = \"1.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"72936ee4afc7f8f736d1c38383b56480b5497b4617b4a77bdbf1d2ababc76127\"\ndependencies = [\"arrayref\", \"arrayvec 0.7.2\", \"constant_time_eq 0.1.5\"]\n\n[[package]]\nname = \"blake2s_simd\"\nversion = \"1.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"db539cc2b5f6003621f1cd9ef92d7ded8ea5232c7de0f9faa2de251cd98730d4\"\ndependencies = [\"arrayref\", \"arrayvec 0.7.2\", \"constant_time_eq 0.1.5\"]\n\n[[package]]\nname = \"blake3\"\nversion = \"1.3.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef\"\ndependencies = [\"arrayref\", \"arrayvec 0.7.2\", \"cc\", \"cfg-if\", \"constant_time_eq 0.2.4\"]\n\n[[package]]\nname = \"block-buffer\"\nversion = \"0.7.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b\"\ndependencies = [\"block-padding 0.1.5\", \"byte-tools\", \"byteorder\", \"generic-array 0.12.4\"]\n\n[[package]]\nname = \"block-buffer\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4\"\ndependencies = [\"generic-array 0.14.6\"]\n\n[[package]]\nname = \"block-buffer\"\nversion = \"0.10.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e\"\ndependencies = [\"generic-array 0.14.6\"]\n\n[[package]]\nname = \"block-modes\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0\"\ndependencies = [\"block-padding 0.2.1\", \"cipher 0.2.5\"]\n\n[[package]]\nname = \"block-padding\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5\"\ndependencies = [\"byte-tools\"]\n\n[[package]]\nname = \"block-padding\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae\"\n\n[[package]]\nname = \"bs58\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3\"\n\n[[package]]\nname = \"bstr\"\nversion = \"1.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832\"\ndependencies = [\"memchr\", \"serde\"]\n\n[[package]]\nname = \"build-helper\"\nversion = \"0.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bdce191bf3fa4995ce948c8c83b4640a1745457a149e73c6db75b4ffe36aad5f\"\ndependencies = [\"semver 0.6.0\"]\n\n[[package]]\nname = \"bumpalo\"\nversion = \"3.12.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535\"\n\n[[package]]\nname = \"byte-slice-cast\"\nversion = \"1.2.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c\"\n\n[[package]]\nname = \"byte-tools\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7\"\n\n[[package]]\nname = \"byteorder\"\nversion = \"1.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610\"\n\n[[package]]\nname = \"bytes\"\nversion = \"1.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be\"\n\n[[package]]\nname = \"bzip2-sys\"\nversion = \"0.1.11+1.0.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc\"\ndependencies = [\"cc\", \"libc\", \"pkg-config\"]\n\n[[package]]\nname = \"camino\"\nversion = \"1.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"cargo-platform\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"cargo_metadata\"\nversion = \"0.14.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa\"\ndependencies = [\"camino\", \"cargo-platform\", \"semver 1.0.16\", \"serde\", \"serde_json\"]\n\n[[package]]\nname = \"cc\"\nversion = \"1.0.79\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f\"\ndependencies = [\"jobserver\"]\n\n[[package]]\nname = \"ccm\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7\"\ndependencies = [\"aead 0.3.2\", \"cipher 0.2.5\", \"subtle\"]\n\n[[package]]\nname = \"cexpr\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766\"\ndependencies = [\"nom\"]\n\n[[package]]\nname = \"cfg-expr\"\nversion = \"0.10.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db\"\ndependencies = [\"smallvec\"]\n\n[[package]]\nname = \"cfg-if\"\nversion = \"1.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd\"\n\n[[package]]\nname = \"cfg_aliases\"\nversion = \"0.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e\"\n\n[[package]]\nname = \"chacha20\"\nversion = \"0.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6\"\ndependencies = [\"cfg-if\", \"cipher 0.3.0\", \"cpufeatures\", \"zeroize\"]\n\n[[package]]\nname = \"chacha20poly1305\"\nversion = \"0.9.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5\"\ndependencies = [\"aead 0.4.3\", \"chacha20\", \"cipher 0.3.0\", \"poly1305\", \"zeroize\"]\n\n[[package]]\nname = \"chrono\"\nversion = \"0.4.23\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f\"\ndependencies = [\"iana-time-zone\", \"js-sys\", \"num-integer\", \"num-traits\", \"time 0.1.45\", \"wasm-bindgen\", \"winapi\"]\n\n[[package]]\nname = \"cid\"\nversion = \"0.8.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2\"\ndependencies = [\"core2\", \"multibase\", \"multihash\", \"serde\", \"unsigned-varint\"]\n\n[[package]]\nname = \"cipher\"\nversion = \"0.2.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801\"\ndependencies = [\"generic-array 0.14.6\"]\n\n[[package]]\nname = \"cipher\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7\"\ndependencies = [\"generic-array 0.14.6\"]\n\n[[package]]\nname = \"clang-sys\"\nversion = \"1.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3\"\ndependencies = [\"glob\", \"libc\", \"libloading\"]\n\n[[package]]\nname = \"clap\"\nversion = \"4.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76\"\ndependencies = [\"bitflags\", \"clap_derive\", \"clap_lex\", \"is-terminal\", \"once_cell\", \"strsim\", \"termcolor\"]\n\n[[package]]\nname = \"clap_derive\"\nversion = \"4.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8\"\ndependencies = [\"heck\", \"proc-macro-error\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"clap_lex\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade\"\ndependencies = [\"os_str_bytes\"]\n\n[[package]]\nname = \"codespan-reporting\"\nversion = \"0.11.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e\"\ndependencies = [\"termcolor\", \"unicode-width\"]\n\n[[package]]\nname = \"comfy-table\"\nversion = \"6.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d\"\ndependencies = [\"strum\", \"strum_macros\", \"unicode-width\"]\n\n[[package]]\nname = \"concurrent-queue\"\nversion = \"2.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e\"\ndependencies = [\"crossbeam-utils\"]\n\n[[package]]\nname = \"const-oid\"\nversion = \"0.9.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b\"\n\n[[package]]\nname = \"constant_time_eq\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc\"\n\n[[package]]\nname = \"constant_time_eq\"\nversion = \"0.2.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279\"\n\n[[package]]\nname = \"core-foundation\"\nversion = \"0.9.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146\"\ndependencies = [\"core-foundation-sys\", \"libc\"]\n\n[[package]]\nname = \"core-foundation-sys\"\nversion = \"0.8.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc\"\n\n[[package]]\nname = \"core2\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505\"\ndependencies = [\"memchr\"]\n\n[[package]]\nname = \"cpp_demangle\"\nversion = \"0.3.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f\"\ndependencies = [\"cfg-if\"]\n\n[[package]]\nname = \"cpufeatures\"\nversion = \"0.2.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"cpuid-bool\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba\"\n\n[[package]]\nname = \"cranelift-bforest\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"52056f6d0584484b57fa6c1a65c1fcb15f3780d8b6a758426d9e3084169b2ddd\"\ndependencies = [\"cranelift-entity\"]\n\n[[package]]\nname = \"cranelift-codegen\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"18fed94c8770dc25d01154c3ffa64ed0b3ba9d583736f305fed7beebe5d9cf74\"\ndependencies = [\"arrayvec 0.7.2\", \"bumpalo\", \"cranelift-bforest\", \"cranelift-codegen-meta\", \"cranelift-codegen-shared\", \"cranelift-entity\", \"cranelift-isle\", \"gimli 0.26.2\", \"log\", \"regalloc2\", \"smallvec\", \"target-lexicon\"]\n\n[[package]]\nname = \"cranelift-codegen-meta\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1c451b81faf237d11c7e4f3165eeb6bac61112762c5cfe7b4c0fb7241474358f\"\ndependencies = [\"cranelift-codegen-shared\"]\n\n[[package]]\nname = \"cranelift-codegen-shared\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e7c940133198426d26128f08be2b40b0bd117b84771fd36798969c4d712d81fc\"\n\n[[package]]\nname = \"cranelift-entity\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"87a0f1b2fdc18776956370cf8d9b009ded3f855350c480c1c52142510961f352\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"cranelift-frontend\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"34897538b36b216cc8dd324e73263596d51b8cf610da6498322838b2546baf8a\"\ndependencies = [\"cranelift-codegen\", \"log\", \"smallvec\", \"target-lexicon\"]\n\n[[package]]\nname = \"cranelift-isle\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1b2629a569fae540f16a76b70afcc87ad7decb38dc28fa6c648ac73b51e78470\"\n\n[[package]]\nname = \"cranelift-native\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"20937dab4e14d3e225c5adfc9c7106bafd4ac669bdb43027b911ff794c6fb318\"\ndependencies = [\"cranelift-codegen\", \"libc\", \"target-lexicon\"]\n\n[[package]]\nname = \"cranelift-wasm\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"80fc2288957a94fd342a015811479de1837850924166d1f1856d8406e6f3609b\"\ndependencies = [\"cranelift-codegen\", \"cranelift-entity\", \"cranelift-frontend\", \"itertools\", \"log\", \"smallvec\", \"wasmparser\", \"wasmtime-types\"]\n\n[[package]]\nname = \"crc\"\nversion = \"3.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe\"\ndependencies = [\"crc-catalog\"]\n\n[[package]]\nname = \"crc-catalog\"\nversion = \"2.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484\"\n\n[[package]]\nname = \"crc32fast\"\nversion = \"1.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d\"\ndependencies = [\"cfg-if\"]\n\n[[package]]\nname = \"crossbeam-channel\"\nversion = \"0.5.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521\"\ndependencies = [\"cfg-if\", \"crossbeam-utils\"]\n\n[[package]]\nname = \"crossbeam-deque\"\nversion = \"0.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc\"\ndependencies = [\"cfg-if\", \"crossbeam-epoch\", \"crossbeam-utils\"]\n\n[[package]]\nname = \"crossbeam-epoch\"\nversion = \"0.9.13\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a\"\ndependencies = [\"autocfg\", \"cfg-if\", \"crossbeam-utils\", \"memoffset 0.7.1\", \"scopeguard\"]\n\n[[package]]\nname = \"crossbeam-utils\"\nversion = \"0.8.14\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f\"\ndependencies = [\"cfg-if\"]\n\n[[package]]\nname = \"crunchy\"\nversion = \"0.2.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7\"\n\n[[package]]\nname = \"crypto-bigint\"\nversion = \"0.4.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef\"\ndependencies = [\"generic-array 0.14.6\", \"rand_core 0.6.4\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"crypto-common\"\nversion = \"0.1.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3\"\ndependencies = [\"generic-array 0.14.6\", \"typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)\"]\n\n[[package]]\nname = \"crypto-mac\"\nversion = \"0.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab\"\ndependencies = [\"generic-array 0.14.6\", \"subtle\"]\n\n[[package]]\nname = \"crypto-mac\"\nversion = \"0.10.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a\"\ndependencies = [\"generic-array 0.14.6\", \"subtle\"]\n\n[[package]]\nname = \"crypto-mac\"\nversion = \"0.11.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714\"\ndependencies = [\"generic-array 0.14.6\", \"subtle\"]\n\n[[package]]\nname = \"ctr\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f\"\ndependencies = [\"cipher 0.2.5\"]\n\n[[package]]\nname = \"ctr\"\nversion = \"0.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea\"\ndependencies = [\"cipher 0.3.0\"]\n\n[[package]]\nname = \"curve25519-dalek\"\nversion = \"2.1.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216\"\ndependencies = [\"byteorder\", \"digest 0.8.1\", \"rand_core 0.5.1\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"curve25519-dalek\"\nversion = \"3.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61\"\ndependencies = [\"byteorder\", \"digest 0.9.0\", \"rand_core 0.5.1\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"curve25519-dalek\"\nversion = \"4.0.0-rc.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8da00a7a9a4eb92a0a0f8e75660926d48f0d0f3c537e455c457bcdaa1e16b1ac\"\ndependencies = [\"cfg-if\", \"fiat-crypto\", \"packed_simd_2\", \"platforms 3.0.2\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"cxx\"\nversion = \"1.0.89\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9\"\ndependencies = [\"cc\", \"cxxbridge-flags\", \"cxxbridge-macro\", \"link-cplusplus\"]\n\n[[package]]\nname = \"cxx-build\"\nversion = \"1.0.89\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d\"\ndependencies = [\"cc\", \"codespan-reporting\", \"once_cell\", \"proc-macro2\", \"quote\", \"scratch\", \"syn\"]\n\n[[package]]\nname = \"cxxbridge-flags\"\nversion = \"1.0.89\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a\"\n\n[[package]]\nname = \"cxxbridge-macro\"\nversion = \"1.0.89\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"darling\"\nversion = \"0.14.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8\"\ndependencies = [\"darling_core\", \"darling_macro\"]\n\n[[package]]\nname = \"darling_core\"\nversion = \"0.14.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb\"\ndependencies = [\"fnv\", \"ident_case\", \"proc-macro2\", \"quote\", \"strsim\", \"syn\"]\n\n[[package]]\nname = \"darling_macro\"\nversion = \"0.14.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685\"\ndependencies = [\"darling_core\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"data-encoding\"\nversion = \"2.3.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb\"\n\n[[package]]\nname = \"data-encoding-macro\"\nversion = \"0.1.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca\"\ndependencies = [\"data-encoding\", \"data-encoding-macro-internal\"]\n\n[[package]]\nname = \"data-encoding-macro-internal\"\nversion = \"0.1.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db\"\ndependencies = [\"data-encoding\", \"syn\"]\n\n[[package]]\nname = \"der\"\nversion = \"0.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de\"\ndependencies = [\"const-oid\", \"pem-rfc7468\", \"zeroize\"]\n\n[[package]]\nname = \"der-parser\"\nversion = \"24\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82\"\ndependencies = [\"asn1-rs 0.3.1\", \"displaydoc\", \"nom\", \"num-bigint\", \"num-traits\", \"rusticata-macros\"]\n\n[[package]]\nname = \"der-parser\"\nversion = \"8.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1\"\ndependencies = [\"asn1-rs 0.5.1\", \"displaydoc\", \"nom\", \"num-bigint\", \"num-traits\", \"rusticata-macros\"]\n\n[[package]]\nname = \"derive_builder\"\nversion = \"0.11.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3\"\ndependencies = [\"derive_builder_macro\"]\n\n[[package]]\nname = \"derive_builder_core\"\nversion = \"0.11.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4\"\ndependencies = [\"darling\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"derive_builder_macro\"\nversion = \"0.11.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68\"\ndependencies = [\"derive_builder_core\", \"syn\"]\n\n[[package]]\nname = \"derive_more\"\nversion = \"0.99.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"difflib\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8\"\n\n[[package]]\nname = \"digest\"\nversion = \"0.8.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5\"\ndependencies = [\"generic-array 0.12.4\"]\n\n[[package]]\nname = \"digest\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066\"\ndependencies = [\"generic-array 0.14.6\"]\n\n[[package]]\nname = \"digest\"\nversion = \"0.10.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f\"\ndependencies = [\"block-buffer 0.10.3\", \"crypto-common\", \"subtle\"]\n\n[[package]]\nname = \"directories\"\nversion = \"4.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210\"\ndependencies = [\"dirs-sys\"]\n\n[[package]]\nname = \"directories-next\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc\"\ndependencies = [\"cfg-if\", \"dirs-sys-next\"]\n\n[[package]]\nname = \"dirs-sys\"\nversion = \"0.3.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6\"\ndependencies = [\"libc\", \"redox_users\", \"winapi\"]\n\n[[package]]\nname = \"dirs-sys-next\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d\"\ndependencies = [\"libc\", \"redox_users\", \"winapi\"]\n\n[[package]]\nname = \"displaydoc\"\nversion = \"0.2.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"downcast\"\nversion = \"0.11.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1\"\n\n[[package]]\nname = \"downcast-rs\"\nversion = \"1.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650\"\n\n[[package]]\nname = \"dtoa\"\nversion = \"1.0.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313\"\n\n[[package]]\nname = \"dyn-clonable\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4\"\ndependencies = [\"dyn-clonable-impl\", \"dyn-clone\"]\n\n[[package]]\nname = \"dyn-clonable-impl\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"dyn-clone\"\nversion = \"1.0.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60\"\n\n[[package]]\nname = \"ecdsa\"\nversion = \"0.14.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c\"\ndependencies = [\"der\", \"elliptic-curve\", \"rfc6979\", \"signature\"]\n\n[[package]]\nname = \"ed25519\"\nversion = \"1.5.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7\"\ndependencies = [\"signature\"]\n\n[[package]]\nname = \"ed25519-dalek\"\nversion = \"1.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d\"\ndependencies = [\"curve25519-dalek 3.2.0\", \"ed25519\", \"rand 0.7.3\", \"serde\", \"sha2 0.9.9\", \"zeroize\"]\n\n[[package]]\nname = \"ed25519-zebra\"\nversion = \"3.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6\"\ndependencies = [\"curve25519-dalek 3.2.0\", \"hashbrown\", \"hex\", \"rand_core 0.6.4\", \"sha2 0.9.9\", \"zeroize\"]\n\n[[package]]\nname = \"either\"\nversion = \"1.8.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91\"\n\n[[package]]\nname = \"elliptic-curve\"\nversion = \"0.12.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3\"\ndependencies = [\"base16ct\", \"crypto-bigint\", \"der\", \"digest 0.10.6\", \"ff\", \"generic-array 0.14.6\", \"group\", \"hkdf\", \"pem-rfc7468\", \"pkcs8\", \"rand_core 0.6.4\", \"sec1\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"enum-as-inner\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116\"\ndependencies = [\"heck\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"env_logger\"\nversion = \"0.10.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0\"\ndependencies = [\"humantime\", \"is-terminal\", \"log\", \"regex\", \"termcolor\"]\n\n[[package]]\nname = \"environmental\"\nversion = \"1.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b\"\n\n[[package]]\nname = \"errno\"\nversion = \"0.2.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1\"\ndependencies = [\"errno-dragonfly\", \"libc\", \"winapi\"]\n\n[[package]]\nname = \"errno-dragonfly\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf\"\ndependencies = [\"cc\", \"libc\"]\n\n[[package]]\nname = \"ethbloom\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"11da94e443c60508eb62cf256243a64da87304c2802ac2528847f79d750007ef\"\ndependencies = [\"crunchy\", \"fixed-hash 0.7.0\", \"impl-rlp\", \"impl-serde 0.3.2\", \"tiny-keccak\"]\n\n[[package]]\nname = \"ethereum-types\"\nversion = \"0.13.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b2827b94c556145446fcce834ca86b7abf0c39a805883fe20e72c5bfdb5a0dc6\"\ndependencies = [\"ethbloom\", \"fixed-hash 0.7.0\", \"impl-rlp\", \"impl-serde 0.3.2\", \"primitive-types 0.11.1\", \"uint\"]\n\n[[package]]\nname = \"event-listener\"\nversion = \"2.5.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0\"\n\n[[package]]\nname = \"exit-future\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5\"\ndependencies = [\"futures\"]\n\n[[package]]\nname = \"fake-simd\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed\"\n\n[[package]]\nname = \"fallible-iterator\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7\"\n\n[[package]]\nname = \"fastrand\"\nversion = \"1.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499\"\ndependencies = [\"instant\"]\n\n[[package]]\nname = \"fdlimit\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"ff\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160\"\ndependencies = [\"rand_core 0.6.4\", \"subtle\"]\n\n[[package]]\nname = \"fiat-crypto\"\nversion = \"0.1.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90\"\n\n[[package]]\nname = \"file-per-thread-logger\"\nversion = \"0.1.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866\"\ndependencies = [\"env_logger\", \"log\"]\n\n[[package]]\nname = \"filetime\"\nversion = \"0.2.19\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9\"\ndependencies = [\"cfg-if\", \"libc\", \"redox_syscall\", \"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"finality-grandpa\"\nversion = \"0.16.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e24e6c429951433ccb7c87fd528c60084834dcd14763182c1f83291bcde24c34\"\ndependencies = [\"either\", \"futures\", \"futures-timer\", \"log\", \"num-traits\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"scale-info\"]\n\n[[package]]\nname = \"fixed-hash\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c\"\ndependencies = [\"byteorder\", \"rand 0.8.5\", \"rustc-hex\", \"static_assertions\"]\n\n[[package]]\nname = \"fixed-hash\"\nversion = \"0.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534\"\ndependencies = [\"byteorder\", \"rand 0.8.5\", \"rustc-hex\", \"static_assertions\"]\n\n[[package]]\nname = \"fixedbitset\"\nversion = \"0.4.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80\"\n\n[[package]]\nname = \"flate2\"\nversion = \"1.0.25\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841\"\ndependencies = [\"crc32fast\", \"libz-sys\", \"miniz_oxide\"]\n\n[[package]]\nname = \"float-cmp\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4\"\ndependencies = [\"num-traits\"]\n\n[[package]]\nname = \"fnv\"\nversion = \"1.0.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1\"\n\n[[package]]\nname = \"fork-tree\"\nversion = \"3.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\"]\n\n[[package]]\nname = \"form_urlencoded\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8\"\ndependencies = [\"percent-encoding\"]\n\n[[package]]\nname = \"fragile\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa\"\n\n[[package]]\nname = \"frame-benchmarking\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"linregress\", \"log\", \"parity-scale-codec\", \"paste\", \"scale-info\", \"serde\", \"sp-api\", \"sp-application-crypto\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"sp-runtime-interface\", \"sp-std\", \"sp-storage\"]\n\n[[package]]\nname = \"frame-benchmarking-cli\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"Inflector\", \"array-bytes\", \"chrono\", \"clap\", \"comfy-table\", \"frame-benchmarking\", \"frame-support\", \"frame-system\", \"gethostname\", \"handlebars\", \"itertools\", \"lazy_static\", \"linked-hash-map\", \"log\", \"parity-scale-codec\", \"rand 0.8.5\", \"rand_pcg\", \"sc-block-builder\", \"sc-cli\", \"sc-client-api\", \"sc-client-db\", \"sc-executor\", \"sc-service\", \"sc-sysinfo\", \"serde\", \"serde_json\", \"sp-api\", \"sp-blockchain\", \"sp-core\", \"sp-database\", \"sp-externalities\", \"sp-inherents\", \"sp-keystore\", \"sp-runtime\", \"sp-state-machine\", \"sp-std\", \"sp-storage\", \"sp-trie\", \"thiserror\", \"thousands\"]\n\n[[package]]\nname = \"frame-executive\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"frame-try-runtime\", \"parity-scale-codec\", \"scale-info\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"sp-std\", \"sp-tracing\"]\n\n[[package]]\nname = \"frame-metadata\"\nversion = \"15.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d\"\ndependencies = [\"cfg-if\", \"parity-scale-codec\", \"scale-info\", \"serde\"]\n\n[[package]]\nname = \"frame-remote-externalities\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"futures\", \"log\", \"parity-scale-codec\", \"serde\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"substrate-rpc-client\", \"tokio\"]\n\n[[package]]\nname = \"frame-support\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"bitflags\", \"frame-metadata\", \"frame-support-procedural\", \"impl-trait-for-tuples\", \"k256\", \"log\", \"once_cell\", \"parity-scale-codec\", \"paste\", \"scale-info\", \"serde\", \"smallvec\", \"sp-api\", \"sp-arithmetic\", \"sp-core\", \"sp-core-hashing-proc-macro\", \"sp-inherents\", \"sp-io\", \"sp-runtime\", \"sp-staking\", \"sp-state-machine\", \"sp-std\", \"sp-tracing\", \"sp-weights\", \"tt-call\"]\n\n[[package]]\nname = \"frame-support-procedural\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"Inflector\", \"cfg-expr\", \"frame-support-procedural-tools\", \"itertools\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"frame-support-procedural-tools\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support-procedural-tools-derive\", \"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"frame-support-procedural-tools-derive\"\nversion = \"3.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"frame-system\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"log\", \"parity-scale-codec\", \"scale-info\", \"serde\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"sp-std\", \"sp-version\", \"sp-weights\"]\n\n[[package]]\nname = \"frame-system-benchmarking\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-benchmarking\", \"frame-support\", \"frame-system\", \"parity-scale-codec\", \"scale-info\", \"sp-core\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"frame-system-rpc-runtime-api\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"sp-api\"]\n\n[[package]]\nname = \"frame-try-runtime\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"parity-scale-codec\", \"sp-api\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"fs2\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213\"\ndependencies = [\"libc\", \"winapi\"]\n\n[[package]]\nname = \"funty\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c\"\n\n[[package]]\nname = \"futures\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84\"\ndependencies = [\"futures-channel\", \"futures-core\", \"futures-executor\", \"futures-io\", \"futures-sink\", \"futures-task\", \"futures-util\"]\n\n[[package]]\nname = \"futures-channel\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5\"\ndependencies = [\"futures-core\", \"futures-sink\"]\n\n[[package]]\nname = \"futures-core\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608\"\n\n[[package]]\nname = \"futures-executor\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e\"\ndependencies = [\"futures-core\", \"futures-task\", \"futures-util\", \"num_cpus\"]\n\n[[package]]\nname = \"futures-io\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531\"\n\n[[package]]\nname = \"futures-lite\"\nversion = \"1.12.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48\"\ndependencies = [\"fastrand\", \"futures-core\", \"futures-io\", \"memchr\", \"parking\", \"pin-project-lite 0.2.9\", \"waker-fn\"]\n\n[[package]]\nname = \"futures-macro\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"futures-rustls\"\nversion = \"0.22.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd\"\ndependencies = [\"futures-io\", \"rustls 0.20.8\", \"webpki 0.22.0\"]\n\n[[package]]\nname = \"futures-sink\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364\"\n\n[[package]]\nname = \"futures-task\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366\"\n\n[[package]]\nname = \"futures-timer\"\nversion = \"3.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c\"\n\n[[package]]\nname = \"futures-util\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1\"\ndependencies = [\"futures-channel\", \"futures-core\", \"futures-io\", \"futures-macro\", \"futures-sink\", \"futures-task\", \"memchr\", \"pin-project-lite 0.2.9\", \"pin-utils\", \"slab\"]\n\n[[package]]\nname = \"fxhash\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c\"\ndependencies = [\"byteorder\"]\n\n[[package]]\nname = \"generic-array\"\nversion = \"0.12.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd\"\ndependencies = [\"typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)\"]\n\n[[package]]\nname = \"generic-array\"\nversion = \"0.14.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9\"\ndependencies = [\"typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)\", \"version_check\"]\n\n[[package]]\nname = \"gethostname\"\nversion = \"0.2.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e\"\ndependencies = [\"libc\", \"winapi\"]\n\n[[package]]\nname = \"getrandom\"\nversion = \"0.1.16\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce\"\ndependencies = [\"cfg-if\", \"libc\", \"wasi 0.9.0+wasi-snapshot-preview1\"]\n\n[[package]]\nname = \"getrandom\"\nversion = \"0.2.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31\"\ndependencies = [\"cfg-if\", \"libc\", \"wasi 0.11.0+wasi-snapshot-preview1\"]\n\n[[package]]\nname = \"ghash\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375\"\ndependencies = [\"opaque-debug 0.3.0\", \"polyval 0.4.5\"]\n\n[[package]]\nname = \"ghash\"\nversion = \"0.4.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99\"\ndependencies = [\"opaque-debug 0.3.0\", \"polyval 0.5.3\"]\n\n[[package]]\nname = \"gimli\"\nversion = \"0.26.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d\"\ndependencies = [\"fallible-iterator\", \"indexmap\", \"stable_deref_trait\"]\n\n[[package]]\nname = \"gimli\"\nversion = \"0.27.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec\"\n\n[[package]]\nname = \"glob\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b\"\n\n[[package]]\nname = \"globset\"\nversion = \"0.4.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc\"\ndependencies = [\"aho-corasick\", \"bstr\", \"fnv\", \"log\", \"regex\"]\n\n[[package]]\nname = \"group\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7\"\ndependencies = [\"ff\", \"rand_core 0.6.4\", \"subtle\"]\n\n[[package]]\nname = \"h2\"\nversion = \"0.3.15\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4\"\ndependencies = [\"bytes\", \"fnv\", \"futures-core\", \"futures-sink\", \"futures-util\", \"http\", \"indexmap\", \"slab\", \"tokio\", \"tokio-util\", \"tracing\"]\n\n[[package]]\nname = \"handlebars\"\nversion = \"4.3.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a\"\ndependencies = [\"log\", \"pest\", \"pest_derive\", \"serde\", \"serde_json\", \"thiserror\"]\n\n[[package]]\nname = \"hash-db\"\nversion = \"0.15.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a\"\n\n[[package]]\nname = \"hash256-std-hasher\"\nversion = \"0.15.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2\"\ndependencies = [\"crunchy\"]\n\n[[package]]\nname = \"hashbrown\"\nversion = \"0.12.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888\"\ndependencies = [\"ahash\"]\n\n[[package]]\nname = \"heck\"\nversion = \"0.4.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8\"\n\n[[package]]\nname = \"hermit-abi\"\nversion = \"0.1.19\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"hermit-abi\"\nversion = \"0.2.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"hermit-abi\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"856b5cb0902c2b6d65d5fd97dfa30f9b70c7538e770b98eab5ed52d8db923e01\"\n\n[[package]]\nname = \"hex\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70\"\n\n[[package]]\nname = \"hkdf\"\nversion = \"0.12.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437\"\ndependencies = [\"hmac 0.12.1\"]\n\n[[package]]\nname = \"hmac\"\nversion = \"0.8.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840\"\ndependencies = [\"crypto-mac 0.8.0\", \"digest 0.9.0\"]\n\n[[package]]\nname = \"hmac\"\nversion = \"0.10.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15\"\ndependencies = [\"crypto-mac 0.10.1\", \"digest 0.9.0\"]\n\n[[package]]\nname = \"hmac\"\nversion = \"0.11.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b\"\ndependencies = [\"crypto-mac 0.11.1\", \"digest 0.9.0\"]\n\n[[package]]\nname = \"hmac\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e\"\ndependencies = [\"digest 0.10.6\"]\n\n[[package]]\nname = \"hmac-drbg\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1\"\ndependencies = [\"digest 0.9.0\", \"generic-array 0.14.6\", \"hmac 0.8.1\"]\n\n[[package]]\nname = \"hostname\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867\"\ndependencies = [\"libc\", \"match_cfg\", \"winapi\"]\n\n[[package]]\nname = \"http\"\nversion = \"0.2.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399\"\ndependencies = [\"bytes\", \"fnv\", \"itoa\"]\n\n[[package]]\nname = \"http-body\"\nversion = \"0.4.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1\"\ndependencies = [\"bytes\", \"http\", \"pin-project-lite 0.2.9\"]\n\n[[package]]\nname = \"http-range-header\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29\"\n\n[[package]]\nname = \"httparse\"\nversion = \"1.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904\"\n\n[[package]]\nname = \"httpdate\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421\"\n\n[[package]]\nname = \"humantime\"\nversion = \"2.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4\"\n\n[[package]]\nname = \"hyper\"\nversion = \"0.14.24\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c\"\ndependencies = [\"bytes\", \"futures-channel\", \"futures-core\", \"futures-util\", \"h2\", \"http\", \"http-body\", \"httparse\", \"httpdate\", \"itoa\", \"pin-project-lite 0.2.9\", \"socket2\", \"tokio\", \"tower-service\", \"tracing\", \"want\"]\n\n[[package]]\nname = \"hyper-rustls\"\nversion = \"0.23.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c\"\ndependencies = [\"http\", \"hyper\", \"log\", \"rustls 0.20.8\", \"rustls-native-certs\", \"tokio\", \"tokio-rustls\"]\n\n[[package]]\nname = \"iana-time-zone\"\nversion = \"0.1.53\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765\"\ndependencies = [\"android_system_properties\", \"core-foundation-sys\", \"iana-time-zone-haiku\", \"js-sys\", \"wasm-bindgen\", \"winapi\"]\n\n[[package]]\nname = \"iana-time-zone-haiku\"\nversion = \"0.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca\"\ndependencies = [\"cxx\", \"cxx-build\"]\n\n[[package]]\nname = \"ident_case\"\nversion = \"1.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39\"\n\n[[package]]\nname = \"idna\"\nversion = \"0.2.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8\"\ndependencies = [\"matches\", \"unicode-bidi\", \"unicode-normalization\"]\n\n[[package]]\nname = \"idna\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6\"\ndependencies = [\"unicode-bidi\", \"unicode-normalization\"]\n\n[[package]]\nname = \"if-addrs\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9\"\ndependencies = [\"libc\", \"winapi\"]\n\n[[package]]\nname = \"if-watch\"\nversion = \"3.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ba7abdbb86e485125dad06c2691e1e393bf3b08c7b743b43aa162a00fd39062e\"\ndependencies = [\"async-io\", \"core-foundation\", \"fnv\", \"futures\", \"if-addrs\", \"ipnet\", \"log\", \"rtnetlink\", \"system-configuration\", \"tokio\", \"windows\"]\n\n[[package]]\nname = \"impl-codec\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f\"\ndependencies = [\"parity-scale-codec\"]\n\n[[package]]\nname = \"impl-rlp\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808\"\ndependencies = [\"rlp\"]\n\n[[package]]\nname = \"impl-serde\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"impl-serde\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"impl-trait-for-tuples\"\nversion = \"0.2.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"indexmap\"\nversion = \"1.9.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399\"\ndependencies = [\"autocfg\", \"hashbrown\", \"serde\"]\n\n[[package]]\nname = \"instant\"\nversion = \"0.1.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c\"\ndependencies = [\"cfg-if\"]\n\n[[package]]\nname = \"integer-sqrt\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770\"\ndependencies = [\"num-traits\"]\n\n[[package]]\nname = \"interceptor\"\nversion = \"0.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b\"\ndependencies = [\"async-trait\", \"bytes\", \"log\", \"rand 0.8.5\", \"rtcp\", \"rtp\", \"thiserror\", \"tokio\", \"waitgroup\", \"webrtc-srtp\", \"webrtc-util\"]\n\n[[package]]\nname = \"io-lifetimes\"\nversion = \"0.7.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074\"\n\n[[package]]\nname = \"io-lifetimes\"\nversion = \"1.0.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3\"\ndependencies = [\"libc\", \"windows-sys 0.45.0\"]\n\n[[package]]\nname = \"ip_network\"\nversion = \"0.4.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1\"\n\n[[package]]\nname = \"ipconfig\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be\"\ndependencies = [\"socket2\", \"widestring\", \"winapi\", \"winreg\"]\n\n[[package]]\nname = \"ipnet\"\nversion = \"2.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146\"\n\n[[package]]\nname = \"is-terminal\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef\"\ndependencies = [\"hermit-abi 0.3.0\", \"io-lifetimes 1.0.5\", \"rustix 0.36.8\", \"windows-sys 0.45.0\"]\n\n[[package]]\nname = \"itertools\"\nversion = \"0.10.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473\"\ndependencies = [\"either\"]\n\n[[package]]\nname = \"itoa\"\nversion = \"1.0.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440\"\n\n[[package]]\nname = \"jobserver\"\nversion = \"0.1.25\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"js-sys\"\nversion = \"0.3.61\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730\"\ndependencies = [\"wasm-bindgen\"]\n\n[[package]]\nname = \"jsonrpsee\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7d291e3a5818a2384645fd9756362e6d89cf0541b0b916fa7702ea4a9833608e\"\ndependencies = [\"jsonrpsee-core\", \"jsonrpsee-proc-macros\", \"jsonrpsee-server\", \"jsonrpsee-types\", \"jsonrpsee-ws-client\", \"tracing\"]\n\n[[package]]\nname = \"jsonrpsee-client-transport\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"965de52763f2004bc91ac5bcec504192440f0b568a5d621c59d9dbd6f886c3fb\"\ndependencies = [\"futures-util\", \"http\", \"jsonrpsee-core\", \"jsonrpsee-types\", \"pin-project\", \"rustls-native-certs\", \"soketto\", \"thiserror\", \"tokio\", \"tokio-rustls\", \"tokio-util\", \"tracing\", \"webpki-roots\"]\n\n[[package]]\nname = \"jsonrpsee-core\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b\"\ndependencies = [\"anyhow\", \"arrayvec 0.7.2\", \"async-lock\", \"async-trait\", \"beef\", \"futures-channel\", \"futures-timer\", \"futures-util\", \"globset\", \"hyper\", \"jsonrpsee-types\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"rustc-hash\", \"serde\", \"serde_json\", \"soketto\", \"thiserror\", \"tokio\", \"tracing\"]\n\n[[package]]\nname = \"jsonrpsee-proc-macros\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"baa6da1e4199c10d7b1d0a6e5e8bd8e55f351163b6f4b3cbb044672a69bd4c1c\"\ndependencies = [\"heck\", \"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"jsonrpsee-server\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1fb69dad85df79527c019659a992498d03f8495390496da2f07e6c24c2b356fc\"\ndependencies = [\"futures-channel\", \"futures-util\", \"http\", \"hyper\", \"jsonrpsee-core\", \"jsonrpsee-types\", \"serde\", \"serde_json\", \"soketto\", \"tokio\", \"tokio-stream\", \"tokio-util\", \"tower\", \"tracing\"]\n\n[[package]]\nname = \"jsonrpsee-types\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5bd522fe1ce3702fd94812965d7bb7a3364b1c9aba743944c5a00529aae80f8c\"\ndependencies = [\"anyhow\", \"beef\", \"serde\", \"serde_json\", \"thiserror\", \"tracing\"]\n\n[[package]]\nname = \"jsonrpsee-ws-client\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0b83daeecfc6517cfe210df24e570fb06213533dfb990318fae781f4c7119dd9\"\ndependencies = [\"http\", \"jsonrpsee-client-transport\", \"jsonrpsee-core\", \"jsonrpsee-types\"]\n\n[[package]]\nname = \"k256\"\nversion = \"0.11.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b\"\ndependencies = [\"cfg-if\", \"ecdsa\", \"elliptic-curve\", \"sha2 0.10.6\"]\n\n[[package]]\nname = \"keccak\"\nversion = \"0.1.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768\"\ndependencies = [\"cpufeatures\"]\n\n[[package]]\nname = \"kvdb\"\nversion = \"0.13.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9\"\ndependencies = [\"smallvec\"]\n\n[[package]]\nname = \"kvdb-memorydb\"\nversion = \"0.13.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2\"\ndependencies = [\"kvdb\", \"parking_lot 0.12.1\"]\n\n[[package]]\nname = \"kvdb-rocksdb\"\nversion = \"0.17.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2182b8219fee6bd83aacaab7344e840179ae079d5216aa4e249b4d704646a844\"\ndependencies = [\"kvdb\", \"num_cpus\", \"parking_lot 0.12.1\", \"regex\", \"rocksdb\", \"smallvec\"]\n\n[[package]]\nname = \"lazy_static\"\nversion = \"1.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646\"\n\n[[package]]\nname = \"lazycell\"\nversion = \"1.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55\"\n\n[[package]]\nname = \"libc\"\nversion = \"0.2.139\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79\"\n\n[[package]]\nname = \"libloading\"\nversion = \"0.7.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f\"\ndependencies = [\"cfg-if\", \"winapi\"]\n\n[[package]]\nname = \"libm\"\nversion = \"0.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a\"\n\n[[package]]\nname = \"libm\"\nversion = \"0.2.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb\"\n\n[[package]]\nname = \"libp2p\"\nversion = \"0.50.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2e0a0d2f693675f49ded13c5d510c48b78069e23cbd9108d7ccd59f6dc568819\"\ndependencies = [\"bytes\", \"futures\", \"futures-timer\", \"getrandom 0.2.8\", \"instant\", \"libp2p-core\", \"libp2p-dns\", \"libp2p-identify\", \"libp2p-kad\", \"libp2p-mdns\", \"libp2p-metrics\", \"libp2p-mplex\", \"libp2p-noise\", \"libp2p-ping\", \"libp2p-quic\", \"libp2p-request-response\", \"libp2p-swarm\", \"libp2p-tcp\", \"libp2p-wasm-ext\", \"libp2p-webrtc\", \"libp2p-websocket\", \"libp2p-yamux\", \"multiaddr\", \"parking_lot 0.12.1\", \"pin-project\", \"smallvec\"]\n\n[[package]]\nname = \"libp2p-core\"\nversion = \"0.38.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f\"\ndependencies = [\"asn1_der\", \"bs58\", \"ed25519-dalek\", \"either\", \"fnv\", \"futures\", \"futures-timer\", \"instant\", \"log\", \"multiaddr\", \"multihash\", \"multistream-select\", \"once_cell\", \"parking_lot 0.12.1\", \"pin-project\", \"prost\", \"prost-build\", \"rand 0.8.5\", \"rw-stream-sink\", \"sec1\", \"sha2 0.10.6\", \"smallvec\", \"thiserror\", \"unsigned-varint\", \"void\", \"zeroize\"]\n\n[[package]]\nname = \"libp2p-dns\"\nversion = \"0.38.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5\"\ndependencies = [\"futures\", \"libp2p-core\", \"log\", \"parking_lot 0.12.1\", \"smallvec\", \"trust-dns-resolver\"]\n\n[[package]]\nname = \"libp2p-identify\"\nversion = \"0.41.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf\"\ndependencies = [\"asynchronous-codec\", \"futures\", \"futures-timer\", \"libp2p-core\", \"libp2p-swarm\", \"log\", \"lru 0.8.1\", \"prost\", \"prost-build\", \"prost-codec\", \"smallvec\", \"thiserror\", \"void\"]\n\n[[package]]\nname = \"libp2p-kad\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2\"\ndependencies = [\"arrayvec 0.7.2\", \"asynchronous-codec\", \"bytes\", \"either\", \"fnv\", \"futures\", \"futures-timer\", \"instant\", \"libp2p-core\", \"libp2p-swarm\", \"log\", \"prost\", \"prost-build\", \"rand 0.8.5\", \"sha2 0.10.6\", \"smallvec\", \"thiserror\", \"uint\", \"unsigned-varint\", \"void\"]\n\n[[package]]\nname = \"libp2p-mdns\"\nversion = \"0.42.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b\"\ndependencies = [\"data-encoding\", \"futures\", \"if-watch\", \"libp2p-core\", \"libp2p-swarm\", \"log\", \"rand 0.8.5\", \"smallvec\", \"socket2\", \"tokio\", \"trust-dns-proto\", \"void\"]\n\n[[package]]\nname = \"libp2p-metrics\"\nversion = \"0.11.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55\"\ndependencies = [\"libp2p-core\", \"libp2p-identify\", \"libp2p-kad\", \"libp2p-ping\", \"libp2p-swarm\", \"prometheus-client\"]\n\n[[package]]\nname = \"libp2p-mplex\"\nversion = \"0.38.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"03805b44107aa013e7cbbfa5627b31c36cbedfdfb00603c0311998882bc4bace\"\ndependencies = [\"asynchronous-codec\", \"bytes\", \"futures\", \"libp2p-core\", \"log\", \"nohash-hasher\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"smallvec\", \"unsigned-varint\"]\n\n[[package]]\nname = \"libp2p-noise\"\nversion = \"0.41.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e\"\ndependencies = [\"bytes\", \"curve25519-dalek 3.2.0\", \"futures\", \"libp2p-core\", \"log\", \"once_cell\", \"prost\", \"prost-build\", \"rand 0.8.5\", \"sha2 0.10.6\", \"snow\", \"static_assertions\", \"thiserror\", \"x25519-dalek 1.1.1\", \"zeroize\"]\n\n[[package]]\nname = \"libp2p-ping\"\nversion = \"0.41.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f\"\ndependencies = [\"futures\", \"futures-timer\", \"instant\", \"libp2p-core\", \"libp2p-swarm\", \"log\", \"rand 0.8.5\", \"void\"]\n\n[[package]]\nname = \"libp2p-quic\"\nversion = \"0.7.0-alpha\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59\"\ndependencies = [\"bytes\", \"futures\", \"futures-timer\", \"if-watch\", \"libp2p-core\", \"libp2p-tls\", \"log\", \"parking_lot 0.12.1\", \"quinn-proto\", \"rand 0.8.5\", \"rustls 0.20.8\", \"thiserror\", \"tokio\"]\n\n[[package]]\nname = \"libp2p-request-response\"\nversion = \"0.23.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884\"\ndependencies = [\"async-trait\", \"bytes\", \"futures\", \"instant\", \"libp2p-core\", \"libp2p-swarm\", \"log\", \"rand 0.8.5\", \"smallvec\", \"unsigned-varint\"]\n\n[[package]]\nname = \"libp2p-swarm\"\nversion = \"0.41.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0\"\ndependencies = [\"either\", \"fnv\", \"futures\", \"futures-timer\", \"instant\", \"libp2p-core\", \"libp2p-swarm-derive\", \"log\", \"pin-project\", \"rand 0.8.5\", \"smallvec\", \"thiserror\", \"tokio\", \"void\"]\n\n[[package]]\nname = \"libp2p-swarm-derive\"\nversion = \"0.31.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400\"\ndependencies = [\"heck\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"libp2p-tcp\"\nversion = \"0.38.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d\"\ndependencies = [\"futures\", \"futures-timer\", \"if-watch\", \"libc\", \"libp2p-core\", \"log\", \"socket2\", \"tokio\"]\n\n[[package]]\nname = \"libp2p-tls\"\nversion = \"0.1.0-alpha\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f7905ce0d040576634e8a3229a7587cc8beab83f79db6023800f1792895defa8\"\ndependencies = [\"futures\", \"futures-rustls\", \"libp2p-core\", \"rcgen 0.10.0\", \"ring\", \"rustls 0.20.8\", \"thiserror\", \"webpki 0.22.0\", \"x509-parser 0.14.0\", \"yasna\"]\n\n[[package]]\nname = \"libp2p-wasm-ext\"\nversion = \"0.38.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069\"\ndependencies = [\"futures\", \"js-sys\", \"libp2p-core\", \"parity-send-wrapper\", \"wasm-bindgen\", \"wasm-bindgen-futures\"]\n\n[[package]]\nname = \"libp2p-webrtc\"\nversion = \"0.4.0-alpha\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a\"\ndependencies = [\"async-trait\", \"asynchronous-codec\", \"bytes\", \"futures\", \"futures-timer\", \"hex\", \"if-watch\", \"libp2p-core\", \"libp2p-noise\", \"log\", \"multihash\", \"prost\", \"prost-build\", \"prost-codec\", \"rand 0.8.5\", \"rcgen 0.9.3\", \"serde\", \"stun\", \"thiserror\", \"tinytemplate\", \"tokio\", \"tokio-util\", \"webrtc\"]\n\n[[package]]\nname = \"libp2p-websocket\"\nversion = \"0.40.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54\"\ndependencies = [\"either\", \"futures\", \"futures-rustls\", \"libp2p-core\", \"log\", \"parking_lot 0.12.1\", \"quicksink\", \"rw-stream-sink\", \"soketto\", \"url\", \"webpki-roots\"]\n\n[[package]]\nname = \"libp2p-yamux\"\nversion = \"0.42.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29\"\ndependencies = [\"futures\", \"libp2p-core\", \"log\", \"parking_lot 0.12.1\", \"thiserror\", \"yamux\"]\n\n[[package]]\nname = \"librocksdb-sys\"\nversion = \"0.8.0+7.4.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"611804e4666a25136fcc5f8cf425ab4d26c7f74ea245ffe92ea23b85b6420b5d\"\ndependencies = [\"bindgen\", \"bzip2-sys\", \"cc\", \"glob\", \"libc\", \"libz-sys\", \"tikv-jemalloc-sys\"]\n\n[[package]]\nname = \"libsecp256k1\"\nversion = \"0.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1\"\ndependencies = [\"arrayref\", \"base64 0.13.1\", \"digest 0.9.0\", \"hmac-drbg\", \"libsecp256k1-core\", \"libsecp256k1-gen-ecmult\", \"libsecp256k1-gen-genmult\", \"rand 0.8.5\", \"serde\", \"sha2 0.9.9\", \"typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)\"]\n\n[[package]]\nname = \"libsecp256k1-core\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451\"\ndependencies = [\"crunchy\", \"digest 0.9.0\", \"subtle\"]\n\n[[package]]\nname = \"libsecp256k1-gen-ecmult\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809\"\ndependencies = [\"libsecp256k1-core\"]\n\n[[package]]\nname = \"libsecp256k1-gen-genmult\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c\"\ndependencies = [\"libsecp256k1-core\"]\n\n[[package]]\nname = \"libz-sys\"\nversion = \"1.1.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf\"\ndependencies = [\"cc\", \"pkg-config\", \"vcpkg\"]\n\n[[package]]\nname = \"link-cplusplus\"\nversion = \"1.0.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5\"\ndependencies = [\"cc\"]\n\n[[package]]\nname = \"linked-hash-map\"\nversion = \"0.5.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f\"\n\n[[package]]\nname = \"linked_hash_set\"\nversion = \"0.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588\"\ndependencies = [\"linked-hash-map\"]\n\n[[package]]\nname = \"linregress\"\nversion = \"0.4.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d6c601a85f5ecd1aba625247bca0031585fb1c446461b142878a16f8245ddeb8\"\ndependencies = [\"nalgebra\", \"statrs\"]\n\n[[package]]\nname = \"linux-raw-sys\"\nversion = \"0.0.46\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d\"\n\n[[package]]\nname = \"linux-raw-sys\"\nversion = \"0.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4\"\n\n[[package]]\nname = \"lock_api\"\nversion = \"0.4.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df\"\ndependencies = [\"autocfg\", \"scopeguard\"]\n\n[[package]]\nname = \"log\"\nversion = \"0.4.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e\"\ndependencies = [\"cfg-if\"]\n\n[[package]]\nname = \"lru\"\nversion = \"0.7.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a\"\ndependencies = [\"hashbrown\"]\n\n[[package]]\nname = \"lru\"\nversion = \"0.8.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909\"\ndependencies = [\"hashbrown\"]\n\n[[package]]\nname = \"lru-cache\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c\"\ndependencies = [\"linked-hash-map\"]\n\n[[package]]\nname = \"lz4\"\nversion = \"1.24.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1\"\ndependencies = [\"libc\", \"lz4-sys\"]\n\n[[package]]\nname = \"lz4-sys\"\nversion = \"1.9.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900\"\ndependencies = [\"cc\", \"libc\"]\n\n[[package]]\nname = \"mach\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"match_cfg\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4\"\n\n[[package]]\nname = \"matchers\"\nversion = \"0.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1\"\ndependencies = [\"regex-automata\"]\n\n[[package]]\nname = \"matches\"\nversion = \"0.1.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5\"\n\n[[package]]\nname = \"matrixmultiply\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84\"\ndependencies = [\"rawpointer\"]\n\n[[package]]\nname = \"md-5\"\nversion = \"0.10.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca\"\ndependencies = [\"digest 0.10.6\"]\n\n[[package]]\nname = \"memchr\"\nversion = \"2.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d\"\n\n[[package]]\nname = \"memfd\"\nversion = \"0.6.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb\"\ndependencies = [\"rustix 0.36.8\"]\n\n[[package]]\nname = \"memmap2\"\nversion = \"0.5.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"memoffset\"\nversion = \"0.6.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce\"\ndependencies = [\"autocfg\"]\n\n[[package]]\nname = \"memoffset\"\nversion = \"0.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4\"\ndependencies = [\"autocfg\"]\n\n[[package]]\nname = \"memory-db\"\nversion = \"0.31.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5e0c7cba9ce19ac7ffd2053ac9f49843bbd3f4318feedfd74e85c19d5fb0ba66\"\ndependencies = [\"hash-db\", \"hashbrown\"]\n\n[[package]]\nname = \"memory_units\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3\"\n\n[[package]]\nname = \"merlin\"\nversion = \"2.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42\"\ndependencies = [\"byteorder\", \"keccak\", \"rand_core 0.5.1\", \"zeroize\"]\n\n[[package]]\nname = \"minimal-lexical\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a\"\n\n[[package]]\nname = \"miniz_oxide\"\nversion = \"0.6.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa\"\ndependencies = [\"adler\"]\n\n[[package]]\nname = \"mio\"\nversion = \"0.8.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de\"\ndependencies = [\"libc\", \"log\", \"wasi 0.11.0+wasi-snapshot-preview1\", \"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"mockall\"\nversion = \"0.11.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326\"\ndependencies = [\"cfg-if\", \"downcast\", \"fragile\", \"lazy_static\", \"mockall_derive\", \"predicates\", \"predicates-tree\"]\n\n[[package]]\nname = \"mockall_derive\"\nversion = \"0.11.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0\"\ndependencies = [\"cfg-if\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"multiaddr\"\nversion = \"0.16.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e\"\ndependencies = [\"arrayref\", \"byteorder\", \"data-encoding\", \"multibase\", \"multihash\", \"percent-encoding\", \"serde\", \"static_assertions\", \"unsigned-varint\", \"url\"]\n\n[[package]]\nname = \"multibase\"\nversion = \"0.9.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404\"\ndependencies = [\"base-x\", \"data-encoding\", \"data-encoding-macro\"]\n\n[[package]]\nname = \"multihash\"\nversion = \"0.16.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc\"\ndependencies = [\"blake2b_simd\", \"blake2s_simd\", \"blake3\", \"core2\", \"digest 0.10.6\", \"multihash-derive\", \"sha2 0.10.6\", \"sha3\", \"unsigned-varint\"]\n\n[[package]]\nname = \"multihash-derive\"\nversion = \"0.8.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db\"\ndependencies = [\"proc-macro-crate\", \"proc-macro-error\", \"proc-macro2\", \"quote\", \"syn\", \"synstructure\"]\n\n[[package]]\nname = \"multimap\"\nversion = \"0.8.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a\"\n\n[[package]]\nname = \"multistream-select\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a\"\ndependencies = [\"bytes\", \"futures\", \"log\", \"pin-project\", \"smallvec\", \"unsigned-varint\"]\n\n[[package]]\nname = \"nalgebra\"\nversion = \"0.27.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"462fffe4002f4f2e1f6a9dcf12cc1a6fc0e15989014efc02a941d3e0f5dc2120\"\ndependencies = [\"approx\", \"matrixmultiply\", \"nalgebra-macros\", \"num-complex\", \"num-rational\", \"num-traits\", \"rand 0.8.5\", \"rand_distr\", \"simba\", \"typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)\"]\n\n[[package]]\nname = \"nalgebra-macros\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"names\"\nversion = \"0.13.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146\"\ndependencies = [\"rand 0.8.5\"]\n\n[[package]]\nname = \"ndarray\"\nversion = \"0.15.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32\"\ndependencies = [\"matrixmultiply\", \"num-complex\", \"num-integer\", \"num-traits\", \"rawpointer\"]\n\n[[package]]\nname = \"netlink-packet-core\"\nversion = \"0.4.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297\"\ndependencies = [\"anyhow\", \"byteorder\", \"libc\", \"netlink-packet-utils\"]\n\n[[package]]\nname = \"netlink-packet-route\"\nversion = \"0.12.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab\"\ndependencies = [\"anyhow\", \"bitflags\", \"byteorder\", \"libc\", \"netlink-packet-core\", \"netlink-packet-utils\"]\n\n[[package]]\nname = \"netlink-packet-utils\"\nversion = \"0.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34\"\ndependencies = [\"anyhow\", \"byteorder\", \"paste\", \"thiserror\"]\n\n[[package]]\nname = \"netlink-proto\"\nversion = \"0.10.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6\"\ndependencies = [\"bytes\", \"futures\", \"log\", \"netlink-packet-core\", \"netlink-sys\", \"thiserror\", \"tokio\"]\n\n[[package]]\nname = \"netlink-sys\"\nversion = \"0.8.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b\"\ndependencies = [\"bytes\", \"futures\", \"libc\", \"log\", \"tokio\"]\n\n[[package]]\nname = \"nix\"\nversion = \"0.24.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069\"\ndependencies = [\"bitflags\", \"cfg-if\", \"libc\", \"memoffset 0.6.5\"]\n\n[[package]]\nname = \"node-subtensor\"\nversion = \"0.0.1\"\ndependencies = [\"clap\", \"frame-benchmarking\", \"frame-benchmarking-cli\", \"frame-system\", \"futures\", \"jsonrpsee\", \"memmap2\", \"node-subtensor-runtime\", \"pallet-transaction-payment\", \"pallet-transaction-payment-rpc\", \"sc-basic-authorship\", \"sc-cli\", \"sc-client-api\", \"sc-consensus\", \"sc-consensus-aura\", \"sc-executor\", \"sc-consensus-grandpa\", \"sc-keystore\", \"sc-rpc\", \"sc-rpc-api\", \"sc-service\", \"sc-telemetry\", \"sc-transaction-pool\", \"sc-transaction-pool-api\", \"serde\", \"serde_json\", \"sp-api\", \"sp-block-builder\", \"sp-blockchain\", \"sp-consensus\", \"sp-consensus-aura\", \"sp-core\", \"sp-consensus-grandpa\", \"sp-inherents\", \"sp-io\", \"sp-keyring\", \"sp-runtime\", \"sp-timestamp\", \"substrate-build-script-utils\", \"substrate-frame-rpc-system\", \"subtensor-custom-rpc\", \"subtensor-custom-rpc-runtime-api\", \"try-runtime-cli\"]\n\n[[package]]\nname = \"node-subtensor-runtime\"\nversion = \"0.0.1\"\ndependencies = [\"frame-benchmarking\", \"frame-executive\", \"frame-support\", \"frame-system\", \"frame-system-benchmarking\", \"frame-system-rpc-runtime-api\", \"frame-try-runtime\", \"pallet-aura\", \"pallet-balances\", \"pallet-grandpa\", \"pallet-randomness-collective-flip\", \"pallet-subtensor\", \"pallet-sudo\", \"pallet-timestamp\", \"pallet-transaction-payment\", \"pallet-transaction-payment-rpc-runtime-api\", \"parity-scale-codec\", \"scale-info\", \"smallvec\", \"sp-api\", \"sp-block-builder\", \"sp-consensus-aura\", \"sp-core\", \"sp-inherents\", \"sp-offchain\", \"sp-runtime\", \"sp-session\", \"sp-std\", \"sp-transaction-pool\", \"sp-version\", \"substrate-wasm-builder\", \"subtensor-custom-rpc-runtime-api\"]\n\n[[package]]\nname = \"nohash-hasher\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451\"\n\n[[package]]\nname = \"nom\"\nversion = \"7.1.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a\"\ndependencies = [\"memchr\", \"minimal-lexical\"]\n\n[[package]]\nname = \"normalize-line-endings\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be\"\n\n[[package]]\nname = \"num-bigint\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f\"\ndependencies = [\"autocfg\", \"num-integer\", \"num-traits\"]\n\n[[package]]\nname = \"num-complex\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d\"\ndependencies = [\"num-traits\"]\n\n[[package]]\nname = \"num-format\"\nversion = \"0.4.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3\"\ndependencies = [\"arrayvec 0.7.2\", \"itoa\"]\n\n[[package]]\nname = \"num-integer\"\nversion = \"0.1.45\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9\"\ndependencies = [\"autocfg\", \"num-traits\"]\n\n[[package]]\nname = \"num-rational\"\nversion = \"0.4.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0\"\ndependencies = [\"autocfg\", \"num-bigint\", \"num-integer\", \"num-traits\"]\n\n[[package]]\nname = \"num-traits\"\nversion = \"0.2.15\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd\"\ndependencies = [\"autocfg\", \"libm 0.2.6\"]\n\n[[package]]\nname = \"num_cpus\"\nversion = \"1.15.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b\"\ndependencies = [\"hermit-abi 0.2.6\", \"libc\"]\n\n[[package]]\nname = \"object\"\nversion = \"0.29.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53\"\ndependencies = [\"crc32fast\", \"hashbrown\", \"indexmap\", \"memchr\"]\n\n[[package]]\nname = \"object\"\nversion = \"0.30.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439\"\ndependencies = [\"memchr\"]\n\n[[package]]\nname = \"oid-registry\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a\"\ndependencies = [\"asn1-rs 0.3.1\"]\n\n[[package]]\nname = \"oid-registry\"\nversion = \"0.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff\"\ndependencies = [\"asn1-rs 0.5.1\"]\n\n[[package]]\nname = \"once_cell\"\nversion = \"1.17.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66\"\n\n[[package]]\nname = \"opaque-debug\"\nversion = \"0.2.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c\"\n\n[[package]]\nname = \"opaque-debug\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5\"\n\n[[package]]\nname = \"openssl-probe\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf\"\n\n[[package]]\nname = \"os_str_bytes\"\nversion = \"6.4.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee\"\n\n[[package]]\nname = \"p256\"\nversion = \"0.11.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594\"\ndependencies = [\"ecdsa\", \"elliptic-curve\", \"sha2 0.10.6\"]\n\n[[package]]\nname = \"p384\"\nversion = \"0.11.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa\"\ndependencies = [\"ecdsa\", \"elliptic-curve\", \"sha2 0.10.6\"]\n\n[[package]]\nname = \"packed_simd_2\"\nversion = \"0.3.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282\"\ndependencies = [\"cfg-if\", \"libm 0.1.4\"]\n\n[[package]]\nname = \"pallet-aura\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"pallet-timestamp\", \"parity-scale-codec\", \"scale-info\", \"sp-application-crypto\", \"sp-consensus-aura\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-authorship\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"impl-trait-for-tuples\", \"parity-scale-codec\", \"scale-info\", \"sp-authorship\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-balances\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-benchmarking\", \"frame-support\", \"frame-system\", \"log\", \"parity-scale-codec\", \"scale-info\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-grandpa\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-benchmarking\", \"frame-support\", \"frame-system\", \"log\", \"pallet-authorship\", \"pallet-session\", \"parity-scale-codec\", \"scale-info\", \"sp-application-crypto\", \"sp-core\", \"sp-consensus-grandpa\", \"sp-io\", \"sp-runtime\", \"sp-session\", \"sp-staking\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-randomness-collective-flip\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"parity-scale-codec\", \"safe-mix\", \"scale-info\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-session\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"impl-trait-for-tuples\", \"log\", \"pallet-timestamp\", \"parity-scale-codec\", \"scale-info\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"sp-session\", \"sp-staking\", \"sp-std\", \"sp-trie\"]\n\n[[package]]\nname = \"pallet-subtensor\"\nversion = \"0.0.1\"\ndependencies = [\"frame-benchmarking\", \"frame-support\", \"frame-system\", \"log\", \"ndarray\", \"pallet-balances\", \"pallet-transaction-payment\", \"parity-scale-codec\", \"parity-util-mem\", \"rand 0.8.5\", \"scale-info\", \"serde\", \"serde-tuple-vec-map\", \"serde_bytes\", \"serde_with\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"sp-std\", \"sp-tracing\", \"sp-version\", \"substrate-fixed\"]\n\n[[package]]\nname = \"pallet-sudo\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"parity-scale-codec\", \"scale-info\", \"sp-io\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-timestamp\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-benchmarking\", \"frame-support\", \"frame-system\", \"log\", \"parity-scale-codec\", \"scale-info\", \"sp-inherents\", \"sp-io\", \"sp-runtime\", \"sp-std\", \"sp-timestamp\"]\n\n[[package]]\nname = \"pallet-transaction-payment\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"parity-scale-codec\", \"scale-info\", \"serde\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-transaction-payment-rpc\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"jsonrpsee\", \"pallet-transaction-payment-rpc-runtime-api\", \"parity-scale-codec\", \"sp-api\", \"sp-blockchain\", \"sp-core\", \"sp-rpc\", \"sp-runtime\", \"sp-weights\"]\n\n[[package]]\nname = \"pallet-transaction-payment-rpc-runtime-api\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"pallet-transaction-payment\", \"parity-scale-codec\", \"sp-api\", \"sp-runtime\", \"sp-weights\"]\n\n[[package]]\nname = \"parity-db\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"dd684a725651d9588ef21f140a328b6b4f64e646b2e931f3e6f14f75eedf9980\"\ndependencies = [\"blake2\", \"crc32fast\", \"fs2\", \"hex\", \"libc\", \"log\", \"lz4\", \"memmap2\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"snap\"]\n\n[[package]]\nname = \"parity-scale-codec\"\nversion = \"3.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c3840933452adf7b3b9145e27086a5a3376c619dca1a21b1e5a5af0d54979bed\"\ndependencies = [\"arrayvec 0.7.2\", \"bitvec\", \"byte-slice-cast\", \"bytes\", \"impl-trait-for-tuples\", \"parity-scale-codec-derive\", \"serde\"]\n\n[[package]]\nname = \"parity-scale-codec-derive\"\nversion = \"3.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b\"\ndependencies = [\"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"parity-send-wrapper\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f\"\n\n[[package]]\nname = \"parity-util-mem\"\nversion = \"0.11.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c32561d248d352148124f036cac253a644685a21dc9fea383eb4907d7bd35a8f\"\ndependencies = [\"cfg-if\", \"ethereum-types\", \"hashbrown\", \"impl-trait-for-tuples\", \"lru 0.7.8\", \"parity-util-mem-derive\", \"parking_lot 0.12.1\", \"primitive-types 0.11.1\", \"smallvec\", \"winapi\"]\n\n[[package]]\nname = \"parity-util-mem-derive\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2\"\ndependencies = [\"proc-macro2\", \"syn\", \"synstructure\"]\n\n[[package]]\nname = \"parity-wasm\"\nversion = \"0.45.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304\"\n\n[[package]]\nname = \"parking\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72\"\n\n[[package]]\nname = \"parking_lot\"\nversion = \"0.11.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99\"\ndependencies = [\"instant\", \"lock_api\", \"parking_lot_core 0.8.6\"]\n\n[[package]]\nname = \"parking_lot\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f\"\ndependencies = [\"lock_api\", \"parking_lot_core 0.9.7\"]\n\n[[package]]\nname = \"parking_lot_core\"\nversion = \"0.8.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc\"\ndependencies = [\"cfg-if\", \"instant\", \"libc\", \"redox_syscall\", \"smallvec\", \"winapi\"]\n\n[[package]]\nname = \"parking_lot_core\"\nversion = \"0.9.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521\"\ndependencies = [\"cfg-if\", \"libc\", \"redox_syscall\", \"smallvec\", \"windows-sys 0.45.0\"]\n\n[[package]]\nname = \"paste\"\nversion = \"1.0.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba\"\n\n[[package]]\nname = \"pbkdf2\"\nversion = \"0.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa\"\ndependencies = [\"crypto-mac 0.11.1\"]\n\n[[package]]\nname = \"pbkdf2\"\nversion = \"0.11.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917\"\ndependencies = [\"digest 0.10.6\"]\n\n[[package]]\nname = \"peeking_take_while\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099\"\n\n[[package]]\nname = \"pem\"\nversion = \"1.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8\"\ndependencies = [\"base64 0.13.1\"]\n\n[[package]]\nname = \"pem-rfc7468\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac\"\ndependencies = [\"base64ct\"]\n\n[[package]]\nname = \"percent-encoding\"\nversion = \"2.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e\"\n\n[[package]]\nname = \"pest\"\nversion = \"2.5.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f\"\ndependencies = [\"thiserror\", \"ucd-trie\"]\n\n[[package]]\nname = \"pest_derive\"\nversion = \"2.5.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea\"\ndependencies = [\"pest\", \"pest_generator\"]\n\n[[package]]\nname = \"pest_generator\"\nversion = \"2.5.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f\"\ndependencies = [\"pest\", \"pest_meta\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"pest_meta\"\nversion = \"2.5.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d\"\ndependencies = [\"once_cell\", \"pest\", \"sha2 0.10.6\"]\n\n[[package]]\nname = \"petgraph\"\nversion = \"0.6.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4\"\ndependencies = [\"fixedbitset\", \"indexmap\"]\n\n[[package]]\nname = \"pin-project\"\nversion = \"1.0.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc\"\ndependencies = [\"pin-project-internal\"]\n\n[[package]]\nname = \"pin-project-internal\"\nversion = \"1.0.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"pin-project-lite\"\nversion = \"0.1.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777\"\n\n[[package]]\nname = \"pin-project-lite\"\nversion = \"0.2.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116\"\n\n[[package]]\nname = \"pin-utils\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184\"\n\n[[package]]\nname = \"pkcs8\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba\"\ndependencies = [\"der\", \"spki\"]\n\n[[package]]\nname = \"pkg-config\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160\"\n\n[[package]]\nname = \"platforms\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94\"\n\n[[package]]\nname = \"platforms\"\nversion = \"3.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630\"\n\n[[package]]\nname = \"polling\"\nversion = \"2.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6\"\ndependencies = [\"autocfg\", \"cfg-if\", \"libc\", \"log\", \"wepoll-ffi\", \"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"poly1305\"\nversion = \"0.7.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede\"\ndependencies = [\"cpufeatures\", \"opaque-debug 0.3.0\", \"universal-hash\"]\n\n[[package]]\nname = \"polyval\"\nversion = \"0.4.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd\"\ndependencies = [\"cpuid-bool\", \"opaque-debug 0.3.0\", \"universal-hash\"]\n\n[[package]]\nname = \"polyval\"\nversion = \"0.5.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1\"\ndependencies = [\"cfg-if\", \"cpufeatures\", \"opaque-debug 0.3.0\", \"universal-hash\"]\n\n[[package]]\nname = \"ppv-lite86\"\nversion = \"0.2.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de\"\n\n[[package]]\nname = \"predicates\"\nversion = \"2.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd\"\ndependencies = [\"difflib\", \"float-cmp\", \"itertools\", \"normalize-line-endings\", \"predicates-core\", \"regex\"]\n\n[[package]]\nname = \"predicates-core\"\nversion = \"1.0.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2\"\n\n[[package]]\nname = \"predicates-tree\"\nversion = \"1.0.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d\"\ndependencies = [\"predicates-core\", \"termtree\"]\n\n[[package]]\nname = \"prettyplease\"\nversion = \"0.1.23\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78\"\ndependencies = [\"proc-macro2\", \"syn\"]\n\n[[package]]\nname = \"primitive-types\"\nversion = \"0.11.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e28720988bff275df1f51b171e1b2a18c30d194c4d2b61defdacecd625a5d94a\"\ndependencies = [\"fixed-hash 0.7.0\", \"impl-codec\", \"impl-rlp\", \"impl-serde 0.3.2\", \"uint\"]\n\n[[package]]\nname = \"primitive-types\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66\"\ndependencies = [\"fixed-hash 0.8.0\", \"impl-codec\", \"impl-serde 0.4.0\", \"scale-info\", \"uint\"]\n\n[[package]]\nname = \"proc-macro-crate\"\nversion = \"1.1.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a\"\ndependencies = [\"thiserror\", \"toml\"]\n\n[[package]]\nname = \"proc-macro-error\"\nversion = \"1.0.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c\"\ndependencies = [\"proc-macro-error-attr\", \"proc-macro2\", \"quote\", \"syn\", \"version_check\"]\n\n[[package]]\nname = \"proc-macro-error-attr\"\nversion = \"1.0.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869\"\ndependencies = [\"proc-macro2\", \"quote\", \"version_check\"]\n\n[[package]]\nname = \"proc-macro2\"\nversion = \"1.0.51\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6\"\ndependencies = [\"unicode-ident\"]\n\n[[package]]\nname = \"prometheus\"\nversion = \"0.13.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c\"\ndependencies = [\"cfg-if\", \"fnv\", \"lazy_static\", \"memchr\", \"parking_lot 0.12.1\", \"thiserror\"]\n\n[[package]]\nname = \"prometheus-client\"\nversion = \"0.18.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c\"\ndependencies = [\"dtoa\", \"itoa\", \"parking_lot 0.12.1\", \"prometheus-client-derive-text-encode\"]\n\n[[package]]\nname = \"prometheus-client-derive-text-encode\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"prost\"\nversion = \"0.11.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698\"\ndependencies = [\"bytes\", \"prost-derive\"]\n\n[[package]]\nname = \"prost-build\"\nversion = \"0.11.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e\"\ndependencies = [\"bytes\", \"heck\", \"itertools\", \"lazy_static\", \"log\", \"multimap\", \"petgraph\", \"prettyplease\", \"prost\", \"prost-types\", \"regex\", \"syn\", \"tempfile\", \"which\"]\n\n[[package]]\nname = \"prost-codec\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0dc34979ff898b6e141106178981ce2596c387ea6e62533facfc61a37fc879c0\"\ndependencies = [\"asynchronous-codec\", \"bytes\", \"prost\", \"thiserror\", \"unsigned-varint\"]\n\n[[package]]\nname = \"prost-derive\"\nversion = \"0.11.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d\"\ndependencies = [\"anyhow\", \"itertools\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"prost-types\"\nversion = \"0.11.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788\"\ndependencies = [\"bytes\", \"prost\"]\n\n[[package]]\nname = \"psm\"\nversion = \"0.1.21\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874\"\ndependencies = [\"cc\"]\n\n[[package]]\nname = \"quick-error\"\nversion = \"1.2.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0\"\n\n[[package]]\nname = \"quicksink\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858\"\ndependencies = [\"futures-core\", \"futures-sink\", \"pin-project-lite 0.1.12\"]\n\n[[package]]\nname = \"quinn-proto\"\nversion = \"0.9.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9\"\ndependencies = [\"bytes\", \"rand 0.8.5\", \"ring\", \"rustc-hash\", \"rustls 0.20.8\", \"slab\", \"thiserror\", \"tinyvec\", \"tracing\", \"webpki 0.22.0\"]\n\n[[package]]\nname = \"quote\"\nversion = \"1.0.23\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b\"\ndependencies = [\"proc-macro2\"]\n\n[[package]]\nname = \"radium\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09\"\n\n[[package]]\nname = \"rand\"\nversion = \"0.7.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03\"\ndependencies = [\"getrandom 0.1.16\", \"libc\", \"rand_chacha 0.2.2\", \"rand_core 0.5.1\", \"rand_hc\"]\n\n[[package]]\nname = \"rand\"\nversion = \"0.8.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404\"\ndependencies = [\"libc\", \"rand_chacha 0.3.1\", \"rand_core 0.6.4\"]\n\n[[package]]\nname = \"rand_chacha\"\nversion = \"0.2.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402\"\ndependencies = [\"ppv-lite86\", \"rand_core 0.5.1\"]\n\n[[package]]\nname = \"rand_chacha\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88\"\ndependencies = [\"ppv-lite86\", \"rand_core 0.6.4\"]\n\n[[package]]\nname = \"rand_core\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19\"\ndependencies = [\"getrandom 0.1.16\"]\n\n[[package]]\nname = \"rand_core\"\nversion = \"0.6.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c\"\ndependencies = [\"getrandom 0.2.8\"]\n\n[[package]]\nname = \"rand_distr\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31\"\ndependencies = [\"num-traits\", \"rand 0.8.5\"]\n\n[[package]]\nname = \"rand_hc\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c\"\ndependencies = [\"rand_core 0.5.1\"]\n\n[[package]]\nname = \"rand_pcg\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e\"\ndependencies = [\"rand_core 0.6.4\"]\n\n[[package]]\nname = \"rawpointer\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3\"\n\n[[package]]\nname = \"rayon\"\nversion = \"1.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7\"\ndependencies = [\"either\", \"rayon-core\"]\n\n[[package]]\nname = \"rayon-core\"\nversion = \"1.10.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b\"\ndependencies = [\"crossbeam-channel\", \"crossbeam-deque\", \"crossbeam-utils\", \"num_cpus\"]\n\n[[package]]\nname = \"rcgen\"\nversion = \"0.9.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd\"\ndependencies = [\"pem\", \"ring\", \"time 0.3.17\", \"x509-parser 0.13.2\", \"yasna\"]\n\n[[package]]\nname = \"rcgen\"\nversion = \"0.10.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b\"\ndependencies = [\"pem\", \"ring\", \"time 0.3.17\", \"yasna\"]\n\n[[package]]\nname = \"redox_syscall\"\nversion = \"0.2.16\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a\"\ndependencies = [\"bitflags\"]\n\n[[package]]\nname = \"redox_users\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b\"\ndependencies = [\"getrandom 0.2.8\", \"redox_syscall\", \"thiserror\"]\n\n[[package]]\nname = \"ref-cast\"\nversion = \"1.0.14\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed\"\ndependencies = [\"ref-cast-impl\"]\n\n[[package]]\nname = \"ref-cast-impl\"\nversion = \"1.0.14\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"regalloc2\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d43a209257d978ef079f3d446331d0f1794f5e0fc19b306a199983857833a779\"\ndependencies = [\"fxhash\", \"log\", \"slice-group-by\", \"smallvec\"]\n\n[[package]]\nname = \"regex\"\nversion = \"1.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733\"\ndependencies = [\"aho-corasick\", \"memchr\", \"regex-syntax\"]\n\n[[package]]\nname = \"regex-automata\"\nversion = \"0.1.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132\"\ndependencies = [\"regex-syntax\"]\n\n[[package]]\nname = \"regex-syntax\"\nversion = \"0.6.28\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848\"\n\n[[package]]\nname = \"remove_dir_all\"\nversion = \"0.5.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7\"\ndependencies = [\"winapi\"]\n\n[[package]]\nname = \"resolv-conf\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00\"\ndependencies = [\"hostname\", \"quick-error\"]\n\n[[package]]\nname = \"rfc6979\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb\"\ndependencies = [\"crypto-bigint\", \"hmac 0.12.1\", \"zeroize\"]\n\n[[package]]\nname = \"ring\"\nversion = \"0.16.20\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc\"\ndependencies = [\"cc\", \"libc\", \"once_cell\", \"spin\", \"untrusted\", \"web-sys\", \"winapi\"]\n\n[[package]]\nname = \"rlp\"\nversion = \"0.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec\"\ndependencies = [\"bytes\", \"rustc-hex\"]\n\n[[package]]\nname = \"rocksdb\"\nversion = \"0.19.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc\"\ndependencies = [\"libc\", \"librocksdb-sys\"]\n\n[[package]]\nname = \"rpassword\"\nversion = \"7.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322\"\ndependencies = [\"libc\", \"rtoolbox\", \"winapi\"]\n\n[[package]]\nname = \"rtcp\"\nversion = \"0.7.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691\"\ndependencies = [\"bytes\", \"thiserror\", \"webrtc-util\"]\n\n[[package]]\nname = \"rtnetlink\"\nversion = \"0.10.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0\"\ndependencies = [\"futures\", \"log\", \"netlink-packet-route\", \"netlink-proto\", \"nix\", \"thiserror\", \"tokio\"]\n\n[[package]]\nname = \"rtoolbox\"\nversion = \"0.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a\"\ndependencies = [\"libc\", \"winapi\"]\n\n[[package]]\nname = \"rtp\"\nversion = \"0.6.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80\"\ndependencies = [\"async-trait\", \"bytes\", \"rand 0.8.5\", \"serde\", \"thiserror\", \"webrtc-util\"]\n\n[[package]]\nname = \"rustc-demangle\"\nversion = \"0.1.21\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342\"\n\n[[package]]\nname = \"rustc-hash\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2\"\n\n[[package]]\nname = \"rustc-hex\"\nversion = \"2.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6\"\n\n[[package]]\nname = \"rustc_version\"\nversion = \"0.2.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a\"\ndependencies = [\"semver 0.9.0\"]\n\n[[package]]\nname = \"rustc_version\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366\"\ndependencies = [\"semver 1.0.16\"]\n\n[[package]]\nname = \"rusticata-macros\"\nversion = \"4.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632\"\ndependencies = [\"nom\"]\n\n[[package]]\nname = \"rustix\"\nversion = \"0.35.13\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9\"\ndependencies = [\"bitflags\", \"errno\", \"io-lifetimes 0.7.5\", \"libc\", \"linux-raw-sys 0.0.46\", \"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"rustix\"\nversion = \"0.36.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644\"\ndependencies = [\"bitflags\", \"errno\", \"io-lifetimes 1.0.5\", \"libc\", \"linux-raw-sys 0.1.4\", \"windows-sys 0.45.0\"]\n\n[[package]]\nname = \"rustls\"\nversion = \"0.19.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7\"\ndependencies = [\"base64 0.13.1\", \"log\", \"ring\", \"sct 0.6.1\", \"webpki 0.21.4\"]\n\n[[package]]\nname = \"rustls\"\nversion = \"0.20.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f\"\ndependencies = [\"log\", \"ring\", \"sct 0.7.0\", \"webpki 0.22.0\"]\n\n[[package]]\nname = \"rustls-native-certs\"\nversion = \"0.6.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50\"\ndependencies = [\"openssl-probe\", \"rustls-pemfile\", \"schannel\", \"security-framework\"]\n\n[[package]]\nname = \"rustls-pemfile\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b\"\ndependencies = [\"base64 0.21.0\"]\n\n[[package]]\nname = \"rustversion\"\nversion = \"1.0.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70\"\n\n[[package]]\nname = \"rw-stream-sink\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04\"\ndependencies = [\"futures\", \"pin-project\", \"static_assertions\"]\n\n[[package]]\nname = \"ryu\"\nversion = \"1.0.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde\"\n\n[[package]]\nname = \"safe-mix\"\nversion = \"1.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c\"\ndependencies = [\"rustc_version 0.2.3\"]\n\n[[package]]\nname = \"same-file\"\nversion = \"1.0.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502\"\ndependencies = [\"winapi-util\"]\n\n[[package]]\nname = \"sc-allocator\"\nversion = \"4.1.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"log\", \"sp-core\", \"sp-wasm-interface\", \"thiserror\"]\n\n[[package]]\nname = \"sc-basic-authorship\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"futures\", \"futures-timer\", \"log\", \"parity-scale-codec\", \"sc-block-builder\", \"sc-client-api\", \"sc-proposer-metrics\", \"sc-telemetry\", \"sc-transaction-pool-api\", \"sp-api\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-inherents\", \"sp-runtime\", \"substrate-prometheus-endpoint\"]\n\n[[package]]\nname = \"sc-block-builder\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"sc-client-api\", \"sp-api\", \"sp-block-builder\", \"sp-blockchain\", \"sp-core\", \"sp-inherents\", \"sp-runtime\", \"sp-state-machine\"]\n\n[[package]]\nname = \"sc-chain-spec\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"memmap2\", \"sc-chain-spec-derive\", \"sc-network-common\", \"sc-telemetry\", \"serde\", \"serde_json\", \"sp-core\", \"sp-runtime\"]\n\n[[package]]\nname = \"sc-chain-spec-derive\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sc-cli\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"chrono\", \"clap\", \"fdlimit\", \"futures\", \"libp2p\", \"log\", \"names\", \"parity-scale-codec\", \"rand 0.8.5\", \"regex\", \"rpassword\", \"sc-client-api\", \"sc-client-db\", \"sc-keystore\", \"sc-network\", \"sc-network-common\", \"sc-service\", \"sc-telemetry\", \"sc-tracing\", \"sc-utils\", \"serde\", \"serde_json\", \"sp-blockchain\", \"sp-core\", \"sp-keyring\", \"sp-keystore\", \"sp-panic-handler\", \"sp-runtime\", \"sp-version\", \"thiserror\", \"tiny-bip39\", \"tokio\"]\n\n[[package]]\nname = \"sc-client-api\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"fnv\", \"futures\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sc-executor\", \"sc-transaction-pool-api\", \"sc-utils\", \"sp-api\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-database\", \"sp-externalities\", \"sp-keystore\", \"sp-runtime\", \"sp-state-machine\", \"sp-storage\", \"substrate-prometheus-endpoint\"]\n\n[[package]]\nname = \"sc-client-db\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"hash-db\", \"kvdb\", \"kvdb-memorydb\", \"kvdb-rocksdb\", \"linked-hash-map\", \"log\", \"parity-db\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sc-client-api\", \"sc-state-db\", \"sp-arithmetic\", \"sp-blockchain\", \"sp-core\", \"sp-database\", \"sp-runtime\", \"sp-state-machine\", \"sp-trie\"]\n\n[[package]]\nname = \"sc-consensus\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"futures-timer\", \"libp2p\", \"log\", \"mockall\", \"parking_lot 0.12.1\", \"sc-client-api\", \"sc-utils\", \"serde\", \"sp-api\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-runtime\", \"sp-state-machine\", \"substrate-prometheus-endpoint\", \"thiserror\"]\n\n[[package]]\nname = \"sc-consensus-aura\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"log\", \"parity-scale-codec\", \"sc-block-builder\", \"sc-client-api\", \"sc-consensus\", \"sc-consensus-slots\", \"sc-telemetry\", \"sp-api\", \"sp-application-crypto\", \"sp-block-builder\", \"sp-blockchain\", \"sp-consensus\", \"sp-consensus-aura\", \"sp-consensus-slots\", \"sp-core\", \"sp-inherents\", \"sp-keystore\", \"sp-runtime\", \"substrate-prometheus-endpoint\", \"thiserror\"]\n\n[[package]]\nname = \"sc-consensus-slots\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"futures-timer\", \"log\", \"parity-scale-codec\", \"sc-client-api\", \"sc-consensus\", \"sc-telemetry\", \"sp-arithmetic\", \"sp-blockchain\", \"sp-consensus\", \"sp-consensus-slots\", \"sp-core\", \"sp-inherents\", \"sp-runtime\", \"sp-state-machine\"]\n\n[[package]]\nname = \"sc-executor\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"lru 0.8.1\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sc-executor-common\", \"sc-executor-wasmi\", \"sc-executor-wasmtime\", \"sp-api\", \"sp-core\", \"sp-externalities\", \"sp-io\", \"sp-panic-handler\", \"sp-runtime-interface\", \"sp-trie\", \"sp-version\", \"sp-wasm-interface\", \"tracing\", \"wasmi\"]\n\n[[package]]\nname = \"sc-executor-common\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"sc-allocator\", \"sp-maybe-compressed-blob\", \"sp-wasm-interface\", \"thiserror\", \"wasm-instrument\", \"wasmi\"]\n\n[[package]]\nname = \"sc-executor-wasmi\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"log\", \"sc-allocator\", \"sc-executor-common\", \"sp-runtime-interface\", \"sp-wasm-interface\", \"wasmi\"]\n\n[[package]]\nname = \"sc-executor-wasmtime\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"cfg-if\", \"libc\", \"log\", \"once_cell\", \"rustix 0.35.13\", \"sc-allocator\", \"sc-executor-common\", \"sp-runtime-interface\", \"sp-wasm-interface\", \"wasmtime\"]\n\n[[package]]\nname = \"sc-consensus-grandpa\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"ahash\", \"array-bytes\", \"async-trait\", \"dyn-clone\", \"finality-grandpa\", \"fork-tree\", \"futures\", \"futures-timer\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"sc-block-builder\", \"sc-chain-spec\", \"sc-client-api\", \"sc-consensus\", \"sc-network\", \"sc-network-common\", \"sc-network-gossip\", \"sc-telemetry\", \"sc-utils\", \"serde_json\", \"sp-api\", \"sp-application-crypto\", \"sp-arithmetic\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-consensus-grandpa\", \"sp-keystore\", \"sp-runtime\", \"substrate-prometheus-endpoint\", \"thiserror\"]\n\n[[package]]\nname = \"sc-informant\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"ansi_term\", \"futures\", \"futures-timer\", \"log\", \"sc-client-api\", \"sc-network-common\", \"sp-blockchain\", \"sp-runtime\"]\n\n[[package]]\nname = \"sc-keystore\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"async-trait\", \"parking_lot 0.12.1\", \"serde_json\", \"sp-application-crypto\", \"sp-core\", \"sp-keystore\", \"thiserror\"]\n\n[[package]]\nname = \"sc-network\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"async-trait\", \"asynchronous-codec\", \"backtrace\", \"bytes\", \"either\", \"fnv\", \"futures\", \"futures-timer\", \"ip_network\", \"libp2p\", \"log\", \"lru 0.8.1\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"pin-project\", \"rand 0.8.5\", \"sc-block-builder\", \"sc-client-api\", \"sc-consensus\", \"sc-network-common\", \"sc-peerset\", \"sc-utils\", \"serde\", \"serde_json\", \"smallvec\", \"sp-arithmetic\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-runtime\", \"substrate-prometheus-endpoint\", \"thiserror\", \"unsigned-varint\", \"zeroize\"]\n\n[[package]]\nname = \"sc-network-bitswap\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"cid\", \"futures\", \"libp2p\", \"log\", \"prost\", \"prost-build\", \"sc-client-api\", \"sc-network-common\", \"sp-blockchain\", \"sp-runtime\", \"thiserror\", \"unsigned-varint\"]\n\n[[package]]\nname = \"sc-network-common\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"bitflags\", \"bytes\", \"futures\", \"futures-timer\", \"libp2p\", \"linked_hash_set\", \"parity-scale-codec\", \"prost-build\", \"sc-consensus\", \"sc-peerset\", \"serde\", \"smallvec\", \"sp-blockchain\", \"sp-consensus\", \"sp-consensus-grandpa\", \"sp-runtime\", \"substrate-prometheus-endpoint\", \"thiserror\"]\n\n[[package]]\nname = \"sc-network-gossip\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"ahash\", \"futures\", \"futures-timer\", \"libp2p\", \"log\", \"lru 0.8.1\", \"sc-network-common\", \"sc-peerset\", \"sp-runtime\", \"substrate-prometheus-endpoint\", \"tracing\"]\n\n[[package]]\nname = \"sc-network-light\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"futures\", \"libp2p\", \"log\", \"parity-scale-codec\", \"prost\", \"prost-build\", \"sc-client-api\", \"sc-network-common\", \"sc-peerset\", \"sp-blockchain\", \"sp-core\", \"sp-runtime\", \"thiserror\"]\n\n[[package]]\nname = \"sc-network-sync\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"async-trait\", \"fork-tree\", \"futures\", \"libp2p\", \"log\", \"lru 0.8.1\", \"mockall\", \"parity-scale-codec\", \"prost\", \"prost-build\", \"sc-client-api\", \"sc-consensus\", \"sc-network-common\", \"sc-peerset\", \"sc-utils\", \"smallvec\", \"sp-arithmetic\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-consensus-grandpa\", \"sp-runtime\", \"substrate-prometheus-endpoint\", \"thiserror\"]\n\n[[package]]\nname = \"sc-network-transactions\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"futures\", \"libp2p\", \"log\", \"parity-scale-codec\", \"pin-project\", \"sc-network-common\", \"sc-peerset\", \"sc-utils\", \"sp-consensus\", \"sp-runtime\", \"substrate-prometheus-endpoint\"]\n\n[[package]]\nname = \"sc-offchain\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"bytes\", \"fnv\", \"futures\", \"futures-timer\", \"hyper\", \"hyper-rustls\", \"libp2p\", \"num_cpus\", \"once_cell\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"sc-client-api\", \"sc-network-common\", \"sc-peerset\", \"sc-utils\", \"sp-api\", \"sp-core\", \"sp-offchain\", \"sp-runtime\", \"threadpool\", \"tracing\"]\n\n[[package]]\nname = \"sc-peerset\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"futures\", \"libp2p\", \"log\", \"sc-utils\", \"serde_json\", \"wasm-timer\"]\n\n[[package]]\nname = \"sc-proposer-metrics\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"log\", \"substrate-prometheus-endpoint\"]\n\n[[package]]\nname = \"sc-rpc\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"futures\", \"jsonrpsee\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sc-block-builder\", \"sc-chain-spec\", \"sc-client-api\", \"sc-rpc-api\", \"sc-tracing\", \"sc-transaction-pool-api\", \"sc-utils\", \"serde_json\", \"sp-api\", \"sp-blockchain\", \"sp-core\", \"sp-keystore\", \"sp-offchain\", \"sp-rpc\", \"sp-runtime\", \"sp-session\", \"sp-version\"]\n\n[[package]]\nname = \"sc-rpc-api\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"jsonrpsee\", \"parity-scale-codec\", \"sc-chain-spec\", \"sc-transaction-pool-api\", \"scale-info\", \"serde\", \"serde_json\", \"sp-core\", \"sp-rpc\", \"sp-runtime\", \"sp-version\", \"thiserror\"]\n\n[[package]]\nname = \"sc-rpc-server\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"http\", \"jsonrpsee\", \"log\", \"serde_json\", \"substrate-prometheus-endpoint\", \"tokio\", \"tower\", \"tower-http\"]\n\n[[package]]\nname = \"sc-rpc-spec-v2\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"futures\", \"futures-util\", \"hex\", \"jsonrpsee\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sc-chain-spec\", \"sc-client-api\", \"sc-transaction-pool-api\", \"serde\", \"sp-api\", \"sp-blockchain\", \"sp-core\", \"sp-runtime\", \"sp-version\", \"thiserror\", \"tokio-stream\"]\n\n[[package]]\nname = \"sc-service\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"directories\", \"exit-future\", \"futures\", \"futures-timer\", \"jsonrpsee\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"pin-project\", \"rand 0.8.5\", \"sc-block-builder\", \"sc-chain-spec\", \"sc-client-api\", \"sc-client-db\", \"sc-consensus\", \"sc-executor\", \"sc-informant\", \"sc-keystore\", \"sc-network\", \"sc-network-bitswap\", \"sc-network-common\", \"sc-network-light\", \"sc-network-sync\", \"sc-network-transactions\", \"sc-offchain\", \"sc-rpc\", \"sc-rpc-server\", \"sc-rpc-spec-v2\", \"sc-sysinfo\", \"sc-telemetry\", \"sc-tracing\", \"sc-transaction-pool\", \"sc-transaction-pool-api\", \"sc-utils\", \"serde\", \"serde_json\", \"sp-api\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-externalities\", \"sp-keystore\", \"sp-runtime\", \"sp-session\", \"sp-state-machine\", \"sp-storage\", \"sp-transaction-pool\", \"sp-transaction-storage-proof\", \"sp-trie\", \"sp-version\", \"static_init\", \"substrate-prometheus-endpoint\", \"tempfile\", \"thiserror\", \"tokio\", \"tracing\", \"tracing-futures\"]\n\n[[package]]\nname = \"sc-state-db\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sp-core\"]\n\n[[package]]\nname = \"sc-sysinfo\"\nversion = \"6.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"futures\", \"libc\", \"log\", \"rand 0.8.5\", \"rand_pcg\", \"regex\", \"sc-telemetry\", \"serde\", \"serde_json\", \"sp-core\", \"sp-io\", \"sp-std\"]\n\n[[package]]\nname = \"sc-telemetry\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"chrono\", \"futures\", \"libp2p\", \"log\", \"parking_lot 0.12.1\", \"pin-project\", \"rand 0.8.5\", \"sc-utils\", \"serde\", \"serde_json\", \"thiserror\", \"wasm-timer\"]\n\n[[package]]\nname = \"sc-tracing\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"ansi_term\", \"atty\", \"chrono\", \"lazy_static\", \"libc\", \"log\", \"once_cell\", \"parking_lot 0.12.1\", \"regex\", \"rustc-hash\", \"sc-client-api\", \"sc-rpc-server\", \"sc-tracing-proc-macro\", \"serde\", \"sp-api\", \"sp-blockchain\", \"sp-core\", \"sp-rpc\", \"sp-runtime\", \"sp-tracing\", \"thiserror\", \"tracing\", \"tracing-log\", \"tracing-subscriber\"]\n\n[[package]]\nname = \"sc-tracing-proc-macro\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sc-transaction-pool\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"futures-timer\", \"linked-hash-map\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sc-client-api\", \"sc-transaction-pool-api\", \"sc-utils\", \"serde\", \"sp-api\", \"sp-blockchain\", \"sp-core\", \"sp-runtime\", \"sp-tracing\", \"sp-transaction-pool\", \"substrate-prometheus-endpoint\", \"thiserror\"]\n\n[[package]]\nname = \"sc-transaction-pool-api\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"log\", \"serde\", \"sp-blockchain\", \"sp-runtime\", \"thiserror\"]\n\n[[package]]\nname = \"sc-utils\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"backtrace\", \"futures\", \"futures-timer\", \"lazy_static\", \"log\", \"parking_lot 0.12.1\", \"prometheus\"]\n\n[[package]]\nname = \"scale-info\"\nversion = \"2.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608\"\ndependencies = [\"bitvec\", \"cfg-if\", \"derive_more\", \"parity-scale-codec\", \"scale-info-derive\", \"serde\"]\n\n[[package]]\nname = \"scale-info-derive\"\nversion = \"2.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c\"\ndependencies = [\"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"schannel\"\nversion = \"0.1.21\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3\"\ndependencies = [\"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"schnorrkel\"\nversion = \"0.9.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862\"\ndependencies = [\"arrayref\", \"arrayvec 0.5.2\", \"curve25519-dalek 2.1.3\", \"getrandom 0.1.16\", \"merlin\", \"rand 0.7.3\", \"rand_core 0.5.1\", \"sha2 0.8.2\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"scopeguard\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd\"\n\n[[package]]\nname = \"scratch\"\nversion = \"1.0.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2\"\n\n[[package]]\nname = \"sct\"\nversion = \"0.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce\"\ndependencies = [\"ring\", \"untrusted\"]\n\n[[package]]\nname = \"sct\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4\"\ndependencies = [\"ring\", \"untrusted\"]\n\n[[package]]\nname = \"sdp\"\nversion = \"0.5.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13\"\ndependencies = [\"rand 0.8.5\", \"substring\", \"thiserror\", \"url\"]\n\n[[package]]\nname = \"sec1\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928\"\ndependencies = [\"base16ct\", \"der\", \"generic-array 0.14.6\", \"pkcs8\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"secp256k1\"\nversion = \"0.24.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62\"\ndependencies = [\"secp256k1-sys\"]\n\n[[package]]\nname = \"secp256k1-sys\"\nversion = \"0.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b\"\ndependencies = [\"cc\"]\n\n[[package]]\nname = \"secrecy\"\nversion = \"0.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e\"\ndependencies = [\"zeroize\"]\n\n[[package]]\nname = \"security-framework\"\nversion = \"2.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254\"\ndependencies = [\"bitflags\", \"core-foundation\", \"core-foundation-sys\", \"libc\", \"security-framework-sys\"]\n\n[[package]]\nname = \"security-framework-sys\"\nversion = \"2.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4\"\ndependencies = [\"core-foundation-sys\", \"libc\"]\n\n[[package]]\nname = \"semver\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537\"\ndependencies = [\"semver-parser\"]\n\n[[package]]\nname = \"semver\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403\"\ndependencies = [\"semver-parser\"]\n\n[[package]]\nname = \"semver\"\nversion = \"1.0.16\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"semver-parser\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3\"\n\n[[package]]\nname = \"serde\"\nversion = \"1.0.152\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb\"\ndependencies = [\"serde_derive\"]\n\n[[package]]\nname = \"serde-tuple-vec-map\"\nversion = \"1.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a04d0ebe0de77d7d445bb729a895dcb0a288854b267ca85f030ce51cdc578c82\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"serde_bytes\"\nversion = \"0.11.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"serde_derive\"\nversion = \"1.0.152\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"serde_json\"\nversion = \"1.0.92\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7434af0dc1cbd59268aa98b4c22c131c0584d2232f6fb166efb993e2832e896a\"\ndependencies = [\"itoa\", \"ryu\", \"serde\"]\n\n[[package]]\nname = \"serde_with\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"89df7a26519371a3cce44fbb914c2819c84d9b897890987fa3ab096491cc0ea8\"\ndependencies = [\"serde\", \"serde_with_macros\"]\n\n[[package]]\nname = \"serde_with_macros\"\nversion = \"2.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a1966009f3c05f095697c537312f5415d1e3ed31ce0a56942bac4c771c5c335e\"\ndependencies = [\"darling\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sha-1\"\nversion = \"0.9.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6\"\ndependencies = [\"block-buffer 0.9.0\", \"cfg-if\", \"cpufeatures\", \"digest 0.9.0\", \"opaque-debug 0.3.0\"]\n\n[[package]]\nname = \"sha2\"\nversion = \"0.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69\"\ndependencies = [\"block-buffer 0.7.3\", \"digest 0.8.1\", \"fake-simd\", \"opaque-debug 0.2.3\"]\n\n[[package]]\nname = \"sha2\"\nversion = \"0.9.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800\"\ndependencies = [\"block-buffer 0.9.0\", \"cfg-if\", \"cpufeatures\", \"digest 0.9.0\", \"opaque-debug 0.3.0\"]\n\n[[package]]\nname = \"sha2\"\nversion = \"0.10.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0\"\ndependencies = [\"cfg-if\", \"cpufeatures\", \"digest 0.10.6\"]\n\n[[package]]\nname = \"sha3\"\nversion = \"0.10.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9\"\ndependencies = [\"digest 0.10.6\", \"keccak\"]\n\n[[package]]\nname = \"sharded-slab\"\nversion = \"0.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31\"\ndependencies = [\"lazy_static\"]\n\n[[package]]\nname = \"shlex\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3\"\n\n[[package]]\nname = \"signal-hook-registry\"\nversion = \"1.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"signature\"\nversion = \"1.6.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c\"\ndependencies = [\"digest 0.10.6\", \"rand_core 0.6.4\"]\n\n[[package]]\nname = \"simba\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8e82063457853d00243beda9952e910b82593e4b07ae9f721b9278a99a0d3d5c\"\ndependencies = [\"approx\", \"num-complex\", \"num-traits\", \"paste\"]\n\n[[package]]\nname = \"slab\"\nversion = \"0.4.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef\"\ndependencies = [\"autocfg\"]\n\n[[package]]\nname = \"slice-group-by\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec\"\n\n[[package]]\nname = \"smallvec\"\nversion = \"1.10.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0\"\n\n[[package]]\nname = \"snap\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831\"\n\n[[package]]\nname = \"snow\"\nversion = \"0.9.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d\"\ndependencies = [\"aes-gcm 0.9.4\", \"blake2\", \"chacha20poly1305\", \"curve25519-dalek 4.0.0-rc.0\", \"rand_core 0.6.4\", \"ring\", \"rustc_version 0.4.0\", \"sha2 0.10.6\", \"subtle\"]\n\n[[package]]\nname = \"socket2\"\nversion = \"0.4.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd\"\ndependencies = [\"libc\", \"winapi\"]\n\n[[package]]\nname = \"soketto\"\nversion = \"0.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2\"\ndependencies = [\"base64 0.13.1\", \"bytes\", \"flate2\", \"futures\", \"http\", \"httparse\", \"log\", \"rand 0.8.5\", \"sha-1\"]\n\n[[package]]\nname = \"sp-api\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"hash-db\", \"log\", \"parity-scale-codec\", \"sp-api-proc-macro\", \"sp-core\", \"sp-runtime\", \"sp-state-machine\", \"sp-std\", \"sp-trie\", \"sp-version\", \"thiserror\"]\n\n[[package]]\nname = \"sp-api-proc-macro\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"blake2\", \"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sp-application-crypto\"\nversion = \"24\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"scale-info\", \"serde\", \"sp-core\", \"sp-io\", \"sp-std\"]\n\n[[package]]\nname = \"sp-arithmetic\"\nversion = \"6.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"integer-sqrt\", \"num-traits\", \"parity-scale-codec\", \"scale-info\", \"serde\", \"sp-std\", \"static_assertions\"]\n\n[[package]]\nname = \"sp-authorship\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"parity-scale-codec\", \"sp-inherents\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"sp-block-builder\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"sp-api\", \"sp-inherents\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"sp-blockchain\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"futures\", \"log\", \"lru 0.8.1\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sp-api\", \"sp-consensus\", \"sp-database\", \"sp-runtime\", \"sp-state-machine\", \"thiserror\"]\n\n[[package]]\nname = \"sp-consensus\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"log\", \"parity-scale-codec\", \"sp-core\", \"sp-inherents\", \"sp-runtime\", \"sp-state-machine\", \"sp-std\", \"sp-version\", \"thiserror\"]\n\n[[package]]\nname = \"sp-consensus-aura\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"parity-scale-codec\", \"scale-info\", \"sp-api\", \"sp-application-crypto\", \"sp-consensus\", \"sp-consensus-slots\", \"sp-inherents\", \"sp-runtime\", \"sp-std\", \"sp-timestamp\"]\n\n[[package]]\nname = \"sp-consensus-slots\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"scale-info\", \"serde\", \"sp-std\", \"sp-timestamp\"]\n\n[[package]]\nname = \"sp-core\"\nversion = \"24\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"base58\", \"bitflags\", \"blake2\", \"dyn-clonable\", \"ed25519-zebra\", \"futures\", \"hash-db\", \"hash256-std-hasher\", \"impl-serde 0.4.0\", \"lazy_static\", \"libsecp256k1\", \"log\", \"merlin\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"primitive-types 0.12.1\", \"rand 0.8.5\", \"regex\", \"scale-info\", \"schnorrkel\", \"secp256k1\", \"secrecy\", \"serde\", \"sp-core-hashing\", \"sp-debug-derive\", \"sp-externalities\", \"sp-runtime-interface\", \"sp-std\", \"sp-storage\", \"ss58-registry\", \"substrate-bip39\", \"thiserror\", \"tiny-bip39\", \"zeroize\"]\n\n[[package]]\nname = \"sp-core-hashing\"\nversion = \"5.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"blake2\", \"byteorder\", \"digest 0.10.6\", \"sha2 0.10.6\", \"sha3\", \"sp-std\", \"twox-hash\"]\n\n[[package]]\nname = \"sp-core-hashing-proc-macro\"\nversion = \"5.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"proc-macro2\", \"quote\", \"sp-core-hashing\", \"syn\"]\n\n[[package]]\nname = \"sp-database\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"kvdb\", \"parking_lot 0.12.1\"]\n\n[[package]]\nname = \"sp-debug-derive\"\nversion = \"5.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sp-externalities\"\nversion = \"0.13.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"environmental\", \"parity-scale-codec\", \"sp-std\", \"sp-storage\"]\n\n[[package]]\nname = \"sp-consensus-grandpa\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"finality-grandpa\", \"log\", \"parity-scale-codec\", \"scale-info\", \"serde\", \"sp-api\", \"sp-application-crypto\", \"sp-core\", \"sp-keystore\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"sp-inherents\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"impl-trait-for-tuples\", \"parity-scale-codec\", \"sp-core\", \"sp-runtime\", \"sp-std\", \"thiserror\"]\n\n[[package]]\nname = \"sp-io\"\nversion = \"24\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"bytes\", \"ed25519\", \"ed25519-dalek\", \"futures\", \"libsecp256k1\", \"log\", \"parity-scale-codec\", \"secp256k1\", \"sp-core\", \"sp-externalities\", \"sp-keystore\", \"sp-runtime-interface\", \"sp-state-machine\", \"sp-std\", \"sp-tracing\", \"sp-trie\", \"tracing\", \"tracing-core\"]\n\n[[package]]\nname = \"sp-keyring\"\nversion = \"24\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"lazy_static\", \"sp-core\", \"sp-runtime\", \"strum\"]\n\n[[package]]\nname = \"sp-keystore\"\nversion = \"0.13.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"merlin\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"schnorrkel\", \"serde\", \"sp-core\", \"sp-externalities\", \"thiserror\"]\n\n[[package]]\nname = \"sp-maybe-compressed-blob\"\nversion = \"4.1.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"thiserror\", \"zstd\"]\n\n[[package]]\nname = \"sp-offchain\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"sp-api\", \"sp-core\", \"sp-runtime\"]\n\n[[package]]\nname = \"sp-panic-handler\"\nversion = \"5.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"backtrace\", \"lazy_static\", \"regex\"]\n\n[[package]]\nname = \"sp-rpc\"\nversion = \"6.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"rustc-hash\", \"serde\", \"sp-core\"]\n\n[[package]]\nname = \"sp-runtime\"\nversion = \"24\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"either\", \"hash256-std-hasher\", \"impl-trait-for-tuples\", \"log\", \"parity-scale-codec\", \"paste\", \"rand 0.8.5\", \"scale-info\", \"serde\", \"sp-application-crypto\", \"sp-arithmetic\", \"sp-core\", \"sp-io\", \"sp-std\", \"sp-weights\"]\n\n[[package]]\nname = \"sp-runtime-interface\"\nversion = \"24\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"bytes\", \"impl-trait-for-tuples\", \"parity-scale-codec\", \"primitive-types 0.12.1\", \"sp-externalities\", \"sp-runtime-interface-proc-macro\", \"sp-std\", \"sp-storage\", \"sp-tracing\", \"sp-wasm-interface\", \"static_assertions\"]\n\n[[package]]\nname = \"sp-runtime-interface-proc-macro\"\nversion = \"6.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"Inflector\", \"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sp-session\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"scale-info\", \"sp-api\", \"sp-core\", \"sp-runtime\", \"sp-staking\", \"sp-std\"]\n\n[[package]]\nname = \"sp-staking\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"scale-info\", \"sp-core\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"sp-state-machine\"\nversion = \"0.13.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"hash-db\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"smallvec\", \"sp-core\", \"sp-externalities\", \"sp-panic-handler\", \"sp-std\", \"sp-trie\", \"thiserror\", \"tracing\"]\n\n[[package]]\nname = \"sp-std\"\nversion = \"5.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\n\n[[package]]\nname = \"sp-storage\"\nversion = \"24\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"impl-serde 0.4.0\", \"parity-scale-codec\", \"ref-cast\", \"serde\", \"sp-debug-derive\", \"sp-std\"]\n\n[[package]]\nname = \"sp-timestamp\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures-timer\", \"log\", \"parity-scale-codec\", \"sp-inherents\", \"sp-runtime\", \"sp-std\", \"thiserror\"]\n\n[[package]]\nname = \"sp-tracing\"\nversion = \"6.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"sp-std\", \"tracing\", \"tracing-core\", \"tracing-subscriber\"]\n\n[[package]]\nname = \"sp-transaction-pool\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"sp-api\", \"sp-runtime\"]\n\n[[package]]\nname = \"sp-transaction-storage-proof\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"log\", \"parity-scale-codec\", \"scale-info\", \"sp-core\", \"sp-inherents\", \"sp-runtime\", \"sp-std\", \"sp-trie\"]\n\n[[package]]\nname = \"sp-trie\"\nversion = \"24\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"ahash\", \"hash-db\", \"hashbrown\", \"lazy_static\", \"lru 0.8.1\", \"memory-db\", \"nohash-hasher\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"scale-info\", \"sp-core\", \"sp-std\", \"thiserror\", \"tracing\", \"trie-db\", \"trie-root\"]\n\n[[package]]\nname = \"sp-version\"\nversion = \"5.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"impl-serde 0.4.0\", \"parity-scale-codec\", \"parity-wasm\", \"scale-info\", \"serde\", \"sp-core-hashing-proc-macro\", \"sp-runtime\", \"sp-std\", \"sp-version-proc-macro\", \"thiserror\"]\n\n[[package]]\nname = \"sp-version-proc-macro\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sp-wasm-interface\"\nversion = \"24\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"impl-trait-for-tuples\", \"log\", \"parity-scale-codec\", \"sp-std\", \"wasmi\", \"wasmtime\"]\n\n[[package]]\nname = \"sp-weights\"\nversion = \"4.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"scale-info\", \"serde\", \"smallvec\", \"sp-arithmetic\", \"sp-core\", \"sp-debug-derive\", \"sp-std\"]\n\n[[package]]\nname = \"spin\"\nversion = \"0.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d\"\n\n[[package]]\nname = \"spki\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b\"\ndependencies = [\"base64ct\", \"der\"]\n\n[[package]]\nname = \"ss58-registry\"\nversion = \"1.38.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e40c020d72bc0a9c5660bb71e4a6fdef081493583062c474740a7d59f55f0e7b\"\ndependencies = [\"Inflector\", \"num-format\", \"proc-macro2\", \"quote\", \"serde\", \"serde_json\", \"unicode-xid\"]\n\n[[package]]\nname = \"stable_deref_trait\"\nversion = \"1.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3\"\n\n[[package]]\nname = \"static_assertions\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f\"\n\n[[package]]\nname = \"static_init\"\nversion = \"1.0.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6\"\ndependencies = [\"bitflags\", \"cfg_aliases\", \"libc\", \"parking_lot 0.11.2\", \"parking_lot_core 0.8.6\", \"static_init_macro\", \"winapi\"]\n\n[[package]]\nname = \"static_init_macro\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf\"\ndependencies = [\"cfg_aliases\", \"memchr\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"statrs\"\nversion = \"0.15.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"05bdbb8e4e78216a85785a85d3ec3183144f98d0097b9281802c019bb07a6f05\"\ndependencies = [\"approx\", \"lazy_static\", \"nalgebra\", \"num-traits\", \"rand 0.8.5\"]\n\n[[package]]\nname = \"strsim\"\nversion = \"0.10.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623\"\n\n[[package]]\nname = \"strum\"\nversion = \"0.24.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f\"\ndependencies = [\"strum_macros\"]\n\n[[package]]\nname = \"strum_macros\"\nversion = \"0.24.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59\"\ndependencies = [\"heck\", \"proc-macro2\", \"quote\", \"rustversion\", \"syn\"]\n\n[[package]]\nname = \"stun\"\nversion = \"0.4.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25\"\ndependencies = [\"base64 0.13.1\", \"crc\", \"lazy_static\", \"md-5\", \"rand 0.8.5\", \"ring\", \"subtle\", \"thiserror\", \"tokio\", \"url\", \"webrtc-util\"]\n\n[[package]]\nname = \"substrate-bip39\"\nversion = \"0.4.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c\"\ndependencies = [\"hmac 0.11.0\", \"pbkdf2 0.8.0\", \"schnorrkel\", \"sha2 0.9.9\", \"zeroize\"]\n\n[[package]]\nname = \"substrate-build-script-utils\"\nversion = \"3.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"platforms 2.0.0\"]\n\n[[package]]\nname = \"substrate-fixed\"\nversion = \"0.5.9\"\nsource = \"git+https://github.com/encointer/substrate-fixed.git?tag=v0.5.9#a4fb461aae6205ffc55bed51254a40c52be04e5d\"\ndependencies = [\"parity-scale-codec\", \"scale-info\", \"typenum 1.16.0 (git+https://github.com/encointer/typenum?tag=v1.16.0)\"]\n\n[[package]]\nname = \"substrate-frame-rpc-system\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-system-rpc-runtime-api\", \"futures\", \"jsonrpsee\", \"log\", \"parity-scale-codec\", \"sc-rpc-api\", \"sc-transaction-pool-api\", \"sp-api\", \"sp-block-builder\", \"sp-blockchain\", \"sp-core\", \"sp-runtime\"]\n\n[[package]]\nname = \"substrate-prometheus-endpoint\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"hyper\", \"log\", \"prometheus\", \"thiserror\", \"tokio\"]\n\n[[package]]\nname = \"substrate-rpc-client\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"jsonrpsee\", \"log\", \"sc-rpc-api\", \"serde\", \"sp-runtime\"]\n\n[[package]]\nname = \"substrate-wasm-builder\"\nversion = \"5.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"ansi_term\", \"build-helper\", \"cargo_metadata\", \"filetime\", \"sp-maybe-compressed-blob\", \"strum\", \"tempfile\", \"toml\", \"walkdir\", \"wasm-opt\"]\n\n[[package]]\nname = \"substring\"\nversion = \"1.4.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86\"\ndependencies = [\"autocfg\"]\n\n[[package]]\nname = \"subtensor-custom-rpc\"\nversion = \"0.0.1\"\ndependencies = [\"jsonrpsee\", \"pallet-subtensor\", \"parity-scale-codec\", \"serde\", \"sp-api\", \"sp-blockchain\", \"sp-rpc\", \"sp-runtime\", \"subtensor-custom-rpc-runtime-api\"]\n\n[[package]]\nname = \"subtensor-custom-rpc-runtime-api\"\nversion = \"0.0.1\"\ndependencies = [\"frame-support\", \"pallet-subtensor\", \"serde\", \"sp-api\"]\n\n[[package]]\nname = \"subtle\"\nversion = \"2.4.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601\"\n\n[[package]]\nname = \"syn\"\nversion = \"1.0.107\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5\"\ndependencies = [\"proc-macro2\", \"quote\", \"unicode-ident\"]\n\n[[package]]\nname = \"synstructure\"\nversion = \"0.12.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\", \"unicode-xid\"]\n\n[[package]]\nname = \"system-configuration\"\nversion = \"0.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd\"\ndependencies = [\"bitflags\", \"core-foundation\", \"system-configuration-sys\"]\n\n[[package]]\nname = \"system-configuration-sys\"\nversion = \"0.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9\"\ndependencies = [\"core-foundation-sys\", \"libc\"]\n\n[[package]]\nname = \"tap\"\nversion = \"1.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369\"\n\n[[package]]\nname = \"target-lexicon\"\nversion = \"0.12.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9410d0f6853b1d94f0e519fb95df60f29d2c1eff2d921ffdf01a4c8a3b54f12d\"\n\n[[package]]\nname = \"tempfile\"\nversion = \"3.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4\"\ndependencies = [\"cfg-if\", \"fastrand\", \"libc\", \"redox_syscall\", \"remove_dir_all\", \"winapi\"]\n\n[[package]]\nname = \"termcolor\"\nversion = \"1.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6\"\ndependencies = [\"winapi-util\"]\n\n[[package]]\nname = \"termtree\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8\"\n\n[[package]]\nname = \"thiserror\"\nversion = \"1.0.38\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0\"\ndependencies = [\"thiserror-impl\"]\n\n[[package]]\nname = \"thiserror-impl\"\nversion = \"1.0.38\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"thousands\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820\"\n\n[[package]]\nname = \"thread_local\"\nversion = \"1.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180\"\ndependencies = [\"once_cell\"]\n\n[[package]]\nname = \"threadpool\"\nversion = \"1.8.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa\"\ndependencies = [\"num_cpus\"]\n\n[[package]]\nname = \"tikv-jemalloc-sys\"\nversion = \"0.5.3+5.3.0-patched\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8\"\ndependencies = [\"cc\", \"libc\"]\n\n[[package]]\nname = \"time\"\nversion = \"0.1.45\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a\"\ndependencies = [\"libc\", \"wasi 0.10.0+wasi-snapshot-preview1\", \"winapi\"]\n\n[[package]]\nname = \"time\"\nversion = \"0.3.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376\"\ndependencies = [\"itoa\", \"serde\", \"time-core\", \"time-macros\"]\n\n[[package]]\nname = \"time-core\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd\"\n\n[[package]]\nname = \"time-macros\"\nversion = \"0.2.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2\"\ndependencies = [\"time-core\"]\n\n[[package]]\nname = \"tiny-bip39\"\nversion = \"1.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861\"\ndependencies = [\"anyhow\", \"hmac 0.12.1\", \"once_cell\", \"pbkdf2 0.11.0\", \"rand 0.8.5\", \"rustc-hash\", \"sha2 0.10.6\", \"thiserror\", \"unicode-normalization\", \"wasm-bindgen\", \"zeroize\"]\n\n[[package]]\nname = \"tiny-keccak\"\nversion = \"2.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237\"\ndependencies = [\"crunchy\"]\n\n[[package]]\nname = \"tinytemplate\"\nversion = \"1.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc\"\ndependencies = [\"serde\", \"serde_json\"]\n\n[[package]]\nname = \"tinyvec\"\nversion = \"1.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50\"\ndependencies = [\"tinyvec_macros\"]\n\n[[package]]\nname = \"tinyvec_macros\"\nversion = \"0.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20\"\n\n[[package]]\nname = \"tokio\"\nversion = \"1.25.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af\"\ndependencies = [\"autocfg\", \"bytes\", \"libc\", \"memchr\", \"mio\", \"num_cpus\", \"parking_lot 0.12.1\", \"pin-project-lite 0.2.9\", \"signal-hook-registry\", \"socket2\", \"tokio-macros\", \"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"tokio-macros\"\nversion = \"1.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"tokio-rustls\"\nversion = \"0.23.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59\"\ndependencies = [\"rustls 0.20.8\", \"tokio\", \"webpki 0.22.0\"]\n\n[[package]]\nname = \"tokio-stream\"\nversion = \"0.1.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce\"\ndependencies = [\"futures-core\", \"pin-project-lite 0.2.9\", \"tokio\", \"tokio-util\"]\n\n[[package]]\nname = \"tokio-util\"\nversion = \"0.7.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740\"\ndependencies = [\"bytes\", \"futures-core\", \"futures-io\", \"futures-sink\", \"pin-project-lite 0.2.9\", \"tokio\", \"tracing\"]\n\n[[package]]\nname = \"toml\"\nversion = \"0.5.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"tower\"\nversion = \"0.4.13\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c\"\ndependencies = [\"tower-layer\", \"tower-service\", \"tracing\"]\n\n[[package]]\nname = \"tower-http\"\nversion = \"0.3.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858\"\ndependencies = [\"bitflags\", \"bytes\", \"futures-core\", \"futures-util\", \"http\", \"http-body\", \"http-range-header\", \"pin-project-lite 0.2.9\", \"tower-layer\", \"tower-service\"]\n\n[[package]]\nname = \"tower-layer\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0\"\n\n[[package]]\nname = \"tower-service\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52\"\n\n[[package]]\nname = \"tracing\"\nversion = \"0.1.37\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8\"\ndependencies = [\"cfg-if\", \"log\", \"pin-project-lite 0.2.9\", \"tracing-attributes\", \"tracing-core\"]\n\n[[package]]\nname = \"tracing-attributes\"\nversion = \"0.1.23\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"tracing-core\"\nversion = \"0.1.30\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a\"\ndependencies = [\"once_cell\", \"valuable\"]\n\n[[package]]\nname = \"tracing-futures\"\nversion = \"0.2.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2\"\ndependencies = [\"pin-project\", \"tracing\"]\n\n[[package]]\nname = \"tracing-log\"\nversion = \"0.1.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922\"\ndependencies = [\"lazy_static\", \"log\", \"tracing-core\"]\n\n[[package]]\nname = \"tracing-serde\"\nversion = \"0.1.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1\"\ndependencies = [\"serde\", \"tracing-core\"]\n\n[[package]]\nname = \"tracing-subscriber\"\nversion = \"0.2.25\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71\"\ndependencies = [\"ansi_term\", \"chrono\", \"lazy_static\", \"matchers\", \"parking_lot 0.11.2\", \"regex\", \"serde\", \"serde_json\", \"sharded-slab\", \"smallvec\", \"thread_local\", \"tracing\", \"tracing-core\", \"tracing-log\", \"tracing-serde\"]\n\n[[package]]\nname = \"trie-db\"\nversion = \"0.24.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"004e1e8f92535694b4cb1444dc5a8073ecf0815e3357f729638b9f8fc4062908\"\ndependencies = [\"hash-db\", \"hashbrown\", \"log\", \"rustc-hex\", \"smallvec\"]\n\n[[package]]\nname = \"trie-root\"\nversion = \"0.17.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9a36c5ca3911ed3c9a5416ee6c679042064b93fc637ded67e25f92e68d783891\"\ndependencies = [\"hash-db\"]\n\n[[package]]\nname = \"trust-dns-proto\"\nversion = \"0.22.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26\"\ndependencies = [\"async-trait\", \"cfg-if\", \"data-encoding\", \"enum-as-inner\", \"futures-channel\", \"futures-io\", \"futures-util\", \"idna 0.2.3\", \"ipnet\", \"lazy_static\", \"rand 0.8.5\", \"smallvec\", \"socket2\", \"thiserror\", \"tinyvec\", \"tokio\", \"tracing\", \"url\"]\n\n[[package]]\nname = \"trust-dns-resolver\"\nversion = \"0.22.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe\"\ndependencies = [\"cfg-if\", \"futures-util\", \"ipconfig\", \"lazy_static\", \"lru-cache\", \"parking_lot 0.12.1\", \"resolv-conf\", \"smallvec\", \"thiserror\", \"tokio\", \"tracing\", \"trust-dns-proto\"]\n\n[[package]]\nname = \"try-lock\"\nversion = \"0.2.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed\"\n\n[[package]]\nname = \"try-runtime-cli\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"clap\", \"frame-remote-externalities\", \"frame-try-runtime\", \"hex\", \"log\", \"parity-scale-codec\", \"sc-cli\", \"sc-executor\", \"sc-service\", \"serde\", \"serde_json\", \"sp-api\", \"sp-core\", \"sp-debug-derive\", \"sp-externalities\", \"sp-io\", \"sp-keystore\", \"sp-rpc\", \"sp-runtime\", \"sp-state-machine\", \"sp-version\", \"sp-weights\", \"substrate-rpc-client\", \"zstd\"]\n\n[[package]]\nname = \"tt-call\"\nversion = \"1.0.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df\"\n\n[[package]]\nname = \"turn\"\nversion = \"0.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8\"\ndependencies = [\"async-trait\", \"base64 0.13.1\", \"futures\", \"log\", \"md-5\", \"rand 0.8.5\", \"ring\", \"stun\", \"thiserror\", \"tokio\", \"webrtc-util\"]\n\n[[package]]\nname = \"twox-hash\"\nversion = \"1.6.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675\"\ndependencies = [\"cfg-if\", \"digest 0.10.6\", \"rand 0.8.5\", \"static_assertions\"]\n\n[[package]]\nname = \"typenum\"\nversion = \"1.16.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba\"\n\n[[package]]\nname = \"typenum\"\nversion = \"1.16.0\"\nsource = \"git+https://github.com/encointer/typenum?tag=v1.16.0#4c8dddaa8bdd13130149e43b4085ad14e960617f\"\ndependencies = [\"parity-scale-codec\", \"scale-info\"]\n\n[[package]]\nname = \"ucd-trie\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81\"\n\n[[package]]\nname = \"uint\"\nversion = \"0.9.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52\"\ndependencies = [\"byteorder\", \"crunchy\", \"hex\", \"static_assertions\"]\n\n[[package]]\nname = \"unicode-bidi\"\nversion = \"0.3.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58\"\n\n[[package]]\nname = \"unicode-ident\"\nversion = \"1.0.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc\"\n\n[[package]]\nname = \"unicode-normalization\"\nversion = \"0.1.22\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921\"\ndependencies = [\"tinyvec\"]\n\n[[package]]\nname = \"unicode-width\"\nversion = \"0.1.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b\"\n\n[[package]]\nname = \"unicode-xid\"\nversion = \"0.2.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c\"\n\n[[package]]\nname = \"universal-hash\"\nversion = \"0.4.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05\"\ndependencies = [\"generic-array 0.14.6\", \"subtle\"]\n\n[[package]]\nname = \"unsigned-varint\"\nversion = \"0.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836\"\ndependencies = [\"asynchronous-codec\", \"bytes\", \"futures-io\", \"futures-util\"]\n\n[[package]]\nname = \"untrusted\"\nversion = \"0.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a\"\n\n[[package]]\nname = \"url\"\nversion = \"2.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643\"\ndependencies = [\"form_urlencoded\", \"idna 0.3.0\", \"percent-encoding\"]\n\n[[package]]\nname = \"uuid\"\nversion = \"1.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79\"\ndependencies = [\"getrandom 0.2.8\"]\n\n[[package]]\nname = \"valuable\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d\"\n\n[[package]]\nname = \"vcpkg\"\nversion = \"0.2.15\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426\"\n\n[[package]]\nname = \"version_check\"\nversion = \"0.9.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f\"\n\n[[package]]\nname = \"void\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d\"\n\n[[package]]\nname = \"waitgroup\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292\"\ndependencies = [\"atomic-waker\"]\n\n[[package]]\nname = \"waker-fn\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca\"\n\n[[package]]\nname = \"walkdir\"\nversion = \"2.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56\"\ndependencies = [\"same-file\", \"winapi\", \"winapi-util\"]\n\n[[package]]\nname = \"want\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0\"\ndependencies = [\"log\", \"try-lock\"]\n\n[[package]]\nname = \"wasi\"\nversion = \"0.9.0+wasi-snapshot-preview1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519\"\n\n[[package]]\nname = \"wasi\"\nversion = \"0.10.0+wasi-snapshot-preview1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f\"\n\n[[package]]\nname = \"wasi\"\nversion = \"0.11.0+wasi-snapshot-preview1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423\"\n\n[[package]]\nname = \"wasm-bindgen\"\nversion = \"0.2.84\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b\"\ndependencies = [\"cfg-if\", \"wasm-bindgen-macro\"]\n\n[[package]]\nname = \"wasm-bindgen-backend\"\nversion = \"0.2.84\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9\"\ndependencies = [\"bumpalo\", \"log\", \"once_cell\", \"proc-macro2\", \"quote\", \"syn\", \"wasm-bindgen-shared\"]\n\n[[package]]\nname = \"wasm-bindgen-futures\"\nversion = \"0.4.34\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454\"\ndependencies = [\"cfg-if\", \"js-sys\", \"wasm-bindgen\", \"web-sys\"]\n\n[[package]]\nname = \"wasm-bindgen-macro\"\nversion = \"0.2.84\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5\"\ndependencies = [\"quote\", \"wasm-bindgen-macro-support\"]\n\n[[package]]\nname = \"wasm-bindgen-macro-support\"\nversion = \"0.2.84\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\", \"wasm-bindgen-backend\", \"wasm-bindgen-shared\"]\n\n[[package]]\nname = \"wasm-bindgen-shared\"\nversion = \"0.2.84\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d\"\n\n[[package]]\nname = \"wasm-instrument\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"aa1dafb3e60065305741e83db35c6c2584bb3725b692b5b66148a38d72ace6cd\"\ndependencies = [\"parity-wasm\"]\n\n[[package]]\nname = \"wasm-opt\"\nversion = \"0.110.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b68e8037b4daf711393f4be2056246d12d975651b14d581520ad5d1f19219cec\"\ndependencies = [\"anyhow\", \"libc\", \"strum\", \"strum_macros\", \"tempfile\", \"thiserror\", \"wasm-opt-cxx-sys\", \"wasm-opt-sys\"]\n\n[[package]]\nname = \"wasm-opt-cxx-sys\"\nversion = \"0.110.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"91adbad477e97bba3fbd21dd7bfb594e7ad5ceb9169ab1c93ab9cb0ada636b6f\"\ndependencies = [\"anyhow\", \"cxx\", \"cxx-build\", \"wasm-opt-sys\"]\n\n[[package]]\nname = \"wasm-opt-sys\"\nversion = \"0.110.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ec4fa5a322a4e6ac22fd141f498d56afbdbf9df5debeac32380d2dcaa3e06941\"\ndependencies = [\"anyhow\", \"cc\", \"cxx\", \"cxx-build\", \"regex\"]\n\n[[package]]\nname = \"wasm-timer\"\nversion = \"0.2.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f\"\ndependencies = [\"futures\", \"js-sys\", \"parking_lot 0.11.2\", \"pin-utils\", \"wasm-bindgen\", \"wasm-bindgen-futures\", \"web-sys\"]\n\n[[package]]\nname = \"wasmi\"\nversion = \"0.13.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422\"\ndependencies = [\"parity-wasm\", \"wasmi-validation\", \"wasmi_core\"]\n\n[[package]]\nname = \"wasmi-validation\"\nversion = \"0.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b\"\ndependencies = [\"parity-wasm\"]\n\n[[package]]\nname = \"wasmi_core\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7\"\ndependencies = [\"downcast-rs\", \"libm 0.2.6\", \"memory_units\", \"num-rational\", \"num-traits\"]\n\n[[package]]\nname = \"wasmparser\"\nversion = \"0.89.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ab5d3e08b13876f96dd55608d03cd4883a0545884932d5adf11925876c96daef\"\ndependencies = [\"indexmap\"]\n\n[[package]]\nname = \"wasmtime\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4ad5af6ba38311282f2a21670d96e78266e8c8e2f38cbcd52c254df6ccbc7731\"\ndependencies = [\"anyhow\", \"bincode\", \"cfg-if\", \"indexmap\", \"libc\", \"log\", \"object 0.29.0\", \"once_cell\", \"paste\", \"psm\", \"rayon\", \"serde\", \"target-lexicon\", \"wasmparser\", \"wasmtime-cache\", \"wasmtime-cranelift\", \"wasmtime-environ\", \"wasmtime-jit\", \"wasmtime-runtime\", \"windows-sys 0.36.1\"]\n\n[[package]]\nname = \"wasmtime-asm-macros\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"45de63ddfc8b9223d1adc8f7b2ee5f35d1f6d112833934ad7ea66e4f4339e597\"\ndependencies = [\"cfg-if\"]\n\n[[package]]\nname = \"wasmtime-cache\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bcd849399d17d2270141cfe47fa0d91ee52d5f8ea9b98cf7ddde0d53e5f79882\"\ndependencies = [\"anyhow\", \"base64 0.13.1\", \"bincode\", \"directories-next\", \"file-per-thread-logger\", \"log\", \"rustix 0.35.13\", \"serde\", \"sha2 0.9.9\", \"toml\", \"windows-sys 0.36.1\", \"zstd\"]\n\n[[package]]\nname = \"wasmtime-cranelift\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4bd91339b742ff20bfed4532a27b73c86b5bcbfedd6bea2dcdf2d64471e1b5c6\"\ndependencies = [\"anyhow\", \"cranelift-codegen\", \"cranelift-entity\", \"cranelift-frontend\", \"cranelift-native\", \"cranelift-wasm\", \"gimli 0.26.2\", \"log\", \"object 0.29.0\", \"target-lexicon\", \"thiserror\", \"wasmparser\", \"wasmtime-environ\"]\n\n[[package]]\nname = \"wasmtime-environ\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ebb881c61f4f627b5d45c54e629724974f8a8890d455bcbe634330cc27309644\"\ndependencies = [\"anyhow\", \"cranelift-entity\", \"gimli 0.26.2\", \"indexmap\", \"log\", \"object 0.29.0\", \"serde\", \"target-lexicon\", \"thiserror\", \"wasmparser\", \"wasmtime-types\"]\n\n[[package]]\nname = \"wasmtime-jit\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1985c628011fe26adf5e23a5301bdc79b245e0e338f14bb58b39e4e25e4d8681\"\ndependencies = [\"addr2line 0.17.0\", \"anyhow\", \"bincode\", \"cfg-if\", \"cpp_demangle\", \"gimli 0.26.2\", \"log\", \"object 0.29.0\", \"rustc-demangle\", \"rustix 0.35.13\", \"serde\", \"target-lexicon\", \"thiserror\", \"wasmtime-environ\", \"wasmtime-jit-debug\", \"wasmtime-runtime\", \"windows-sys 0.36.1\"]\n\n[[package]]\nname = \"wasmtime-jit-debug\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f671b588486f5ccec8c5a3dba6b4c07eac2e66ab8c60e6f4e53717c77f709731\"\ndependencies = [\"object 0.29.0\", \"once_cell\", \"rustix 0.35.13\"]\n\n[[package]]\nname = \"wasmtime-runtime\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ee8f92ad4b61736339c29361da85769ebc200f184361959d1792832e592a1afd\"\ndependencies = [\"anyhow\", \"cc\", \"cfg-if\", \"indexmap\", \"libc\", \"log\", \"mach\", \"memfd\", \"memoffset 0.6.5\", \"paste\", \"rand 0.8.5\", \"rustix 0.35.13\", \"thiserror\", \"wasmtime-asm-macros\", \"wasmtime-environ\", \"wasmtime-jit-debug\", \"windows-sys 0.36.1\"]\n\n[[package]]\nname = \"wasmtime-types\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d23d61cb4c46e837b431196dd06abb11731541021916d03476a178b54dc07aeb\"\ndependencies = [\"cranelift-entity\", \"serde\", \"thiserror\", \"wasmparser\"]\n\n[[package]]\nname = \"web-sys\"\nversion = \"0.3.61\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97\"\ndependencies = [\"js-sys\", \"wasm-bindgen\"]\n\n[[package]]\nname = \"webpki\"\nversion = \"0.21.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea\"\ndependencies = [\"ring\", \"untrusted\"]\n\n[[package]]\nname = \"webpki\"\nversion = \"0.22.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd\"\ndependencies = [\"ring\", \"untrusted\"]\n\n[[package]]\nname = \"webpki-roots\"\nversion = \"0.22.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87\"\ndependencies = [\"webpki 0.22.0\"]\n\n[[package]]\nname = \"webrtc\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb\"\ndependencies = [\"arc-swap\", \"async-trait\", \"bytes\", \"hex\", \"interceptor\", \"lazy_static\", \"log\", \"rand 0.8.5\", \"rcgen 0.9.3\", \"regex\", \"ring\", \"rtcp\", \"rtp\", \"rustls 0.19.1\", \"sdp\", \"serde\", \"serde_json\", \"sha2 0.10.6\", \"stun\", \"thiserror\", \"time 0.3.17\", \"tokio\", \"turn\", \"url\", \"waitgroup\", \"webrtc-data\", \"webrtc-dtls\", \"webrtc-ice\", \"webrtc-mdns\", \"webrtc-media\", \"webrtc-sctp\", \"webrtc-srtp\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-data\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100\"\ndependencies = [\"bytes\", \"derive_builder\", \"log\", \"thiserror\", \"tokio\", \"webrtc-sctp\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-dtls\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7021987ae0a2ed6c8cd33f68e98e49bb6e74ffe9543310267b48a1bbe3900e5f\"\ndependencies = [\"aes 0.6.0\", \"aes-gcm 0.8.0\", \"async-trait\", \"bincode\", \"block-modes\", \"byteorder\", \"ccm\", \"curve25519-dalek 3.2.0\", \"der-parser 8.1.0\", \"elliptic-curve\", \"hkdf\", \"hmac 0.10.1\", \"log\", \"oid-registry 0.6.1\", \"p256\", \"p384\", \"rand 0.8.5\", \"rand_core 0.6.4\", \"rcgen 0.9.3\", \"ring\", \"rustls 0.19.1\", \"sec1\", \"serde\", \"sha-1\", \"sha2 0.9.9\", \"signature\", \"subtle\", \"thiserror\", \"tokio\", \"webpki 0.21.4\", \"webrtc-util\", \"x25519-dalek 2.0.0-pre.1\", \"x509-parser 0.13.2\"]\n\n[[package]]\nname = \"webrtc-ice\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"494483fbb2f5492620871fdc78b084aed8807377f6e3fe88b2e49f0a9c9c41d7\"\ndependencies = [\"arc-swap\", \"async-trait\", \"crc\", \"log\", \"rand 0.8.5\", \"serde\", \"serde_json\", \"stun\", \"thiserror\", \"tokio\", \"turn\", \"url\", \"uuid\", \"waitgroup\", \"webrtc-mdns\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-mdns\"\nversion = \"0.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106\"\ndependencies = [\"log\", \"socket2\", \"thiserror\", \"tokio\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-media\"\nversion = \"0.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ee2a3c157a040324e5049bcbd644ffc9079e6738fa2cfab2bcff64e5cc4c00d7\"\ndependencies = [\"byteorder\", \"bytes\", \"derive_builder\", \"displaydoc\", \"rand 0.8.5\", \"rtp\", \"thiserror\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-sctp\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0\"\ndependencies = [\"arc-swap\", \"async-trait\", \"bytes\", \"crc\", \"log\", \"rand 0.8.5\", \"thiserror\", \"tokio\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-srtp\"\nversion = \"0.9.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5\"\ndependencies = [\"aead 0.4.3\", \"aes 0.7.5\", \"aes-gcm 0.9.4\", \"async-trait\", \"byteorder\", \"bytes\", \"ctr 0.8.0\", \"hmac 0.11.0\", \"log\", \"rtcp\", \"rtp\", \"sha-1\", \"subtle\", \"thiserror\", \"tokio\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-util\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87\"\ndependencies = [\"async-trait\", \"bitflags\", \"bytes\", \"cc\", \"ipnet\", \"lazy_static\", \"libc\", \"log\", \"nix\", \"rand 0.8.5\", \"thiserror\", \"tokio\", \"winapi\"]\n\n[[package]]\nname = \"wepoll-ffi\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb\"\ndependencies = [\"cc\"]\n\n[[package]]\nname = \"which\"\nversion = \"4.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269\"\ndependencies = [\"either\", \"libc\", \"once_cell\"]\n\n[[package]]\nname = \"widestring\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983\"\n\n[[package]]\nname = \"winapi\"\nversion = \"0.3.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419\"\ndependencies = [\"winapi-i686-pc-windows-gnu\", \"winapi-x86_64-pc-windows-gnu\"]\n\n[[package]]\nname = \"winapi-i686-pc-windows-gnu\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6\"\n\n[[package]]\nname = \"winapi-util\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178\"\ndependencies = [\"winapi\"]\n\n[[package]]\nname = \"winapi-x86_64-pc-windows-gnu\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f\"\n\n[[package]]\nname = \"windows\"\nversion = \"0.34.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f\"\ndependencies = [\"windows_aarch64_msvc 0.34.0\", \"windows_i686_gnu 0.34.0\", \"windows_i686_msvc 0.34.0\", \"windows_x86_64_gnu 0.34.0\", \"windows_x86_64_msvc 0.34.0\"]\n\n[[package]]\nname = \"windows-sys\"\nversion = \"0.36.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2\"\ndependencies = [\"windows_aarch64_msvc 0.36.1\", \"windows_i686_gnu 0.36.1\", \"windows_i686_msvc 0.36.1\", \"windows_x86_64_gnu 0.36.1\", \"windows_x86_64_msvc 0.36.1\"]\n\n[[package]]\nname = \"windows-sys\"\nversion = \"0.42.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7\"\ndependencies = [\"windows_aarch64_gnullvm\", \"windows_aarch64_msvc 0.42.1\", \"windows_i686_gnu 0.42.1\", \"windows_i686_msvc 0.42.1\", \"windows_x86_64_gnu 0.42.1\", \"windows_x86_64_gnullvm\", \"windows_x86_64_msvc 0.42.1\"]\n\n[[package]]\nname = \"windows-sys\"\nversion = \"0.45.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0\"\ndependencies = [\"windows-targets\"]\n\n[[package]]\nname = \"windows-targets\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7\"\ndependencies = [\"windows_aarch64_gnullvm\", \"windows_aarch64_msvc 0.42.1\", \"windows_i686_gnu 0.42.1\", \"windows_i686_msvc 0.42.1\", \"windows_x86_64_gnu 0.42.1\", \"windows_x86_64_gnullvm\", \"windows_x86_64_msvc 0.42.1\"]\n\n[[package]]\nname = \"windows_aarch64_gnullvm\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608\"\n\n[[package]]\nname = \"windows_aarch64_msvc\"\nversion = \"0.34.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d\"\n\n[[package]]\nname = \"windows_aarch64_msvc\"\nversion = \"0.36.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47\"\n\n[[package]]\nname = \"windows_aarch64_msvc\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7\"\n\n[[package]]\nname = \"windows_i686_gnu\"\nversion = \"0.34.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed\"\n\n[[package]]\nname = \"windows_i686_gnu\"\nversion = \"0.36.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6\"\n\n[[package]]\nname = \"windows_i686_gnu\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640\"\n\n[[package]]\nname = \"windows_i686_msvc\"\nversion = \"0.34.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956\"\n\n[[package]]\nname = \"windows_i686_msvc\"\nversion = \"0.36.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024\"\n\n[[package]]\nname = \"windows_i686_msvc\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605\"\n\n[[package]]\nname = \"windows_x86_64_gnu\"\nversion = \"0.34.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4\"\n\n[[package]]\nname = \"windows_x86_64_gnu\"\nversion = \"0.36.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1\"\n\n[[package]]\nname = \"windows_x86_64_gnu\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45\"\n\n[[package]]\nname = \"windows_x86_64_gnullvm\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463\"\n\n[[package]]\nname = \"windows_x86_64_msvc\"\nversion = \"0.34.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9\"\n\n[[package]]\nname = \"windows_x86_64_msvc\"\nversion = \"0.36.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680\"\n\n[[package]]\nname = \"windows_x86_64_msvc\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd\"\n\n[[package]]\nname = \"winreg\"\nversion = \"0.10.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d\"\ndependencies = [\"winapi\"]\n\n[[package]]\nname = \"wyz\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed\"\ndependencies = [\"tap\"]\n\n[[package]]\nname = \"x25519-dalek\"\nversion = \"1.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f\"\ndependencies = [\"curve25519-dalek 3.2.0\", \"rand_core 0.5.1\", \"zeroize\"]\n\n[[package]]\nname = \"x25519-dalek\"\nversion = \"2.0.0-pre.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df\"\ndependencies = [\"curve25519-dalek 3.2.0\", \"rand_core 0.6.4\", \"zeroize\"]\n\n[[package]]\nname = \"x509-parser\"\nversion = \"0.13.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c\"\ndependencies = [\"asn1-rs 0.3.1\", \"base64 0.13.1\", \"data-encoding\", \"der-parser 24\", \"lazy_static\", \"nom\", \"oid-registry 0.4.0\", \"ring\", \"rusticata-macros\", \"thiserror\", \"time 0.3.17\"]\n\n[[package]]\nname = \"x509-parser\"\nversion = \"0.14.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8\"\ndependencies = [\"asn1-rs 0.5.1\", \"base64 0.13.1\", \"data-encoding\", \"der-parser 8.1.0\", \"lazy_static\", \"nom\", \"oid-registry 0.6.1\", \"rusticata-macros\", \"thiserror\", \"time 0.3.17\"]\n\n[[package]]\nname = \"yamux\"\nversion = \"0.10.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5\"\ndependencies = [\"futures\", \"log\", \"nohash-hasher\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"static_assertions\"]\n\n[[package]]\nname = \"yasna\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4\"\ndependencies = [\"time 0.3.17\"]\n\n[[package]]\nname = \"zeroize\"\nversion = \"1.5.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f\"\ndependencies = [\"zeroize_derive\"]\n\n[[package]]\nname = \"zeroize_derive\"\nversion = \"1.3.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\", \"synstructure\"]\n\n[[package]]\nname = \"zstd\"\nversion = \"0.11.2+zstd.1.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4\"\ndependencies = [\"zstd-safe\"]\n\n[[package]]\nname = \"zstd-safe\"\nversion = \"5.0.2+zstd.1.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db\"\ndependencies = [\"libc\", \"zstd-sys\"]\n\n[[package]]\nname = \"zstd-sys\"\nversion = \"2.0.6+zstd.1.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"68a3f9792c0c3dc6c165840a75f47ae1f4da402c2d006881129579f6597e801b\"\ndependencies = [\"cc\", \"libc\", \"pkg-config\"]\n" - } -} \ No newline at end of file +{"skeleton":{"manifests":[{"relative_path":"Cargo.toml","contents":"[workspace]\nmembers = [\"node\", \"pallets/subtensor\", \"runtime\"]\n[profile.release]\npanic = \"unwind\"\n\n[profile.release.package]\n\n[profile.test]\nopt-level = 3\n\n[profile.test.package]\n"},{"relative_path":"node/Cargo.toml","contents":"bench = []\ntest = []\nexample = []\n\n[[bin]]\nname = \"node-subtensor\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nrequired-features = []\n\n[package]\nname = \"node-subtensor\"\nedition = \"2021\"\nversion = \"0.0.1\"\nbuild = \"build.rs\"\nauthors = [\"Substrate DevHub \"]\ndescription = \"A fresh FRAME-based Substrate node, ready for hacking.\"\nhomepage = \"https://substrate.io/\"\nlicense = \"Unlicense\"\nrepository = \"https://github.com/opentensor/subtensor\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\npublish = false\n[package.metadata.docs.rs]\ntargets = [\"x86_64-unknown-linux-gnu\"]\n\n[dependencies]\nmemmap2 = \"0.5.0\"\nserde_json = \"1.0.85\"\n\n[dependencies.clap]\nversion = \"4.0.9\"\nfeatures = [\"derive\"]\n\n[dependencies.frame-benchmarking]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.frame-benchmarking-cli]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.frame-system]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.futures]\nversion = \"0.3.21\"\nfeatures = [\"thread-pool\"]\n\n[dependencies.jsonrpsee]\nversion = \"0.16.2\"\nfeatures = [\"server\"]\n\n[dependencies.node-subtensor-runtime]\nversion = \"0.0.1\"\npath = \"../runtime\"\n\n[dependencies.pallet-transaction-payment]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.pallet-transaction-payment-rpc]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-basic-authorship]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-cli]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-client-api]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-consensus]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-consensus-aura]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-executor]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-finality-grandpa]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-keystore]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-rpc]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-rpc-api]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-service]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-telemetry]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-transaction-pool]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sc-transaction-pool-api]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.serde]\nversion = \"1.0.145\"\nfeatures = [\"derive\"]\n\n[dependencies.sp-api]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sp-block-builder]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sp-blockchain]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sp-consensus]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sp-consensus-aura]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sp-core]\nversion = \"7.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sp-finality-grandpa]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sp-inherents]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sp-io]\nversion = \"7.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sp-keyring]\nversion = \"7.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sp-runtime]\nversion = \"7.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.sp-timestamp]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.substrate-frame-rpc-system]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[dependencies.subtensor-custom-rpc]\npath = \"../pallets/subtensor/rpc\"\n\n[dependencies.subtensor-custom-rpc-runtime-api]\npath = \"../pallets/subtensor/runtime-api\"\n\n[dependencies.try-runtime-cli]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\noptional = true\n[build-dependencies.substrate-build-script-utils]\nversion = \"3.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\n\n[features]\ndefault = []\nruntime-benchmarks = [\"node-subtensor-runtime/runtime-benchmarks\", \"frame-benchmarking/runtime-benchmarks\", \"frame-benchmarking-cli/runtime-benchmarks\"]\ntry-runtime = [\"node-subtensor-runtime/try-runtime\", \"try-runtime-cli/try-runtime\"]\n\n[lib]\npath = \"src/lib.rs\"\nname = \"node_subtensor\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\ncrate-type = [\"rlib\"]\n"},{"relative_path":"pallets/subtensor/Cargo.toml","contents":"bin = []\nbench = []\nexample = []\n\n[[test]]\npath = \"tests/block_step.rs\"\nname = \"block_step\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/difficulty.rs\"\nname = \"difficulty\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/epoch.rs\"\nname = \"epoch\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/mock.rs\"\nname = \"mock\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/networks.rs\"\nname = \"networks\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/registration.rs\"\nname = \"registration\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/serving.rs\"\nname = \"serving\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/staking.rs\"\nname = \"staking\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/sudo.rs\"\nname = \"sudo\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[[test]]\npath = \"tests/weights.rs\"\nname = \"weights\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\n\n[package]\nname = \"pallet-subtensor\"\nedition = \"2021\"\nversion = \"0.0.1\"\nauthors = [\"Bittensor Nucleus Team\"]\ndescription = \"FRAME pallet for runtime logic of Subtensor Blockchain.\"\nhomepage = \"https://bittensor.com\"\nlicense = \"Unlicense\"\nrepository = \"https://github.com/opentensor/subtensor\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\npublish = false\n[package.metadata.docs.rs]\ntargets = [\"x86_64-unknown-linux-gnu\"]\n[dependencies.codec]\nversion = \"3.0.0\"\nfeatures = [\"derive\"]\ndefault-features = false\npackage = \"parity-scale-codec\"\n\n[dependencies.frame-benchmarking]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\noptional = true\ndefault-features = false\n\n[dependencies.frame-support]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.frame-system]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.log]\nversion = \"0.4.14\"\ndefault-features = false\n\n[dependencies.ndarray]\nversion = \"0.15.0\"\ndefault-features = false\n\n[dependencies.pallet-balances]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.pallet-transaction-payment]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.scale-info]\nversion = \"2.1.1\"\nfeatures = [\"derive\"]\ndefault-features = false\n\n[dependencies.serde]\nversion = \"1.0.132\"\nfeatures = [\"derive\"]\ndefault-features = false\n\n[dependencies.serde-tuple-vec-map]\nversion = \"1.0.1\"\ndefault-features = false\n\n[dependencies.serde_bytes]\nversion = \"0.11.8\"\nfeatures = [\"alloc\"]\ndefault-features = false\n\n[dependencies.serde_with]\nversion = \"=2.0.0\"\nfeatures = [\"macros\"]\ndefault-features = false\n\n[dependencies.sp-core]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-io]\nversion = \"7.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-runtime]\nversion = \"7.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-std]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.substrate-fixed]\ngit = \"https://github.com/encointer/substrate-fixed.git\"\ntag = \"v0.5.9\"\n\n[dev-dependencies]\nrand = \"0.8\"\n\n[dev-dependencies.pallet-balances]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v0.9.39\"\nfeatures = [\"std\"]\ndefault-features = false\n\n[dev-dependencies.parity-util-mem]\nversion = \"0.11.0\"\nfeatures = [\"primitive-types\"]\n\n[dev-dependencies.sp-core]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dev-dependencies.sp-tracing]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dev-dependencies.sp-version]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[features]\ndefault = [\"std\"]\nruntime-benchmarks = [\"frame-benchmarking/runtime-benchmarks\"]\nstd = [\"codec/std\", \"frame-benchmarking/std\", \"frame-support/std\", \"frame-system/std\", \"scale-info/std\"]\ntry-runtime = [\"frame-support/try-runtime\"]\n\n[lib]\npath = \"src/lib.rs\"\nname = \"pallet_subtensor\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\ncrate-type = [\"rlib\"]\n"},{"relative_path":"pallets/subtensor/rpc/Cargo.toml","contents":"bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"subtensor-custom-rpc\"\nedition = \"2021\"\nversion = \"0.0.1\"\nauthors = [\"Cameron Fairchild \"]\ndescription = \"A pallet that adds custom RPC calls to subtensor\"\nlicense = \"MIT\"\nrepository = \"https://github.com/opentensor/subtensor\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\npublish = false\n[dependencies.codec]\nversion = \"3.0.0\"\nfeatures = [\"derive\"]\ndefault-features = false\npackage = \"parity-scale-codec\"\n\n[dependencies.jsonrpsee]\nversion = \"0.16.2\"\nfeatures = [\"client-core\", \"server\", \"macros\"]\ndefault-features = false\n\n[dependencies.pallet-subtensor]\nversion = \"0.0.1\"\npath = \"../../subtensor\"\ndefault-features = false\n\n[dependencies.serde]\nversion = \"1.0.132\"\nfeatures = [\"derive\"]\ndefault-features = false\n\n[dependencies.sp-api]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-blockchain]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-rpc]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-runtime]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.subtensor-custom-rpc-runtime-api]\nversion = \"0.0.1\"\npath = \"../runtime-api\"\ndefault-features = false\n\n[features]\ndefault = [\"std\"]\nstd = [\"sp-api/std\", \"sp-runtime/std\", \"subtensor-custom-rpc-runtime-api/std\"]\n\n[lib]\npath = \"src/lib.rs\"\nname = \"subtensor_custom_rpc\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\ncrate-type = [\"rlib\"]\n"},{"relative_path":"pallets/subtensor/runtime-api/Cargo.toml","contents":"bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"subtensor-custom-rpc-runtime-api\"\nedition = \"2021\"\nversion = \"0.0.1\"\nauthors = [\"Cameron Fairchild \"]\ndescription = \"A pallet that adds a custom runtime API to Subtensor\"\nlicense = \"MIT\"\nrepository = \"https://github.com/opentensor/subtensor\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\npublish = false\n[dependencies.frame-support]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.pallet-subtensor]\nversion = \"0.0.1\"\npath = \"../../subtensor\"\ndefault-features = false\n\n[dependencies.serde]\nversion = \"1.0.132\"\nfeatures = [\"derive\"]\ndefault-features = false\n\n[dependencies.sp-api]\ngit = \"https://github.com/paritytech/substrate\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[features]\ndefault = [\"std\"]\nstd = [\"sp-api/std\"]\n\n[lib]\npath = \"src/lib.rs\"\nname = \"subtensor_custom_rpc_runtime_api\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\ncrate-type = [\"rlib\"]\n"},{"relative_path":"runtime/Cargo.toml","contents":"bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"node-subtensor-runtime\"\nedition = \"2021\"\nversion = \"0.0.1\"\nbuild = \"build.rs\"\nauthors = [\"Substrate DevHub \"]\ndescription = \"A fresh FRAME-based Substrate node, ready for hacking.\"\nhomepage = \"https://substrate.io/\"\nlicense = \"Unlicense\"\nrepository = \"https://github.com/substrate-developer-hub/substrate-node-subtensor/\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\npublish = false\n[package.metadata.docs.rs]\ntargets = [\"x86_64-unknown-linux-gnu\"]\n\n[dependencies]\nsmallvec = \"1.6.1\"\n\n[dependencies.codec]\nversion = \"3.0.0\"\nfeatures = [\"derive\"]\ndefault-features = false\npackage = \"parity-scale-codec\"\n\n[dependencies.frame-benchmarking]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\noptional = true\ndefault-features = false\n\n[dependencies.frame-executive]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.frame-support]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.frame-system]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.frame-system-benchmarking]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\noptional = true\ndefault-features = false\n\n[dependencies.frame-system-rpc-runtime-api]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.frame-try-runtime]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\noptional = true\ndefault-features = false\n\n[dependencies.pallet-aura]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.pallet-balances]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.pallet-grandpa]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.pallet-randomness-collective-flip]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.pallet-subtensor]\nversion = \"0.0.1\"\npath = \"../pallets/subtensor\"\ndefault-features = false\n\n[dependencies.pallet-sudo]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.pallet-timestamp]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.pallet-transaction-payment]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.pallet-transaction-payment-rpc-runtime-api]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.scale-info]\nversion = \"2.1.1\"\nfeatures = [\"derive\"]\ndefault-features = false\n\n[dependencies.sp-api]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-block-builder]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-consensus-aura]\nversion = \"0.10.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-core]\nversion = \"7.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-inherents]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-offchain]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-runtime]\nversion = \"7.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-session]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-std]\nversion = \"5.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-transaction-pool]\nversion = \"4.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.sp-version]\nversion = \"5.0.0\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\ndefault-features = false\n\n[dependencies.subtensor-custom-rpc-runtime-api]\nversion = \"0.0.1\"\npath = \"../pallets/subtensor/runtime-api\"\ndefault-features = false\n[build-dependencies.substrate-wasm-builder]\nversion = \"5.0.0-dev\"\ngit = \"https://github.com/paritytech/substrate.git\"\nbranch = \"polkadot-v0.9.39\"\noptional = true\n\n[features]\ndefault = [\"std\"]\nruntime-benchmarks = [\"frame-benchmarking/runtime-benchmarks\", \"frame-support/runtime-benchmarks\", \"frame-system-benchmarking/runtime-benchmarks\", \"frame-system/runtime-benchmarks\", \"pallet-balances/runtime-benchmarks\", \"pallet-grandpa/runtime-benchmarks\", \"pallet-timestamp/runtime-benchmarks\", \"sp-runtime/runtime-benchmarks\", \"pallet-subtensor/runtime-benchmarks\"]\nstd = [\"frame-try-runtime?/std\", \"frame-system-benchmarking?/std\", \"frame-benchmarking/std\", \"codec/std\", \"scale-info/std\", \"frame-executive/std\", \"frame-support/std\", \"frame-system-rpc-runtime-api/std\", \"frame-system/std\", \"frame-try-runtime/std\", \"pallet-subtensor/std\", \"pallet-aura/std\", \"pallet-balances/std\", \"pallet-grandpa/std\", \"pallet-randomness-collective-flip/std\", \"pallet-sudo/std\", \"pallet-timestamp/std\", \"pallet-transaction-payment-rpc-runtime-api/std\", \"pallet-transaction-payment/std\", \"sp-api/std\", \"sp-block-builder/std\", \"sp-consensus-aura/std\", \"sp-core/std\", \"sp-inherents/std\", \"sp-offchain/std\", \"sp-runtime/std\", \"sp-session/std\", \"sp-std/std\", \"sp-transaction-pool/std\", \"sp-version/std\", \"substrate-wasm-builder\"]\ntry-runtime = [\"frame-try-runtime/try-runtime\", \"frame-executive/try-runtime\", \"frame-system/try-runtime\", \"frame-support/try-runtime\", \"pallet-aura/try-runtime\", \"pallet-balances/try-runtime\", \"pallet-grandpa/try-runtime\", \"pallet-randomness-collective-flip/try-runtime\", \"pallet-sudo/try-runtime\", \"pallet-timestamp/try-runtime\", \"pallet-transaction-payment/try-runtime\", \"pallet-subtensor/try-runtime\"]\n\n[lib]\npath = \"src/lib.rs\"\nname = \"node_subtensor_runtime\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nedition = \"2021\"\nrequired-features = []\ncrate-type = [\"rlib\"]\n[profile.test]\nopt-level = 3\n\n[profile.test.package]\n"},{"relative_path":"target/debug/wbuild/node-subtensor-runtime/Cargo.toml","contents":"bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"node-subtensor-runtime-wasm\"\nedition = \"2021\"\nversion = \"0.0.1\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\n\n[workspace]\nmembers = []\n[dependencies.wasm-project]\npath = \"/Users/alashaabana/.bittensor/subtensorv3/runtime\"\nfeatures = [\"frame-try-runtime\", \"frame-benchmarking\"]\ndefault-features = false\npackage = \"node-subtensor-runtime\"\n\n[lib]\nname = \"node_subtensor_runtime\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nrequired-features = []\ncrate-type = [\"cdylib\"]\n[profile.release]\nlto = \"thin\"\npanic = \"abort\"\n\n[profile.release.package]\n\n[profile.dev]\npanic = \"abort\"\n\n[profile.dev.package]\n\n[profile.production]\ninherits = \"release\"\nlto = \"fat\"\ncodegen-units = 1\n\n[profile.production.package]\n"},{"relative_path":"target/debug/wbuild/node-template-runtime/Cargo.toml","contents":"bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"node-template-runtime-wasm\"\nedition = \"2021\"\nversion = \"0.0.1\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\n\n[workspace]\nmembers = []\n[dependencies.wasm-project]\npath = \"/Users/alashaabana/.bittensor/subtensorv3/runtime\"\nfeatures = [\"frame-try-runtime\"]\ndefault-features = false\npackage = \"node-template-runtime\"\n\n[lib]\nname = \"node_template_runtime\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nrequired-features = []\ncrate-type = [\"cdylib\"]\n[profile.release]\nlto = \"thin\"\npanic = \"abort\"\n\n[profile.release.package]\n\n[profile.dev]\npanic = \"abort\"\n\n[profile.dev.package]\n\n[profile.production]\ninherits = \"release\"\nlto = \"fat\"\ncodegen-units = 1\n\n[profile.production.package]\n"},{"relative_path":"target/release/wbuild/node-subtensor-runtime/Cargo.toml","contents":"bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"node-subtensor-runtime-wasm\"\nedition = \"2021\"\nversion = \"0.0.1\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\n\n[workspace]\nmembers = []\n[dependencies.wasm-project]\npath = \"/Users/alashaabana/.bittensor/subtensorv3/runtime\"\nfeatures = [\"frame-system-benchmarking\", \"frame-try-runtime\", \"frame-benchmarking\", \"runtime-benchmarks\"]\ndefault-features = false\npackage = \"node-subtensor-runtime\"\n\n[lib]\nname = \"node_subtensor_runtime\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nrequired-features = []\ncrate-type = [\"cdylib\"]\n[profile.release]\nlto = \"thin\"\npanic = \"abort\"\n\n[profile.release.package]\n\n[profile.dev]\npanic = \"abort\"\n\n[profile.dev.package]\n\n[profile.production]\ninherits = \"release\"\nlto = \"fat\"\ncodegen-units = 1\n\n[profile.production.package]\n"},{"relative_path":"target/release/wbuild/node-template-runtime/Cargo.toml","contents":"bin = []\nbench = []\ntest = []\nexample = []\n\n[package]\nname = \"node-template-runtime-wasm\"\nedition = \"2021\"\nversion = \"0.0.1\"\nautobins = true\nautoexamples = true\nautotests = true\nautobenches = true\n\n[workspace]\nmembers = []\n[dependencies.wasm-project]\npath = \"/Users/alashaabana/.bittensor/subtensorv3/runtime\"\nfeatures = [\"frame-system-benchmarking\", \"runtime-benchmarks\", \"frame-try-runtime\", \"frame-benchmarking\"]\ndefault-features = false\npackage = \"node-template-runtime\"\n\n[lib]\nname = \"node_template_runtime\"\ntest = true\ndoctest = true\nbench = true\ndoc = true\nplugin = false\nproc-macro = false\nharness = true\nrequired-features = []\ncrate-type = [\"cdylib\"]\n[profile.release]\nlto = \"thin\"\npanic = \"abort\"\n\n[profile.release.package]\n\n[profile.dev]\npanic = \"abort\"\n\n[profile.dev.package]\n\n[profile.production]\ninherits = \"release\"\nlto = \"fat\"\ncodegen-units = 1\n\n[profile.production.package]\n"}],"config_file":null,"lock_file":"version = 3\n\n[[package]]\nname = \"Inflector\"\nversion = \"0.11.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3\"\ndependencies = [\"lazy_static\", \"regex\"]\n\n[[package]]\nname = \"addr2line\"\nversion = \"0.17.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b\"\ndependencies = [\"gimli 0.26.2\"]\n\n[[package]]\nname = \"addr2line\"\nversion = \"0.19.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97\"\ndependencies = [\"gimli 0.27.1\"]\n\n[[package]]\nname = \"adler\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe\"\n\n[[package]]\nname = \"aead\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331\"\ndependencies = [\"generic-array 0.14.6\"]\n\n[[package]]\nname = \"aead\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877\"\ndependencies = [\"generic-array 0.14.6\", \"rand_core 0.6.4\"]\n\n[[package]]\nname = \"aes\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561\"\ndependencies = [\"aes-soft\", \"aesni\", \"cipher 0.2.5\"]\n\n[[package]]\nname = \"aes\"\nversion = \"0.7.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8\"\ndependencies = [\"cfg-if\", \"cipher 0.3.0\", \"cpufeatures\", \"opaque-debug 0.3.0\"]\n\n[[package]]\nname = \"aes-gcm\"\nversion = \"0.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da\"\ndependencies = [\"aead 0.3.2\", \"aes 0.6.0\", \"cipher 0.2.5\", \"ctr 0.6.0\", \"ghash 0.3.1\", \"subtle\"]\n\n[[package]]\nname = \"aes-gcm\"\nversion = \"0.9.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6\"\ndependencies = [\"aead 0.4.3\", \"aes 0.7.5\", \"cipher 0.3.0\", \"ctr 0.8.0\", \"ghash 0.4.4\", \"subtle\"]\n\n[[package]]\nname = \"aes-soft\"\nversion = \"0.6.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072\"\ndependencies = [\"cipher 0.2.5\", \"opaque-debug 0.3.0\"]\n\n[[package]]\nname = \"aesni\"\nversion = \"0.10.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce\"\ndependencies = [\"cipher 0.2.5\", \"opaque-debug 0.3.0\"]\n\n[[package]]\nname = \"ahash\"\nversion = \"0.7.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47\"\ndependencies = [\"getrandom 0.2.8\", \"once_cell\", \"version_check\"]\n\n[[package]]\nname = \"aho-corasick\"\nversion = \"0.7.20\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac\"\ndependencies = [\"memchr\"]\n\n[[package]]\nname = \"android_system_properties\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"ansi_term\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2\"\ndependencies = [\"winapi\"]\n\n[[package]]\nname = \"anyhow\"\nversion = \"1.0.69\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800\"\n\n[[package]]\nname = \"approx\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6\"\ndependencies = [\"num-traits\"]\n\n[[package]]\nname = \"arc-swap\"\nversion = \"1.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6\"\n\n[[package]]\nname = \"array-bytes\"\nversion = \"4.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6\"\n\n[[package]]\nname = \"arrayref\"\nversion = \"0.3.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544\"\n\n[[package]]\nname = \"arrayvec\"\nversion = \"0.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b\"\n\n[[package]]\nname = \"arrayvec\"\nversion = \"0.7.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6\"\n\n[[package]]\nname = \"asn1-rs\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33\"\ndependencies = [\"asn1-rs-derive 0.1.0\", \"asn1-rs-impl\", \"displaydoc\", \"nom\", \"num-traits\", \"rusticata-macros\", \"thiserror\", \"time 0.3.17\"]\n\n[[package]]\nname = \"asn1-rs\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4\"\ndependencies = [\"asn1-rs-derive 0.4.0\", \"asn1-rs-impl\", \"displaydoc\", \"nom\", \"num-traits\", \"rusticata-macros\", \"thiserror\", \"time 0.3.17\"]\n\n[[package]]\nname = \"asn1-rs-derive\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\", \"synstructure\"]\n\n[[package]]\nname = \"asn1-rs-derive\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\", \"synstructure\"]\n\n[[package]]\nname = \"asn1-rs-impl\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"asn1_der\"\nversion = \"0.7.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21\"\n\n[[package]]\nname = \"async-io\"\nversion = \"1.12.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794\"\ndependencies = [\"async-lock\", \"autocfg\", \"concurrent-queue\", \"futures-lite\", \"libc\", \"log\", \"parking\", \"polling\", \"slab\", \"socket2\", \"waker-fn\", \"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"async-lock\"\nversion = \"2.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685\"\ndependencies = [\"event-listener\", \"futures-lite\"]\n\n[[package]]\nname = \"async-trait\"\nversion = \"0.1.64\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"asynchronous-codec\"\nversion = \"0.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"06a0daa378f5fd10634e44b0a29b2a87b890657658e072a30d6f26e57ddee182\"\ndependencies = [\"bytes\", \"futures-sink\", \"futures-util\", \"memchr\", \"pin-project-lite 0.2.9\"]\n\n[[package]]\nname = \"atomic-waker\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599\"\n\n[[package]]\nname = \"atty\"\nversion = \"0.2.14\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8\"\ndependencies = [\"hermit-abi 0.1.19\", \"libc\", \"winapi\"]\n\n[[package]]\nname = \"autocfg\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa\"\n\n[[package]]\nname = \"backtrace\"\nversion = \"0.3.67\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca\"\ndependencies = [\"addr2line 0.19.0\", \"cc\", \"cfg-if\", \"libc\", \"miniz_oxide\", \"object 0.30.3\", \"rustc-demangle\"]\n\n[[package]]\nname = \"base-x\"\nversion = \"0.2.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270\"\n\n[[package]]\nname = \"base16ct\"\nversion = \"0.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce\"\n\n[[package]]\nname = \"base58\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581\"\n\n[[package]]\nname = \"base64\"\nversion = \"0.13.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8\"\n\n[[package]]\nname = \"base64\"\nversion = \"0.21.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a\"\n\n[[package]]\nname = \"base64ct\"\nversion = \"1.5.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf\"\n\n[[package]]\nname = \"beef\"\nversion = \"0.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"bincode\"\nversion = \"1.3.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"bindgen\"\nversion = \"0.60.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6\"\ndependencies = [\"bitflags\", \"cexpr\", \"clang-sys\", \"lazy_static\", \"lazycell\", \"peeking_take_while\", \"proc-macro2\", \"quote\", \"regex\", \"rustc-hash\", \"shlex\"]\n\n[[package]]\nname = \"bitflags\"\nversion = \"1.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a\"\n\n[[package]]\nname = \"bitvec\"\nversion = \"1.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c\"\ndependencies = [\"funty\", \"radium\", \"tap\", \"wyz\"]\n\n[[package]]\nname = \"blake2\"\nversion = \"0.10.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe\"\ndependencies = [\"digest 0.10.6\"]\n\n[[package]]\nname = \"blake2b_simd\"\nversion = \"1.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"72936ee4afc7f8f736d1c38383b56480b5497b4617b4a77bdbf1d2ababc76127\"\ndependencies = [\"arrayref\", \"arrayvec 0.7.2\", \"constant_time_eq 0.1.5\"]\n\n[[package]]\nname = \"blake2s_simd\"\nversion = \"1.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"db539cc2b5f6003621f1cd9ef92d7ded8ea5232c7de0f9faa2de251cd98730d4\"\ndependencies = [\"arrayref\", \"arrayvec 0.7.2\", \"constant_time_eq 0.1.5\"]\n\n[[package]]\nname = \"blake3\"\nversion = \"1.3.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef\"\ndependencies = [\"arrayref\", \"arrayvec 0.7.2\", \"cc\", \"cfg-if\", \"constant_time_eq 0.2.4\"]\n\n[[package]]\nname = \"block-buffer\"\nversion = \"0.7.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b\"\ndependencies = [\"block-padding 0.1.5\", \"byte-tools\", \"byteorder\", \"generic-array 0.12.4\"]\n\n[[package]]\nname = \"block-buffer\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4\"\ndependencies = [\"generic-array 0.14.6\"]\n\n[[package]]\nname = \"block-buffer\"\nversion = \"0.10.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e\"\ndependencies = [\"generic-array 0.14.6\"]\n\n[[package]]\nname = \"block-modes\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0\"\ndependencies = [\"block-padding 0.2.1\", \"cipher 0.2.5\"]\n\n[[package]]\nname = \"block-padding\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5\"\ndependencies = [\"byte-tools\"]\n\n[[package]]\nname = \"block-padding\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae\"\n\n[[package]]\nname = \"bs58\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3\"\n\n[[package]]\nname = \"bstr\"\nversion = \"1.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832\"\ndependencies = [\"memchr\", \"serde\"]\n\n[[package]]\nname = \"build-helper\"\nversion = \"0.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bdce191bf3fa4995ce948c8c83b4640a1745457a149e73c6db75b4ffe36aad5f\"\ndependencies = [\"semver 0.6.0\"]\n\n[[package]]\nname = \"bumpalo\"\nversion = \"3.12.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535\"\n\n[[package]]\nname = \"byte-slice-cast\"\nversion = \"1.2.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c\"\n\n[[package]]\nname = \"byte-tools\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7\"\n\n[[package]]\nname = \"byteorder\"\nversion = \"1.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610\"\n\n[[package]]\nname = \"bytes\"\nversion = \"1.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be\"\n\n[[package]]\nname = \"bzip2-sys\"\nversion = \"0.1.11+1.0.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc\"\ndependencies = [\"cc\", \"libc\", \"pkg-config\"]\n\n[[package]]\nname = \"camino\"\nversion = \"1.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"cargo-platform\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"cargo_metadata\"\nversion = \"0.14.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa\"\ndependencies = [\"camino\", \"cargo-platform\", \"semver 1.0.16\", \"serde\", \"serde_json\"]\n\n[[package]]\nname = \"cc\"\nversion = \"1.0.79\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f\"\ndependencies = [\"jobserver\"]\n\n[[package]]\nname = \"ccm\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7\"\ndependencies = [\"aead 0.3.2\", \"cipher 0.2.5\", \"subtle\"]\n\n[[package]]\nname = \"cexpr\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766\"\ndependencies = [\"nom\"]\n\n[[package]]\nname = \"cfg-expr\"\nversion = \"0.10.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db\"\ndependencies = [\"smallvec\"]\n\n[[package]]\nname = \"cfg-if\"\nversion = \"1.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd\"\n\n[[package]]\nname = \"cfg_aliases\"\nversion = \"0.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e\"\n\n[[package]]\nname = \"chacha20\"\nversion = \"0.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6\"\ndependencies = [\"cfg-if\", \"cipher 0.3.0\", \"cpufeatures\", \"zeroize\"]\n\n[[package]]\nname = \"chacha20poly1305\"\nversion = \"0.9.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5\"\ndependencies = [\"aead 0.4.3\", \"chacha20\", \"cipher 0.3.0\", \"poly1305\", \"zeroize\"]\n\n[[package]]\nname = \"chrono\"\nversion = \"0.4.23\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f\"\ndependencies = [\"iana-time-zone\", \"js-sys\", \"num-integer\", \"num-traits\", \"time 0.1.45\", \"wasm-bindgen\", \"winapi\"]\n\n[[package]]\nname = \"cid\"\nversion = \"0.8.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2\"\ndependencies = [\"core2\", \"multibase\", \"multihash\", \"serde\", \"unsigned-varint\"]\n\n[[package]]\nname = \"cipher\"\nversion = \"0.2.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801\"\ndependencies = [\"generic-array 0.14.6\"]\n\n[[package]]\nname = \"cipher\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7\"\ndependencies = [\"generic-array 0.14.6\"]\n\n[[package]]\nname = \"clang-sys\"\nversion = \"1.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3\"\ndependencies = [\"glob\", \"libc\", \"libloading\"]\n\n[[package]]\nname = \"clap\"\nversion = \"4.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76\"\ndependencies = [\"bitflags\", \"clap_derive\", \"clap_lex\", \"is-terminal\", \"once_cell\", \"strsim\", \"termcolor\"]\n\n[[package]]\nname = \"clap_derive\"\nversion = \"4.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8\"\ndependencies = [\"heck\", \"proc-macro-error\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"clap_lex\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade\"\ndependencies = [\"os_str_bytes\"]\n\n[[package]]\nname = \"codespan-reporting\"\nversion = \"0.11.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e\"\ndependencies = [\"termcolor\", \"unicode-width\"]\n\n[[package]]\nname = \"comfy-table\"\nversion = \"6.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d\"\ndependencies = [\"strum\", \"strum_macros\", \"unicode-width\"]\n\n[[package]]\nname = \"concurrent-queue\"\nversion = \"2.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e\"\ndependencies = [\"crossbeam-utils\"]\n\n[[package]]\nname = \"const-oid\"\nversion = \"0.9.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cec318a675afcb6a1ea1d4340e2d377e56e47c266f28043ceccbf4412ddfdd3b\"\n\n[[package]]\nname = \"constant_time_eq\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc\"\n\n[[package]]\nname = \"constant_time_eq\"\nversion = \"0.2.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279\"\n\n[[package]]\nname = \"core-foundation\"\nversion = \"0.9.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146\"\ndependencies = [\"core-foundation-sys\", \"libc\"]\n\n[[package]]\nname = \"core-foundation-sys\"\nversion = \"0.8.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc\"\n\n[[package]]\nname = \"core2\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505\"\ndependencies = [\"memchr\"]\n\n[[package]]\nname = \"cpp_demangle\"\nversion = \"0.3.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f\"\ndependencies = [\"cfg-if\"]\n\n[[package]]\nname = \"cpufeatures\"\nversion = \"0.2.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"cpuid-bool\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba\"\n\n[[package]]\nname = \"cranelift-bforest\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"52056f6d0584484b57fa6c1a65c1fcb15f3780d8b6a758426d9e3084169b2ddd\"\ndependencies = [\"cranelift-entity\"]\n\n[[package]]\nname = \"cranelift-codegen\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"18fed94c8770dc25d01154c3ffa64ed0b3ba9d583736f305fed7beebe5d9cf74\"\ndependencies = [\"arrayvec 0.7.2\", \"bumpalo\", \"cranelift-bforest\", \"cranelift-codegen-meta\", \"cranelift-codegen-shared\", \"cranelift-entity\", \"cranelift-isle\", \"gimli 0.26.2\", \"log\", \"regalloc2\", \"smallvec\", \"target-lexicon\"]\n\n[[package]]\nname = \"cranelift-codegen-meta\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1c451b81faf237d11c7e4f3165eeb6bac61112762c5cfe7b4c0fb7241474358f\"\ndependencies = [\"cranelift-codegen-shared\"]\n\n[[package]]\nname = \"cranelift-codegen-shared\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e7c940133198426d26128f08be2b40b0bd117b84771fd36798969c4d712d81fc\"\n\n[[package]]\nname = \"cranelift-entity\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"87a0f1b2fdc18776956370cf8d9b009ded3f855350c480c1c52142510961f352\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"cranelift-frontend\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"34897538b36b216cc8dd324e73263596d51b8cf610da6498322838b2546baf8a\"\ndependencies = [\"cranelift-codegen\", \"log\", \"smallvec\", \"target-lexicon\"]\n\n[[package]]\nname = \"cranelift-isle\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1b2629a569fae540f16a76b70afcc87ad7decb38dc28fa6c648ac73b51e78470\"\n\n[[package]]\nname = \"cranelift-native\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"20937dab4e14d3e225c5adfc9c7106bafd4ac669bdb43027b911ff794c6fb318\"\ndependencies = [\"cranelift-codegen\", \"libc\", \"target-lexicon\"]\n\n[[package]]\nname = \"cranelift-wasm\"\nversion = \"0.88.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"80fc2288957a94fd342a015811479de1837850924166d1f1856d8406e6f3609b\"\ndependencies = [\"cranelift-codegen\", \"cranelift-entity\", \"cranelift-frontend\", \"itertools\", \"log\", \"smallvec\", \"wasmparser\", \"wasmtime-types\"]\n\n[[package]]\nname = \"crc\"\nversion = \"3.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe\"\ndependencies = [\"crc-catalog\"]\n\n[[package]]\nname = \"crc-catalog\"\nversion = \"2.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484\"\n\n[[package]]\nname = \"crc32fast\"\nversion = \"1.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d\"\ndependencies = [\"cfg-if\"]\n\n[[package]]\nname = \"crossbeam-channel\"\nversion = \"0.5.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521\"\ndependencies = [\"cfg-if\", \"crossbeam-utils\"]\n\n[[package]]\nname = \"crossbeam-deque\"\nversion = \"0.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc\"\ndependencies = [\"cfg-if\", \"crossbeam-epoch\", \"crossbeam-utils\"]\n\n[[package]]\nname = \"crossbeam-epoch\"\nversion = \"0.9.13\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a\"\ndependencies = [\"autocfg\", \"cfg-if\", \"crossbeam-utils\", \"memoffset 0.7.1\", \"scopeguard\"]\n\n[[package]]\nname = \"crossbeam-utils\"\nversion = \"0.8.14\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f\"\ndependencies = [\"cfg-if\"]\n\n[[package]]\nname = \"crunchy\"\nversion = \"0.2.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7\"\n\n[[package]]\nname = \"crypto-bigint\"\nversion = \"0.4.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef\"\ndependencies = [\"generic-array 0.14.6\", \"rand_core 0.6.4\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"crypto-common\"\nversion = \"0.1.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3\"\ndependencies = [\"generic-array 0.14.6\", \"typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)\"]\n\n[[package]]\nname = \"crypto-mac\"\nversion = \"0.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab\"\ndependencies = [\"generic-array 0.14.6\", \"subtle\"]\n\n[[package]]\nname = \"crypto-mac\"\nversion = \"0.10.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a\"\ndependencies = [\"generic-array 0.14.6\", \"subtle\"]\n\n[[package]]\nname = \"crypto-mac\"\nversion = \"0.11.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714\"\ndependencies = [\"generic-array 0.14.6\", \"subtle\"]\n\n[[package]]\nname = \"ctr\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f\"\ndependencies = [\"cipher 0.2.5\"]\n\n[[package]]\nname = \"ctr\"\nversion = \"0.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea\"\ndependencies = [\"cipher 0.3.0\"]\n\n[[package]]\nname = \"curve25519-dalek\"\nversion = \"2.1.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216\"\ndependencies = [\"byteorder\", \"digest 0.8.1\", \"rand_core 0.5.1\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"curve25519-dalek\"\nversion = \"3.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61\"\ndependencies = [\"byteorder\", \"digest 0.9.0\", \"rand_core 0.5.1\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"curve25519-dalek\"\nversion = \"4.0.0-rc.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8da00a7a9a4eb92a0a0f8e75660926d48f0d0f3c537e455c457bcdaa1e16b1ac\"\ndependencies = [\"cfg-if\", \"fiat-crypto\", \"packed_simd_2\", \"platforms 3.0.2\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"cxx\"\nversion = \"1.0.89\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9\"\ndependencies = [\"cc\", \"cxxbridge-flags\", \"cxxbridge-macro\", \"link-cplusplus\"]\n\n[[package]]\nname = \"cxx-build\"\nversion = \"1.0.89\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d\"\ndependencies = [\"cc\", \"codespan-reporting\", \"once_cell\", \"proc-macro2\", \"quote\", \"scratch\", \"syn\"]\n\n[[package]]\nname = \"cxxbridge-flags\"\nversion = \"1.0.89\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a\"\n\n[[package]]\nname = \"cxxbridge-macro\"\nversion = \"1.0.89\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"darling\"\nversion = \"0.14.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8\"\ndependencies = [\"darling_core\", \"darling_macro\"]\n\n[[package]]\nname = \"darling_core\"\nversion = \"0.14.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb\"\ndependencies = [\"fnv\", \"ident_case\", \"proc-macro2\", \"quote\", \"strsim\", \"syn\"]\n\n[[package]]\nname = \"darling_macro\"\nversion = \"0.14.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685\"\ndependencies = [\"darling_core\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"data-encoding\"\nversion = \"2.3.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb\"\n\n[[package]]\nname = \"data-encoding-macro\"\nversion = \"0.1.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca\"\ndependencies = [\"data-encoding\", \"data-encoding-macro-internal\"]\n\n[[package]]\nname = \"data-encoding-macro-internal\"\nversion = \"0.1.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db\"\ndependencies = [\"data-encoding\", \"syn\"]\n\n[[package]]\nname = \"der\"\nversion = \"0.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de\"\ndependencies = [\"const-oid\", \"pem-rfc7468\", \"zeroize\"]\n\n[[package]]\nname = \"der-parser\"\nversion = \"7.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82\"\ndependencies = [\"asn1-rs 0.3.1\", \"displaydoc\", \"nom\", \"num-bigint\", \"num-traits\", \"rusticata-macros\"]\n\n[[package]]\nname = \"der-parser\"\nversion = \"8.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1\"\ndependencies = [\"asn1-rs 0.5.1\", \"displaydoc\", \"nom\", \"num-bigint\", \"num-traits\", \"rusticata-macros\"]\n\n[[package]]\nname = \"derive_builder\"\nversion = \"0.11.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3\"\ndependencies = [\"derive_builder_macro\"]\n\n[[package]]\nname = \"derive_builder_core\"\nversion = \"0.11.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4\"\ndependencies = [\"darling\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"derive_builder_macro\"\nversion = \"0.11.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68\"\ndependencies = [\"derive_builder_core\", \"syn\"]\n\n[[package]]\nname = \"derive_more\"\nversion = \"0.99.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"difflib\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8\"\n\n[[package]]\nname = \"digest\"\nversion = \"0.8.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5\"\ndependencies = [\"generic-array 0.12.4\"]\n\n[[package]]\nname = \"digest\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066\"\ndependencies = [\"generic-array 0.14.6\"]\n\n[[package]]\nname = \"digest\"\nversion = \"0.10.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f\"\ndependencies = [\"block-buffer 0.10.3\", \"crypto-common\", \"subtle\"]\n\n[[package]]\nname = \"directories\"\nversion = \"4.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210\"\ndependencies = [\"dirs-sys\"]\n\n[[package]]\nname = \"directories-next\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc\"\ndependencies = [\"cfg-if\", \"dirs-sys-next\"]\n\n[[package]]\nname = \"dirs-sys\"\nversion = \"0.3.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6\"\ndependencies = [\"libc\", \"redox_users\", \"winapi\"]\n\n[[package]]\nname = \"dirs-sys-next\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d\"\ndependencies = [\"libc\", \"redox_users\", \"winapi\"]\n\n[[package]]\nname = \"displaydoc\"\nversion = \"0.2.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"downcast\"\nversion = \"0.11.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1\"\n\n[[package]]\nname = \"downcast-rs\"\nversion = \"1.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650\"\n\n[[package]]\nname = \"dtoa\"\nversion = \"1.0.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313\"\n\n[[package]]\nname = \"dyn-clonable\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4\"\ndependencies = [\"dyn-clonable-impl\", \"dyn-clone\"]\n\n[[package]]\nname = \"dyn-clonable-impl\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"dyn-clone\"\nversion = \"1.0.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60\"\n\n[[package]]\nname = \"ecdsa\"\nversion = \"0.14.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c\"\ndependencies = [\"der\", \"elliptic-curve\", \"rfc6979\", \"signature\"]\n\n[[package]]\nname = \"ed25519\"\nversion = \"1.5.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7\"\ndependencies = [\"signature\"]\n\n[[package]]\nname = \"ed25519-dalek\"\nversion = \"1.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d\"\ndependencies = [\"curve25519-dalek 3.2.0\", \"ed25519\", \"rand 0.7.3\", \"serde\", \"sha2 0.9.9\", \"zeroize\"]\n\n[[package]]\nname = \"ed25519-zebra\"\nversion = \"3.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6\"\ndependencies = [\"curve25519-dalek 3.2.0\", \"hashbrown\", \"hex\", \"rand_core 0.6.4\", \"sha2 0.9.9\", \"zeroize\"]\n\n[[package]]\nname = \"either\"\nversion = \"1.8.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91\"\n\n[[package]]\nname = \"elliptic-curve\"\nversion = \"0.12.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3\"\ndependencies = [\"base16ct\", \"crypto-bigint\", \"der\", \"digest 0.10.6\", \"ff\", \"generic-array 0.14.6\", \"group\", \"hkdf\", \"pem-rfc7468\", \"pkcs8\", \"rand_core 0.6.4\", \"sec1\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"enum-as-inner\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116\"\ndependencies = [\"heck\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"env_logger\"\nversion = \"0.10.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0\"\ndependencies = [\"humantime\", \"is-terminal\", \"log\", \"regex\", \"termcolor\"]\n\n[[package]]\nname = \"environmental\"\nversion = \"1.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b\"\n\n[[package]]\nname = \"errno\"\nversion = \"0.2.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1\"\ndependencies = [\"errno-dragonfly\", \"libc\", \"winapi\"]\n\n[[package]]\nname = \"errno-dragonfly\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf\"\ndependencies = [\"cc\", \"libc\"]\n\n[[package]]\nname = \"ethbloom\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"11da94e443c60508eb62cf256243a64da87304c2802ac2528847f79d750007ef\"\ndependencies = [\"crunchy\", \"fixed-hash 0.7.0\", \"impl-rlp\", \"impl-serde 0.3.2\", \"tiny-keccak\"]\n\n[[package]]\nname = \"ethereum-types\"\nversion = \"0.13.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b2827b94c556145446fcce834ca86b7abf0c39a805883fe20e72c5bfdb5a0dc6\"\ndependencies = [\"ethbloom\", \"fixed-hash 0.7.0\", \"impl-rlp\", \"impl-serde 0.3.2\", \"primitive-types 0.11.1\", \"uint\"]\n\n[[package]]\nname = \"event-listener\"\nversion = \"2.5.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0\"\n\n[[package]]\nname = \"exit-future\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5\"\ndependencies = [\"futures\"]\n\n[[package]]\nname = \"fake-simd\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed\"\n\n[[package]]\nname = \"fallible-iterator\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7\"\n\n[[package]]\nname = \"fastrand\"\nversion = \"1.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499\"\ndependencies = [\"instant\"]\n\n[[package]]\nname = \"fdlimit\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"ff\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160\"\ndependencies = [\"rand_core 0.6.4\", \"subtle\"]\n\n[[package]]\nname = \"fiat-crypto\"\nversion = \"0.1.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90\"\n\n[[package]]\nname = \"file-per-thread-logger\"\nversion = \"0.1.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866\"\ndependencies = [\"env_logger\", \"log\"]\n\n[[package]]\nname = \"filetime\"\nversion = \"0.2.19\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9\"\ndependencies = [\"cfg-if\", \"libc\", \"redox_syscall\", \"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"finality-grandpa\"\nversion = \"0.16.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e24e6c429951433ccb7c87fd528c60084834dcd14763182c1f83291bcde24c34\"\ndependencies = [\"either\", \"futures\", \"futures-timer\", \"log\", \"num-traits\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"scale-info\"]\n\n[[package]]\nname = \"fixed-hash\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c\"\ndependencies = [\"byteorder\", \"rand 0.8.5\", \"rustc-hex\", \"static_assertions\"]\n\n[[package]]\nname = \"fixed-hash\"\nversion = \"0.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534\"\ndependencies = [\"byteorder\", \"rand 0.8.5\", \"rustc-hex\", \"static_assertions\"]\n\n[[package]]\nname = \"fixedbitset\"\nversion = \"0.4.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80\"\n\n[[package]]\nname = \"flate2\"\nversion = \"1.0.25\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841\"\ndependencies = [\"crc32fast\", \"libz-sys\", \"miniz_oxide\"]\n\n[[package]]\nname = \"float-cmp\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4\"\ndependencies = [\"num-traits\"]\n\n[[package]]\nname = \"fnv\"\nversion = \"1.0.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1\"\n\n[[package]]\nname = \"fork-tree\"\nversion = \"3.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\"]\n\n[[package]]\nname = \"form_urlencoded\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8\"\ndependencies = [\"percent-encoding\"]\n\n[[package]]\nname = \"fragile\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa\"\n\n[[package]]\nname = \"frame-benchmarking\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"linregress\", \"log\", \"parity-scale-codec\", \"paste\", \"scale-info\", \"serde\", \"sp-api\", \"sp-application-crypto\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"sp-runtime-interface\", \"sp-std\", \"sp-storage\"]\n\n[[package]]\nname = \"frame-benchmarking-cli\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"Inflector\", \"array-bytes\", \"chrono\", \"clap\", \"comfy-table\", \"frame-benchmarking\", \"frame-support\", \"frame-system\", \"gethostname\", \"handlebars\", \"itertools\", \"lazy_static\", \"linked-hash-map\", \"log\", \"parity-scale-codec\", \"rand 0.8.5\", \"rand_pcg\", \"sc-block-builder\", \"sc-cli\", \"sc-client-api\", \"sc-client-db\", \"sc-executor\", \"sc-service\", \"sc-sysinfo\", \"serde\", \"serde_json\", \"sp-api\", \"sp-blockchain\", \"sp-core\", \"sp-database\", \"sp-externalities\", \"sp-inherents\", \"sp-keystore\", \"sp-runtime\", \"sp-state-machine\", \"sp-std\", \"sp-storage\", \"sp-trie\", \"thiserror\", \"thousands\"]\n\n[[package]]\nname = \"frame-executive\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"frame-try-runtime\", \"parity-scale-codec\", \"scale-info\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"sp-std\", \"sp-tracing\"]\n\n[[package]]\nname = \"frame-metadata\"\nversion = \"15.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d\"\ndependencies = [\"cfg-if\", \"parity-scale-codec\", \"scale-info\", \"serde\"]\n\n[[package]]\nname = \"frame-remote-externalities\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"futures\", \"log\", \"parity-scale-codec\", \"serde\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"substrate-rpc-client\", \"tokio\"]\n\n[[package]]\nname = \"frame-support\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"bitflags\", \"frame-metadata\", \"frame-support-procedural\", \"impl-trait-for-tuples\", \"k256\", \"log\", \"once_cell\", \"parity-scale-codec\", \"paste\", \"scale-info\", \"serde\", \"smallvec\", \"sp-api\", \"sp-arithmetic\", \"sp-core\", \"sp-core-hashing-proc-macro\", \"sp-inherents\", \"sp-io\", \"sp-runtime\", \"sp-staking\", \"sp-state-machine\", \"sp-std\", \"sp-tracing\", \"sp-weights\", \"tt-call\"]\n\n[[package]]\nname = \"frame-support-procedural\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"Inflector\", \"cfg-expr\", \"frame-support-procedural-tools\", \"itertools\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"frame-support-procedural-tools\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support-procedural-tools-derive\", \"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"frame-support-procedural-tools-derive\"\nversion = \"3.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"frame-system\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"log\", \"parity-scale-codec\", \"scale-info\", \"serde\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"sp-std\", \"sp-version\", \"sp-weights\"]\n\n[[package]]\nname = \"frame-system-benchmarking\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-benchmarking\", \"frame-support\", \"frame-system\", \"parity-scale-codec\", \"scale-info\", \"sp-core\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"frame-system-rpc-runtime-api\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"sp-api\"]\n\n[[package]]\nname = \"frame-try-runtime\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"parity-scale-codec\", \"sp-api\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"fs2\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213\"\ndependencies = [\"libc\", \"winapi\"]\n\n[[package]]\nname = \"funty\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c\"\n\n[[package]]\nname = \"futures\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84\"\ndependencies = [\"futures-channel\", \"futures-core\", \"futures-executor\", \"futures-io\", \"futures-sink\", \"futures-task\", \"futures-util\"]\n\n[[package]]\nname = \"futures-channel\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5\"\ndependencies = [\"futures-core\", \"futures-sink\"]\n\n[[package]]\nname = \"futures-core\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608\"\n\n[[package]]\nname = \"futures-executor\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e\"\ndependencies = [\"futures-core\", \"futures-task\", \"futures-util\", \"num_cpus\"]\n\n[[package]]\nname = \"futures-io\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531\"\n\n[[package]]\nname = \"futures-lite\"\nversion = \"1.12.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48\"\ndependencies = [\"fastrand\", \"futures-core\", \"futures-io\", \"memchr\", \"parking\", \"pin-project-lite 0.2.9\", \"waker-fn\"]\n\n[[package]]\nname = \"futures-macro\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"futures-rustls\"\nversion = \"0.22.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd\"\ndependencies = [\"futures-io\", \"rustls 0.20.8\", \"webpki 0.22.0\"]\n\n[[package]]\nname = \"futures-sink\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364\"\n\n[[package]]\nname = \"futures-task\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366\"\n\n[[package]]\nname = \"futures-timer\"\nversion = \"3.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c\"\n\n[[package]]\nname = \"futures-util\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1\"\ndependencies = [\"futures-channel\", \"futures-core\", \"futures-io\", \"futures-macro\", \"futures-sink\", \"futures-task\", \"memchr\", \"pin-project-lite 0.2.9\", \"pin-utils\", \"slab\"]\n\n[[package]]\nname = \"fxhash\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c\"\ndependencies = [\"byteorder\"]\n\n[[package]]\nname = \"generic-array\"\nversion = \"0.12.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd\"\ndependencies = [\"typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)\"]\n\n[[package]]\nname = \"generic-array\"\nversion = \"0.14.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9\"\ndependencies = [\"typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)\", \"version_check\"]\n\n[[package]]\nname = \"gethostname\"\nversion = \"0.2.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e\"\ndependencies = [\"libc\", \"winapi\"]\n\n[[package]]\nname = \"getrandom\"\nversion = \"0.1.16\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce\"\ndependencies = [\"cfg-if\", \"libc\", \"wasi 0.9.0+wasi-snapshot-preview1\"]\n\n[[package]]\nname = \"getrandom\"\nversion = \"0.2.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31\"\ndependencies = [\"cfg-if\", \"libc\", \"wasi 0.11.0+wasi-snapshot-preview1\"]\n\n[[package]]\nname = \"ghash\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375\"\ndependencies = [\"opaque-debug 0.3.0\", \"polyval 0.4.5\"]\n\n[[package]]\nname = \"ghash\"\nversion = \"0.4.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99\"\ndependencies = [\"opaque-debug 0.3.0\", \"polyval 0.5.3\"]\n\n[[package]]\nname = \"gimli\"\nversion = \"0.26.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d\"\ndependencies = [\"fallible-iterator\", \"indexmap\", \"stable_deref_trait\"]\n\n[[package]]\nname = \"gimli\"\nversion = \"0.27.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec\"\n\n[[package]]\nname = \"glob\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b\"\n\n[[package]]\nname = \"globset\"\nversion = \"0.4.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc\"\ndependencies = [\"aho-corasick\", \"bstr\", \"fnv\", \"log\", \"regex\"]\n\n[[package]]\nname = \"group\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7\"\ndependencies = [\"ff\", \"rand_core 0.6.4\", \"subtle\"]\n\n[[package]]\nname = \"h2\"\nversion = \"0.3.15\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4\"\ndependencies = [\"bytes\", \"fnv\", \"futures-core\", \"futures-sink\", \"futures-util\", \"http\", \"indexmap\", \"slab\", \"tokio\", \"tokio-util\", \"tracing\"]\n\n[[package]]\nname = \"handlebars\"\nversion = \"4.3.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a\"\ndependencies = [\"log\", \"pest\", \"pest_derive\", \"serde\", \"serde_json\", \"thiserror\"]\n\n[[package]]\nname = \"hash-db\"\nversion = \"0.15.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a\"\n\n[[package]]\nname = \"hash256-std-hasher\"\nversion = \"0.15.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2\"\ndependencies = [\"crunchy\"]\n\n[[package]]\nname = \"hashbrown\"\nversion = \"0.12.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888\"\ndependencies = [\"ahash\"]\n\n[[package]]\nname = \"heck\"\nversion = \"0.4.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8\"\n\n[[package]]\nname = \"hermit-abi\"\nversion = \"0.1.19\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"hermit-abi\"\nversion = \"0.2.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"hermit-abi\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"856b5cb0902c2b6d65d5fd97dfa30f9b70c7538e770b98eab5ed52d8db923e01\"\n\n[[package]]\nname = \"hex\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70\"\n\n[[package]]\nname = \"hkdf\"\nversion = \"0.12.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437\"\ndependencies = [\"hmac 0.12.1\"]\n\n[[package]]\nname = \"hmac\"\nversion = \"0.8.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840\"\ndependencies = [\"crypto-mac 0.8.0\", \"digest 0.9.0\"]\n\n[[package]]\nname = \"hmac\"\nversion = \"0.10.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15\"\ndependencies = [\"crypto-mac 0.10.1\", \"digest 0.9.0\"]\n\n[[package]]\nname = \"hmac\"\nversion = \"0.11.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b\"\ndependencies = [\"crypto-mac 0.11.1\", \"digest 0.9.0\"]\n\n[[package]]\nname = \"hmac\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e\"\ndependencies = [\"digest 0.10.6\"]\n\n[[package]]\nname = \"hmac-drbg\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1\"\ndependencies = [\"digest 0.9.0\", \"generic-array 0.14.6\", \"hmac 0.8.1\"]\n\n[[package]]\nname = \"hostname\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867\"\ndependencies = [\"libc\", \"match_cfg\", \"winapi\"]\n\n[[package]]\nname = \"http\"\nversion = \"0.2.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399\"\ndependencies = [\"bytes\", \"fnv\", \"itoa\"]\n\n[[package]]\nname = \"http-body\"\nversion = \"0.4.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1\"\ndependencies = [\"bytes\", \"http\", \"pin-project-lite 0.2.9\"]\n\n[[package]]\nname = \"http-range-header\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29\"\n\n[[package]]\nname = \"httparse\"\nversion = \"1.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904\"\n\n[[package]]\nname = \"httpdate\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421\"\n\n[[package]]\nname = \"humantime\"\nversion = \"2.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4\"\n\n[[package]]\nname = \"hyper\"\nversion = \"0.14.24\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c\"\ndependencies = [\"bytes\", \"futures-channel\", \"futures-core\", \"futures-util\", \"h2\", \"http\", \"http-body\", \"httparse\", \"httpdate\", \"itoa\", \"pin-project-lite 0.2.9\", \"socket2\", \"tokio\", \"tower-service\", \"tracing\", \"want\"]\n\n[[package]]\nname = \"hyper-rustls\"\nversion = \"0.23.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c\"\ndependencies = [\"http\", \"hyper\", \"log\", \"rustls 0.20.8\", \"rustls-native-certs\", \"tokio\", \"tokio-rustls\"]\n\n[[package]]\nname = \"iana-time-zone\"\nversion = \"0.1.53\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765\"\ndependencies = [\"android_system_properties\", \"core-foundation-sys\", \"iana-time-zone-haiku\", \"js-sys\", \"wasm-bindgen\", \"winapi\"]\n\n[[package]]\nname = \"iana-time-zone-haiku\"\nversion = \"0.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca\"\ndependencies = [\"cxx\", \"cxx-build\"]\n\n[[package]]\nname = \"ident_case\"\nversion = \"1.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39\"\n\n[[package]]\nname = \"idna\"\nversion = \"0.2.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8\"\ndependencies = [\"matches\", \"unicode-bidi\", \"unicode-normalization\"]\n\n[[package]]\nname = \"idna\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6\"\ndependencies = [\"unicode-bidi\", \"unicode-normalization\"]\n\n[[package]]\nname = \"if-addrs\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9\"\ndependencies = [\"libc\", \"winapi\"]\n\n[[package]]\nname = \"if-watch\"\nversion = \"3.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ba7abdbb86e485125dad06c2691e1e393bf3b08c7b743b43aa162a00fd39062e\"\ndependencies = [\"async-io\", \"core-foundation\", \"fnv\", \"futures\", \"if-addrs\", \"ipnet\", \"log\", \"rtnetlink\", \"system-configuration\", \"tokio\", \"windows\"]\n\n[[package]]\nname = \"impl-codec\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f\"\ndependencies = [\"parity-scale-codec\"]\n\n[[package]]\nname = \"impl-rlp\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808\"\ndependencies = [\"rlp\"]\n\n[[package]]\nname = \"impl-serde\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"impl-serde\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"impl-trait-for-tuples\"\nversion = \"0.2.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"indexmap\"\nversion = \"1.9.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399\"\ndependencies = [\"autocfg\", \"hashbrown\", \"serde\"]\n\n[[package]]\nname = \"instant\"\nversion = \"0.1.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c\"\ndependencies = [\"cfg-if\"]\n\n[[package]]\nname = \"integer-sqrt\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770\"\ndependencies = [\"num-traits\"]\n\n[[package]]\nname = \"interceptor\"\nversion = \"0.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b\"\ndependencies = [\"async-trait\", \"bytes\", \"log\", \"rand 0.8.5\", \"rtcp\", \"rtp\", \"thiserror\", \"tokio\", \"waitgroup\", \"webrtc-srtp\", \"webrtc-util\"]\n\n[[package]]\nname = \"io-lifetimes\"\nversion = \"0.7.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074\"\n\n[[package]]\nname = \"io-lifetimes\"\nversion = \"1.0.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3\"\ndependencies = [\"libc\", \"windows-sys 0.45.0\"]\n\n[[package]]\nname = \"ip_network\"\nversion = \"0.4.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1\"\n\n[[package]]\nname = \"ipconfig\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be\"\ndependencies = [\"socket2\", \"widestring\", \"winapi\", \"winreg\"]\n\n[[package]]\nname = \"ipnet\"\nversion = \"2.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146\"\n\n[[package]]\nname = \"is-terminal\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef\"\ndependencies = [\"hermit-abi 0.3.0\", \"io-lifetimes 1.0.5\", \"rustix 0.36.8\", \"windows-sys 0.45.0\"]\n\n[[package]]\nname = \"itertools\"\nversion = \"0.10.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473\"\ndependencies = [\"either\"]\n\n[[package]]\nname = \"itoa\"\nversion = \"1.0.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440\"\n\n[[package]]\nname = \"jobserver\"\nversion = \"0.1.25\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"js-sys\"\nversion = \"0.3.61\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730\"\ndependencies = [\"wasm-bindgen\"]\n\n[[package]]\nname = \"jsonrpsee\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7d291e3a5818a2384645fd9756362e6d89cf0541b0b916fa7702ea4a9833608e\"\ndependencies = [\"jsonrpsee-core\", \"jsonrpsee-proc-macros\", \"jsonrpsee-server\", \"jsonrpsee-types\", \"jsonrpsee-ws-client\", \"tracing\"]\n\n[[package]]\nname = \"jsonrpsee-client-transport\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"965de52763f2004bc91ac5bcec504192440f0b568a5d621c59d9dbd6f886c3fb\"\ndependencies = [\"futures-util\", \"http\", \"jsonrpsee-core\", \"jsonrpsee-types\", \"pin-project\", \"rustls-native-certs\", \"soketto\", \"thiserror\", \"tokio\", \"tokio-rustls\", \"tokio-util\", \"tracing\", \"webpki-roots\"]\n\n[[package]]\nname = \"jsonrpsee-core\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b\"\ndependencies = [\"anyhow\", \"arrayvec 0.7.2\", \"async-lock\", \"async-trait\", \"beef\", \"futures-channel\", \"futures-timer\", \"futures-util\", \"globset\", \"hyper\", \"jsonrpsee-types\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"rustc-hash\", \"serde\", \"serde_json\", \"soketto\", \"thiserror\", \"tokio\", \"tracing\"]\n\n[[package]]\nname = \"jsonrpsee-proc-macros\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"baa6da1e4199c10d7b1d0a6e5e8bd8e55f351163b6f4b3cbb044672a69bd4c1c\"\ndependencies = [\"heck\", \"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"jsonrpsee-server\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1fb69dad85df79527c019659a992498d03f8495390496da2f07e6c24c2b356fc\"\ndependencies = [\"futures-channel\", \"futures-util\", \"http\", \"hyper\", \"jsonrpsee-core\", \"jsonrpsee-types\", \"serde\", \"serde_json\", \"soketto\", \"tokio\", \"tokio-stream\", \"tokio-util\", \"tower\", \"tracing\"]\n\n[[package]]\nname = \"jsonrpsee-types\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5bd522fe1ce3702fd94812965d7bb7a3364b1c9aba743944c5a00529aae80f8c\"\ndependencies = [\"anyhow\", \"beef\", \"serde\", \"serde_json\", \"thiserror\", \"tracing\"]\n\n[[package]]\nname = \"jsonrpsee-ws-client\"\nversion = \"0.16.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0b83daeecfc6517cfe210df24e570fb06213533dfb990318fae781f4c7119dd9\"\ndependencies = [\"http\", \"jsonrpsee-client-transport\", \"jsonrpsee-core\", \"jsonrpsee-types\"]\n\n[[package]]\nname = \"k256\"\nversion = \"0.11.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b\"\ndependencies = [\"cfg-if\", \"ecdsa\", \"elliptic-curve\", \"sha2 0.10.6\"]\n\n[[package]]\nname = \"keccak\"\nversion = \"0.1.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768\"\ndependencies = [\"cpufeatures\"]\n\n[[package]]\nname = \"kvdb\"\nversion = \"0.13.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9\"\ndependencies = [\"smallvec\"]\n\n[[package]]\nname = \"kvdb-memorydb\"\nversion = \"0.13.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2\"\ndependencies = [\"kvdb\", \"parking_lot 0.12.1\"]\n\n[[package]]\nname = \"kvdb-rocksdb\"\nversion = \"0.17.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2182b8219fee6bd83aacaab7344e840179ae079d5216aa4e249b4d704646a844\"\ndependencies = [\"kvdb\", \"num_cpus\", \"parking_lot 0.12.1\", \"regex\", \"rocksdb\", \"smallvec\"]\n\n[[package]]\nname = \"lazy_static\"\nversion = \"1.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646\"\n\n[[package]]\nname = \"lazycell\"\nversion = \"1.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55\"\n\n[[package]]\nname = \"libc\"\nversion = \"0.2.139\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79\"\n\n[[package]]\nname = \"libloading\"\nversion = \"0.7.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f\"\ndependencies = [\"cfg-if\", \"winapi\"]\n\n[[package]]\nname = \"libm\"\nversion = \"0.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a\"\n\n[[package]]\nname = \"libm\"\nversion = \"0.2.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb\"\n\n[[package]]\nname = \"libp2p\"\nversion = \"0.50.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2e0a0d2f693675f49ded13c5d510c48b78069e23cbd9108d7ccd59f6dc568819\"\ndependencies = [\"bytes\", \"futures\", \"futures-timer\", \"getrandom 0.2.8\", \"instant\", \"libp2p-core\", \"libp2p-dns\", \"libp2p-identify\", \"libp2p-kad\", \"libp2p-mdns\", \"libp2p-metrics\", \"libp2p-mplex\", \"libp2p-noise\", \"libp2p-ping\", \"libp2p-quic\", \"libp2p-request-response\", \"libp2p-swarm\", \"libp2p-tcp\", \"libp2p-wasm-ext\", \"libp2p-webrtc\", \"libp2p-websocket\", \"libp2p-yamux\", \"multiaddr\", \"parking_lot 0.12.1\", \"pin-project\", \"smallvec\"]\n\n[[package]]\nname = \"libp2p-core\"\nversion = \"0.38.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f\"\ndependencies = [\"asn1_der\", \"bs58\", \"ed25519-dalek\", \"either\", \"fnv\", \"futures\", \"futures-timer\", \"instant\", \"log\", \"multiaddr\", \"multihash\", \"multistream-select\", \"once_cell\", \"parking_lot 0.12.1\", \"pin-project\", \"prost\", \"prost-build\", \"rand 0.8.5\", \"rw-stream-sink\", \"sec1\", \"sha2 0.10.6\", \"smallvec\", \"thiserror\", \"unsigned-varint\", \"void\", \"zeroize\"]\n\n[[package]]\nname = \"libp2p-dns\"\nversion = \"0.38.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5\"\ndependencies = [\"futures\", \"libp2p-core\", \"log\", \"parking_lot 0.12.1\", \"smallvec\", \"trust-dns-resolver\"]\n\n[[package]]\nname = \"libp2p-identify\"\nversion = \"0.41.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf\"\ndependencies = [\"asynchronous-codec\", \"futures\", \"futures-timer\", \"libp2p-core\", \"libp2p-swarm\", \"log\", \"lru 0.8.1\", \"prost\", \"prost-build\", \"prost-codec\", \"smallvec\", \"thiserror\", \"void\"]\n\n[[package]]\nname = \"libp2p-kad\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2\"\ndependencies = [\"arrayvec 0.7.2\", \"asynchronous-codec\", \"bytes\", \"either\", \"fnv\", \"futures\", \"futures-timer\", \"instant\", \"libp2p-core\", \"libp2p-swarm\", \"log\", \"prost\", \"prost-build\", \"rand 0.8.5\", \"sha2 0.10.6\", \"smallvec\", \"thiserror\", \"uint\", \"unsigned-varint\", \"void\"]\n\n[[package]]\nname = \"libp2p-mdns\"\nversion = \"0.42.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b\"\ndependencies = [\"data-encoding\", \"futures\", \"if-watch\", \"libp2p-core\", \"libp2p-swarm\", \"log\", \"rand 0.8.5\", \"smallvec\", \"socket2\", \"tokio\", \"trust-dns-proto\", \"void\"]\n\n[[package]]\nname = \"libp2p-metrics\"\nversion = \"0.11.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55\"\ndependencies = [\"libp2p-core\", \"libp2p-identify\", \"libp2p-kad\", \"libp2p-ping\", \"libp2p-swarm\", \"prometheus-client\"]\n\n[[package]]\nname = \"libp2p-mplex\"\nversion = \"0.38.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"03805b44107aa013e7cbbfa5627b31c36cbedfdfb00603c0311998882bc4bace\"\ndependencies = [\"asynchronous-codec\", \"bytes\", \"futures\", \"libp2p-core\", \"log\", \"nohash-hasher\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"smallvec\", \"unsigned-varint\"]\n\n[[package]]\nname = \"libp2p-noise\"\nversion = \"0.41.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e\"\ndependencies = [\"bytes\", \"curve25519-dalek 3.2.0\", \"futures\", \"libp2p-core\", \"log\", \"once_cell\", \"prost\", \"prost-build\", \"rand 0.8.5\", \"sha2 0.10.6\", \"snow\", \"static_assertions\", \"thiserror\", \"x25519-dalek 1.1.1\", \"zeroize\"]\n\n[[package]]\nname = \"libp2p-ping\"\nversion = \"0.41.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f\"\ndependencies = [\"futures\", \"futures-timer\", \"instant\", \"libp2p-core\", \"libp2p-swarm\", \"log\", \"rand 0.8.5\", \"void\"]\n\n[[package]]\nname = \"libp2p-quic\"\nversion = \"0.7.0-alpha\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59\"\ndependencies = [\"bytes\", \"futures\", \"futures-timer\", \"if-watch\", \"libp2p-core\", \"libp2p-tls\", \"log\", \"parking_lot 0.12.1\", \"quinn-proto\", \"rand 0.8.5\", \"rustls 0.20.8\", \"thiserror\", \"tokio\"]\n\n[[package]]\nname = \"libp2p-request-response\"\nversion = \"0.23.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884\"\ndependencies = [\"async-trait\", \"bytes\", \"futures\", \"instant\", \"libp2p-core\", \"libp2p-swarm\", \"log\", \"rand 0.8.5\", \"smallvec\", \"unsigned-varint\"]\n\n[[package]]\nname = \"libp2p-swarm\"\nversion = \"0.41.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0\"\ndependencies = [\"either\", \"fnv\", \"futures\", \"futures-timer\", \"instant\", \"libp2p-core\", \"libp2p-swarm-derive\", \"log\", \"pin-project\", \"rand 0.8.5\", \"smallvec\", \"thiserror\", \"tokio\", \"void\"]\n\n[[package]]\nname = \"libp2p-swarm-derive\"\nversion = \"0.31.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400\"\ndependencies = [\"heck\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"libp2p-tcp\"\nversion = \"0.38.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d\"\ndependencies = [\"futures\", \"futures-timer\", \"if-watch\", \"libc\", \"libp2p-core\", \"log\", \"socket2\", \"tokio\"]\n\n[[package]]\nname = \"libp2p-tls\"\nversion = \"0.1.0-alpha\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f7905ce0d040576634e8a3229a7587cc8beab83f79db6023800f1792895defa8\"\ndependencies = [\"futures\", \"futures-rustls\", \"libp2p-core\", \"rcgen 0.10.0\", \"ring\", \"rustls 0.20.8\", \"thiserror\", \"webpki 0.22.0\", \"x509-parser 0.14.0\", \"yasna\"]\n\n[[package]]\nname = \"libp2p-wasm-ext\"\nversion = \"0.38.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069\"\ndependencies = [\"futures\", \"js-sys\", \"libp2p-core\", \"parity-send-wrapper\", \"wasm-bindgen\", \"wasm-bindgen-futures\"]\n\n[[package]]\nname = \"libp2p-webrtc\"\nversion = \"0.4.0-alpha\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a\"\ndependencies = [\"async-trait\", \"asynchronous-codec\", \"bytes\", \"futures\", \"futures-timer\", \"hex\", \"if-watch\", \"libp2p-core\", \"libp2p-noise\", \"log\", \"multihash\", \"prost\", \"prost-build\", \"prost-codec\", \"rand 0.8.5\", \"rcgen 0.9.3\", \"serde\", \"stun\", \"thiserror\", \"tinytemplate\", \"tokio\", \"tokio-util\", \"webrtc\"]\n\n[[package]]\nname = \"libp2p-websocket\"\nversion = \"0.40.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54\"\ndependencies = [\"either\", \"futures\", \"futures-rustls\", \"libp2p-core\", \"log\", \"parking_lot 0.12.1\", \"quicksink\", \"rw-stream-sink\", \"soketto\", \"url\", \"webpki-roots\"]\n\n[[package]]\nname = \"libp2p-yamux\"\nversion = \"0.42.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29\"\ndependencies = [\"futures\", \"libp2p-core\", \"log\", \"parking_lot 0.12.1\", \"thiserror\", \"yamux\"]\n\n[[package]]\nname = \"librocksdb-sys\"\nversion = \"0.8.0+7.4.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"611804e4666a25136fcc5f8cf425ab4d26c7f74ea245ffe92ea23b85b6420b5d\"\ndependencies = [\"bindgen\", \"bzip2-sys\", \"cc\", \"glob\", \"libc\", \"libz-sys\", \"tikv-jemalloc-sys\"]\n\n[[package]]\nname = \"libsecp256k1\"\nversion = \"0.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1\"\ndependencies = [\"arrayref\", \"base64 0.13.1\", \"digest 0.9.0\", \"hmac-drbg\", \"libsecp256k1-core\", \"libsecp256k1-gen-ecmult\", \"libsecp256k1-gen-genmult\", \"rand 0.8.5\", \"serde\", \"sha2 0.9.9\", \"typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)\"]\n\n[[package]]\nname = \"libsecp256k1-core\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451\"\ndependencies = [\"crunchy\", \"digest 0.9.0\", \"subtle\"]\n\n[[package]]\nname = \"libsecp256k1-gen-ecmult\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809\"\ndependencies = [\"libsecp256k1-core\"]\n\n[[package]]\nname = \"libsecp256k1-gen-genmult\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c\"\ndependencies = [\"libsecp256k1-core\"]\n\n[[package]]\nname = \"libz-sys\"\nversion = \"1.1.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf\"\ndependencies = [\"cc\", \"pkg-config\", \"vcpkg\"]\n\n[[package]]\nname = \"link-cplusplus\"\nversion = \"1.0.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5\"\ndependencies = [\"cc\"]\n\n[[package]]\nname = \"linked-hash-map\"\nversion = \"0.5.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f\"\n\n[[package]]\nname = \"linked_hash_set\"\nversion = \"0.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588\"\ndependencies = [\"linked-hash-map\"]\n\n[[package]]\nname = \"linregress\"\nversion = \"0.4.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d6c601a85f5ecd1aba625247bca0031585fb1c446461b142878a16f8245ddeb8\"\ndependencies = [\"nalgebra\", \"statrs\"]\n\n[[package]]\nname = \"linux-raw-sys\"\nversion = \"0.0.46\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d\"\n\n[[package]]\nname = \"linux-raw-sys\"\nversion = \"0.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4\"\n\n[[package]]\nname = \"lock_api\"\nversion = \"0.4.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df\"\ndependencies = [\"autocfg\", \"scopeguard\"]\n\n[[package]]\nname = \"log\"\nversion = \"0.4.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e\"\ndependencies = [\"cfg-if\"]\n\n[[package]]\nname = \"lru\"\nversion = \"0.7.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a\"\ndependencies = [\"hashbrown\"]\n\n[[package]]\nname = \"lru\"\nversion = \"0.8.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909\"\ndependencies = [\"hashbrown\"]\n\n[[package]]\nname = \"lru-cache\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c\"\ndependencies = [\"linked-hash-map\"]\n\n[[package]]\nname = \"lz4\"\nversion = \"1.24.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1\"\ndependencies = [\"libc\", \"lz4-sys\"]\n\n[[package]]\nname = \"lz4-sys\"\nversion = \"1.9.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900\"\ndependencies = [\"cc\", \"libc\"]\n\n[[package]]\nname = \"mach\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"match_cfg\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4\"\n\n[[package]]\nname = \"matchers\"\nversion = \"0.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1\"\ndependencies = [\"regex-automata\"]\n\n[[package]]\nname = \"matches\"\nversion = \"0.1.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5\"\n\n[[package]]\nname = \"matrixmultiply\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84\"\ndependencies = [\"rawpointer\"]\n\n[[package]]\nname = \"md-5\"\nversion = \"0.10.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca\"\ndependencies = [\"digest 0.10.6\"]\n\n[[package]]\nname = \"memchr\"\nversion = \"2.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d\"\n\n[[package]]\nname = \"memfd\"\nversion = \"0.6.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb\"\ndependencies = [\"rustix 0.36.8\"]\n\n[[package]]\nname = \"memmap2\"\nversion = \"0.5.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"memoffset\"\nversion = \"0.6.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce\"\ndependencies = [\"autocfg\"]\n\n[[package]]\nname = \"memoffset\"\nversion = \"0.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4\"\ndependencies = [\"autocfg\"]\n\n[[package]]\nname = \"memory-db\"\nversion = \"0.31.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5e0c7cba9ce19ac7ffd2053ac9f49843bbd3f4318feedfd74e85c19d5fb0ba66\"\ndependencies = [\"hash-db\", \"hashbrown\"]\n\n[[package]]\nname = \"memory_units\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3\"\n\n[[package]]\nname = \"merlin\"\nversion = \"2.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42\"\ndependencies = [\"byteorder\", \"keccak\", \"rand_core 0.5.1\", \"zeroize\"]\n\n[[package]]\nname = \"minimal-lexical\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a\"\n\n[[package]]\nname = \"miniz_oxide\"\nversion = \"0.6.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa\"\ndependencies = [\"adler\"]\n\n[[package]]\nname = \"mio\"\nversion = \"0.8.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de\"\ndependencies = [\"libc\", \"log\", \"wasi 0.11.0+wasi-snapshot-preview1\", \"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"mockall\"\nversion = \"0.11.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326\"\ndependencies = [\"cfg-if\", \"downcast\", \"fragile\", \"lazy_static\", \"mockall_derive\", \"predicates\", \"predicates-tree\"]\n\n[[package]]\nname = \"mockall_derive\"\nversion = \"0.11.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0\"\ndependencies = [\"cfg-if\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"multiaddr\"\nversion = \"0.16.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e\"\ndependencies = [\"arrayref\", \"byteorder\", \"data-encoding\", \"multibase\", \"multihash\", \"percent-encoding\", \"serde\", \"static_assertions\", \"unsigned-varint\", \"url\"]\n\n[[package]]\nname = \"multibase\"\nversion = \"0.9.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404\"\ndependencies = [\"base-x\", \"data-encoding\", \"data-encoding-macro\"]\n\n[[package]]\nname = \"multihash\"\nversion = \"0.16.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc\"\ndependencies = [\"blake2b_simd\", \"blake2s_simd\", \"blake3\", \"core2\", \"digest 0.10.6\", \"multihash-derive\", \"sha2 0.10.6\", \"sha3\", \"unsigned-varint\"]\n\n[[package]]\nname = \"multihash-derive\"\nversion = \"0.8.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db\"\ndependencies = [\"proc-macro-crate\", \"proc-macro-error\", \"proc-macro2\", \"quote\", \"syn\", \"synstructure\"]\n\n[[package]]\nname = \"multimap\"\nversion = \"0.8.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a\"\n\n[[package]]\nname = \"multistream-select\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a\"\ndependencies = [\"bytes\", \"futures\", \"log\", \"pin-project\", \"smallvec\", \"unsigned-varint\"]\n\n[[package]]\nname = \"nalgebra\"\nversion = \"0.27.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"462fffe4002f4f2e1f6a9dcf12cc1a6fc0e15989014efc02a941d3e0f5dc2120\"\ndependencies = [\"approx\", \"matrixmultiply\", \"nalgebra-macros\", \"num-complex\", \"num-rational\", \"num-traits\", \"rand 0.8.5\", \"rand_distr\", \"simba\", \"typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)\"]\n\n[[package]]\nname = \"nalgebra-macros\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"names\"\nversion = \"0.13.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146\"\ndependencies = [\"rand 0.8.5\"]\n\n[[package]]\nname = \"ndarray\"\nversion = \"0.15.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32\"\ndependencies = [\"matrixmultiply\", \"num-complex\", \"num-integer\", \"num-traits\", \"rawpointer\"]\n\n[[package]]\nname = \"netlink-packet-core\"\nversion = \"0.4.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297\"\ndependencies = [\"anyhow\", \"byteorder\", \"libc\", \"netlink-packet-utils\"]\n\n[[package]]\nname = \"netlink-packet-route\"\nversion = \"0.12.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab\"\ndependencies = [\"anyhow\", \"bitflags\", \"byteorder\", \"libc\", \"netlink-packet-core\", \"netlink-packet-utils\"]\n\n[[package]]\nname = \"netlink-packet-utils\"\nversion = \"0.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34\"\ndependencies = [\"anyhow\", \"byteorder\", \"paste\", \"thiserror\"]\n\n[[package]]\nname = \"netlink-proto\"\nversion = \"0.10.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6\"\ndependencies = [\"bytes\", \"futures\", \"log\", \"netlink-packet-core\", \"netlink-sys\", \"thiserror\", \"tokio\"]\n\n[[package]]\nname = \"netlink-sys\"\nversion = \"0.8.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b\"\ndependencies = [\"bytes\", \"futures\", \"libc\", \"log\", \"tokio\"]\n\n[[package]]\nname = \"nix\"\nversion = \"0.24.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069\"\ndependencies = [\"bitflags\", \"cfg-if\", \"libc\", \"memoffset 0.6.5\"]\n\n[[package]]\nname = \"node-subtensor\"\nversion = \"0.0.1\"\ndependencies = [\"clap\", \"frame-benchmarking\", \"frame-benchmarking-cli\", \"frame-system\", \"futures\", \"jsonrpsee\", \"memmap2\", \"node-subtensor-runtime\", \"pallet-transaction-payment\", \"pallet-transaction-payment-rpc\", \"sc-basic-authorship\", \"sc-cli\", \"sc-client-api\", \"sc-consensus\", \"sc-consensus-aura\", \"sc-executor\", \"sc-finality-grandpa\", \"sc-keystore\", \"sc-rpc\", \"sc-rpc-api\", \"sc-service\", \"sc-telemetry\", \"sc-transaction-pool\", \"sc-transaction-pool-api\", \"serde\", \"serde_json\", \"sp-api\", \"sp-block-builder\", \"sp-blockchain\", \"sp-consensus\", \"sp-consensus-aura\", \"sp-core\", \"sp-finality-grandpa\", \"sp-inherents\", \"sp-io\", \"sp-keyring\", \"sp-runtime\", \"sp-timestamp\", \"substrate-build-script-utils\", \"substrate-frame-rpc-system\", \"subtensor-custom-rpc\", \"subtensor-custom-rpc-runtime-api\", \"try-runtime-cli\"]\n\n[[package]]\nname = \"node-subtensor-runtime\"\nversion = \"0.0.1\"\ndependencies = [\"frame-benchmarking\", \"frame-executive\", \"frame-support\", \"frame-system\", \"frame-system-benchmarking\", \"frame-system-rpc-runtime-api\", \"frame-try-runtime\", \"pallet-aura\", \"pallet-balances\", \"pallet-grandpa\", \"pallet-randomness-collective-flip\", \"pallet-subtensor\", \"pallet-sudo\", \"pallet-timestamp\", \"pallet-transaction-payment\", \"pallet-transaction-payment-rpc-runtime-api\", \"parity-scale-codec\", \"scale-info\", \"smallvec\", \"sp-api\", \"sp-block-builder\", \"sp-consensus-aura\", \"sp-core\", \"sp-inherents\", \"sp-offchain\", \"sp-runtime\", \"sp-session\", \"sp-std\", \"sp-transaction-pool\", \"sp-version\", \"substrate-wasm-builder\", \"subtensor-custom-rpc-runtime-api\"]\n\n[[package]]\nname = \"nohash-hasher\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451\"\n\n[[package]]\nname = \"nom\"\nversion = \"7.1.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a\"\ndependencies = [\"memchr\", \"minimal-lexical\"]\n\n[[package]]\nname = \"normalize-line-endings\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be\"\n\n[[package]]\nname = \"num-bigint\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f\"\ndependencies = [\"autocfg\", \"num-integer\", \"num-traits\"]\n\n[[package]]\nname = \"num-complex\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d\"\ndependencies = [\"num-traits\"]\n\n[[package]]\nname = \"num-format\"\nversion = \"0.4.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3\"\ndependencies = [\"arrayvec 0.7.2\", \"itoa\"]\n\n[[package]]\nname = \"num-integer\"\nversion = \"0.1.45\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9\"\ndependencies = [\"autocfg\", \"num-traits\"]\n\n[[package]]\nname = \"num-rational\"\nversion = \"0.4.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0\"\ndependencies = [\"autocfg\", \"num-bigint\", \"num-integer\", \"num-traits\"]\n\n[[package]]\nname = \"num-traits\"\nversion = \"0.2.15\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd\"\ndependencies = [\"autocfg\", \"libm 0.2.6\"]\n\n[[package]]\nname = \"num_cpus\"\nversion = \"1.15.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b\"\ndependencies = [\"hermit-abi 0.2.6\", \"libc\"]\n\n[[package]]\nname = \"object\"\nversion = \"0.29.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53\"\ndependencies = [\"crc32fast\", \"hashbrown\", \"indexmap\", \"memchr\"]\n\n[[package]]\nname = \"object\"\nversion = \"0.30.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439\"\ndependencies = [\"memchr\"]\n\n[[package]]\nname = \"oid-registry\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a\"\ndependencies = [\"asn1-rs 0.3.1\"]\n\n[[package]]\nname = \"oid-registry\"\nversion = \"0.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff\"\ndependencies = [\"asn1-rs 0.5.1\"]\n\n[[package]]\nname = \"once_cell\"\nversion = \"1.17.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66\"\n\n[[package]]\nname = \"opaque-debug\"\nversion = \"0.2.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c\"\n\n[[package]]\nname = \"opaque-debug\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5\"\n\n[[package]]\nname = \"openssl-probe\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf\"\n\n[[package]]\nname = \"os_str_bytes\"\nversion = \"6.4.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee\"\n\n[[package]]\nname = \"p256\"\nversion = \"0.11.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594\"\ndependencies = [\"ecdsa\", \"elliptic-curve\", \"sha2 0.10.6\"]\n\n[[package]]\nname = \"p384\"\nversion = \"0.11.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa\"\ndependencies = [\"ecdsa\", \"elliptic-curve\", \"sha2 0.10.6\"]\n\n[[package]]\nname = \"packed_simd_2\"\nversion = \"0.3.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282\"\ndependencies = [\"cfg-if\", \"libm 0.1.4\"]\n\n[[package]]\nname = \"pallet-aura\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"pallet-timestamp\", \"parity-scale-codec\", \"scale-info\", \"sp-application-crypto\", \"sp-consensus-aura\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-authorship\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"impl-trait-for-tuples\", \"parity-scale-codec\", \"scale-info\", \"sp-authorship\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-balances\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-benchmarking\", \"frame-support\", \"frame-system\", \"log\", \"parity-scale-codec\", \"scale-info\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-grandpa\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-benchmarking\", \"frame-support\", \"frame-system\", \"log\", \"pallet-authorship\", \"pallet-session\", \"parity-scale-codec\", \"scale-info\", \"sp-application-crypto\", \"sp-core\", \"sp-finality-grandpa\", \"sp-io\", \"sp-runtime\", \"sp-session\", \"sp-staking\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-randomness-collective-flip\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"parity-scale-codec\", \"safe-mix\", \"scale-info\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-session\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"impl-trait-for-tuples\", \"log\", \"pallet-timestamp\", \"parity-scale-codec\", \"scale-info\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"sp-session\", \"sp-staking\", \"sp-std\", \"sp-trie\"]\n\n[[package]]\nname = \"pallet-subtensor\"\nversion = \"0.0.1\"\ndependencies = [\"frame-benchmarking\", \"frame-support\", \"frame-system\", \"log\", \"ndarray\", \"pallet-balances\", \"pallet-transaction-payment\", \"parity-scale-codec\", \"parity-util-mem\", \"rand 0.8.5\", \"scale-info\", \"serde\", \"serde-tuple-vec-map\", \"serde_bytes\", \"serde_with\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"sp-std\", \"sp-tracing\", \"sp-version\", \"substrate-fixed\"]\n\n[[package]]\nname = \"pallet-sudo\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"parity-scale-codec\", \"scale-info\", \"sp-io\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-timestamp\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-benchmarking\", \"frame-support\", \"frame-system\", \"log\", \"parity-scale-codec\", \"scale-info\", \"sp-inherents\", \"sp-io\", \"sp-runtime\", \"sp-std\", \"sp-timestamp\"]\n\n[[package]]\nname = \"pallet-transaction-payment\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-support\", \"frame-system\", \"parity-scale-codec\", \"scale-info\", \"serde\", \"sp-core\", \"sp-io\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"pallet-transaction-payment-rpc\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"jsonrpsee\", \"pallet-transaction-payment-rpc-runtime-api\", \"parity-scale-codec\", \"sp-api\", \"sp-blockchain\", \"sp-core\", \"sp-rpc\", \"sp-runtime\", \"sp-weights\"]\n\n[[package]]\nname = \"pallet-transaction-payment-rpc-runtime-api\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"pallet-transaction-payment\", \"parity-scale-codec\", \"sp-api\", \"sp-runtime\", \"sp-weights\"]\n\n[[package]]\nname = \"parity-db\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"dd684a725651d9588ef21f140a328b6b4f64e646b2e931f3e6f14f75eedf9980\"\ndependencies = [\"blake2\", \"crc32fast\", \"fs2\", \"hex\", \"libc\", \"log\", \"lz4\", \"memmap2\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"snap\"]\n\n[[package]]\nname = \"parity-scale-codec\"\nversion = \"3.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c3840933452adf7b3b9145e27086a5a3376c619dca1a21b1e5a5af0d54979bed\"\ndependencies = [\"arrayvec 0.7.2\", \"bitvec\", \"byte-slice-cast\", \"bytes\", \"impl-trait-for-tuples\", \"parity-scale-codec-derive\", \"serde\"]\n\n[[package]]\nname = \"parity-scale-codec-derive\"\nversion = \"3.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b\"\ndependencies = [\"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"parity-send-wrapper\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f\"\n\n[[package]]\nname = \"parity-util-mem\"\nversion = \"0.11.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c32561d248d352148124f036cac253a644685a21dc9fea383eb4907d7bd35a8f\"\ndependencies = [\"cfg-if\", \"ethereum-types\", \"hashbrown\", \"impl-trait-for-tuples\", \"lru 0.7.8\", \"parity-util-mem-derive\", \"parking_lot 0.12.1\", \"primitive-types 0.11.1\", \"smallvec\", \"winapi\"]\n\n[[package]]\nname = \"parity-util-mem-derive\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2\"\ndependencies = [\"proc-macro2\", \"syn\", \"synstructure\"]\n\n[[package]]\nname = \"parity-wasm\"\nversion = \"0.45.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304\"\n\n[[package]]\nname = \"parking\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72\"\n\n[[package]]\nname = \"parking_lot\"\nversion = \"0.11.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99\"\ndependencies = [\"instant\", \"lock_api\", \"parking_lot_core 0.8.6\"]\n\n[[package]]\nname = \"parking_lot\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f\"\ndependencies = [\"lock_api\", \"parking_lot_core 0.9.7\"]\n\n[[package]]\nname = \"parking_lot_core\"\nversion = \"0.8.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc\"\ndependencies = [\"cfg-if\", \"instant\", \"libc\", \"redox_syscall\", \"smallvec\", \"winapi\"]\n\n[[package]]\nname = \"parking_lot_core\"\nversion = \"0.9.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521\"\ndependencies = [\"cfg-if\", \"libc\", \"redox_syscall\", \"smallvec\", \"windows-sys 0.45.0\"]\n\n[[package]]\nname = \"paste\"\nversion = \"1.0.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba\"\n\n[[package]]\nname = \"pbkdf2\"\nversion = \"0.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa\"\ndependencies = [\"crypto-mac 0.11.1\"]\n\n[[package]]\nname = \"pbkdf2\"\nversion = \"0.11.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917\"\ndependencies = [\"digest 0.10.6\"]\n\n[[package]]\nname = \"peeking_take_while\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099\"\n\n[[package]]\nname = \"pem\"\nversion = \"1.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8\"\ndependencies = [\"base64 0.13.1\"]\n\n[[package]]\nname = \"pem-rfc7468\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac\"\ndependencies = [\"base64ct\"]\n\n[[package]]\nname = \"percent-encoding\"\nversion = \"2.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e\"\n\n[[package]]\nname = \"pest\"\nversion = \"2.5.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f\"\ndependencies = [\"thiserror\", \"ucd-trie\"]\n\n[[package]]\nname = \"pest_derive\"\nversion = \"2.5.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea\"\ndependencies = [\"pest\", \"pest_generator\"]\n\n[[package]]\nname = \"pest_generator\"\nversion = \"2.5.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f\"\ndependencies = [\"pest\", \"pest_meta\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"pest_meta\"\nversion = \"2.5.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d\"\ndependencies = [\"once_cell\", \"pest\", \"sha2 0.10.6\"]\n\n[[package]]\nname = \"petgraph\"\nversion = \"0.6.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4\"\ndependencies = [\"fixedbitset\", \"indexmap\"]\n\n[[package]]\nname = \"pin-project\"\nversion = \"1.0.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc\"\ndependencies = [\"pin-project-internal\"]\n\n[[package]]\nname = \"pin-project-internal\"\nversion = \"1.0.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"pin-project-lite\"\nversion = \"0.1.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777\"\n\n[[package]]\nname = \"pin-project-lite\"\nversion = \"0.2.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116\"\n\n[[package]]\nname = \"pin-utils\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184\"\n\n[[package]]\nname = \"pkcs8\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba\"\ndependencies = [\"der\", \"spki\"]\n\n[[package]]\nname = \"pkg-config\"\nversion = \"0.3.26\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160\"\n\n[[package]]\nname = \"platforms\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94\"\n\n[[package]]\nname = \"platforms\"\nversion = \"3.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630\"\n\n[[package]]\nname = \"polling\"\nversion = \"2.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6\"\ndependencies = [\"autocfg\", \"cfg-if\", \"libc\", \"log\", \"wepoll-ffi\", \"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"poly1305\"\nversion = \"0.7.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede\"\ndependencies = [\"cpufeatures\", \"opaque-debug 0.3.0\", \"universal-hash\"]\n\n[[package]]\nname = \"polyval\"\nversion = \"0.4.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd\"\ndependencies = [\"cpuid-bool\", \"opaque-debug 0.3.0\", \"universal-hash\"]\n\n[[package]]\nname = \"polyval\"\nversion = \"0.5.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1\"\ndependencies = [\"cfg-if\", \"cpufeatures\", \"opaque-debug 0.3.0\", \"universal-hash\"]\n\n[[package]]\nname = \"ppv-lite86\"\nversion = \"0.2.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de\"\n\n[[package]]\nname = \"predicates\"\nversion = \"2.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd\"\ndependencies = [\"difflib\", \"float-cmp\", \"itertools\", \"normalize-line-endings\", \"predicates-core\", \"regex\"]\n\n[[package]]\nname = \"predicates-core\"\nversion = \"1.0.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2\"\n\n[[package]]\nname = \"predicates-tree\"\nversion = \"1.0.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d\"\ndependencies = [\"predicates-core\", \"termtree\"]\n\n[[package]]\nname = \"prettyplease\"\nversion = \"0.1.23\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78\"\ndependencies = [\"proc-macro2\", \"syn\"]\n\n[[package]]\nname = \"primitive-types\"\nversion = \"0.11.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e28720988bff275df1f51b171e1b2a18c30d194c4d2b61defdacecd625a5d94a\"\ndependencies = [\"fixed-hash 0.7.0\", \"impl-codec\", \"impl-rlp\", \"impl-serde 0.3.2\", \"uint\"]\n\n[[package]]\nname = \"primitive-types\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66\"\ndependencies = [\"fixed-hash 0.8.0\", \"impl-codec\", \"impl-serde 0.4.0\", \"scale-info\", \"uint\"]\n\n[[package]]\nname = \"proc-macro-crate\"\nversion = \"1.1.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a\"\ndependencies = [\"thiserror\", \"toml\"]\n\n[[package]]\nname = \"proc-macro-error\"\nversion = \"1.0.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c\"\ndependencies = [\"proc-macro-error-attr\", \"proc-macro2\", \"quote\", \"syn\", \"version_check\"]\n\n[[package]]\nname = \"proc-macro-error-attr\"\nversion = \"1.0.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869\"\ndependencies = [\"proc-macro2\", \"quote\", \"version_check\"]\n\n[[package]]\nname = \"proc-macro2\"\nversion = \"1.0.51\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6\"\ndependencies = [\"unicode-ident\"]\n\n[[package]]\nname = \"prometheus\"\nversion = \"0.13.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c\"\ndependencies = [\"cfg-if\", \"fnv\", \"lazy_static\", \"memchr\", \"parking_lot 0.12.1\", \"thiserror\"]\n\n[[package]]\nname = \"prometheus-client\"\nversion = \"0.18.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c\"\ndependencies = [\"dtoa\", \"itoa\", \"parking_lot 0.12.1\", \"prometheus-client-derive-text-encode\"]\n\n[[package]]\nname = \"prometheus-client-derive-text-encode\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"prost\"\nversion = \"0.11.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698\"\ndependencies = [\"bytes\", \"prost-derive\"]\n\n[[package]]\nname = \"prost-build\"\nversion = \"0.11.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e\"\ndependencies = [\"bytes\", \"heck\", \"itertools\", \"lazy_static\", \"log\", \"multimap\", \"petgraph\", \"prettyplease\", \"prost\", \"prost-types\", \"regex\", \"syn\", \"tempfile\", \"which\"]\n\n[[package]]\nname = \"prost-codec\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0dc34979ff898b6e141106178981ce2596c387ea6e62533facfc61a37fc879c0\"\ndependencies = [\"asynchronous-codec\", \"bytes\", \"prost\", \"thiserror\", \"unsigned-varint\"]\n\n[[package]]\nname = \"prost-derive\"\nversion = \"0.11.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d\"\ndependencies = [\"anyhow\", \"itertools\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"prost-types\"\nversion = \"0.11.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788\"\ndependencies = [\"bytes\", \"prost\"]\n\n[[package]]\nname = \"psm\"\nversion = \"0.1.21\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874\"\ndependencies = [\"cc\"]\n\n[[package]]\nname = \"quick-error\"\nversion = \"1.2.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0\"\n\n[[package]]\nname = \"quicksink\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858\"\ndependencies = [\"futures-core\", \"futures-sink\", \"pin-project-lite 0.1.12\"]\n\n[[package]]\nname = \"quinn-proto\"\nversion = \"0.9.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9\"\ndependencies = [\"bytes\", \"rand 0.8.5\", \"ring\", \"rustc-hash\", \"rustls 0.20.8\", \"slab\", \"thiserror\", \"tinyvec\", \"tracing\", \"webpki 0.22.0\"]\n\n[[package]]\nname = \"quote\"\nversion = \"1.0.23\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b\"\ndependencies = [\"proc-macro2\"]\n\n[[package]]\nname = \"radium\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09\"\n\n[[package]]\nname = \"rand\"\nversion = \"0.7.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03\"\ndependencies = [\"getrandom 0.1.16\", \"libc\", \"rand_chacha 0.2.2\", \"rand_core 0.5.1\", \"rand_hc\"]\n\n[[package]]\nname = \"rand\"\nversion = \"0.8.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404\"\ndependencies = [\"libc\", \"rand_chacha 0.3.1\", \"rand_core 0.6.4\"]\n\n[[package]]\nname = \"rand_chacha\"\nversion = \"0.2.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402\"\ndependencies = [\"ppv-lite86\", \"rand_core 0.5.1\"]\n\n[[package]]\nname = \"rand_chacha\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88\"\ndependencies = [\"ppv-lite86\", \"rand_core 0.6.4\"]\n\n[[package]]\nname = \"rand_core\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19\"\ndependencies = [\"getrandom 0.1.16\"]\n\n[[package]]\nname = \"rand_core\"\nversion = \"0.6.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c\"\ndependencies = [\"getrandom 0.2.8\"]\n\n[[package]]\nname = \"rand_distr\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31\"\ndependencies = [\"num-traits\", \"rand 0.8.5\"]\n\n[[package]]\nname = \"rand_hc\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c\"\ndependencies = [\"rand_core 0.5.1\"]\n\n[[package]]\nname = \"rand_pcg\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e\"\ndependencies = [\"rand_core 0.6.4\"]\n\n[[package]]\nname = \"rawpointer\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3\"\n\n[[package]]\nname = \"rayon\"\nversion = \"1.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7\"\ndependencies = [\"either\", \"rayon-core\"]\n\n[[package]]\nname = \"rayon-core\"\nversion = \"1.10.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b\"\ndependencies = [\"crossbeam-channel\", \"crossbeam-deque\", \"crossbeam-utils\", \"num_cpus\"]\n\n[[package]]\nname = \"rcgen\"\nversion = \"0.9.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd\"\ndependencies = [\"pem\", \"ring\", \"time 0.3.17\", \"x509-parser 0.13.2\", \"yasna\"]\n\n[[package]]\nname = \"rcgen\"\nversion = \"0.10.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b\"\ndependencies = [\"pem\", \"ring\", \"time 0.3.17\", \"yasna\"]\n\n[[package]]\nname = \"redox_syscall\"\nversion = \"0.2.16\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a\"\ndependencies = [\"bitflags\"]\n\n[[package]]\nname = \"redox_users\"\nversion = \"0.4.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b\"\ndependencies = [\"getrandom 0.2.8\", \"redox_syscall\", \"thiserror\"]\n\n[[package]]\nname = \"ref-cast\"\nversion = \"1.0.14\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed\"\ndependencies = [\"ref-cast-impl\"]\n\n[[package]]\nname = \"ref-cast-impl\"\nversion = \"1.0.14\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"regalloc2\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d43a209257d978ef079f3d446331d0f1794f5e0fc19b306a199983857833a779\"\ndependencies = [\"fxhash\", \"log\", \"slice-group-by\", \"smallvec\"]\n\n[[package]]\nname = \"regex\"\nversion = \"1.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733\"\ndependencies = [\"aho-corasick\", \"memchr\", \"regex-syntax\"]\n\n[[package]]\nname = \"regex-automata\"\nversion = \"0.1.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132\"\ndependencies = [\"regex-syntax\"]\n\n[[package]]\nname = \"regex-syntax\"\nversion = \"0.6.28\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848\"\n\n[[package]]\nname = \"remove_dir_all\"\nversion = \"0.5.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7\"\ndependencies = [\"winapi\"]\n\n[[package]]\nname = \"resolv-conf\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00\"\ndependencies = [\"hostname\", \"quick-error\"]\n\n[[package]]\nname = \"rfc6979\"\nversion = \"0.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb\"\ndependencies = [\"crypto-bigint\", \"hmac 0.12.1\", \"zeroize\"]\n\n[[package]]\nname = \"ring\"\nversion = \"0.16.20\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc\"\ndependencies = [\"cc\", \"libc\", \"once_cell\", \"spin\", \"untrusted\", \"web-sys\", \"winapi\"]\n\n[[package]]\nname = \"rlp\"\nversion = \"0.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec\"\ndependencies = [\"bytes\", \"rustc-hex\"]\n\n[[package]]\nname = \"rocksdb\"\nversion = \"0.19.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc\"\ndependencies = [\"libc\", \"librocksdb-sys\"]\n\n[[package]]\nname = \"rpassword\"\nversion = \"7.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322\"\ndependencies = [\"libc\", \"rtoolbox\", \"winapi\"]\n\n[[package]]\nname = \"rtcp\"\nversion = \"0.7.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691\"\ndependencies = [\"bytes\", \"thiserror\", \"webrtc-util\"]\n\n[[package]]\nname = \"rtnetlink\"\nversion = \"0.10.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0\"\ndependencies = [\"futures\", \"log\", \"netlink-packet-route\", \"netlink-proto\", \"nix\", \"thiserror\", \"tokio\"]\n\n[[package]]\nname = \"rtoolbox\"\nversion = \"0.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a\"\ndependencies = [\"libc\", \"winapi\"]\n\n[[package]]\nname = \"rtp\"\nversion = \"0.6.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80\"\ndependencies = [\"async-trait\", \"bytes\", \"rand 0.8.5\", \"serde\", \"thiserror\", \"webrtc-util\"]\n\n[[package]]\nname = \"rustc-demangle\"\nversion = \"0.1.21\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342\"\n\n[[package]]\nname = \"rustc-hash\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2\"\n\n[[package]]\nname = \"rustc-hex\"\nversion = \"2.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6\"\n\n[[package]]\nname = \"rustc_version\"\nversion = \"0.2.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a\"\ndependencies = [\"semver 0.9.0\"]\n\n[[package]]\nname = \"rustc_version\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366\"\ndependencies = [\"semver 1.0.16\"]\n\n[[package]]\nname = \"rusticata-macros\"\nversion = \"4.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632\"\ndependencies = [\"nom\"]\n\n[[package]]\nname = \"rustix\"\nversion = \"0.35.13\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9\"\ndependencies = [\"bitflags\", \"errno\", \"io-lifetimes 0.7.5\", \"libc\", \"linux-raw-sys 0.0.46\", \"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"rustix\"\nversion = \"0.36.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644\"\ndependencies = [\"bitflags\", \"errno\", \"io-lifetimes 1.0.5\", \"libc\", \"linux-raw-sys 0.1.4\", \"windows-sys 0.45.0\"]\n\n[[package]]\nname = \"rustls\"\nversion = \"0.19.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7\"\ndependencies = [\"base64 0.13.1\", \"log\", \"ring\", \"sct 0.6.1\", \"webpki 0.21.4\"]\n\n[[package]]\nname = \"rustls\"\nversion = \"0.20.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f\"\ndependencies = [\"log\", \"ring\", \"sct 0.7.0\", \"webpki 0.22.0\"]\n\n[[package]]\nname = \"rustls-native-certs\"\nversion = \"0.6.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50\"\ndependencies = [\"openssl-probe\", \"rustls-pemfile\", \"schannel\", \"security-framework\"]\n\n[[package]]\nname = \"rustls-pemfile\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b\"\ndependencies = [\"base64 0.21.0\"]\n\n[[package]]\nname = \"rustversion\"\nversion = \"1.0.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70\"\n\n[[package]]\nname = \"rw-stream-sink\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04\"\ndependencies = [\"futures\", \"pin-project\", \"static_assertions\"]\n\n[[package]]\nname = \"ryu\"\nversion = \"1.0.12\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde\"\n\n[[package]]\nname = \"safe-mix\"\nversion = \"1.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c\"\ndependencies = [\"rustc_version 0.2.3\"]\n\n[[package]]\nname = \"same-file\"\nversion = \"1.0.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502\"\ndependencies = [\"winapi-util\"]\n\n[[package]]\nname = \"sc-allocator\"\nversion = \"4.1.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"log\", \"sp-core\", \"sp-wasm-interface\", \"thiserror\"]\n\n[[package]]\nname = \"sc-basic-authorship\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"futures\", \"futures-timer\", \"log\", \"parity-scale-codec\", \"sc-block-builder\", \"sc-client-api\", \"sc-proposer-metrics\", \"sc-telemetry\", \"sc-transaction-pool-api\", \"sp-api\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-inherents\", \"sp-runtime\", \"substrate-prometheus-endpoint\"]\n\n[[package]]\nname = \"sc-block-builder\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"sc-client-api\", \"sp-api\", \"sp-block-builder\", \"sp-blockchain\", \"sp-core\", \"sp-inherents\", \"sp-runtime\", \"sp-state-machine\"]\n\n[[package]]\nname = \"sc-chain-spec\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"memmap2\", \"sc-chain-spec-derive\", \"sc-network-common\", \"sc-telemetry\", \"serde\", \"serde_json\", \"sp-core\", \"sp-runtime\"]\n\n[[package]]\nname = \"sc-chain-spec-derive\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sc-cli\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"chrono\", \"clap\", \"fdlimit\", \"futures\", \"libp2p\", \"log\", \"names\", \"parity-scale-codec\", \"rand 0.8.5\", \"regex\", \"rpassword\", \"sc-client-api\", \"sc-client-db\", \"sc-keystore\", \"sc-network\", \"sc-network-common\", \"sc-service\", \"sc-telemetry\", \"sc-tracing\", \"sc-utils\", \"serde\", \"serde_json\", \"sp-blockchain\", \"sp-core\", \"sp-keyring\", \"sp-keystore\", \"sp-panic-handler\", \"sp-runtime\", \"sp-version\", \"thiserror\", \"tiny-bip39\", \"tokio\"]\n\n[[package]]\nname = \"sc-client-api\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"fnv\", \"futures\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sc-executor\", \"sc-transaction-pool-api\", \"sc-utils\", \"sp-api\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-database\", \"sp-externalities\", \"sp-keystore\", \"sp-runtime\", \"sp-state-machine\", \"sp-storage\", \"substrate-prometheus-endpoint\"]\n\n[[package]]\nname = \"sc-client-db\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"hash-db\", \"kvdb\", \"kvdb-memorydb\", \"kvdb-rocksdb\", \"linked-hash-map\", \"log\", \"parity-db\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sc-client-api\", \"sc-state-db\", \"sp-arithmetic\", \"sp-blockchain\", \"sp-core\", \"sp-database\", \"sp-runtime\", \"sp-state-machine\", \"sp-trie\"]\n\n[[package]]\nname = \"sc-consensus\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"futures-timer\", \"libp2p\", \"log\", \"mockall\", \"parking_lot 0.12.1\", \"sc-client-api\", \"sc-utils\", \"serde\", \"sp-api\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-runtime\", \"sp-state-machine\", \"substrate-prometheus-endpoint\", \"thiserror\"]\n\n[[package]]\nname = \"sc-consensus-aura\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"log\", \"parity-scale-codec\", \"sc-block-builder\", \"sc-client-api\", \"sc-consensus\", \"sc-consensus-slots\", \"sc-telemetry\", \"sp-api\", \"sp-application-crypto\", \"sp-block-builder\", \"sp-blockchain\", \"sp-consensus\", \"sp-consensus-aura\", \"sp-consensus-slots\", \"sp-core\", \"sp-inherents\", \"sp-keystore\", \"sp-runtime\", \"substrate-prometheus-endpoint\", \"thiserror\"]\n\n[[package]]\nname = \"sc-consensus-slots\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"futures-timer\", \"log\", \"parity-scale-codec\", \"sc-client-api\", \"sc-consensus\", \"sc-telemetry\", \"sp-arithmetic\", \"sp-blockchain\", \"sp-consensus\", \"sp-consensus-slots\", \"sp-core\", \"sp-inherents\", \"sp-runtime\", \"sp-state-machine\"]\n\n[[package]]\nname = \"sc-executor\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"lru 0.8.1\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sc-executor-common\", \"sc-executor-wasmi\", \"sc-executor-wasmtime\", \"sp-api\", \"sp-core\", \"sp-externalities\", \"sp-io\", \"sp-panic-handler\", \"sp-runtime-interface\", \"sp-trie\", \"sp-version\", \"sp-wasm-interface\", \"tracing\", \"wasmi\"]\n\n[[package]]\nname = \"sc-executor-common\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"sc-allocator\", \"sp-maybe-compressed-blob\", \"sp-wasm-interface\", \"thiserror\", \"wasm-instrument\", \"wasmi\"]\n\n[[package]]\nname = \"sc-executor-wasmi\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"log\", \"sc-allocator\", \"sc-executor-common\", \"sp-runtime-interface\", \"sp-wasm-interface\", \"wasmi\"]\n\n[[package]]\nname = \"sc-executor-wasmtime\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"cfg-if\", \"libc\", \"log\", \"once_cell\", \"rustix 0.35.13\", \"sc-allocator\", \"sc-executor-common\", \"sp-runtime-interface\", \"sp-wasm-interface\", \"wasmtime\"]\n\n[[package]]\nname = \"sc-finality-grandpa\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"ahash\", \"array-bytes\", \"async-trait\", \"dyn-clone\", \"finality-grandpa\", \"fork-tree\", \"futures\", \"futures-timer\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"sc-block-builder\", \"sc-chain-spec\", \"sc-client-api\", \"sc-consensus\", \"sc-network\", \"sc-network-common\", \"sc-network-gossip\", \"sc-telemetry\", \"sc-utils\", \"serde_json\", \"sp-api\", \"sp-application-crypto\", \"sp-arithmetic\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-finality-grandpa\", \"sp-keystore\", \"sp-runtime\", \"substrate-prometheus-endpoint\", \"thiserror\"]\n\n[[package]]\nname = \"sc-informant\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"ansi_term\", \"futures\", \"futures-timer\", \"log\", \"sc-client-api\", \"sc-network-common\", \"sp-blockchain\", \"sp-runtime\"]\n\n[[package]]\nname = \"sc-keystore\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"async-trait\", \"parking_lot 0.12.1\", \"serde_json\", \"sp-application-crypto\", \"sp-core\", \"sp-keystore\", \"thiserror\"]\n\n[[package]]\nname = \"sc-network\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"async-trait\", \"asynchronous-codec\", \"backtrace\", \"bytes\", \"either\", \"fnv\", \"futures\", \"futures-timer\", \"ip_network\", \"libp2p\", \"log\", \"lru 0.8.1\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"pin-project\", \"rand 0.8.5\", \"sc-block-builder\", \"sc-client-api\", \"sc-consensus\", \"sc-network-common\", \"sc-peerset\", \"sc-utils\", \"serde\", \"serde_json\", \"smallvec\", \"sp-arithmetic\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-runtime\", \"substrate-prometheus-endpoint\", \"thiserror\", \"unsigned-varint\", \"zeroize\"]\n\n[[package]]\nname = \"sc-network-bitswap\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"cid\", \"futures\", \"libp2p\", \"log\", \"prost\", \"prost-build\", \"sc-client-api\", \"sc-network-common\", \"sp-blockchain\", \"sp-runtime\", \"thiserror\", \"unsigned-varint\"]\n\n[[package]]\nname = \"sc-network-common\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"bitflags\", \"bytes\", \"futures\", \"futures-timer\", \"libp2p\", \"linked_hash_set\", \"parity-scale-codec\", \"prost-build\", \"sc-consensus\", \"sc-peerset\", \"serde\", \"smallvec\", \"sp-blockchain\", \"sp-consensus\", \"sp-finality-grandpa\", \"sp-runtime\", \"substrate-prometheus-endpoint\", \"thiserror\"]\n\n[[package]]\nname = \"sc-network-gossip\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"ahash\", \"futures\", \"futures-timer\", \"libp2p\", \"log\", \"lru 0.8.1\", \"sc-network-common\", \"sc-peerset\", \"sp-runtime\", \"substrate-prometheus-endpoint\", \"tracing\"]\n\n[[package]]\nname = \"sc-network-light\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"futures\", \"libp2p\", \"log\", \"parity-scale-codec\", \"prost\", \"prost-build\", \"sc-client-api\", \"sc-network-common\", \"sc-peerset\", \"sp-blockchain\", \"sp-core\", \"sp-runtime\", \"thiserror\"]\n\n[[package]]\nname = \"sc-network-sync\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"async-trait\", \"fork-tree\", \"futures\", \"libp2p\", \"log\", \"lru 0.8.1\", \"mockall\", \"parity-scale-codec\", \"prost\", \"prost-build\", \"sc-client-api\", \"sc-consensus\", \"sc-network-common\", \"sc-peerset\", \"sc-utils\", \"smallvec\", \"sp-arithmetic\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-finality-grandpa\", \"sp-runtime\", \"substrate-prometheus-endpoint\", \"thiserror\"]\n\n[[package]]\nname = \"sc-network-transactions\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"futures\", \"libp2p\", \"log\", \"parity-scale-codec\", \"pin-project\", \"sc-network-common\", \"sc-peerset\", \"sc-utils\", \"sp-consensus\", \"sp-runtime\", \"substrate-prometheus-endpoint\"]\n\n[[package]]\nname = \"sc-offchain\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"bytes\", \"fnv\", \"futures\", \"futures-timer\", \"hyper\", \"hyper-rustls\", \"libp2p\", \"num_cpus\", \"once_cell\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"sc-client-api\", \"sc-network-common\", \"sc-peerset\", \"sc-utils\", \"sp-api\", \"sp-core\", \"sp-offchain\", \"sp-runtime\", \"threadpool\", \"tracing\"]\n\n[[package]]\nname = \"sc-peerset\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"futures\", \"libp2p\", \"log\", \"sc-utils\", \"serde_json\", \"wasm-timer\"]\n\n[[package]]\nname = \"sc-proposer-metrics\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"log\", \"substrate-prometheus-endpoint\"]\n\n[[package]]\nname = \"sc-rpc\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"futures\", \"jsonrpsee\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sc-block-builder\", \"sc-chain-spec\", \"sc-client-api\", \"sc-rpc-api\", \"sc-tracing\", \"sc-transaction-pool-api\", \"sc-utils\", \"serde_json\", \"sp-api\", \"sp-blockchain\", \"sp-core\", \"sp-keystore\", \"sp-offchain\", \"sp-rpc\", \"sp-runtime\", \"sp-session\", \"sp-version\"]\n\n[[package]]\nname = \"sc-rpc-api\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"jsonrpsee\", \"parity-scale-codec\", \"sc-chain-spec\", \"sc-transaction-pool-api\", \"scale-info\", \"serde\", \"serde_json\", \"sp-core\", \"sp-rpc\", \"sp-runtime\", \"sp-version\", \"thiserror\"]\n\n[[package]]\nname = \"sc-rpc-server\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"http\", \"jsonrpsee\", \"log\", \"serde_json\", \"substrate-prometheus-endpoint\", \"tokio\", \"tower\", \"tower-http\"]\n\n[[package]]\nname = \"sc-rpc-spec-v2\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"futures\", \"futures-util\", \"hex\", \"jsonrpsee\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sc-chain-spec\", \"sc-client-api\", \"sc-transaction-pool-api\", \"serde\", \"sp-api\", \"sp-blockchain\", \"sp-core\", \"sp-runtime\", \"sp-version\", \"thiserror\", \"tokio-stream\"]\n\n[[package]]\nname = \"sc-service\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"directories\", \"exit-future\", \"futures\", \"futures-timer\", \"jsonrpsee\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"pin-project\", \"rand 0.8.5\", \"sc-block-builder\", \"sc-chain-spec\", \"sc-client-api\", \"sc-client-db\", \"sc-consensus\", \"sc-executor\", \"sc-informant\", \"sc-keystore\", \"sc-network\", \"sc-network-bitswap\", \"sc-network-common\", \"sc-network-light\", \"sc-network-sync\", \"sc-network-transactions\", \"sc-offchain\", \"sc-rpc\", \"sc-rpc-server\", \"sc-rpc-spec-v2\", \"sc-sysinfo\", \"sc-telemetry\", \"sc-tracing\", \"sc-transaction-pool\", \"sc-transaction-pool-api\", \"sc-utils\", \"serde\", \"serde_json\", \"sp-api\", \"sp-blockchain\", \"sp-consensus\", \"sp-core\", \"sp-externalities\", \"sp-keystore\", \"sp-runtime\", \"sp-session\", \"sp-state-machine\", \"sp-storage\", \"sp-transaction-pool\", \"sp-transaction-storage-proof\", \"sp-trie\", \"sp-version\", \"static_init\", \"substrate-prometheus-endpoint\", \"tempfile\", \"thiserror\", \"tokio\", \"tracing\", \"tracing-futures\"]\n\n[[package]]\nname = \"sc-state-db\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sp-core\"]\n\n[[package]]\nname = \"sc-sysinfo\"\nversion = \"6.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"futures\", \"libc\", \"log\", \"rand 0.8.5\", \"rand_pcg\", \"regex\", \"sc-telemetry\", \"serde\", \"serde_json\", \"sp-core\", \"sp-io\", \"sp-std\"]\n\n[[package]]\nname = \"sc-telemetry\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"chrono\", \"futures\", \"libp2p\", \"log\", \"parking_lot 0.12.1\", \"pin-project\", \"rand 0.8.5\", \"sc-utils\", \"serde\", \"serde_json\", \"thiserror\", \"wasm-timer\"]\n\n[[package]]\nname = \"sc-tracing\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"ansi_term\", \"atty\", \"chrono\", \"lazy_static\", \"libc\", \"log\", \"once_cell\", \"parking_lot 0.12.1\", \"regex\", \"rustc-hash\", \"sc-client-api\", \"sc-rpc-server\", \"sc-tracing-proc-macro\", \"serde\", \"sp-api\", \"sp-blockchain\", \"sp-core\", \"sp-rpc\", \"sp-runtime\", \"sp-tracing\", \"thiserror\", \"tracing\", \"tracing-log\", \"tracing-subscriber\"]\n\n[[package]]\nname = \"sc-tracing-proc-macro\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sc-transaction-pool\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"futures-timer\", \"linked-hash-map\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sc-client-api\", \"sc-transaction-pool-api\", \"sc-utils\", \"serde\", \"sp-api\", \"sp-blockchain\", \"sp-core\", \"sp-runtime\", \"sp-tracing\", \"sp-transaction-pool\", \"substrate-prometheus-endpoint\", \"thiserror\"]\n\n[[package]]\nname = \"sc-transaction-pool-api\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"log\", \"serde\", \"sp-blockchain\", \"sp-runtime\", \"thiserror\"]\n\n[[package]]\nname = \"sc-utils\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"backtrace\", \"futures\", \"futures-timer\", \"lazy_static\", \"log\", \"parking_lot 0.12.1\", \"prometheus\"]\n\n[[package]]\nname = \"scale-info\"\nversion = \"2.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608\"\ndependencies = [\"bitvec\", \"cfg-if\", \"derive_more\", \"parity-scale-codec\", \"scale-info-derive\", \"serde\"]\n\n[[package]]\nname = \"scale-info-derive\"\nversion = \"2.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c\"\ndependencies = [\"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"schannel\"\nversion = \"0.1.21\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3\"\ndependencies = [\"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"schnorrkel\"\nversion = \"0.9.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862\"\ndependencies = [\"arrayref\", \"arrayvec 0.5.2\", \"curve25519-dalek 2.1.3\", \"getrandom 0.1.16\", \"merlin\", \"rand 0.7.3\", \"rand_core 0.5.1\", \"sha2 0.8.2\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"scopeguard\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd\"\n\n[[package]]\nname = \"scratch\"\nversion = \"1.0.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2\"\n\n[[package]]\nname = \"sct\"\nversion = \"0.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce\"\ndependencies = [\"ring\", \"untrusted\"]\n\n[[package]]\nname = \"sct\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4\"\ndependencies = [\"ring\", \"untrusted\"]\n\n[[package]]\nname = \"sdp\"\nversion = \"0.5.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13\"\ndependencies = [\"rand 0.8.5\", \"substring\", \"thiserror\", \"url\"]\n\n[[package]]\nname = \"sec1\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928\"\ndependencies = [\"base16ct\", \"der\", \"generic-array 0.14.6\", \"pkcs8\", \"subtle\", \"zeroize\"]\n\n[[package]]\nname = \"secp256k1\"\nversion = \"0.24.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62\"\ndependencies = [\"secp256k1-sys\"]\n\n[[package]]\nname = \"secp256k1-sys\"\nversion = \"0.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b\"\ndependencies = [\"cc\"]\n\n[[package]]\nname = \"secrecy\"\nversion = \"0.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e\"\ndependencies = [\"zeroize\"]\n\n[[package]]\nname = \"security-framework\"\nversion = \"2.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254\"\ndependencies = [\"bitflags\", \"core-foundation\", \"core-foundation-sys\", \"libc\", \"security-framework-sys\"]\n\n[[package]]\nname = \"security-framework-sys\"\nversion = \"2.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4\"\ndependencies = [\"core-foundation-sys\", \"libc\"]\n\n[[package]]\nname = \"semver\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537\"\ndependencies = [\"semver-parser\"]\n\n[[package]]\nname = \"semver\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403\"\ndependencies = [\"semver-parser\"]\n\n[[package]]\nname = \"semver\"\nversion = \"1.0.16\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"semver-parser\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3\"\n\n[[package]]\nname = \"serde\"\nversion = \"1.0.152\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb\"\ndependencies = [\"serde_derive\"]\n\n[[package]]\nname = \"serde-tuple-vec-map\"\nversion = \"1.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a04d0ebe0de77d7d445bb729a895dcb0a288854b267ca85f030ce51cdc578c82\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"serde_bytes\"\nversion = \"0.11.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"serde_derive\"\nversion = \"1.0.152\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"serde_json\"\nversion = \"1.0.92\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7434af0dc1cbd59268aa98b4c22c131c0584d2232f6fb166efb993e2832e896a\"\ndependencies = [\"itoa\", \"ryu\", \"serde\"]\n\n[[package]]\nname = \"serde_with\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"89df7a26519371a3cce44fbb914c2819c84d9b897890987fa3ab096491cc0ea8\"\ndependencies = [\"serde\", \"serde_with_macros\"]\n\n[[package]]\nname = \"serde_with_macros\"\nversion = \"2.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a1966009f3c05f095697c537312f5415d1e3ed31ce0a56942bac4c771c5c335e\"\ndependencies = [\"darling\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sha-1\"\nversion = \"0.9.8\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6\"\ndependencies = [\"block-buffer 0.9.0\", \"cfg-if\", \"cpufeatures\", \"digest 0.9.0\", \"opaque-debug 0.3.0\"]\n\n[[package]]\nname = \"sha2\"\nversion = \"0.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69\"\ndependencies = [\"block-buffer 0.7.3\", \"digest 0.8.1\", \"fake-simd\", \"opaque-debug 0.2.3\"]\n\n[[package]]\nname = \"sha2\"\nversion = \"0.9.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800\"\ndependencies = [\"block-buffer 0.9.0\", \"cfg-if\", \"cpufeatures\", \"digest 0.9.0\", \"opaque-debug 0.3.0\"]\n\n[[package]]\nname = \"sha2\"\nversion = \"0.10.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0\"\ndependencies = [\"cfg-if\", \"cpufeatures\", \"digest 0.10.6\"]\n\n[[package]]\nname = \"sha3\"\nversion = \"0.10.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9\"\ndependencies = [\"digest 0.10.6\", \"keccak\"]\n\n[[package]]\nname = \"sharded-slab\"\nversion = \"0.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31\"\ndependencies = [\"lazy_static\"]\n\n[[package]]\nname = \"shlex\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3\"\n\n[[package]]\nname = \"signal-hook-registry\"\nversion = \"1.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0\"\ndependencies = [\"libc\"]\n\n[[package]]\nname = \"signature\"\nversion = \"1.6.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c\"\ndependencies = [\"digest 0.10.6\", \"rand_core 0.6.4\"]\n\n[[package]]\nname = \"simba\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8e82063457853d00243beda9952e910b82593e4b07ae9f721b9278a99a0d3d5c\"\ndependencies = [\"approx\", \"num-complex\", \"num-traits\", \"paste\"]\n\n[[package]]\nname = \"slab\"\nversion = \"0.4.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef\"\ndependencies = [\"autocfg\"]\n\n[[package]]\nname = \"slice-group-by\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec\"\n\n[[package]]\nname = \"smallvec\"\nversion = \"1.10.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0\"\n\n[[package]]\nname = \"snap\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831\"\n\n[[package]]\nname = \"snow\"\nversion = \"0.9.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d\"\ndependencies = [\"aes-gcm 0.9.4\", \"blake2\", \"chacha20poly1305\", \"curve25519-dalek 4.0.0-rc.0\", \"rand_core 0.6.4\", \"ring\", \"rustc_version 0.4.0\", \"sha2 0.10.6\", \"subtle\"]\n\n[[package]]\nname = \"socket2\"\nversion = \"0.4.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd\"\ndependencies = [\"libc\", \"winapi\"]\n\n[[package]]\nname = \"soketto\"\nversion = \"0.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2\"\ndependencies = [\"base64 0.13.1\", \"bytes\", \"flate2\", \"futures\", \"http\", \"httparse\", \"log\", \"rand 0.8.5\", \"sha-1\"]\n\n[[package]]\nname = \"sp-api\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"hash-db\", \"log\", \"parity-scale-codec\", \"sp-api-proc-macro\", \"sp-core\", \"sp-runtime\", \"sp-state-machine\", \"sp-std\", \"sp-trie\", \"sp-version\", \"thiserror\"]\n\n[[package]]\nname = \"sp-api-proc-macro\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"blake2\", \"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sp-application-crypto\"\nversion = \"7.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"scale-info\", \"serde\", \"sp-core\", \"sp-io\", \"sp-std\"]\n\n[[package]]\nname = \"sp-arithmetic\"\nversion = \"6.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"integer-sqrt\", \"num-traits\", \"parity-scale-codec\", \"scale-info\", \"serde\", \"sp-std\", \"static_assertions\"]\n\n[[package]]\nname = \"sp-authorship\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"parity-scale-codec\", \"sp-inherents\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"sp-block-builder\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"sp-api\", \"sp-inherents\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"sp-blockchain\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"futures\", \"log\", \"lru 0.8.1\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"sp-api\", \"sp-consensus\", \"sp-database\", \"sp-runtime\", \"sp-state-machine\", \"thiserror\"]\n\n[[package]]\nname = \"sp-consensus\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"log\", \"parity-scale-codec\", \"sp-core\", \"sp-inherents\", \"sp-runtime\", \"sp-state-machine\", \"sp-std\", \"sp-version\", \"thiserror\"]\n\n[[package]]\nname = \"sp-consensus-aura\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"parity-scale-codec\", \"scale-info\", \"sp-api\", \"sp-application-crypto\", \"sp-consensus\", \"sp-consensus-slots\", \"sp-inherents\", \"sp-runtime\", \"sp-std\", \"sp-timestamp\"]\n\n[[package]]\nname = \"sp-consensus-slots\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"scale-info\", \"serde\", \"sp-std\", \"sp-timestamp\"]\n\n[[package]]\nname = \"sp-core\"\nversion = \"7.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"array-bytes\", \"base58\", \"bitflags\", \"blake2\", \"dyn-clonable\", \"ed25519-zebra\", \"futures\", \"hash-db\", \"hash256-std-hasher\", \"impl-serde 0.4.0\", \"lazy_static\", \"libsecp256k1\", \"log\", \"merlin\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"primitive-types 0.12.1\", \"rand 0.8.5\", \"regex\", \"scale-info\", \"schnorrkel\", \"secp256k1\", \"secrecy\", \"serde\", \"sp-core-hashing\", \"sp-debug-derive\", \"sp-externalities\", \"sp-runtime-interface\", \"sp-std\", \"sp-storage\", \"ss58-registry\", \"substrate-bip39\", \"thiserror\", \"tiny-bip39\", \"zeroize\"]\n\n[[package]]\nname = \"sp-core-hashing\"\nversion = \"5.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"blake2\", \"byteorder\", \"digest 0.10.6\", \"sha2 0.10.6\", \"sha3\", \"sp-std\", \"twox-hash\"]\n\n[[package]]\nname = \"sp-core-hashing-proc-macro\"\nversion = \"5.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"proc-macro2\", \"quote\", \"sp-core-hashing\", \"syn\"]\n\n[[package]]\nname = \"sp-database\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"kvdb\", \"parking_lot 0.12.1\"]\n\n[[package]]\nname = \"sp-debug-derive\"\nversion = \"5.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sp-externalities\"\nversion = \"0.13.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"environmental\", \"parity-scale-codec\", \"sp-std\", \"sp-storage\"]\n\n[[package]]\nname = \"sp-finality-grandpa\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"finality-grandpa\", \"log\", \"parity-scale-codec\", \"scale-info\", \"serde\", \"sp-api\", \"sp-application-crypto\", \"sp-core\", \"sp-keystore\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"sp-inherents\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"impl-trait-for-tuples\", \"parity-scale-codec\", \"sp-core\", \"sp-runtime\", \"sp-std\", \"thiserror\"]\n\n[[package]]\nname = \"sp-io\"\nversion = \"7.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"bytes\", \"ed25519\", \"ed25519-dalek\", \"futures\", \"libsecp256k1\", \"log\", \"parity-scale-codec\", \"secp256k1\", \"sp-core\", \"sp-externalities\", \"sp-keystore\", \"sp-runtime-interface\", \"sp-state-machine\", \"sp-std\", \"sp-tracing\", \"sp-trie\", \"tracing\", \"tracing-core\"]\n\n[[package]]\nname = \"sp-keyring\"\nversion = \"7.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"lazy_static\", \"sp-core\", \"sp-runtime\", \"strum\"]\n\n[[package]]\nname = \"sp-keystore\"\nversion = \"0.13.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures\", \"merlin\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"schnorrkel\", \"serde\", \"sp-core\", \"sp-externalities\", \"thiserror\"]\n\n[[package]]\nname = \"sp-maybe-compressed-blob\"\nversion = \"4.1.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"thiserror\", \"zstd\"]\n\n[[package]]\nname = \"sp-offchain\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"sp-api\", \"sp-core\", \"sp-runtime\"]\n\n[[package]]\nname = \"sp-panic-handler\"\nversion = \"5.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"backtrace\", \"lazy_static\", \"regex\"]\n\n[[package]]\nname = \"sp-rpc\"\nversion = \"6.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"rustc-hash\", \"serde\", \"sp-core\"]\n\n[[package]]\nname = \"sp-runtime\"\nversion = \"7.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"either\", \"hash256-std-hasher\", \"impl-trait-for-tuples\", \"log\", \"parity-scale-codec\", \"paste\", \"rand 0.8.5\", \"scale-info\", \"serde\", \"sp-application-crypto\", \"sp-arithmetic\", \"sp-core\", \"sp-io\", \"sp-std\", \"sp-weights\"]\n\n[[package]]\nname = \"sp-runtime-interface\"\nversion = \"7.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"bytes\", \"impl-trait-for-tuples\", \"parity-scale-codec\", \"primitive-types 0.12.1\", \"sp-externalities\", \"sp-runtime-interface-proc-macro\", \"sp-std\", \"sp-storage\", \"sp-tracing\", \"sp-wasm-interface\", \"static_assertions\"]\n\n[[package]]\nname = \"sp-runtime-interface-proc-macro\"\nversion = \"6.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"Inflector\", \"proc-macro-crate\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sp-session\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"scale-info\", \"sp-api\", \"sp-core\", \"sp-runtime\", \"sp-staking\", \"sp-std\"]\n\n[[package]]\nname = \"sp-staking\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"scale-info\", \"sp-core\", \"sp-runtime\", \"sp-std\"]\n\n[[package]]\nname = \"sp-state-machine\"\nversion = \"0.13.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"hash-db\", \"log\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"smallvec\", \"sp-core\", \"sp-externalities\", \"sp-panic-handler\", \"sp-std\", \"sp-trie\", \"thiserror\", \"tracing\"]\n\n[[package]]\nname = \"sp-std\"\nversion = \"5.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\n\n[[package]]\nname = \"sp-storage\"\nversion = \"7.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"impl-serde 0.4.0\", \"parity-scale-codec\", \"ref-cast\", \"serde\", \"sp-debug-derive\", \"sp-std\"]\n\n[[package]]\nname = \"sp-timestamp\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"futures-timer\", \"log\", \"parity-scale-codec\", \"sp-inherents\", \"sp-runtime\", \"sp-std\", \"thiserror\"]\n\n[[package]]\nname = \"sp-tracing\"\nversion = \"6.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"sp-std\", \"tracing\", \"tracing-core\", \"tracing-subscriber\"]\n\n[[package]]\nname = \"sp-transaction-pool\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"sp-api\", \"sp-runtime\"]\n\n[[package]]\nname = \"sp-transaction-storage-proof\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"log\", \"parity-scale-codec\", \"scale-info\", \"sp-core\", \"sp-inherents\", \"sp-runtime\", \"sp-std\", \"sp-trie\"]\n\n[[package]]\nname = \"sp-trie\"\nversion = \"7.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"ahash\", \"hash-db\", \"hashbrown\", \"lazy_static\", \"lru 0.8.1\", \"memory-db\", \"nohash-hasher\", \"parity-scale-codec\", \"parking_lot 0.12.1\", \"scale-info\", \"sp-core\", \"sp-std\", \"thiserror\", \"tracing\", \"trie-db\", \"trie-root\"]\n\n[[package]]\nname = \"sp-version\"\nversion = \"5.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"impl-serde 0.4.0\", \"parity-scale-codec\", \"parity-wasm\", \"scale-info\", \"serde\", \"sp-core-hashing-proc-macro\", \"sp-runtime\", \"sp-std\", \"sp-version-proc-macro\", \"thiserror\"]\n\n[[package]]\nname = \"sp-version-proc-macro\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"sp-wasm-interface\"\nversion = \"7.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"impl-trait-for-tuples\", \"log\", \"parity-scale-codec\", \"sp-std\", \"wasmi\", \"wasmtime\"]\n\n[[package]]\nname = \"sp-weights\"\nversion = \"4.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"parity-scale-codec\", \"scale-info\", \"serde\", \"smallvec\", \"sp-arithmetic\", \"sp-core\", \"sp-debug-derive\", \"sp-std\"]\n\n[[package]]\nname = \"spin\"\nversion = \"0.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d\"\n\n[[package]]\nname = \"spki\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b\"\ndependencies = [\"base64ct\", \"der\"]\n\n[[package]]\nname = \"ss58-registry\"\nversion = \"1.38.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e40c020d72bc0a9c5660bb71e4a6fdef081493583062c474740a7d59f55f0e7b\"\ndependencies = [\"Inflector\", \"num-format\", \"proc-macro2\", \"quote\", \"serde\", \"serde_json\", \"unicode-xid\"]\n\n[[package]]\nname = \"stable_deref_trait\"\nversion = \"1.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3\"\n\n[[package]]\nname = \"static_assertions\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f\"\n\n[[package]]\nname = \"static_init\"\nversion = \"1.0.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6\"\ndependencies = [\"bitflags\", \"cfg_aliases\", \"libc\", \"parking_lot 0.11.2\", \"parking_lot_core 0.8.6\", \"static_init_macro\", \"winapi\"]\n\n[[package]]\nname = \"static_init_macro\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf\"\ndependencies = [\"cfg_aliases\", \"memchr\", \"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"statrs\"\nversion = \"0.15.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"05bdbb8e4e78216a85785a85d3ec3183144f98d0097b9281802c019bb07a6f05\"\ndependencies = [\"approx\", \"lazy_static\", \"nalgebra\", \"num-traits\", \"rand 0.8.5\"]\n\n[[package]]\nname = \"strsim\"\nversion = \"0.10.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623\"\n\n[[package]]\nname = \"strum\"\nversion = \"0.24.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f\"\ndependencies = [\"strum_macros\"]\n\n[[package]]\nname = \"strum_macros\"\nversion = \"0.24.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59\"\ndependencies = [\"heck\", \"proc-macro2\", \"quote\", \"rustversion\", \"syn\"]\n\n[[package]]\nname = \"stun\"\nversion = \"0.4.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25\"\ndependencies = [\"base64 0.13.1\", \"crc\", \"lazy_static\", \"md-5\", \"rand 0.8.5\", \"ring\", \"subtle\", \"thiserror\", \"tokio\", \"url\", \"webrtc-util\"]\n\n[[package]]\nname = \"substrate-bip39\"\nversion = \"0.4.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c\"\ndependencies = [\"hmac 0.11.0\", \"pbkdf2 0.8.0\", \"schnorrkel\", \"sha2 0.9.9\", \"zeroize\"]\n\n[[package]]\nname = \"substrate-build-script-utils\"\nversion = \"3.0.0\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"platforms 2.0.0\"]\n\n[[package]]\nname = \"substrate-fixed\"\nversion = \"0.5.9\"\nsource = \"git+https://github.com/encointer/substrate-fixed.git?tag=v0.5.9#a4fb461aae6205ffc55bed51254a40c52be04e5d\"\ndependencies = [\"parity-scale-codec\", \"scale-info\", \"typenum 1.16.0 (git+https://github.com/encointer/typenum?tag=v1.16.0)\"]\n\n[[package]]\nname = \"substrate-frame-rpc-system\"\nversion = \"4.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"frame-system-rpc-runtime-api\", \"futures\", \"jsonrpsee\", \"log\", \"parity-scale-codec\", \"sc-rpc-api\", \"sc-transaction-pool-api\", \"sp-api\", \"sp-block-builder\", \"sp-blockchain\", \"sp-core\", \"sp-runtime\"]\n\n[[package]]\nname = \"substrate-prometheus-endpoint\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"hyper\", \"log\", \"prometheus\", \"thiserror\", \"tokio\"]\n\n[[package]]\nname = \"substrate-rpc-client\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"async-trait\", \"jsonrpsee\", \"log\", \"sc-rpc-api\", \"serde\", \"sp-runtime\"]\n\n[[package]]\nname = \"substrate-wasm-builder\"\nversion = \"5.0.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"ansi_term\", \"build-helper\", \"cargo_metadata\", \"filetime\", \"sp-maybe-compressed-blob\", \"strum\", \"tempfile\", \"toml\", \"walkdir\", \"wasm-opt\"]\n\n[[package]]\nname = \"substring\"\nversion = \"1.4.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86\"\ndependencies = [\"autocfg\"]\n\n[[package]]\nname = \"subtensor-custom-rpc\"\nversion = \"0.0.1\"\ndependencies = [\"jsonrpsee\", \"pallet-subtensor\", \"parity-scale-codec\", \"serde\", \"sp-api\", \"sp-blockchain\", \"sp-rpc\", \"sp-runtime\", \"subtensor-custom-rpc-runtime-api\"]\n\n[[package]]\nname = \"subtensor-custom-rpc-runtime-api\"\nversion = \"0.0.1\"\ndependencies = [\"frame-support\", \"pallet-subtensor\", \"serde\", \"sp-api\"]\n\n[[package]]\nname = \"subtle\"\nversion = \"2.4.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601\"\n\n[[package]]\nname = \"syn\"\nversion = \"1.0.107\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5\"\ndependencies = [\"proc-macro2\", \"quote\", \"unicode-ident\"]\n\n[[package]]\nname = \"synstructure\"\nversion = \"0.12.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\", \"unicode-xid\"]\n\n[[package]]\nname = \"system-configuration\"\nversion = \"0.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd\"\ndependencies = [\"bitflags\", \"core-foundation\", \"system-configuration-sys\"]\n\n[[package]]\nname = \"system-configuration-sys\"\nversion = \"0.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9\"\ndependencies = [\"core-foundation-sys\", \"libc\"]\n\n[[package]]\nname = \"tap\"\nversion = \"1.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369\"\n\n[[package]]\nname = \"target-lexicon\"\nversion = \"0.12.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9410d0f6853b1d94f0e519fb95df60f29d2c1eff2d921ffdf01a4c8a3b54f12d\"\n\n[[package]]\nname = \"tempfile\"\nversion = \"3.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4\"\ndependencies = [\"cfg-if\", \"fastrand\", \"libc\", \"redox_syscall\", \"remove_dir_all\", \"winapi\"]\n\n[[package]]\nname = \"termcolor\"\nversion = \"1.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6\"\ndependencies = [\"winapi-util\"]\n\n[[package]]\nname = \"termtree\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8\"\n\n[[package]]\nname = \"thiserror\"\nversion = \"1.0.38\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0\"\ndependencies = [\"thiserror-impl\"]\n\n[[package]]\nname = \"thiserror-impl\"\nversion = \"1.0.38\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"thousands\"\nversion = \"0.2.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820\"\n\n[[package]]\nname = \"thread_local\"\nversion = \"1.1.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180\"\ndependencies = [\"once_cell\"]\n\n[[package]]\nname = \"threadpool\"\nversion = \"1.8.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa\"\ndependencies = [\"num_cpus\"]\n\n[[package]]\nname = \"tikv-jemalloc-sys\"\nversion = \"0.5.3+5.3.0-patched\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8\"\ndependencies = [\"cc\", \"libc\"]\n\n[[package]]\nname = \"time\"\nversion = \"0.1.45\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a\"\ndependencies = [\"libc\", \"wasi 0.10.0+wasi-snapshot-preview1\", \"winapi\"]\n\n[[package]]\nname = \"time\"\nversion = \"0.3.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376\"\ndependencies = [\"itoa\", \"serde\", \"time-core\", \"time-macros\"]\n\n[[package]]\nname = \"time-core\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd\"\n\n[[package]]\nname = \"time-macros\"\nversion = \"0.2.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2\"\ndependencies = [\"time-core\"]\n\n[[package]]\nname = \"tiny-bip39\"\nversion = \"1.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861\"\ndependencies = [\"anyhow\", \"hmac 0.12.1\", \"once_cell\", \"pbkdf2 0.11.0\", \"rand 0.8.5\", \"rustc-hash\", \"sha2 0.10.6\", \"thiserror\", \"unicode-normalization\", \"wasm-bindgen\", \"zeroize\"]\n\n[[package]]\nname = \"tiny-keccak\"\nversion = \"2.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237\"\ndependencies = [\"crunchy\"]\n\n[[package]]\nname = \"tinytemplate\"\nversion = \"1.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc\"\ndependencies = [\"serde\", \"serde_json\"]\n\n[[package]]\nname = \"tinyvec\"\nversion = \"1.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50\"\ndependencies = [\"tinyvec_macros\"]\n\n[[package]]\nname = \"tinyvec_macros\"\nversion = \"0.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20\"\n\n[[package]]\nname = \"tokio\"\nversion = \"1.25.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af\"\ndependencies = [\"autocfg\", \"bytes\", \"libc\", \"memchr\", \"mio\", \"num_cpus\", \"parking_lot 0.12.1\", \"pin-project-lite 0.2.9\", \"signal-hook-registry\", \"socket2\", \"tokio-macros\", \"windows-sys 0.42.0\"]\n\n[[package]]\nname = \"tokio-macros\"\nversion = \"1.8.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"tokio-rustls\"\nversion = \"0.23.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59\"\ndependencies = [\"rustls 0.20.8\", \"tokio\", \"webpki 0.22.0\"]\n\n[[package]]\nname = \"tokio-stream\"\nversion = \"0.1.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce\"\ndependencies = [\"futures-core\", \"pin-project-lite 0.2.9\", \"tokio\", \"tokio-util\"]\n\n[[package]]\nname = \"tokio-util\"\nversion = \"0.7.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740\"\ndependencies = [\"bytes\", \"futures-core\", \"futures-io\", \"futures-sink\", \"pin-project-lite 0.2.9\", \"tokio\", \"tracing\"]\n\n[[package]]\nname = \"toml\"\nversion = \"0.5.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234\"\ndependencies = [\"serde\"]\n\n[[package]]\nname = \"tower\"\nversion = \"0.4.13\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c\"\ndependencies = [\"tower-layer\", \"tower-service\", \"tracing\"]\n\n[[package]]\nname = \"tower-http\"\nversion = \"0.3.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858\"\ndependencies = [\"bitflags\", \"bytes\", \"futures-core\", \"futures-util\", \"http\", \"http-body\", \"http-range-header\", \"pin-project-lite 0.2.9\", \"tower-layer\", \"tower-service\"]\n\n[[package]]\nname = \"tower-layer\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0\"\n\n[[package]]\nname = \"tower-service\"\nversion = \"0.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52\"\n\n[[package]]\nname = \"tracing\"\nversion = \"0.1.37\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8\"\ndependencies = [\"cfg-if\", \"log\", \"pin-project-lite 0.2.9\", \"tracing-attributes\", \"tracing-core\"]\n\n[[package]]\nname = \"tracing-attributes\"\nversion = \"0.1.23\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\"]\n\n[[package]]\nname = \"tracing-core\"\nversion = \"0.1.30\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a\"\ndependencies = [\"once_cell\", \"valuable\"]\n\n[[package]]\nname = \"tracing-futures\"\nversion = \"0.2.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2\"\ndependencies = [\"pin-project\", \"tracing\"]\n\n[[package]]\nname = \"tracing-log\"\nversion = \"0.1.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922\"\ndependencies = [\"lazy_static\", \"log\", \"tracing-core\"]\n\n[[package]]\nname = \"tracing-serde\"\nversion = \"0.1.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1\"\ndependencies = [\"serde\", \"tracing-core\"]\n\n[[package]]\nname = \"tracing-subscriber\"\nversion = \"0.2.25\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71\"\ndependencies = [\"ansi_term\", \"chrono\", \"lazy_static\", \"matchers\", \"parking_lot 0.11.2\", \"regex\", \"serde\", \"serde_json\", \"sharded-slab\", \"smallvec\", \"thread_local\", \"tracing\", \"tracing-core\", \"tracing-log\", \"tracing-serde\"]\n\n[[package]]\nname = \"trie-db\"\nversion = \"0.24.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"004e1e8f92535694b4cb1444dc5a8073ecf0815e3357f729638b9f8fc4062908\"\ndependencies = [\"hash-db\", \"hashbrown\", \"log\", \"rustc-hex\", \"smallvec\"]\n\n[[package]]\nname = \"trie-root\"\nversion = \"0.17.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9a36c5ca3911ed3c9a5416ee6c679042064b93fc637ded67e25f92e68d783891\"\ndependencies = [\"hash-db\"]\n\n[[package]]\nname = \"trust-dns-proto\"\nversion = \"0.22.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26\"\ndependencies = [\"async-trait\", \"cfg-if\", \"data-encoding\", \"enum-as-inner\", \"futures-channel\", \"futures-io\", \"futures-util\", \"idna 0.2.3\", \"ipnet\", \"lazy_static\", \"rand 0.8.5\", \"smallvec\", \"socket2\", \"thiserror\", \"tinyvec\", \"tokio\", \"tracing\", \"url\"]\n\n[[package]]\nname = \"trust-dns-resolver\"\nversion = \"0.22.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe\"\ndependencies = [\"cfg-if\", \"futures-util\", \"ipconfig\", \"lazy_static\", \"lru-cache\", \"parking_lot 0.12.1\", \"resolv-conf\", \"smallvec\", \"thiserror\", \"tokio\", \"tracing\", \"trust-dns-proto\"]\n\n[[package]]\nname = \"try-lock\"\nversion = \"0.2.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed\"\n\n[[package]]\nname = \"try-runtime-cli\"\nversion = \"0.10.0-dev\"\nsource = \"git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#946507ba9ef13e263534176b7b74e26fc56efbd4\"\ndependencies = [\"clap\", \"frame-remote-externalities\", \"frame-try-runtime\", \"hex\", \"log\", \"parity-scale-codec\", \"sc-cli\", \"sc-executor\", \"sc-service\", \"serde\", \"serde_json\", \"sp-api\", \"sp-core\", \"sp-debug-derive\", \"sp-externalities\", \"sp-io\", \"sp-keystore\", \"sp-rpc\", \"sp-runtime\", \"sp-state-machine\", \"sp-version\", \"sp-weights\", \"substrate-rpc-client\", \"zstd\"]\n\n[[package]]\nname = \"tt-call\"\nversion = \"1.0.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df\"\n\n[[package]]\nname = \"turn\"\nversion = \"0.6.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8\"\ndependencies = [\"async-trait\", \"base64 0.13.1\", \"futures\", \"log\", \"md-5\", \"rand 0.8.5\", \"ring\", \"stun\", \"thiserror\", \"tokio\", \"webrtc-util\"]\n\n[[package]]\nname = \"twox-hash\"\nversion = \"1.6.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675\"\ndependencies = [\"cfg-if\", \"digest 0.10.6\", \"rand 0.8.5\", \"static_assertions\"]\n\n[[package]]\nname = \"typenum\"\nversion = \"1.16.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba\"\n\n[[package]]\nname = \"typenum\"\nversion = \"1.16.0\"\nsource = \"git+https://github.com/encointer/typenum?tag=v1.16.0#4c8dddaa8bdd13130149e43b4085ad14e960617f\"\ndependencies = [\"parity-scale-codec\", \"scale-info\"]\n\n[[package]]\nname = \"ucd-trie\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81\"\n\n[[package]]\nname = \"uint\"\nversion = \"0.9.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52\"\ndependencies = [\"byteorder\", \"crunchy\", \"hex\", \"static_assertions\"]\n\n[[package]]\nname = \"unicode-bidi\"\nversion = \"0.3.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58\"\n\n[[package]]\nname = \"unicode-ident\"\nversion = \"1.0.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc\"\n\n[[package]]\nname = \"unicode-normalization\"\nversion = \"0.1.22\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921\"\ndependencies = [\"tinyvec\"]\n\n[[package]]\nname = \"unicode-width\"\nversion = \"0.1.10\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b\"\n\n[[package]]\nname = \"unicode-xid\"\nversion = \"0.2.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c\"\n\n[[package]]\nname = \"universal-hash\"\nversion = \"0.4.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05\"\ndependencies = [\"generic-array 0.14.6\", \"subtle\"]\n\n[[package]]\nname = \"unsigned-varint\"\nversion = \"0.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836\"\ndependencies = [\"asynchronous-codec\", \"bytes\", \"futures-io\", \"futures-util\"]\n\n[[package]]\nname = \"untrusted\"\nversion = \"0.7.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a\"\n\n[[package]]\nname = \"url\"\nversion = \"2.3.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643\"\ndependencies = [\"form_urlencoded\", \"idna 0.3.0\", \"percent-encoding\"]\n\n[[package]]\nname = \"uuid\"\nversion = \"1.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79\"\ndependencies = [\"getrandom 0.2.8\"]\n\n[[package]]\nname = \"valuable\"\nversion = \"0.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d\"\n\n[[package]]\nname = \"vcpkg\"\nversion = \"0.2.15\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426\"\n\n[[package]]\nname = \"version_check\"\nversion = \"0.9.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f\"\n\n[[package]]\nname = \"void\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d\"\n\n[[package]]\nname = \"waitgroup\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292\"\ndependencies = [\"atomic-waker\"]\n\n[[package]]\nname = \"waker-fn\"\nversion = \"1.1.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca\"\n\n[[package]]\nname = \"walkdir\"\nversion = \"2.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56\"\ndependencies = [\"same-file\", \"winapi\", \"winapi-util\"]\n\n[[package]]\nname = \"want\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0\"\ndependencies = [\"log\", \"try-lock\"]\n\n[[package]]\nname = \"wasi\"\nversion = \"0.9.0+wasi-snapshot-preview1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519\"\n\n[[package]]\nname = \"wasi\"\nversion = \"0.10.0+wasi-snapshot-preview1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f\"\n\n[[package]]\nname = \"wasi\"\nversion = \"0.11.0+wasi-snapshot-preview1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423\"\n\n[[package]]\nname = \"wasm-bindgen\"\nversion = \"0.2.84\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b\"\ndependencies = [\"cfg-if\", \"wasm-bindgen-macro\"]\n\n[[package]]\nname = \"wasm-bindgen-backend\"\nversion = \"0.2.84\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9\"\ndependencies = [\"bumpalo\", \"log\", \"once_cell\", \"proc-macro2\", \"quote\", \"syn\", \"wasm-bindgen-shared\"]\n\n[[package]]\nname = \"wasm-bindgen-futures\"\nversion = \"0.4.34\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454\"\ndependencies = [\"cfg-if\", \"js-sys\", \"wasm-bindgen\", \"web-sys\"]\n\n[[package]]\nname = \"wasm-bindgen-macro\"\nversion = \"0.2.84\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5\"\ndependencies = [\"quote\", \"wasm-bindgen-macro-support\"]\n\n[[package]]\nname = \"wasm-bindgen-macro-support\"\nversion = \"0.2.84\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\", \"wasm-bindgen-backend\", \"wasm-bindgen-shared\"]\n\n[[package]]\nname = \"wasm-bindgen-shared\"\nversion = \"0.2.84\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d\"\n\n[[package]]\nname = \"wasm-instrument\"\nversion = \"0.3.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"aa1dafb3e60065305741e83db35c6c2584bb3725b692b5b66148a38d72ace6cd\"\ndependencies = [\"parity-wasm\"]\n\n[[package]]\nname = \"wasm-opt\"\nversion = \"0.110.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b68e8037b4daf711393f4be2056246d12d975651b14d581520ad5d1f19219cec\"\ndependencies = [\"anyhow\", \"libc\", \"strum\", \"strum_macros\", \"tempfile\", \"thiserror\", \"wasm-opt-cxx-sys\", \"wasm-opt-sys\"]\n\n[[package]]\nname = \"wasm-opt-cxx-sys\"\nversion = \"0.110.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"91adbad477e97bba3fbd21dd7bfb594e7ad5ceb9169ab1c93ab9cb0ada636b6f\"\ndependencies = [\"anyhow\", \"cxx\", \"cxx-build\", \"wasm-opt-sys\"]\n\n[[package]]\nname = \"wasm-opt-sys\"\nversion = \"0.110.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ec4fa5a322a4e6ac22fd141f498d56afbdbf9df5debeac32380d2dcaa3e06941\"\ndependencies = [\"anyhow\", \"cc\", \"cxx\", \"cxx-build\", \"regex\"]\n\n[[package]]\nname = \"wasm-timer\"\nversion = \"0.2.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f\"\ndependencies = [\"futures\", \"js-sys\", \"parking_lot 0.11.2\", \"pin-utils\", \"wasm-bindgen\", \"wasm-bindgen-futures\", \"web-sys\"]\n\n[[package]]\nname = \"wasmi\"\nversion = \"0.13.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422\"\ndependencies = [\"parity-wasm\", \"wasmi-validation\", \"wasmi_core\"]\n\n[[package]]\nname = \"wasmi-validation\"\nversion = \"0.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b\"\ndependencies = [\"parity-wasm\"]\n\n[[package]]\nname = \"wasmi_core\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7\"\ndependencies = [\"downcast-rs\", \"libm 0.2.6\", \"memory_units\", \"num-rational\", \"num-traits\"]\n\n[[package]]\nname = \"wasmparser\"\nversion = \"0.89.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ab5d3e08b13876f96dd55608d03cd4883a0545884932d5adf11925876c96daef\"\ndependencies = [\"indexmap\"]\n\n[[package]]\nname = \"wasmtime\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4ad5af6ba38311282f2a21670d96e78266e8c8e2f38cbcd52c254df6ccbc7731\"\ndependencies = [\"anyhow\", \"bincode\", \"cfg-if\", \"indexmap\", \"libc\", \"log\", \"object 0.29.0\", \"once_cell\", \"paste\", \"psm\", \"rayon\", \"serde\", \"target-lexicon\", \"wasmparser\", \"wasmtime-cache\", \"wasmtime-cranelift\", \"wasmtime-environ\", \"wasmtime-jit\", \"wasmtime-runtime\", \"windows-sys 0.36.1\"]\n\n[[package]]\nname = \"wasmtime-asm-macros\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"45de63ddfc8b9223d1adc8f7b2ee5f35d1f6d112833934ad7ea66e4f4339e597\"\ndependencies = [\"cfg-if\"]\n\n[[package]]\nname = \"wasmtime-cache\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bcd849399d17d2270141cfe47fa0d91ee52d5f8ea9b98cf7ddde0d53e5f79882\"\ndependencies = [\"anyhow\", \"base64 0.13.1\", \"bincode\", \"directories-next\", \"file-per-thread-logger\", \"log\", \"rustix 0.35.13\", \"serde\", \"sha2 0.9.9\", \"toml\", \"windows-sys 0.36.1\", \"zstd\"]\n\n[[package]]\nname = \"wasmtime-cranelift\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4bd91339b742ff20bfed4532a27b73c86b5bcbfedd6bea2dcdf2d64471e1b5c6\"\ndependencies = [\"anyhow\", \"cranelift-codegen\", \"cranelift-entity\", \"cranelift-frontend\", \"cranelift-native\", \"cranelift-wasm\", \"gimli 0.26.2\", \"log\", \"object 0.29.0\", \"target-lexicon\", \"thiserror\", \"wasmparser\", \"wasmtime-environ\"]\n\n[[package]]\nname = \"wasmtime-environ\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ebb881c61f4f627b5d45c54e629724974f8a8890d455bcbe634330cc27309644\"\ndependencies = [\"anyhow\", \"cranelift-entity\", \"gimli 0.26.2\", \"indexmap\", \"log\", \"object 0.29.0\", \"serde\", \"target-lexicon\", \"thiserror\", \"wasmparser\", \"wasmtime-types\"]\n\n[[package]]\nname = \"wasmtime-jit\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1985c628011fe26adf5e23a5301bdc79b245e0e338f14bb58b39e4e25e4d8681\"\ndependencies = [\"addr2line 0.17.0\", \"anyhow\", \"bincode\", \"cfg-if\", \"cpp_demangle\", \"gimli 0.26.2\", \"log\", \"object 0.29.0\", \"rustc-demangle\", \"rustix 0.35.13\", \"serde\", \"target-lexicon\", \"thiserror\", \"wasmtime-environ\", \"wasmtime-jit-debug\", \"wasmtime-runtime\", \"windows-sys 0.36.1\"]\n\n[[package]]\nname = \"wasmtime-jit-debug\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f671b588486f5ccec8c5a3dba6b4c07eac2e66ab8c60e6f4e53717c77f709731\"\ndependencies = [\"object 0.29.0\", \"once_cell\", \"rustix 0.35.13\"]\n\n[[package]]\nname = \"wasmtime-runtime\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ee8f92ad4b61736339c29361da85769ebc200f184361959d1792832e592a1afd\"\ndependencies = [\"anyhow\", \"cc\", \"cfg-if\", \"indexmap\", \"libc\", \"log\", \"mach\", \"memfd\", \"memoffset 0.6.5\", \"paste\", \"rand 0.8.5\", \"rustix 0.35.13\", \"thiserror\", \"wasmtime-asm-macros\", \"wasmtime-environ\", \"wasmtime-jit-debug\", \"windows-sys 0.36.1\"]\n\n[[package]]\nname = \"wasmtime-types\"\nversion = \"1.0.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d23d61cb4c46e837b431196dd06abb11731541021916d03476a178b54dc07aeb\"\ndependencies = [\"cranelift-entity\", \"serde\", \"thiserror\", \"wasmparser\"]\n\n[[package]]\nname = \"web-sys\"\nversion = \"0.3.61\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97\"\ndependencies = [\"js-sys\", \"wasm-bindgen\"]\n\n[[package]]\nname = \"webpki\"\nversion = \"0.21.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea\"\ndependencies = [\"ring\", \"untrusted\"]\n\n[[package]]\nname = \"webpki\"\nversion = \"0.22.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd\"\ndependencies = [\"ring\", \"untrusted\"]\n\n[[package]]\nname = \"webpki-roots\"\nversion = \"0.22.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87\"\ndependencies = [\"webpki 0.22.0\"]\n\n[[package]]\nname = \"webrtc\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb\"\ndependencies = [\"arc-swap\", \"async-trait\", \"bytes\", \"hex\", \"interceptor\", \"lazy_static\", \"log\", \"rand 0.8.5\", \"rcgen 0.9.3\", \"regex\", \"ring\", \"rtcp\", \"rtp\", \"rustls 0.19.1\", \"sdp\", \"serde\", \"serde_json\", \"sha2 0.10.6\", \"stun\", \"thiserror\", \"time 0.3.17\", \"tokio\", \"turn\", \"url\", \"waitgroup\", \"webrtc-data\", \"webrtc-dtls\", \"webrtc-ice\", \"webrtc-mdns\", \"webrtc-media\", \"webrtc-sctp\", \"webrtc-srtp\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-data\"\nversion = \"0.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100\"\ndependencies = [\"bytes\", \"derive_builder\", \"log\", \"thiserror\", \"tokio\", \"webrtc-sctp\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-dtls\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"7021987ae0a2ed6c8cd33f68e98e49bb6e74ffe9543310267b48a1bbe3900e5f\"\ndependencies = [\"aes 0.6.0\", \"aes-gcm 0.8.0\", \"async-trait\", \"bincode\", \"block-modes\", \"byteorder\", \"ccm\", \"curve25519-dalek 3.2.0\", \"der-parser 8.1.0\", \"elliptic-curve\", \"hkdf\", \"hmac 0.10.1\", \"log\", \"oid-registry 0.6.1\", \"p256\", \"p384\", \"rand 0.8.5\", \"rand_core 0.6.4\", \"rcgen 0.9.3\", \"ring\", \"rustls 0.19.1\", \"sec1\", \"serde\", \"sha-1\", \"sha2 0.9.9\", \"signature\", \"subtle\", \"thiserror\", \"tokio\", \"webpki 0.21.4\", \"webrtc-util\", \"x25519-dalek 2.0.0-pre.1\", \"x509-parser 0.13.2\"]\n\n[[package]]\nname = \"webrtc-ice\"\nversion = \"0.9.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"494483fbb2f5492620871fdc78b084aed8807377f6e3fe88b2e49f0a9c9c41d7\"\ndependencies = [\"arc-swap\", \"async-trait\", \"crc\", \"log\", \"rand 0.8.5\", \"serde\", \"serde_json\", \"stun\", \"thiserror\", \"tokio\", \"turn\", \"url\", \"uuid\", \"waitgroup\", \"webrtc-mdns\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-mdns\"\nversion = \"0.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106\"\ndependencies = [\"log\", \"socket2\", \"thiserror\", \"tokio\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-media\"\nversion = \"0.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ee2a3c157a040324e5049bcbd644ffc9079e6738fa2cfab2bcff64e5cc4c00d7\"\ndependencies = [\"byteorder\", \"bytes\", \"derive_builder\", \"displaydoc\", \"rand 0.8.5\", \"rtp\", \"thiserror\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-sctp\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0\"\ndependencies = [\"arc-swap\", \"async-trait\", \"bytes\", \"crc\", \"log\", \"rand 0.8.5\", \"thiserror\", \"tokio\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-srtp\"\nversion = \"0.9.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5\"\ndependencies = [\"aead 0.4.3\", \"aes 0.7.5\", \"aes-gcm 0.9.4\", \"async-trait\", \"byteorder\", \"bytes\", \"ctr 0.8.0\", \"hmac 0.11.0\", \"log\", \"rtcp\", \"rtp\", \"sha-1\", \"subtle\", \"thiserror\", \"tokio\", \"webrtc-util\"]\n\n[[package]]\nname = \"webrtc-util\"\nversion = \"0.7.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87\"\ndependencies = [\"async-trait\", \"bitflags\", \"bytes\", \"cc\", \"ipnet\", \"lazy_static\", \"libc\", \"log\", \"nix\", \"rand 0.8.5\", \"thiserror\", \"tokio\", \"winapi\"]\n\n[[package]]\nname = \"wepoll-ffi\"\nversion = \"0.1.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb\"\ndependencies = [\"cc\"]\n\n[[package]]\nname = \"which\"\nversion = \"4.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269\"\ndependencies = [\"either\", \"libc\", \"once_cell\"]\n\n[[package]]\nname = \"widestring\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983\"\n\n[[package]]\nname = \"winapi\"\nversion = \"0.3.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419\"\ndependencies = [\"winapi-i686-pc-windows-gnu\", \"winapi-x86_64-pc-windows-gnu\"]\n\n[[package]]\nname = \"winapi-i686-pc-windows-gnu\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6\"\n\n[[package]]\nname = \"winapi-util\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178\"\ndependencies = [\"winapi\"]\n\n[[package]]\nname = \"winapi-x86_64-pc-windows-gnu\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f\"\n\n[[package]]\nname = \"windows\"\nversion = \"0.34.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f\"\ndependencies = [\"windows_aarch64_msvc 0.34.0\", \"windows_i686_gnu 0.34.0\", \"windows_i686_msvc 0.34.0\", \"windows_x86_64_gnu 0.34.0\", \"windows_x86_64_msvc 0.34.0\"]\n\n[[package]]\nname = \"windows-sys\"\nversion = \"0.36.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2\"\ndependencies = [\"windows_aarch64_msvc 0.36.1\", \"windows_i686_gnu 0.36.1\", \"windows_i686_msvc 0.36.1\", \"windows_x86_64_gnu 0.36.1\", \"windows_x86_64_msvc 0.36.1\"]\n\n[[package]]\nname = \"windows-sys\"\nversion = \"0.42.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7\"\ndependencies = [\"windows_aarch64_gnullvm\", \"windows_aarch64_msvc 0.42.1\", \"windows_i686_gnu 0.42.1\", \"windows_i686_msvc 0.42.1\", \"windows_x86_64_gnu 0.42.1\", \"windows_x86_64_gnullvm\", \"windows_x86_64_msvc 0.42.1\"]\n\n[[package]]\nname = \"windows-sys\"\nversion = \"0.45.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0\"\ndependencies = [\"windows-targets\"]\n\n[[package]]\nname = \"windows-targets\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7\"\ndependencies = [\"windows_aarch64_gnullvm\", \"windows_aarch64_msvc 0.42.1\", \"windows_i686_gnu 0.42.1\", \"windows_i686_msvc 0.42.1\", \"windows_x86_64_gnu 0.42.1\", \"windows_x86_64_gnullvm\", \"windows_x86_64_msvc 0.42.1\"]\n\n[[package]]\nname = \"windows_aarch64_gnullvm\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608\"\n\n[[package]]\nname = \"windows_aarch64_msvc\"\nversion = \"0.34.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d\"\n\n[[package]]\nname = \"windows_aarch64_msvc\"\nversion = \"0.36.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47\"\n\n[[package]]\nname = \"windows_aarch64_msvc\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7\"\n\n[[package]]\nname = \"windows_i686_gnu\"\nversion = \"0.34.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed\"\n\n[[package]]\nname = \"windows_i686_gnu\"\nversion = \"0.36.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6\"\n\n[[package]]\nname = \"windows_i686_gnu\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640\"\n\n[[package]]\nname = \"windows_i686_msvc\"\nversion = \"0.34.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956\"\n\n[[package]]\nname = \"windows_i686_msvc\"\nversion = \"0.36.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024\"\n\n[[package]]\nname = \"windows_i686_msvc\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605\"\n\n[[package]]\nname = \"windows_x86_64_gnu\"\nversion = \"0.34.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4\"\n\n[[package]]\nname = \"windows_x86_64_gnu\"\nversion = \"0.36.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1\"\n\n[[package]]\nname = \"windows_x86_64_gnu\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45\"\n\n[[package]]\nname = \"windows_x86_64_gnullvm\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463\"\n\n[[package]]\nname = \"windows_x86_64_msvc\"\nversion = \"0.34.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9\"\n\n[[package]]\nname = \"windows_x86_64_msvc\"\nversion = \"0.36.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680\"\n\n[[package]]\nname = \"windows_x86_64_msvc\"\nversion = \"0.42.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd\"\n\n[[package]]\nname = \"winreg\"\nversion = \"0.10.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d\"\ndependencies = [\"winapi\"]\n\n[[package]]\nname = \"wyz\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed\"\ndependencies = [\"tap\"]\n\n[[package]]\nname = \"x25519-dalek\"\nversion = \"1.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f\"\ndependencies = [\"curve25519-dalek 3.2.0\", \"rand_core 0.5.1\", \"zeroize\"]\n\n[[package]]\nname = \"x25519-dalek\"\nversion = \"2.0.0-pre.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df\"\ndependencies = [\"curve25519-dalek 3.2.0\", \"rand_core 0.6.4\", \"zeroize\"]\n\n[[package]]\nname = \"x509-parser\"\nversion = \"0.13.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c\"\ndependencies = [\"asn1-rs 0.3.1\", \"base64 0.13.1\", \"data-encoding\", \"der-parser 7.0.0\", \"lazy_static\", \"nom\", \"oid-registry 0.4.0\", \"ring\", \"rusticata-macros\", \"thiserror\", \"time 0.3.17\"]\n\n[[package]]\nname = \"x509-parser\"\nversion = \"0.14.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8\"\ndependencies = [\"asn1-rs 0.5.1\", \"base64 0.13.1\", \"data-encoding\", \"der-parser 8.1.0\", \"lazy_static\", \"nom\", \"oid-registry 0.6.1\", \"rusticata-macros\", \"thiserror\", \"time 0.3.17\"]\n\n[[package]]\nname = \"yamux\"\nversion = \"0.10.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5\"\ndependencies = [\"futures\", \"log\", \"nohash-hasher\", \"parking_lot 0.12.1\", \"rand 0.8.5\", \"static_assertions\"]\n\n[[package]]\nname = \"yasna\"\nversion = \"0.5.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4\"\ndependencies = [\"time 0.3.17\"]\n\n[[package]]\nname = \"zeroize\"\nversion = \"1.5.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f\"\ndependencies = [\"zeroize_derive\"]\n\n[[package]]\nname = \"zeroize_derive\"\nversion = \"1.3.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c\"\ndependencies = [\"proc-macro2\", \"quote\", \"syn\", \"synstructure\"]\n\n[[package]]\nname = \"zstd\"\nversion = \"0.11.2+zstd.1.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4\"\ndependencies = [\"zstd-safe\"]\n\n[[package]]\nname = \"zstd-safe\"\nversion = \"5.0.2+zstd.1.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db\"\ndependencies = [\"libc\", \"zstd-sys\"]\n\n[[package]]\nname = \"zstd-sys\"\nversion = \"2.0.6+zstd.1.5.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"68a3f9792c0c3dc6c165840a75f47ae1f4da402c2d006881129579f6597e801b\"\ndependencies = [\"cc\", \"libc\", \"pkg-config\"]\n"}} \ No newline at end of file diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 5e4fd1900..919e64fb2 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -9,9 +9,6 @@ license = "Unlicense" publish = false repository = "https://github.com/opentensor/subtensor/" -[lints] -workspace = true - [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -28,55 +25,52 @@ scale-info = { version = "2.1.1", default-features = false, features = [ serde_json = { version = "1.0.85", default-features = false, features = [ "alloc", ] } -pallet-aura = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -pallet-balances = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -pallet-grandpa = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -pallet-insecure-randomness-collective-flip = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-try-runtime = { version = "0.10.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true, branch = "polkadot-v1.0.0" } -pallet-timestamp = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -pallet-transaction-payment = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -pallet-utility = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -frame-executive = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-api = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-block-builder = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-consensus-aura = { version = "0.10.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-core = { version = "21", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-inherents = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-offchain = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-runtime = { version = "24", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-session = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-std = { version = "8", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-transaction-pool = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-version = { version = "22", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-aura = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +pallet-balances = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +pallet-grandpa = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +pallet-insecure-randomness-collective-flip = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-try-runtime = { version = "0.10.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true, branch = "polkadot-v0.9.39" } +pallet-timestamp = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +pallet-transaction-payment = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +pallet-utility = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +frame-executive = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-api = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-block-builder = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-consensus-aura = { version = "0.10.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-core = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-inherents = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-offchain = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-runtime = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-session = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-std = { version = "5.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-transaction-pool = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +sp-version = { version = "5.0.0", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } # Temporary sudo -pallet-sudo = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-sudo = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } pallet-admin-utils = { version = "4.0.0-dev", default-features = false, path = "../pallets/admin-utils" } # Used for sudo decentralization pallet-collective = { version = "4.0.0-dev", default-features = false, path = "../pallets/collective" } -pallet-membership = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-membership = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } # Multisig -pallet-multisig = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } - -# Proxy Pallet -pallet-proxy = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-multisig = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } # Scheduler pallet -pallet-scheduler = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -pallet-preimage = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +pallet-scheduler = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +pallet-preimage = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } # Used for the node subtensor's RPCs -frame-system-rpc-runtime-api = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -pallet-transaction-payment-rpc-runtime-api = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } +frame-system-rpc-runtime-api = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +pallet-transaction-payment-rpc-runtime-api = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } # Used for runtime benchmarking -frame-benchmarking = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true, branch = "polkadot-v1.0.0" } -frame-system-benchmarking = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true, branch = "polkadot-v1.0.0" } +frame-benchmarking = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true, branch = "polkadot-v0.9.39" } +frame-system-benchmarking = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", optional = true, branch = "polkadot-v0.9.39" } # Identity registry pallet for registering project info pallet-registry = { version = "4.0.0-dev", default-features = false, path = "../pallets/registry" } @@ -84,12 +78,8 @@ pallet-registry = { version = "4.0.0-dev", default-features = false, path = "../ # Metadata commitment pallet pallet-commitments = { version = "4.0.0-dev", default-features = false, path = "../pallets/commitments" } -[dev-dependencies] -sp-io = { version = "23", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } -sp-tracing = { version = "10", git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0" } - [build-dependencies] -substrate-wasm-builder = { version = "5.0.0-dev", git = "https://github.com/paritytech/substrate.git", optional = true, branch = "polkadot-v1.0.0" } +substrate-wasm-builder = { version = "5.0.0-dev", git = "https://github.com/paritytech/substrate.git", optional = true, branch = "polkadot-v0.9.39" } [features] default = ["std"] @@ -116,7 +106,6 @@ std = [ "pallet-utility/std", "pallet-sudo/std", "pallet-multisig/std", - "pallet-proxy/std", "pallet-scheduler/std", "pallet-preimage/std", "pallet-commitments/std", @@ -136,8 +125,6 @@ std = [ "pallet-membership/std", "pallet-registry/std", "pallet-admin-utils/std", - "subtensor-custom-rpc-runtime-api/std", - "serde_json/std" ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", @@ -152,14 +139,9 @@ runtime-benchmarks = [ "pallet-subtensor/runtime-benchmarks", "pallet-collective/runtime-benchmarks", "pallet-membership/runtime-benchmarks", - "pallet-proxy/runtime-benchmarks", "pallet-registry/runtime-benchmarks", "pallet-commitments/runtime-benchmarks", "pallet-admin-utils/runtime-benchmarks", - "pallet-multisig/runtime-benchmarks", - "pallet-preimage/runtime-benchmarks", - "pallet-scheduler/runtime-benchmarks", - "pallet-sudo/runtime-benchmarks" ] try-runtime = [ "frame-try-runtime/try-runtime", @@ -177,12 +159,7 @@ try-runtime = [ "pallet-subtensor/try-runtime", "pallet-collective/try-runtime", "pallet-membership/try-runtime", - "pallet-proxy/try-runtime", "pallet-multisig/try-runtime", "pallet-scheduler/try-runtime", "pallet-preimage/try-runtime", - "sp-runtime/try-runtime", - "pallet-admin-utils/try-runtime", - "pallet-commitments/try-runtime", - "pallet-registry/try-runtime" ] diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 46e39e3c5..51baecea8 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -6,24 +6,17 @@ #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); -mod migrations; +use codec::Encode; -use codec::{Decode, Encode, MaxEncodedLen}; - -use migrations::{account_data_migration, init_storage_versions}; use pallet_commitments::CanCommit; use pallet_grandpa::{ fg_primitives, AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList, }; -use frame_support::{ - pallet_prelude::{DispatchError, DispatchResult, Get}, - traits::OnRuntimeUpgrade, -}; +use frame_support::pallet_prelude::{DispatchError, DispatchResult, Get}; use frame_system::{EnsureNever, EnsureRoot, RawOrigin}; use pallet_registry::CanRegisterIdentity; -use scale_info::TypeInfo; use smallvec::smallvec; use sp_api::impl_runtime_apis; use sp_consensus_aura::sr25519::AuthorityId as AuraId; @@ -47,8 +40,8 @@ use sp_version::RuntimeVersion; pub use frame_support::{ construct_runtime, parameter_types, traits::{ - ConstBool, ConstU128, ConstU32, ConstU64, ConstU8, InstanceFilter, KeyOwnerProofSystem, - PrivilegeCmp, Randomness, StorageInfo, + ConstU128, ConstU32, ConstU64, ConstU8, KeyOwnerProofSystem, PrivilegeCmp, Randomness, + StorageInfo, }, weights::{ constants::{ @@ -57,7 +50,7 @@ pub use frame_support::{ IdentityFee, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, }, - RuntimeDebug, StorageValue, + StorageValue, }; pub use frame_system::Call as SystemCall; pub use pallet_balances::Call as BalancesCall; @@ -92,15 +85,6 @@ pub type Hash = sp_core::H256; // Member type for membership type MemberCount = u32; -pub type Nonce = u32; - -// Method used to calculate the fee of an extrinsic -pub const fn deposit(items: u32, bytes: u32) -> Balance { - pub const ITEMS_FEE: Balance = 2_000 * 10_000; - pub const BYTES_FEE: Balance = 100 * 10_000; - items as Balance * ITEMS_FEE + bytes as Balance * BYTES_FEE -} - // Opaque types. These are used by the CLI to instantiate machinery that don't need to know // the specifics of the runtime. They can then be made to be agnostic over specific formats // of data like extrinsics, allowing for them to continue syncing the network through upgrades @@ -137,7 +121,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 147, + spec_version: 146, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -201,10 +185,16 @@ impl frame_system::Config for Runtime { type RuntimeCall = RuntimeCall; // The lookup mechanism to get account ID from whatever is passed in dispatchers. type Lookup = AccountIdLookup; + // The index type for storing how many extrinsics an account has signed. + type Index = Index; + // The index type for blocks. + type BlockNumber = BlockNumber; // The type for hashing blocks and tries. type Hash = Hash; // The hashing algorithm used. type Hashing = BlakeTwo256; + // The header type. + type Header = generic::Header; // The ubiquitous event type. type RuntimeEvent = RuntimeEvent; // The ubiquitous origin type. @@ -232,8 +222,6 @@ impl frame_system::Config for Runtime { // The set code logic, just the default since we're not a parachain. type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; - type Nonce = Nonce; - type Block = Block; } impl pallet_insecure_randomness_collective_flip::Config for Runtime {} @@ -242,19 +230,26 @@ impl pallet_aura::Config for Runtime { type AuthorityId = AuraId; type DisabledValidators = (); type MaxAuthorities = ConstU32<32>; - type AllowMultipleBlocksPerSlot = ConstBool; } impl pallet_grandpa::Config for Runtime { type RuntimeEvent = RuntimeEvent; - type KeyOwnerProof = sp_core::Void; + type KeyOwnerProofSystem = (); + + type KeyOwnerProof = + >::Proof; + + type KeyOwnerIdentification = >::IdentificationTuple; + + type HandleEquivocation = (); type WeightInfo = (); type MaxAuthorities = ConstU32<32>; type MaxSetIdSessionEntries = ConstU64<0>; - - type EquivocationReportSystem = (); } impl pallet_timestamp::Config for Runtime { @@ -277,7 +272,7 @@ pub const EXISTENTIAL_DEPOSIT: u64 = 500; impl pallet_balances::Config for Runtime { type MaxLocks = ConstU32<50>; - type MaxReserves = ConstU32<50>; + type MaxReserves = (); type ReserveIdentifier = [u8; 8]; // The type for recording an account's balance. type Balance = Balance; @@ -287,11 +282,6 @@ impl pallet_balances::Config for Runtime { type ExistentialDeposit = ConstU64; type AccountStore = System; type WeightInfo = pallet_balances::weights::SubstrateWeight; - - type RuntimeHoldReason = RuntimeHoldReason; - type FreezeIdentifier = RuntimeFreezeReason; - type MaxHolds = ConstU32<50>; - type MaxFreezes = ConstU32<50>; } pub struct LinearWeightToFee(sp_std::marker::PhantomData); @@ -481,18 +471,13 @@ impl pallet_membership::Config for Runtime { impl pallet_sudo::Config for Runtime { type RuntimeEvent = RuntimeEvent; type RuntimeCall = RuntimeCall; - - type WeightInfo = pallet_sudo::weights::SubstrateWeight; } parameter_types! { - // According to multisig pallet, key and value size be computed as follows: - // value size is `4 + sizeof((BlockNumber, Balance, AccountId))` bytes - // key size is `32 + sizeof(AccountId)` bytes. - // For our case, One storage item; key size is 32+32=64 bytes; value is size 4+4+8+32 bytes = 48 bytes. - pub const DepositBase: Balance = deposit(1, 112); + // One storage item; key size is 32; value is size 4+4+16+32 bytes = 56 bytes. + pub const DepositBase: Balance = (1) as Balance * 2_000 * 10_000 + (88 as Balance) * 100 * 10_000; // Additional storage item size of 32 bytes. - pub const DepositFactor: Balance = deposit(0, 32); + pub const DepositFactor: Balance = (0) as Balance * 2_000 * 10_000 + (32 as Balance) * 100 * 10_000; pub const MaxSignatories: u32 = 100; } @@ -506,121 +491,6 @@ impl pallet_multisig::Config for Runtime { type WeightInfo = pallet_multisig::weights::SubstrateWeight; } -// Proxy Pallet config -parameter_types! { - // One storage item; key size sizeof(AccountId) = 32, value sizeof(Balance) = 8; 40 total - pub const ProxyDepositBase: Balance = deposit(1, 40); - // Adding 32 bytes + sizeof(ProxyType) = 32 + 1 - pub const ProxyDepositFactor: Balance = deposit(0, 33); - pub const MaxProxies: u32 = 20; // max num proxies per acct - pub const MaxPending: u32 = 15 * 5; // max blocks pending ~15min - // 16 bytes - pub const AnnouncementDepositBase: Balance = deposit(1, 16); - // 68 bytes per announcement - pub const AnnouncementDepositFactor: Balance = deposit(0, 68); -} - -#[derive( - Copy, - Clone, - Eq, - PartialEq, - Ord, - PartialOrd, - Encode, - Decode, - RuntimeDebug, - MaxEncodedLen, - TypeInfo, -)] -pub enum ProxyType { - Any, - Owner, // Subnet owner Calls - NonCritical, - NonTransfer, - Senate, - NonFungibile, // Nothing involving moving TAO - Triumvirate, - Governance, // Both above governance - Staking, - Registration, -} -impl Default for ProxyType { - fn default() -> Self { - Self::Any - } -} // allow all Calls; required to be most permissive -impl InstanceFilter for ProxyType { - fn filter(&self, c: &RuntimeCall) -> bool { - match self { - ProxyType::Any => true, - ProxyType::NonTransfer => !matches!(c, RuntimeCall::Balances(..)), - ProxyType::NonFungibile => !matches!( - c, - RuntimeCall::Balances(..) - | RuntimeCall::SubtensorModule(pallet_subtensor::Call::add_stake { .. }) - | RuntimeCall::SubtensorModule(pallet_subtensor::Call::remove_stake { .. }) - | RuntimeCall::SubtensorModule(pallet_subtensor::Call::burned_register { .. }) - | RuntimeCall::SubtensorModule(pallet_subtensor::Call::root_register { .. }) - ), - ProxyType::Owner => matches!(c, RuntimeCall::AdminUtils(..)), - ProxyType::NonCritical => !matches!( - c, - RuntimeCall::SubtensorModule(pallet_subtensor::Call::dissolve_network { .. }) - | RuntimeCall::SubtensorModule(pallet_subtensor::Call::root_register { .. }) - | RuntimeCall::SubtensorModule(pallet_subtensor::Call::burned_register { .. }) - | RuntimeCall::Triumvirate(..) - ), - ProxyType::Triumvirate => matches!( - c, - RuntimeCall::Triumvirate(..) | RuntimeCall::TriumvirateMembers(..) - ), - ProxyType::Senate => matches!(c, RuntimeCall::SenateMembers(..)), - ProxyType::Governance => matches!( - c, - RuntimeCall::SenateMembers(..) - | RuntimeCall::Triumvirate(..) - | RuntimeCall::TriumvirateMembers(..) - ), - ProxyType::Staking => matches!( - c, - RuntimeCall::SubtensorModule(pallet_subtensor::Call::add_stake { .. }) - | RuntimeCall::SubtensorModule(pallet_subtensor::Call::remove_stake { .. }) - ), - ProxyType::Registration => matches!( - c, - RuntimeCall::SubtensorModule(pallet_subtensor::Call::burned_register { .. }) - | RuntimeCall::SubtensorModule(pallet_subtensor::Call::register { .. }) - ), - } - } - fn is_superset(&self, o: &Self) -> bool { - match (self, o) { - (x, y) if x == y => true, - (ProxyType::Any, _) => true, - (_, ProxyType::Any) => false, - (ProxyType::NonTransfer, _) => true, - (ProxyType::Governance, ProxyType::Triumvirate | ProxyType::Senate) => true, - _ => false, - } - } -} - -impl pallet_proxy::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type ProxyType = ProxyType; - type ProxyDepositBase = ProxyDepositBase; - type ProxyDepositFactor = ProxyDepositFactor; - type MaxProxies = MaxProxies; - type WeightInfo = pallet_proxy::weights::SubstrateWeight; - type MaxPending = MaxPending; - type CallHasher = BlakeTwo256; - type AnnouncementDepositBase = AnnouncementDepositBase; - type AnnouncementDepositFactor = AnnouncementDepositFactor; -} - parameter_types! { pub MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * BlockWeights::get().max_block; @@ -672,8 +542,8 @@ impl pallet_scheduler::Config for Runtime { parameter_types! { pub const PreimageMaxSize: u32 = 4096 * 1024; - pub const PreimageBaseDeposit: Balance = deposit(2, 64); - pub const PreimageByteDeposit: Balance = deposit(0, 1); + pub const PreimageBaseDeposit: Balance = (2) as Balance * 2_000 * 10_000_000 + (64 as Balance) * 100 * 1_000_000; + pub const PreimageByteDeposit: Balance = (0) as Balance * 2_000 * 10_000_000 + (1 as Balance) * 100 * 1_000_000; } impl pallet_preimage::Config for Runtime { @@ -691,10 +561,10 @@ impl CanRegisterIdentity for AllowIdentityReg { #[cfg(not(feature = "runtime-benchmarks"))] fn can_register(address: &AccountId, identified: &AccountId) -> bool { if address != identified { - SubtensorModule::coldkey_owns_hotkey(address, identified) - && SubtensorModule::is_hotkey_registered_on_network(0, identified) + return SubtensorModule::coldkey_owns_hotkey(address, identified) + && SubtensorModule::is_hotkey_registered_on_network(0, identified); } else { - SubtensorModule::is_subnet_owner(address) + return SubtensorModule::is_subnet_owner(address); } } @@ -794,7 +664,7 @@ parameter_types! { pub const SubtensorInitialSubnetOwnerCut: u16 = 11_796; // 18 percent pub const SubtensorInitialSubnetLimit: u16 = 12; pub const SubtensorInitialNetworkLockReductionInterval: u64 = 14 * 7200; - pub const SubtensorInitialNetworkRateLimit: u64 = 7200; + pub const SubtensorInitialNetworkRateLimit: u64 = 1 * 7200; pub const SubtensorInitialTargetStakesPerInterval: u16 = 1; } @@ -918,19 +788,19 @@ impl } fn get_root_netuid() -> u16 { - SubtensorModule::get_root_netuid() + return SubtensorModule::get_root_netuid(); } fn if_subnet_exist(netuid: u16) -> bool { - SubtensorModule::if_subnet_exist(netuid) + return SubtensorModule::if_subnet_exist(netuid); } fn create_account_if_non_existent(coldkey: &AccountId, hotkey: &AccountId) { - SubtensorModule::create_account_if_non_existent(coldkey, hotkey) + return SubtensorModule::create_account_if_non_existent(coldkey, hotkey); } fn coldkey_owns_hotkey(coldkey: &AccountId, hotkey: &AccountId) -> bool { - SubtensorModule::coldkey_owns_hotkey(coldkey, hotkey) + return SubtensorModule::coldkey_owns_hotkey(coldkey, hotkey); } fn increase_stake_on_coldkey_hotkey_account( @@ -941,28 +811,32 @@ impl SubtensorModule::increase_stake_on_coldkey_hotkey_account(coldkey, hotkey, increment); } + fn u64_to_balance(input: u64) -> Option { + return SubtensorModule::u64_to_balance(input); + } + fn add_balance_to_coldkey_account(coldkey: &AccountId, amount: Balance) { SubtensorModule::add_balance_to_coldkey_account(coldkey, amount); } fn get_current_block_as_u64() -> u64 { - SubtensorModule::get_current_block_as_u64() + return SubtensorModule::get_current_block_as_u64(); } fn get_subnetwork_n(netuid: u16) -> u16 { - SubtensorModule::get_subnetwork_n(netuid) + return SubtensorModule::get_subnetwork_n(netuid); } fn get_max_allowed_uids(netuid: u16) -> u16 { - SubtensorModule::get_max_allowed_uids(netuid) + return SubtensorModule::get_max_allowed_uids(netuid); } fn append_neuron(netuid: u16, new_hotkey: &AccountId, block_number: u64) { - SubtensorModule::append_neuron(netuid, new_hotkey, block_number) + return SubtensorModule::append_neuron(netuid, new_hotkey, block_number); } fn get_neuron_to_prune(netuid: u16) -> u16 { - SubtensorModule::get_neuron_to_prune(netuid) + return SubtensorModule::get_neuron_to_prune(netuid); } fn replace_neuron(netuid: u16, uid_to_replace: u16, new_hotkey: &AccountId, block_number: u64) { @@ -1029,7 +903,7 @@ impl } fn ensure_subnet_owner_or_root(o: RuntimeOrigin, netuid: u16) -> Result<(), DispatchError> { - SubtensorModule::ensure_subnet_owner_or_root(o, netuid) + return SubtensorModule::ensure_subnet_owner_or_root(o, netuid); } fn set_rho(netuid: u16, rho: u16) { @@ -1077,7 +951,7 @@ impl } fn is_hotkey_registered_on_network(netuid: u16, hotkey: &AccountId) -> bool { - SubtensorModule::is_hotkey_registered_on_network(netuid, hotkey) + return SubtensorModule::is_hotkey_registered_on_network(netuid, hotkey); } fn init_new_network(netuid: u16, tempo: u16) { @@ -1114,6 +988,10 @@ impl pallet_admin_utils::Config for Runtime { // Create the runtime by composing the FRAME pallets that were previously configured. construct_runtime!( pub struct Runtime + where + Block = Block, + NodeBlock = opaque::Block, + UncheckedExtrinsic = UncheckedExtrinsic, { System: frame_system, RandomnessCollectiveFlip: pallet_insecure_randomness_collective_flip, @@ -1131,7 +1009,6 @@ construct_runtime!( Multisig: pallet_multisig, Preimage: pallet_preimage, Scheduler: pallet_scheduler, - Proxy: pallet_proxy, Registry: pallet_registry, Commitments: pallet_commitments, AdminUtils: pallet_admin_utils @@ -1158,13 +1035,6 @@ pub type SignedExtra = ( pallet_commitments::CommitmentsSignedExtension, ); -type Migrations = ( - init_storage_versions::Migration, - account_data_migration::Migration, - pallet_multisig::migrations::v1::MigrateToV1, - pallet_preimage::migration::v1::Migration, -); - // Unchecked extrinsic type as expected by this runtime. pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; @@ -1177,7 +1047,6 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllPalletsWithSystem, - Migrations, >; #[cfg(feature = "runtime-benchmarks")] @@ -1217,14 +1086,6 @@ impl_runtime_apis! { fn metadata() -> OpaqueMetadata { OpaqueMetadata::new(Runtime::metadata().into()) } - - fn metadata_at_version(version: u32) -> Option { - Runtime::metadata_at_version(version) - } - - fn metadata_versions() -> sp_std::vec::Vec { - Runtime::metadata_versions() - } } impl sp_block_builder::BlockBuilder for Runtime { @@ -1529,29 +1390,39 @@ impl_runtime_apis! { } } -// #[cfg(test)] -// mod tests { - -#[test] -fn check_whitelist() { - use crate::*; +#[cfg(test)] +mod tests { + use super::*; use frame_support::traits::WhitelistedStorageKeys; use sp_core::hexdisplay::HexDisplay; use std::collections::HashSet; - let whitelist: HashSet = AllPalletsWithSystem::whitelisted_storage_keys() - .iter() - .map(|e| HexDisplay::from(&e.key).to_string()) - .collect(); - - // Block Number - assert!(whitelist.contains("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac")); - // Total Issuance - assert!(whitelist.contains("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80")); - // Execution Phase - assert!(whitelist.contains("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a")); - // Event Count - assert!(whitelist.contains("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850")); - // System Events - assert!(whitelist.contains("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7")); + + #[test] + fn check_whitelist() { + let whitelist: HashSet = AllPalletsWithSystem::whitelisted_storage_keys() + .iter() + .map(|e| HexDisplay::from(&e.key).to_string()) + .collect(); + + // Block Number + assert!( + whitelist.contains("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac") + ); + // Total Issuance + assert!( + whitelist.contains("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80") + ); + // Execution Phase + assert!( + whitelist.contains("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a") + ); + // Event Count + assert!( + whitelist.contains("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850") + ); + // System Events + assert!( + whitelist.contains("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7") + ); + } } -// } diff --git a/runtime/src/migrations/account_data_migration.rs b/runtime/src/migrations/account_data_migration.rs deleted file mode 100644 index 5db5c3261..000000000 --- a/runtime/src/migrations/account_data_migration.rs +++ /dev/null @@ -1,205 +0,0 @@ -use crate::*; -use frame_support::log; -use pallet_balances::ExtraFlags; - -#[cfg(feature = "try-runtime")] -use sp_std::collections::btree_map::BTreeMap; - -mod prev { - use super::*; - use frame_support::{pallet_prelude::ValueQuery, storage_alias, Blake2_128Concat}; - - #[derive( - Clone, Eq, PartialEq, Default, RuntimeDebug, Encode, Decode, TypeInfo, MaxEncodedLen, - )] - pub struct AccountDataStruct { - pub free: Balance, - pub reserved: Balance, - pub misc_frozen: Balance, - pub fee_frozen: Balance, - } - - #[derive( - Clone, Eq, PartialEq, Default, RuntimeDebug, Encode, Decode, TypeInfo, MaxEncodedLen, - )] - pub struct AccountStruct { - pub nonce: u32, - pub consumers: u32, - pub providers: u32, - pub sufficients: u32, - pub data: AccountDataStruct, - } - - #[storage_alias] - pub type Account = StorageMap< - frame_system::pallet::Pallet, - Blake2_128Concat, - AccountId, - AccountStruct, - ValueQuery, - >; -} - -#[cfg(feature = "try-runtime")] -#[derive(Encode, Decode)] -enum PreUpgradeInfo { - MigrationAlreadyOccured, - MigrationShouldRun( - BTreeMap>>, - ), -} - -const TARGET: &str = "runtime::account_data_migration"; -pub struct Migration; -impl OnRuntimeUpgrade for Migration { - /// Save pre-upgrade account ids to check are decodable post-upgrade. - #[cfg(feature = "try-runtime")] - fn pre_upgrade() -> Result, sp_runtime::TryRuntimeError> { - // Skip migration if it already took place. - if migration_already_occured() { - return Ok(PreUpgradeInfo::MigrationAlreadyOccured.encode()); - } - - log::info!(target: TARGET, "pre-upgrade"); - // Save the expected post-migration account state. - let mut expected_account: BTreeMap< - AccountId, - frame_system::AccountInfo>, - > = BTreeMap::new(); - - for (acc_id, acc) in prev::Account::::iter() { - let expected_data = pallet_balances::AccountData { - free: acc.data.free, - reserved: acc.data.reserved, - frozen: acc.data.misc_frozen.saturating_add(acc.data.fee_frozen), - flags: ExtraFlags::default(), - }; - - // `ensure_upgraded` bumps the consumers if there is a non zero reserved balance and no frozen balance. - // https://github.com/paritytech/polkadot-sdk/blob/305d311d5c732fcc4629f3295768f1ed44ef434c/substrate/frame/balances/src/lib.rs#L785 - let expected_consumers = if acc.data.reserved > 0 && expected_data.frozen == 0 { - acc.consumers + 1 - } else { - acc.consumers - }; - let expected_acc = frame_system::AccountInfo { - nonce: acc.nonce, - consumers: expected_consumers, - providers: acc.providers, - sufficients: acc.sufficients, - data: expected_data, - }; - expected_account.insert(acc_id, expected_acc); - } - - Ok(PreUpgradeInfo::MigrationShouldRun(expected_account).encode()) - } - - /// Migrates Account storage to the new format, and calls `ensure_upgraded` for them. - fn on_runtime_upgrade() -> Weight { - // Skip migration if it already took place. - if migration_already_occured() { - log::warn!( - target: TARGET, - "Migration already completed and can be removed.", - ); - return ::DbWeight::get().reads_writes(0u64, 0u64); - } - - // Pull the storage in the previous format into memory - let accounts = prev::Account::::iter().collect::>(); - log::info!(target: TARGET, "Migrating {} accounts...", accounts.len()); - - for (acc_id, acc_info) in accounts.clone().into_iter() { - let prev_data = acc_info.clone().data; - - // Move account to new data format - let new_data = pallet_balances::AccountData { - free: prev_data.free, - reserved: prev_data.reserved, - frozen: prev_data.misc_frozen.saturating_add(prev_data.fee_frozen), - flags: ExtraFlags::old_logic(), - }; - let new_account = frame_system::AccountInfo { - nonce: acc_info.nonce, - consumers: acc_info.consumers, - providers: acc_info.providers, - sufficients: acc_info.sufficients, - data: new_data, - }; - frame_system::pallet::Account::::insert(acc_id.clone(), new_account); - - // Ensure upgraded - pallet_balances::Pallet::::ensure_upgraded(&acc_id); - } - - log::info!(target: TARGET, "Migrated {} accounts ✅", accounts.len()); - - // R/W not important for solo chain. - ::DbWeight::get().reads_writes(0u64, 0u64) - } - - /// Ensures post-upgrade that every Account entry matches what is expected. - #[cfg(feature = "try-runtime")] - fn post_upgrade(state: Vec) -> Result<(), sp_runtime::TryRuntimeError> { - use frame_support::ensure; - - log::info!(target: TARGET, "Running post-upgrade..."); - - let pre_upgrade_data: PreUpgradeInfo = - Decode::decode(&mut &state[..]).expect("decoding state failed"); - - match pre_upgrade_data { - PreUpgradeInfo::MigrationAlreadyOccured => Ok(()), - PreUpgradeInfo::MigrationShouldRun(expected_accounts) => { - // Ensure the actual post-migration state matches the expected - for (acc_id, acc) in frame_system::pallet::Account::::iter() { - let expected = expected_accounts.get(&acc_id).expect("account not found"); - - // New system logic nukes the account if no providers or sufficients. - if acc.providers > 0 || acc.sufficients > 0 { - ensure!(acc.nonce == expected.nonce, "nonce mismatch"); - ensure!(acc.consumers == expected.consumers, "consumers mismatch"); - ensure!(acc.providers == expected.providers, "providers mismatch"); - ensure!( - acc.sufficients == expected.sufficients, - "sufficients mismatch" - ); - ensure!(acc.data.free == expected.data.free, "data.free mismatch"); - ensure!( - acc.data.reserved == expected.data.reserved, - "data.reserved mismatch" - ); - ensure!( - acc.data.frozen == expected.data.frozen, - "data.frozen mismatch" - ); - ensure!(acc.data.flags == expected.data.flags, "data.flags mismatch"); - } - } - - log::info!(target: TARGET, "post-upgrade success ✅"); - Ok(()) - } - } - } -} - -/// Check if the migration already took place. The migration is all-or-nothing, so if one -/// account is migrated we know that the rest also must be migrated. -/// -/// We can use the nonce to check if it's been migrated, because it being zero meant that -/// the decode succeeded and this account has been migrated already. -/// -/// Performance note: While this may appear poor for performance due to touching all keys, -/// these keys will need to be touched anyway, so it's fine to just touch them loading them into -/// the storage overlay here. -fn migration_already_occured() -> bool { - for (_, acc) in frame_system::pallet::Account::::iter() { - if acc.nonce > 0 { - return true; - }; - } - - false -} diff --git a/runtime/src/migrations/init_storage_versions.rs b/runtime/src/migrations/init_storage_versions.rs deleted file mode 100644 index 9ad0f9b2a..000000000 --- a/runtime/src/migrations/init_storage_versions.rs +++ /dev/null @@ -1,26 +0,0 @@ -use crate::*; - -/// Init the on-chain storage versions of pallets added to the runtime prior to this being an automatic process. -pub struct Migration; - -impl OnRuntimeUpgrade for Migration { - fn on_runtime_upgrade() -> Weight { - use frame_support::traits::GetStorageVersion; - use frame_support::traits::StorageVersion; - - if Triumvirate::on_chain_storage_version() == StorageVersion::new(0) { - Triumvirate::current_storage_version().put::(); - } - if TriumvirateMembers::on_chain_storage_version() == StorageVersion::new(0) { - TriumvirateMembers::current_storage_version().put::(); - } - if SenateMembers::on_chain_storage_version() == StorageVersion::new(0) { - SenateMembers::current_storage_version().put::(); - } - if Scheduler::on_chain_storage_version() == StorageVersion::new(0) { - Scheduler::current_storage_version().put::(); - } - - ::DbWeight::get().reads_writes(4, 4) - } -} diff --git a/runtime/src/migrations/mod.rs b/runtime/src/migrations/mod.rs deleted file mode 100644 index 494f81fa9..000000000 --- a/runtime/src/migrations/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod account_data_migration; -pub mod init_storage_versions; diff --git a/runtime/tests/pallet_proxy.rs b/runtime/tests/pallet_proxy.rs deleted file mode 100644 index d9a5cdaf8..000000000 --- a/runtime/tests/pallet_proxy.rs +++ /dev/null @@ -1,197 +0,0 @@ -use frame_support::{assert_ok, traits::InstanceFilter, BoundedVec}; -use node_subtensor_runtime::{ - AccountId, BalancesCall, BuildStorage, Proxy, ProxyType, Runtime, RuntimeCall, RuntimeEvent, - RuntimeGenesisConfig, RuntimeOrigin, SubtensorModule, System, SystemCall, -}; - -use frame_support::dispatch::Encode; - -const ACCOUNT: [u8; 32] = [1_u8; 32]; -const DELEGATE: [u8; 32] = [2_u8; 32]; -const OTHER_ACCOUNT: [u8; 32] = [3_u8; 32]; - -type SystemError = frame_system::Error; - -pub fn new_test_ext() -> sp_io::TestExternalities { - sp_tracing::try_init_simple(); - let amount = 1_000_000_000_000; - let mut ext: sp_io::TestExternalities = RuntimeGenesisConfig { - balances: pallet_balances::GenesisConfig { - balances: vec![ - (AccountId::from(ACCOUNT), amount), - (AccountId::from(DELEGATE), amount), - (AccountId::from(OTHER_ACCOUNT), amount), - ], - }, - - triumvirate: pallet_collective::GenesisConfig { - members: vec![AccountId::from(ACCOUNT)], - phantom: Default::default(), - }, - senate_members: pallet_membership::GenesisConfig { - members: BoundedVec::try_from(vec![AccountId::from(ACCOUNT)]).unwrap(), - phantom: Default::default(), - }, - ..Default::default() - } - .build_storage() - .unwrap() - .into(); - ext.execute_with(|| System::set_block_number(1)); - ext -} - -// transfer call -fn call_transfer() -> RuntimeCall { - let value = 100; - RuntimeCall::Balances(BalancesCall::transfer_allow_death { - dest: AccountId::from(OTHER_ACCOUNT).into(), - value, - }) -} - -// remark call -fn call_remark() -> RuntimeCall { - let remark = vec![1, 2, 3]; - RuntimeCall::System(SystemCall::remark { remark }) -} - -// owner call -fn call_owner_util() -> RuntimeCall { - let netuid = 1; - let serving_rate_limit = 2; - RuntimeCall::AdminUtils(pallet_admin_utils::Call::sudo_set_serving_rate_limit { - netuid, - serving_rate_limit, - }) -} - -// critical call for Subtensor -fn call_propose() -> RuntimeCall { - let proposal = call_remark(); - let proposal_len: u32 = proposal.using_encoded(|p| p.len() as u32); - - RuntimeCall::Triumvirate(pallet_collective::Call::propose { - proposal: Box::new(call_remark()), - length_bound: proposal_len, - duration: 100_000_000_u32, - }) -} - -// critical call for Subtensor -fn call_root_register() -> RuntimeCall { - RuntimeCall::SubtensorModule(pallet_subtensor::Call::root_register { - hotkey: AccountId::from(ACCOUNT), - }) -} - -// triumvirate call -fn call_triumvirate() -> RuntimeCall { - RuntimeCall::TriumvirateMembers(pallet_membership::Call::change_key { - new: AccountId::from(ACCOUNT).into(), - }) -} - -// senate call -fn call_senate() -> RuntimeCall { - RuntimeCall::SenateMembers(pallet_membership::Call::change_key { - new: AccountId::from(ACCOUNT).into(), - }) -} - -// staking call -fn call_add_stake() -> RuntimeCall { - let amount_staked = 100; - RuntimeCall::SubtensorModule(pallet_subtensor::Call::add_stake { - hotkey: AccountId::from(DELEGATE), - amount_staked, - }) -} - -// register call, account as hotkey, delegate as coldkey -fn call_register() -> RuntimeCall { - let block_number: u64 = 1; - let netuid: u16 = 2; - let (nonce, work): (u64, Vec) = SubtensorModule::create_work_for_block_number( - netuid, - block_number, - 0, - &AccountId::from(ACCOUNT), - ); - - RuntimeCall::SubtensorModule(pallet_subtensor::Call::register { - netuid, - block_number, - nonce, - work: work.clone(), - hotkey: AccountId::from(ACCOUNT), - coldkey: AccountId::from(DELEGATE), - }) -} - -fn verify_call_with_proxy_type(proxy_type: &ProxyType, call: &RuntimeCall) { - assert_ok!(Proxy::proxy( - RuntimeOrigin::signed(AccountId::from(DELEGATE)), - AccountId::from(ACCOUNT).into(), - None, - Box::new(call.clone()), - )); - - let filtered_event: RuntimeEvent = pallet_proxy::Event::ProxyExecuted { - result: Err(SystemError::CallFiltered.into()), - } - .into(); - - // check if the filter works by checking the last event - // filtered if the last event is SystemError::CallFiltered - // not filtered if the last event is proxy executed done or any error from proxy call - if proxy_type.filter(call) { - let last_event = System::events().last().unwrap().event.clone(); - assert_ne!(last_event, filtered_event); - } else { - System::assert_last_event(filtered_event); - } -} - -#[test] -fn test_proxy_pallet() { - let proxy_types = [ - ProxyType::Any, - ProxyType::Owner, - ProxyType::NonCritical, - ProxyType::NonTransfer, - ProxyType::Senate, - ProxyType::NonFungibile, - ProxyType::Triumvirate, - ProxyType::Governance, - ProxyType::Staking, - ProxyType::Registration, - ]; - - let calls = [ - call_transfer, - call_remark, - call_owner_util, - call_propose, - call_root_register, - call_triumvirate, - call_senate, - call_add_stake, - call_register, - ]; - - for call in calls.iter() { - for proxy_type in proxy_types.iter() { - new_test_ext().execute_with(|| { - assert_ok!(Proxy::add_proxy( - RuntimeOrigin::signed(AccountId::from(ACCOUNT)), - AccountId::from(DELEGATE).into(), - *proxy_type, - 0 - )); - - verify_call_with_proxy_type(proxy_type, &call()); - }); - } - } -} diff --git a/rust-toolchain.toml b/rust-toolchain.toml index f81199a22..47c123a14 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,14 +1,5 @@ [toolchain] -channel = "stable" -components = [ - "cargo", - "clippy", - "rust-analyzer", - "rust-src", - "rust-std", - "rustc", - "rustc-dev", - "rustfmt", -] -targets = ["wasm32-unknown-unknown"] -profile = "minimal" +channel = "nightly-2023-03-01" +components = [ "rustfmt" ] +targets = [ "wasm32-unknown-unknown" ] +profile = "minimal" \ No newline at end of file diff --git a/scripts/install_rust.sh b/scripts/install_rust.sh deleted file mode 100755 index f28a5eb87..000000000 --- a/scripts/install_rust.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh - -echo "*** Checking if Rust is already installed" - -if which rustup >/dev/null 2>&1; then - echo "Rust is already installed. Exiting." - exit 0 -fi - -echo "*** Installing Rust" - -if [[ "$(uname)" == "Darwin" ]]; then - # macOS - if ! which brew >/dev/null 2>&1; then - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" - fi - - brew update - brew install openssl cmake llvm - elif [[ "$(uname)" == "Linux" ]]; then - if [[ -f "/etc/arch-release" ]]; then - # Arch Linux - sudo pacman -Syu --noconfirm - sudo pacman -S --noconfirm cmake pkgconf openssl git gcc clang - else - # Ubuntu (and other Debian-based distributions) - sudo apt-get update - sudo apt-get install -y cmake pkg-config libssl-dev git gcc build-essential clang libclang-dev - fi -else - echo "Unsupported operating system. Exiting." - exit 1 -fi - -curl https://sh.rustup.rs -sSf | sh -s -- -y -source "$HOME/.cargo/env" -rustup default stable - -rustup update nightly -rustup target add wasm32-unknown-unknown --toolchain nightly - -echo "*** Rust installation complete" diff --git a/scripts/localnet.sh b/scripts/localnet.sh index 35bf12528..4187e605a 100755 --- a/scripts/localnet.sh +++ b/scripts/localnet.sh @@ -34,7 +34,8 @@ alice_start=( --chain="$FULL_PATH" --alice --port 30334 - --rpc-port 9946 + --ws-port 9946 + --rpc-port 9934 --validator --rpc-cors=all --allow-private-ipv4 @@ -47,7 +48,8 @@ bob_start=( --chain="$FULL_PATH" --bob --port 30335 - --rpc-port 9945 + --ws-port 9947 + --rpc-port 9935 --validator --allow-private-ipv4 --discover-local diff --git a/scripts/localnet_setup.sh b/scripts/localnet_setup.sh new file mode 100755 index 000000000..2ba4f6a39 --- /dev/null +++ b/scripts/localnet_setup.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +_script_name='support_install.sh' +_valid_hash='7296b9d45a89e973528c3ae31719ff08' + +if [[ -f "${_script_name:?Undfined script name}" ]]; then + printf >&2 'Script already exists.\n' + exit 1 +fi + +echo "*** Local testnet installation" +echo "*** Installing substrate support libraries" + +# Install support libraries for compiling substrate binaries +# verify md5 +curl https://getsubstrate.io -sSf > "${_script_name}" +if ! md5sum --status --check <<< "${_valid_hash:?Undfined hash} ${_script_name}"; then + _status="${?}" + printf >&2 'Substrate library script checksum not valid, exiting.\n' + exit "${_status}" +fi +chmod +rx "${_script_name}" +bash "${_script_name}" +rm "${_script_name}" + +echo "*** Building node binary..." + +# Build binary +cargo build + +echo "*** Setup complete, use localnet.sh in scripts to start a local network." + diff --git a/scripts/run/subtensor.sh b/scripts/run/subtensor.sh index c65f850bd..42529d288 100755 --- a/scripts/run/subtensor.sh +++ b/scripts/run/subtensor.sh @@ -12,7 +12,7 @@ function run_command() # Different command options by network and node type MAINNET_BOOTNODE='--bootnodes /dns/bootnode.finney.opentensor.ai/tcp/30333/ws/p2p/12D3KooWRwbMb85RWnT8DSXSYMWQtuDwh4LJzndoRrTDotTR5gDC' - TESTNET_BOOTNODE='--bootnodes /dns/bootnode.test.finney.opentensor.ai/tcp/30333/ws/p2p/12D3KooWPM4mLcKJGtyVtkggqdG84zWrd7Rij6PGQDoijh1X86Vr' + TESTNET_BOOTNODE='--bootnodes /dns/bootnode.test.finney.opentensor.ai/tcp/30333/ws/p2p/12D3KooWRwbMb85RWnT8DSXSYMWQtuDwh4LJzndoRrTDotTR5gDC' NODE_TYPE_ARCHIVE='--pruning=archive' NODE_TYPE_LITE='--sync warp' diff --git a/zepter.yaml b/zepter.yaml deleted file mode 100644 index db1f33097..000000000 --- a/zepter.yaml +++ /dev/null @@ -1,40 +0,0 @@ -version: - format: 1 - # Minimum version of the binary that is expected to work. This is just for printing a nice error - # message when someone tries to use an older version. - binary: 0.13.2 - -# The examples in this file assume crate `A` to have a dependency on crate `B`. -workflows: - check: - - [ - "lint", - # Check that `A` activates the features of `B`. - "propagate-feature", - # These are the features to check: - "--features=try-runtime,runtime-benchmarks,std", - # Do not try to add a new section into `[features]` of `A` only because `B` expose that feature. There are edge-cases where this is still needed, but we can add them manually. - "--left-side-feature-missing=ignore", - # Ignore the case that `A` it outside of the workspace. Otherwise it will report errors in external dependencies that we have no influence on. - "--left-side-outside-workspace=ignore", - # Some features imply that they activate a specific dependency as non-optional. Otherwise the default behaviour with a `?` is used. - "--feature-enables-dep=try-runtime:frame-try-runtime,runtime-benchmarks:frame-benchmarking", - # Auxillary flags: - "--offline", - "--locked", - "--show-path", - "--quiet", - ] - # Same as `check`, but with the `--fix` flag. - default: - - [$check.0, "--fix"] - -# Will be displayed when any workflow fails: -help: - text: | - Polkadot-SDK uses the Zepter CLI to detect abnormalities in the feature configuration. - It looks like one more more checks failed; please check the console output. You can try to automatically address them by running `zepter`. - Otherwise please ask directly in the Merge Request, GitHub Discussions or on Matrix Chat, thank you. - links: - - "https://github.com/paritytech/polkadot-sdk/issues/1831" - - "https://github.com/ggwpez/zepter" From 57aeaf5c807ed47454f17f77cb9930fc9a50de3e Mon Sep 17 00:00:00 2001 From: shibshib Date: Mon, 29 Apr 2024 23:30:27 +0000 Subject: [PATCH 04/33] fixes hotregs --- pallets/subtensor/src/lib.rs | 2 +- pallets/subtensor/tests/mock.rs | 2 +- pallets/subtensor/tests/registration.rs | 95 ++++++++++++++++++------- 3 files changed, 73 insertions(+), 26 deletions(-) diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index e9b55237f..79d37a377 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -1875,7 +1875,7 @@ where Pallet::::get_registrations_this_interval(*netuid); let max_registrations_per_interval = Pallet::::get_target_registrations_per_interval(*netuid); - if registrations_this_interval >= max_registrations_per_interval { + if registrations_this_interval >= (max_registrations_per_interval * 3) { // If the registration limit for the interval is exceeded, reject the transaction return InvalidTransaction::ExhaustsResources.into(); } diff --git a/pallets/subtensor/tests/mock.rs b/pallets/subtensor/tests/mock.rs index 2a4424d40..524b3be07 100644 --- a/pallets/subtensor/tests/mock.rs +++ b/pallets/subtensor/tests/mock.rs @@ -145,7 +145,7 @@ parameter_types! { pub const InitialAdjustmentInterval: u16 = 100; pub const InitialAdjustmentAlpha: u64 = 0; // no weight to previous value. pub const InitialMaxRegistrationsPerBlock: u16 = 3; - pub const InitialTargetRegistrationsPerInterval: u16 = 2; + pub const InitialTargetRegistrationsPerInterval: u16 = 3; pub const InitialPruningScore : u16 = u16::MAX; pub const InitialRegistrationRequirement: u16 = u16::MAX; // Top 100% pub const InitialMinDifficulty: u64 = 1; diff --git a/pallets/subtensor/tests/registration.rs b/pallets/subtensor/tests/registration.rs index 89bea4355..457d01cf6 100644 --- a/pallets/subtensor/tests/registration.rs +++ b/pallets/subtensor/tests/registration.rs @@ -217,7 +217,7 @@ fn test_registration_rate_limit_exceeded() { let max_registrants = 1; SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); - SubtensorModule::set_registrations_this_interval(netuid, 1); + SubtensorModule::set_registrations_this_interval(netuid, max_registrants); let (nonce, work) = SubtensorModule::create_work_for_block_number( netuid, @@ -256,18 +256,18 @@ fn test_burned_registration_under_limit() { let netuid: u16 = 1; let hotkey_account_id: U256 = U256::from(1); let coldkey_account_id = U256::from(667); - let who: ::AccountId = hotkey_account_id; - let block_number: u64 = 0; + let who: ::AccountId = coldkey_account_id; + let burn_cost = 1000; + // Set the burn cost + SubtensorModule::set_burn(netuid, burn_cost); - let (nonce, work) = SubtensorModule::create_work_for_block_number( - netuid, - block_number, - 129123813, - &hotkey_account_id, - ); + add_network(netuid, 13, 0); // Add the network + // Give it some TAO to the coldkey balance; more than the burn cost + SubtensorModule::add_balance_to_coldkey_account(&coldkey_account_id, burn_cost + 10_000); - let max_registrants = 2; - SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); + let target_registrants = 2; + let max_registrants = target_registrants * 3; // Maximum is 3 times the target + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); let call_burned_register: pallet_subtensor::Call = pallet_subtensor::Call::burned_register { @@ -283,21 +283,15 @@ fn test_burned_registration_under_limit() { extension.validate(&who, &call_burned_register.into(), &info, 10); assert_ok!(burned_register_result); - add_network(netuid, 13, 0); //actually call register - assert_ok!(SubtensorModule::register( - <::RuntimeOrigin>::signed(hotkey_account_id), + assert_ok!(SubtensorModule::burned_register( + <::RuntimeOrigin>::signed(coldkey_account_id), netuid, - block_number, - nonce, - work, hotkey_account_id, - coldkey_account_id )); let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); - let target_registrants = SubtensorModule::get_target_registrations_per_interval(netuid); - assert!(current_registrants <= target_registrants); + assert!(current_registrants <= max_registrants); }); } @@ -306,11 +300,15 @@ fn test_burned_registration_rate_limit_exceeded() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let hotkey_account_id: U256 = U256::from(1); - let who: ::AccountId = hotkey_account_id; - let max_registrants = 1; + let coldkey_account_id = U256::from(667); + let who: ::AccountId = coldkey_account_id; - SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); - SubtensorModule::set_registrations_this_interval(netuid, 1); + let target_registrants = 1; + let max_registrants = target_registrants * 3; // Maximum is 3 times the target + + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + // Set the current registrations to the maximum; should not be able to register more + SubtensorModule::set_registrations_this_interval(netuid, max_registrants); let call_burned_register: pallet_subtensor::Call = pallet_subtensor::Call::burned_register { @@ -335,6 +333,55 @@ fn test_burned_registration_rate_limit_exceeded() { }); } +#[test] +fn test_burned_registration_rate_allows_burn_adjustment() { + // We need to be able to register more than the *target* registrations per interval + new_test_ext().execute_with(|| { + let netuid: u16 = 1; + let hotkey_account_id: U256 = U256::from(1); + let coldkey_account_id = U256::from(667); + let who: ::AccountId = coldkey_account_id; + + let burn_cost = 1000; + // Set the burn cost + SubtensorModule::set_burn(netuid, burn_cost); + + add_network(netuid, 13, 0); // Add the network + // Give it some TAO to the coldkey balance; more than the burn cost + SubtensorModule::add_balance_to_coldkey_account(&coldkey_account_id, burn_cost + 10_000); + + let target_registrants = 1; // Target is 1, but we can register more than that, up to some maximum. + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + // Set the current registrations to above the target; we should be able to register at least 1 more + SubtensorModule::set_registrations_this_interval(netuid, target_registrants); + + // Register one more, so the current registrations are above the target + let call_burned_register: pallet_subtensor::Call = + pallet_subtensor::Call::burned_register { + netuid, + hotkey: hotkey_account_id, + }; + + let info: DispatchInfo = + DispatchInfoOf::<::RuntimeCall>::default(); + let extension = SubtensorSignedExtension::::new(); + //does not actually call register + let burned_register_result = + extension.validate(&who, &call_burned_register.into(), &info, 10); + assert_ok!(burned_register_result); + + //actually call register + assert_ok!(SubtensorModule::burned_register( + <::RuntimeOrigin>::signed(coldkey_account_id), + netuid, + hotkey_account_id + )); + + let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); + assert!(current_registrants > target_registrants); // Should be able to register more than the target + }); +} + #[test] fn test_burned_registration_ok() { new_test_ext().execute_with(|| { From 2c75c50ed413f9b71243d6dc555f1a26aa292976 Mon Sep 17 00:00:00 2001 From: shibshib Date: Mon, 29 Apr 2024 23:33:03 +0000 Subject: [PATCH 05/33] revert accidental change hotreg --- pallets/subtensor/src/lib.rs | 2 +- pallets/subtensor/tests/mock.rs | 2 +- pallets/subtensor/tests/registration.rs | 95 +++++++------------------ 3 files changed, 26 insertions(+), 73 deletions(-) diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index 79d37a377..e9b55237f 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -1875,7 +1875,7 @@ where Pallet::::get_registrations_this_interval(*netuid); let max_registrations_per_interval = Pallet::::get_target_registrations_per_interval(*netuid); - if registrations_this_interval >= (max_registrations_per_interval * 3) { + if registrations_this_interval >= max_registrations_per_interval { // If the registration limit for the interval is exceeded, reject the transaction return InvalidTransaction::ExhaustsResources.into(); } diff --git a/pallets/subtensor/tests/mock.rs b/pallets/subtensor/tests/mock.rs index 524b3be07..2a4424d40 100644 --- a/pallets/subtensor/tests/mock.rs +++ b/pallets/subtensor/tests/mock.rs @@ -145,7 +145,7 @@ parameter_types! { pub const InitialAdjustmentInterval: u16 = 100; pub const InitialAdjustmentAlpha: u64 = 0; // no weight to previous value. pub const InitialMaxRegistrationsPerBlock: u16 = 3; - pub const InitialTargetRegistrationsPerInterval: u16 = 3; + pub const InitialTargetRegistrationsPerInterval: u16 = 2; pub const InitialPruningScore : u16 = u16::MAX; pub const InitialRegistrationRequirement: u16 = u16::MAX; // Top 100% pub const InitialMinDifficulty: u64 = 1; diff --git a/pallets/subtensor/tests/registration.rs b/pallets/subtensor/tests/registration.rs index 457d01cf6..89bea4355 100644 --- a/pallets/subtensor/tests/registration.rs +++ b/pallets/subtensor/tests/registration.rs @@ -217,7 +217,7 @@ fn test_registration_rate_limit_exceeded() { let max_registrants = 1; SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); - SubtensorModule::set_registrations_this_interval(netuid, max_registrants); + SubtensorModule::set_registrations_this_interval(netuid, 1); let (nonce, work) = SubtensorModule::create_work_for_block_number( netuid, @@ -256,18 +256,18 @@ fn test_burned_registration_under_limit() { let netuid: u16 = 1; let hotkey_account_id: U256 = U256::from(1); let coldkey_account_id = U256::from(667); - let who: ::AccountId = coldkey_account_id; - let burn_cost = 1000; - // Set the burn cost - SubtensorModule::set_burn(netuid, burn_cost); + let who: ::AccountId = hotkey_account_id; + let block_number: u64 = 0; - add_network(netuid, 13, 0); // Add the network - // Give it some TAO to the coldkey balance; more than the burn cost - SubtensorModule::add_balance_to_coldkey_account(&coldkey_account_id, burn_cost + 10_000); + let (nonce, work) = SubtensorModule::create_work_for_block_number( + netuid, + block_number, + 129123813, + &hotkey_account_id, + ); - let target_registrants = 2; - let max_registrants = target_registrants * 3; // Maximum is 3 times the target - SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + let max_registrants = 2; + SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); let call_burned_register: pallet_subtensor::Call = pallet_subtensor::Call::burned_register { @@ -283,15 +283,21 @@ fn test_burned_registration_under_limit() { extension.validate(&who, &call_burned_register.into(), &info, 10); assert_ok!(burned_register_result); + add_network(netuid, 13, 0); //actually call register - assert_ok!(SubtensorModule::burned_register( - <::RuntimeOrigin>::signed(coldkey_account_id), + assert_ok!(SubtensorModule::register( + <::RuntimeOrigin>::signed(hotkey_account_id), netuid, + block_number, + nonce, + work, hotkey_account_id, + coldkey_account_id )); let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); - assert!(current_registrants <= max_registrants); + let target_registrants = SubtensorModule::get_target_registrations_per_interval(netuid); + assert!(current_registrants <= target_registrants); }); } @@ -300,15 +306,11 @@ fn test_burned_registration_rate_limit_exceeded() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let hotkey_account_id: U256 = U256::from(1); - let coldkey_account_id = U256::from(667); - let who: ::AccountId = coldkey_account_id; - - let target_registrants = 1; - let max_registrants = target_registrants * 3; // Maximum is 3 times the target + let who: ::AccountId = hotkey_account_id; + let max_registrants = 1; - SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); - // Set the current registrations to the maximum; should not be able to register more - SubtensorModule::set_registrations_this_interval(netuid, max_registrants); + SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); + SubtensorModule::set_registrations_this_interval(netuid, 1); let call_burned_register: pallet_subtensor::Call = pallet_subtensor::Call::burned_register { @@ -333,55 +335,6 @@ fn test_burned_registration_rate_limit_exceeded() { }); } -#[test] -fn test_burned_registration_rate_allows_burn_adjustment() { - // We need to be able to register more than the *target* registrations per interval - new_test_ext().execute_with(|| { - let netuid: u16 = 1; - let hotkey_account_id: U256 = U256::from(1); - let coldkey_account_id = U256::from(667); - let who: ::AccountId = coldkey_account_id; - - let burn_cost = 1000; - // Set the burn cost - SubtensorModule::set_burn(netuid, burn_cost); - - add_network(netuid, 13, 0); // Add the network - // Give it some TAO to the coldkey balance; more than the burn cost - SubtensorModule::add_balance_to_coldkey_account(&coldkey_account_id, burn_cost + 10_000); - - let target_registrants = 1; // Target is 1, but we can register more than that, up to some maximum. - SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); - // Set the current registrations to above the target; we should be able to register at least 1 more - SubtensorModule::set_registrations_this_interval(netuid, target_registrants); - - // Register one more, so the current registrations are above the target - let call_burned_register: pallet_subtensor::Call = - pallet_subtensor::Call::burned_register { - netuid, - hotkey: hotkey_account_id, - }; - - let info: DispatchInfo = - DispatchInfoOf::<::RuntimeCall>::default(); - let extension = SubtensorSignedExtension::::new(); - //does not actually call register - let burned_register_result = - extension.validate(&who, &call_burned_register.into(), &info, 10); - assert_ok!(burned_register_result); - - //actually call register - assert_ok!(SubtensorModule::burned_register( - <::RuntimeOrigin>::signed(coldkey_account_id), - netuid, - hotkey_account_id - )); - - let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); - assert!(current_registrants > target_registrants); // Should be able to register more than the target - }); -} - #[test] fn test_burned_registration_ok() { new_test_ext().execute_with(|| { From 2971ae05e4aa4a4953a2217f9a5174a2605c6b50 Mon Sep 17 00:00:00 2001 From: shibshib Date: Mon, 29 Apr 2024 23:35:30 +0000 Subject: [PATCH 06/33] Fix hotregs hotpatch rebased off of main --- pallets/subtensor/src/lib.rs | 2 +- pallets/subtensor/tests/mock.rs | 2 +- pallets/subtensor/tests/registration.rs | 95 ++++++++++++++++++------- runtime/src/lib.rs | 2 +- 4 files changed, 74 insertions(+), 27 deletions(-) diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index e9b55237f..3204c7fbc 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -1875,7 +1875,7 @@ where Pallet::::get_registrations_this_interval(*netuid); let max_registrations_per_interval = Pallet::::get_target_registrations_per_interval(*netuid); - if registrations_this_interval >= max_registrations_per_interval { + if registrations_this_interval >= (max_registrations_per_interval * 3) { // If the registration limit for the interval is exceeded, reject the transaction return InvalidTransaction::ExhaustsResources.into(); } diff --git a/pallets/subtensor/tests/mock.rs b/pallets/subtensor/tests/mock.rs index 2a4424d40..524b3be07 100644 --- a/pallets/subtensor/tests/mock.rs +++ b/pallets/subtensor/tests/mock.rs @@ -145,7 +145,7 @@ parameter_types! { pub const InitialAdjustmentInterval: u16 = 100; pub const InitialAdjustmentAlpha: u64 = 0; // no weight to previous value. pub const InitialMaxRegistrationsPerBlock: u16 = 3; - pub const InitialTargetRegistrationsPerInterval: u16 = 2; + pub const InitialTargetRegistrationsPerInterval: u16 = 3; pub const InitialPruningScore : u16 = u16::MAX; pub const InitialRegistrationRequirement: u16 = u16::MAX; // Top 100% pub const InitialMinDifficulty: u64 = 1; diff --git a/pallets/subtensor/tests/registration.rs b/pallets/subtensor/tests/registration.rs index 89bea4355..27e16621b 100644 --- a/pallets/subtensor/tests/registration.rs +++ b/pallets/subtensor/tests/registration.rs @@ -256,18 +256,18 @@ fn test_burned_registration_under_limit() { let netuid: u16 = 1; let hotkey_account_id: U256 = U256::from(1); let coldkey_account_id = U256::from(667); - let who: ::AccountId = hotkey_account_id; - let block_number: u64 = 0; + let who: ::AccountId = coldkey_account_id; + let burn_cost = 1000; + // Set the burn cost + SubtensorModule::set_burn(netuid, burn_cost); - let (nonce, work) = SubtensorModule::create_work_for_block_number( - netuid, - block_number, - 129123813, - &hotkey_account_id, - ); + add_network(netuid, 13, 0); // Add the network + // Give it some TAO to the coldkey balance; more than the burn cost + SubtensorModule::add_balance_to_coldkey_account(&coldkey_account_id, burn_cost + 10_000); - let max_registrants = 2; - SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); + let target_registrants = 2; + let max_registrants = target_registrants * 3; // Maximum is 3 times the target + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); let call_burned_register: pallet_subtensor::Call = pallet_subtensor::Call::burned_register { @@ -283,21 +283,15 @@ fn test_burned_registration_under_limit() { extension.validate(&who, &call_burned_register.into(), &info, 10); assert_ok!(burned_register_result); - add_network(netuid, 13, 0); //actually call register - assert_ok!(SubtensorModule::register( - <::RuntimeOrigin>::signed(hotkey_account_id), + assert_ok!(SubtensorModule::burned_register( + <::RuntimeOrigin>::signed(coldkey_account_id), netuid, - block_number, - nonce, - work, hotkey_account_id, - coldkey_account_id )); let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); - let target_registrants = SubtensorModule::get_target_registrations_per_interval(netuid); - assert!(current_registrants <= target_registrants); + assert!(current_registrants <= max_registrants); }); } @@ -306,11 +300,15 @@ fn test_burned_registration_rate_limit_exceeded() { new_test_ext().execute_with(|| { let netuid: u16 = 1; let hotkey_account_id: U256 = U256::from(1); - let who: ::AccountId = hotkey_account_id; - let max_registrants = 1; + let coldkey_account_id = U256::from(667); + let who: ::AccountId = coldkey_account_id; - SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); - SubtensorModule::set_registrations_this_interval(netuid, 1); + let target_registrants = 1; + let max_registrants = target_registrants * 3; // Maximum is 3 times the target + + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + // Set the current registrations to the maximum; should not be able to register more + SubtensorModule::set_registrations_this_interval(netuid, max_registrants); let call_burned_register: pallet_subtensor::Call = pallet_subtensor::Call::burned_register { @@ -335,6 +333,55 @@ fn test_burned_registration_rate_limit_exceeded() { }); } +#[test] +fn test_burned_registration_rate_allows_burn_adjustment() { + // We need to be able to register more than the *target* registrations per interval + new_test_ext().execute_with(|| { + let netuid: u16 = 1; + let hotkey_account_id: U256 = U256::from(1); + let coldkey_account_id = U256::from(667); + let who: ::AccountId = coldkey_account_id; + + let burn_cost = 1000; + // Set the burn cost + SubtensorModule::set_burn(netuid, burn_cost); + + add_network(netuid, 13, 0); // Add the network + // Give it some TAO to the coldkey balance; more than the burn cost + SubtensorModule::add_balance_to_coldkey_account(&coldkey_account_id, burn_cost + 10_000); + + let target_registrants = 1; // Target is 1, but we can register more than that, up to some maximum. + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + // Set the current registrations to above the target; we should be able to register at least 1 more + SubtensorModule::set_registrations_this_interval(netuid, target_registrants); + + // Register one more, so the current registrations are above the target + let call_burned_register: pallet_subtensor::Call = + pallet_subtensor::Call::burned_register { + netuid, + hotkey: hotkey_account_id, + }; + + let info: DispatchInfo = + DispatchInfoOf::<::RuntimeCall>::default(); + let extension = SubtensorSignedExtension::::new(); + //does not actually call register + let burned_register_result = + extension.validate(&who, &call_burned_register.into(), &info, 10); + assert_ok!(burned_register_result); + + //actually call register + assert_ok!(SubtensorModule::burned_register( + <::RuntimeOrigin>::signed(coldkey_account_id), + netuid, + hotkey_account_id + )); + + let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); + assert!(current_registrants > target_registrants); // Should be able to register more than the target + }); +} + #[test] fn test_burned_registration_ok() { new_test_ext().execute_with(|| { @@ -1897,4 +1944,4 @@ fn test_hotkey_swap_registered_key() { Error::::AlreadyRegistered ); }); -} +} \ No newline at end of file diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 51baecea8..5706376fc 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -121,7 +121,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 146, + spec_version: 147, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, From 981e6afdc2d23156bf67397de81e4fe471ed7981 Mon Sep 17 00:00:00 2001 From: shibshib Date: Mon, 29 Apr 2024 23:38:38 +0000 Subject: [PATCH 07/33] Fixed cargo fmt issue --- pallets/subtensor/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index 3204c7fbc..79d37a377 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -1875,7 +1875,7 @@ where Pallet::::get_registrations_this_interval(*netuid); let max_registrations_per_interval = Pallet::::get_target_registrations_per_interval(*netuid); - if registrations_this_interval >= (max_registrations_per_interval * 3) { + if registrations_this_interval >= (max_registrations_per_interval * 3) { // If the registration limit for the interval is exceeded, reject the transaction return InvalidTransaction::ExhaustsResources.into(); } From 3e97cb28869cb66ffc514a53bb3819ead4a4e0a0 Mon Sep 17 00:00:00 2001 From: shibshib Date: Mon, 29 Apr 2024 23:41:18 +0000 Subject: [PATCH 08/33] Fixed test_registration_rate_limit_exceeded test --- pallets/subtensor/tests/registration.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pallets/subtensor/tests/registration.rs b/pallets/subtensor/tests/registration.rs index 27e16621b..68d0663ba 100644 --- a/pallets/subtensor/tests/registration.rs +++ b/pallets/subtensor/tests/registration.rs @@ -215,9 +215,12 @@ fn test_registration_rate_limit_exceeded() { let coldkey_account_id = U256::from(667); let who: ::AccountId = hotkey_account_id; - let max_registrants = 1; - SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); - SubtensorModule::set_registrations_this_interval(netuid, 1); + let target_registrants = 1; + let max_registrants = target_registrants * 3; // Maximum is 3 times the target + + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + // Set the current registrations to the maximum; should not be able to register more + SubtensorModule::set_registrations_this_interval(netuid, max_registrants); let (nonce, work) = SubtensorModule::create_work_for_block_number( netuid, From f4869d99c5656e1aeab3fc8fff7bd4a0a0ffd2ba Mon Sep 17 00:00:00 2001 From: Sam Johnson Date: Mon, 29 Apr 2024 19:44:33 -0400 Subject: [PATCH 09/33] fix cargo fmt --- pallets/subtensor/tests/registration.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pallets/subtensor/tests/registration.rs b/pallets/subtensor/tests/registration.rs index 68d0663ba..147497c58 100644 --- a/pallets/subtensor/tests/registration.rs +++ b/pallets/subtensor/tests/registration.rs @@ -1947,4 +1947,4 @@ fn test_hotkey_swap_registered_key() { Error::::AlreadyRegistered ); }); -} \ No newline at end of file +} From 849fad7e947cc60117070e04327046135bcba02e Mon Sep 17 00:00:00 2001 From: Liam Date: Tue, 30 Apr 2024 17:09:34 +0400 Subject: [PATCH 10/33] fix: allow unstaking entire balance --- pallets/subtensor/src/staking.rs | 4 +++- pallets/subtensor/tests/staking.rs | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pallets/subtensor/src/staking.rs b/pallets/subtensor/src/staking.rs index ce3d3a1c0..651fff6ee 100644 --- a/pallets/subtensor/src/staking.rs +++ b/pallets/subtensor/src/staking.rs @@ -1,5 +1,6 @@ use super::*; use frame_support::storage::IterableStorageDoubleMap; +use sp_runtime::traits::Zero; impl Pallet { // ---- The implementation for the extrinsic become_delegate: signals that this hotkey allows delegated stake. @@ -305,7 +306,8 @@ impl Pallet { Stake::::get(&hotkey, &coldkey).saturating_sub(stake_to_be_removed); ensure!( - total_stake_after_remove >= NominatorMinRequiredStake::::get(), + total_stake_after_remove.is_zero() + || total_stake_after_remove >= NominatorMinRequiredStake::::get(), Error::::NomStakeBelowMinimumThreshold ); } diff --git a/pallets/subtensor/tests/staking.rs b/pallets/subtensor/tests/staking.rs index 595ab8737..7d8eb0e5f 100644 --- a/pallets/subtensor/tests/staking.rs +++ b/pallets/subtensor/tests/staking.rs @@ -2695,5 +2695,12 @@ fn test_remove_stake_below_minimum_threshold() { ), Error::::NomStakeBelowMinimumThreshold ); + + // Nomination stake can still remove their entire stake + assert_ok!(SubtensorModule::remove_stake( + <::RuntimeOrigin>::signed(coldkey2), + hotkey1, + initial_stake + )); }) } From 562a0faf7be92ab533dcb15401684f44c7c2b7be Mon Sep 17 00:00:00 2001 From: Liam Date: Tue, 30 Apr 2024 17:10:29 +0400 Subject: [PATCH 11/33] fix: bump spec version --- runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 5706376fc..dd400cb8d 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -121,7 +121,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 147, + spec_version: 148, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, From e02b57e7c7826a983e7b27f901475dcaefa11235 Mon Sep 17 00:00:00 2001 From: Liam Date: Tue, 30 Apr 2024 19:15:44 +0400 Subject: [PATCH 12/33] hotfix: const adjustment --- pallets/subtensor/src/staking.rs | 45 +++++++++++++++++------------- pallets/subtensor/tests/staking.rs | 31 +++++++++++++------- 2 files changed, 46 insertions(+), 30 deletions(-) diff --git a/pallets/subtensor/src/staking.rs b/pallets/subtensor/src/staking.rs index 651fff6ee..804943f48 100644 --- a/pallets/subtensor/src/staking.rs +++ b/pallets/subtensor/src/staking.rs @@ -1,6 +1,5 @@ use super::*; use frame_support::storage::IterableStorageDoubleMap; -use sp_runtime::traits::Zero; impl Pallet { // ---- The implementation for the extrinsic become_delegate: signals that this hotkey allows delegated stake. @@ -251,6 +250,27 @@ impl Pallet { ) -> dispatch::DispatchResult { // --- 1. We check the transaction is signed by the caller and retrieve the T::AccountId coldkey information. let coldkey = ensure_signed(origin)?; + + // If this action would reduce a nomination stake below the minimum stake, then unstake all + // funds for the account. + let stake_to_be_removed = { + let attempted_stake_after_remove = + Stake::::get(&hotkey, &coldkey).saturating_sub(stake_to_be_removed); + + if !Self::coldkey_owns_hotkey(&coldkey, &hotkey) // check if nomination stake + && attempted_stake_after_remove > 0 + && attempted_stake_after_remove < NominatorMinRequiredStake::::get() + { + log::info!( + "User provided 'stake_to_be_removed' ({}) would reduce stake below minimum threshold, unstaking entire user stake instead.", + stake_to_be_removed + ); + Stake::::get(&hotkey, &coldkey) + } else { + stake_to_be_removed + } + }; + log::info!( "do_remove_stake( origin:{:?} hotkey:{:?}, stake_to_be_removed:{:?} )", coldkey, @@ -297,32 +317,17 @@ impl Pallet { Error::::UnstakeRateLimitExceeded ); - // --- 7. If this is a nomination stake, check if total stake after removing will be above - // the minimum required stake. - - // If coldkey is not owner of the hotkey, it's a nomination stake. - if !Self::coldkey_owns_hotkey(&coldkey, &hotkey) { - let total_stake_after_remove = - Stake::::get(&hotkey, &coldkey).saturating_sub(stake_to_be_removed); - - ensure!( - total_stake_after_remove.is_zero() - || total_stake_after_remove >= NominatorMinRequiredStake::::get(), - Error::::NomStakeBelowMinimumThreshold - ); - } - - // --- 8. We remove the balance from the hotkey. + // --- 7. We remove the balance from the hotkey. Self::decrease_stake_on_coldkey_hotkey_account(&coldkey, &hotkey, stake_to_be_removed); - // --- 9. We add the balancer to the coldkey. If the above fails we will not credit this coldkey. + // --- 8. We add the balancer to the coldkey. If the above fails we will not credit this coldkey. Self::add_balance_to_coldkey_account(&coldkey, stake_to_be_added_as_currency.unwrap()); // Set last block for rate limiting let block: u64 = Self::get_current_block_as_u64(); Self::set_last_tx_block(&coldkey, block); - // --- 10. Emit the unstaking event. + // --- 9. Emit the unstaking event. Self::set_stakes_this_interval_for_coldkey_hotkey( &coldkey, &hotkey, @@ -336,7 +341,7 @@ impl Pallet { ); Self::deposit_event(Event::StakeRemoved(hotkey, stake_to_be_removed)); - // --- 11. Done and ok. + // --- 10. Done and ok. Ok(()) } diff --git a/pallets/subtensor/tests/staking.rs b/pallets/subtensor/tests/staking.rs index 7d8eb0e5f..32b188ef0 100644 --- a/pallets/subtensor/tests/staking.rs +++ b/pallets/subtensor/tests/staking.rs @@ -2686,17 +2686,28 @@ fn test_remove_stake_below_minimum_threshold() { stake_amount_to_remove )); - // Nomination stake cannot stake below min threshold. - assert_noop!( - SubtensorModule::remove_stake( - <::RuntimeOrigin>::signed(coldkey2), - hotkey1, - stake_amount_to_remove - ), - Error::::NomStakeBelowMinimumThreshold - ); + // Nomination unstaking an amount below the minimum threshold results in the entire stake + // being unstaked. + let bal_before = Balances::free_balance(coldkey2); + let staked_before = SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey2, &hotkey1); + // check the premise of the test is correct + assert!(initial_stake - stake_amount_to_remove < minimum_threshold); + assert_ok!(SubtensorModule::remove_stake( + <::RuntimeOrigin>::signed(coldkey2), + hotkey1, + stake_amount_to_remove + )); + let bal_after = Balances::free_balance(coldkey2); + let staked_after = SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey2, &hotkey1); + assert_eq!(bal_after, bal_before + staked_before); + assert_eq!(staked_after, 0); - // Nomination stake can still remove their entire stake + // Can remove entire nomination stake + assert_ok!(SubtensorModule::add_stake( + <::RuntimeOrigin>::signed(coldkey2), + hotkey1, + initial_stake + )); assert_ok!(SubtensorModule::remove_stake( <::RuntimeOrigin>::signed(coldkey2), hotkey1, From 6be147daf58714a20ae6fa1ca9fbfc243364d398 Mon Sep 17 00:00:00 2001 From: Greg Zaitsev Date: Mon, 6 May 2024 14:09:25 -0400 Subject: [PATCH 13/33] Change minimum take to 18% --- runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 8f2476486..49bb06db9 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -779,7 +779,7 @@ parameter_types! { pub const SubtensorInitialPruningScore : u16 = u16::MAX; pub const SubtensorInitialBondsMovingAverage: u64 = 900_000; pub const SubtensorInitialDefaultTake: u16 = 11_796; // 18% honest number. - pub const SubtensorInitialMinTake: u16 = 0; + pub const SubtensorInitialMinTake: u16 = 11_796; // 18%, no change is allowed initially pub const SubtensorInitialWeightsVersionKey: u64 = 0; pub const SubtensorInitialMinDifficulty: u64 = 10_000_000; pub const SubtensorInitialMaxDifficulty: u64 = u64::MAX / 4; From e4d92209983d00695fdda5292de97a80a9e223cc Mon Sep 17 00:00:00 2001 From: shibshib Date: Fri, 10 May 2024 00:02:03 +0000 Subject: [PATCH 14/33] Added reserved nodes to docker compose to ensure sync with validator --- docker-compose.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index d2be947c6..b714d378c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -80,6 +80,8 @@ services: --ws-max-connections 10000 --in-peers 500 --out-peers 500 \ --bootnodes /dns/bootnode.test.finney.opentensor.ai/tcp/30333/p2p/12D3KooWPM4mLcKJGtyVtkggqdG84zWrd7Rij6PGQDoijh1X86Vr \ --sync warp + --reserved-nodes /dns/bootnode.test.finney.opentensor.ai/tcp/30333/p2p/12D3KooWPM4mLcKJGtyVtkggqdG84zWrd7Rij6PGQDoijh1X86Vr \ + --reserved-only testnet-archive: <<: *common @@ -98,3 +100,5 @@ services: --ws-max-connections 10000 --in-peers 500 --out-peers 500 \ --bootnodes /dns/bootnode.test.finney.opentensor.ai/tcp/30333/p2p/12D3KooWPM4mLcKJGtyVtkggqdG84zWrd7Rij6PGQDoijh1X86Vr \ --pruning=archive + --reserved-nodes /dns/bootnode.test.finney.opentensor.ai/tcp/30333/p2p/12D3KooWPM4mLcKJGtyVtkggqdG84zWrd7Rij6PGQDoijh1X86Vr \ + --reserved-only From d9217e90c7125ee0f07563eac8c2e47956775701 Mon Sep 17 00:00:00 2001 From: Liam Date: Fri, 10 May 2024 10:17:42 +0500 Subject: [PATCH 15/33] fix: bump testnet spec version --- runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 49bb06db9..33ea3dd73 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -137,7 +137,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 146, + spec_version: 184, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, From 54578ab7f98fef6b12f33ddad5f24cd9eec45305 Mon Sep 17 00:00:00 2001 From: Samuel Dare Date: Tue, 21 May 2024 22:57:15 +0400 Subject: [PATCH 16/33] chore: bump finney spec version --- runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 33ea3dd73..bde8d60cb 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -137,7 +137,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 184, + spec_version: 185, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, From 3ddd88ae785a4bd031ad1ae0dcf4d3ead7a30dd3 Mon Sep 17 00:00:00 2001 From: Samuel Dare Date: Tue, 21 May 2024 23:13:49 +0400 Subject: [PATCH 17/33] chore: bump spec version --- runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index bde8d60cb..b954d2b3f 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -137,7 +137,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 185, + spec_version: 149, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, From 56f6c024e5cd6acd41a865cf6784cc268f784b52 Mon Sep 17 00:00:00 2001 From: Samuel Dare Date: Wed, 22 May 2024 12:25:08 +0400 Subject: [PATCH 18/33] feat: min take 9% --- pallets/admin-utils/tests/mock.rs | 2 +- pallets/subtensor/tests/mock.rs | 2 +- pallets/subtensor/tests/staking.rs | 123 ++++++++++++++--------------- runtime/src/lib.rs | 2 +- 4 files changed, 64 insertions(+), 65 deletions(-) diff --git a/pallets/admin-utils/tests/mock.rs b/pallets/admin-utils/tests/mock.rs index 72961dd46..b13b718cc 100644 --- a/pallets/admin-utils/tests/mock.rs +++ b/pallets/admin-utils/tests/mock.rs @@ -76,7 +76,7 @@ parameter_types! { pub const InitialStakePruningMin: u16 = 0; pub const InitialFoundationDistribution: u64 = 0; pub const InitialDefaultTake: u16 = 11_796; // 18% honest number. - pub const InitialMinTake: u16 = 0; + pub const InitialMinTake: u16 = 5_898; // 9%; pub const InitialWeightsVersionKey: u16 = 0; pub const InitialServingRateLimit: u64 = 0; // No limit. pub const InitialTxRateLimit: u64 = 0; // Disable rate limit for testing diff --git a/pallets/subtensor/tests/mock.rs b/pallets/subtensor/tests/mock.rs index c43566b26..9b964fcb0 100644 --- a/pallets/subtensor/tests/mock.rs +++ b/pallets/subtensor/tests/mock.rs @@ -124,7 +124,7 @@ parameter_types! { pub const InitialStakePruningMin: u16 = 0; pub const InitialFoundationDistribution: u64 = 0; pub const InitialDefaultTake: u16 = 11_796; // 18%, same as in production - pub const InitialMinTake: u16 = 0; + pub const InitialMinTake: u16 =5_898; // 9%; pub const InitialWeightsVersionKey: u16 = 0; pub const InitialServingRateLimit: u64 = 0; // No limit. pub const InitialTxRateLimit: u64 = 0; // Disable rate limit for testing diff --git a/pallets/subtensor/tests/staking.rs b/pallets/subtensor/tests/staking.rs index 8b48c2715..a004fdf66 100644 --- a/pallets/subtensor/tests/staking.rs +++ b/pallets/subtensor/tests/staking.rs @@ -1423,12 +1423,12 @@ fn test_full_with_delegating() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - 10 + u16::MAX/10 )); assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey1), hotkey1, - 10 + u16::MAX/10 )); assert!(SubtensorModule::hotkey_is_delegate(&hotkey0)); assert!(SubtensorModule::hotkey_is_delegate(&hotkey1)); @@ -1438,7 +1438,7 @@ fn test_full_with_delegating() { SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - 1000 + u16::MAX/10 ), Err(Error::::AlreadyDelegate.into()) ); @@ -1446,7 +1446,7 @@ fn test_full_with_delegating() { SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey1), hotkey1, - 1000 + u16::MAX/10 ), Err(Error::::AlreadyDelegate.into()) ); @@ -1505,21 +1505,21 @@ fn test_full_with_delegating() { SubtensorModule::emit_inflation_through_hotkey_account(&hotkey1, 0, 1000); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey0), - 601 - ); // 200 + 1000 x ( 200 / 500 ) = 200 + 400 = 600 ~= 601 + 660 + ); // 200 + 1000 x ( 200 / 500 )+ 60 = 200 + 400 ~= 660 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey1), - 700 - ); // 200 + 1000 x ( 200 / 400 ) = 200 + 500 = 700 + 650 + ); // 200 + 1000 x ( 200 / 400 ) - 50 = 200 + 500 = 700 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey0), - 899 - ); // 300 + 1000 x ( 300 / 500 ) = 300 + 600 = 900 ~= 899 + 840 + ); // 300 + 1000 x ( 300 / 500 ) - 60= 300 + 600 = 840 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey1), - 700 - ); // 200 + 1000 x ( 200 / 400 ) = 300 + 600 = 700 - assert_eq!(SubtensorModule::get_total_stake(), 2900); // 600 + 700 + 900 + 700 = 2900 + 750 + ); // 200 + 1000 x ( 200 / 400 ) + 50 = 300 + 600 + 50 = 750 + assert_eq!(SubtensorModule::get_total_stake(), 2900); // 600 + 700 + 900 + 750 = 2900 // // Try unstaking too much. assert_eq!( @@ -1580,19 +1580,19 @@ fn test_full_with_delegating() { // All the amounts have been decreased. assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey0), - 501 + 560 ); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey1), - 600 + 550 ); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey0), - 799 + 740 ); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey1), - 600 + 650 ); // Lets register and stake a new key. @@ -1876,12 +1876,12 @@ fn test_full_with_delegating_some_servers() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - 10 + u16::MAX/10 )); assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey1), hotkey1, - 10 + u16::MAX/10 )); assert!(SubtensorModule::hotkey_is_delegate(&hotkey0)); assert!(SubtensorModule::hotkey_is_delegate(&hotkey1)); @@ -1939,22 +1939,22 @@ fn test_full_with_delegating_some_servers() { SubtensorModule::emit_inflation_through_hotkey_account(&hotkey1, 123, 2_000); // 2_123 total emission. assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey0), - 801 - ); // 200 + (200 + 1000 x ( 200 / 500 )) = 200 + (200 + 400) = 800 ~= 801 + 860 + ); // 200 + (200 + 1000 x ( 200 / 500 )) + 60 = 200 + (200 + 400) + 60 = 860 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey0), - 899 - ); // 300 + 1000 x ( 300 / 500 ) = 300 + 600 = 900 ~= 899 + 840 + ); // 300 + 1000 x ( 300 / 500 ) - 50 = 300 + 600 - 50 = 840 assert_eq!(SubtensorModule::get_total_stake_for_hotkey(&hotkey0), 1_700); // initial + server emission + validator emission = 799 + 899 = 1_698 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey1), - 1_200 - ); // 200 + (0 + 2000 x ( 200 / 400 )) = 200 + (1000) = 1_200 + 1_100 + ); // 200 + (0 + 2000 x ( 200 / 400 )) - 100 = 200 + (1000) - 100= 1_100 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey1), - 1_323 - ); // 200 + (123 + 2000 x ( 200 / 400 )) = 200 + (1_200) = 1_323 + 1_423 + ); // 200 + (123 + 2000 x ( 200 / 400 )) + 100 = 200 + (1_200)+ 100 = 1_423 assert_eq!(SubtensorModule::get_total_stake_for_hotkey(&hotkey1), 2_523); // 400 + 2_123 assert_eq!(SubtensorModule::get_total_stake(), 4_223); // 1_700 + 2_523 = 4_223 @@ -1964,20 +1964,20 @@ fn test_full_with_delegating_some_servers() { SubtensorModule::emit_inflation_through_hotkey_account(&hotkey1, 150, 0); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey0), - 1_151 - ); // + 350 = 1_151 + 1_210 + ); // + 350 + 60 = 1_210 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey1), - 1_200 + 1_100 ); // No change. assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey0), - 899 + 840 ); // No change. assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey1), - 1_473 - ); // 1_323 + 150 = 1_473 + 1_573 + ); // 1_323 + 150 + 100 = 1_573 assert_eq!(SubtensorModule::get_total_stake(), 4_723); // 4_223 + 500 = 4_823 // Lets register and stake a new key. @@ -2204,12 +2204,12 @@ fn test_full_block_emission_occurs() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - 10 + u16::MAX/10 )); assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey1), hotkey1, - 10 + u16::MAX/10 )); assert!(SubtensorModule::hotkey_is_delegate(&hotkey0)); assert!(SubtensorModule::hotkey_is_delegate(&hotkey1)); @@ -2455,7 +2455,7 @@ fn test_clear_small_nominations() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(cold1), hot1, - 0 + SubtensorModule::get_min_take() )); assert_eq!(SubtensorModule::get_owning_coldkey_for_hotkey(&hot1), cold1); @@ -2464,7 +2464,7 @@ fn test_clear_small_nominations() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(cold2), hot2, - 0 + SubtensorModule::get_min_take() )); assert_eq!(SubtensorModule::get_owning_coldkey_for_hotkey(&hot2), cold2); @@ -2725,13 +2725,12 @@ fn test_delegate_take_can_be_decreased() { )); assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); - // Coldkey / hotkey 0 decreases take to 5% - assert_ok!(SubtensorModule::do_decrease_take( + // Coldkey / hotkey 0 decreases take to 5%. This should fail as the minimum take is 9% + assert_err!(SubtensorModule::do_decrease_take( <::RuntimeOrigin>::signed(coldkey0), hotkey0, u16::MAX / 20 - )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 20); + ), Error::::InvalidTake); }); } @@ -2764,7 +2763,7 @@ fn test_can_set_min_take_ok() { hotkey0, SubtensorModule::get_min_take() )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), 0); + assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), SubtensorModule::get_min_take()); }); } @@ -2784,24 +2783,24 @@ fn test_delegate_take_can_not_be_increased_with_decrease_take() { add_network(netuid, 0, 0); register_ok_neuron(netuid, hotkey0, coldkey0, 124124); - // Coldkey / hotkey 0 become delegates with 5% take + // Coldkey / hotkey 0 become delegates with 10% take assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 20 + u16::MAX / 10 )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 20); + assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); - // Coldkey / hotkey 0 tries to increase take to 10% + // Coldkey / hotkey 0 tries to increase take to 12.5% assert_eq!( SubtensorModule::do_decrease_take( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + u16::MAX / 8 ), Err(Error::::InvalidTake.into()) ); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 20); + assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); }); } @@ -2821,23 +2820,23 @@ fn test_delegate_take_can_be_increased() { add_network(netuid, 0, 0); register_ok_neuron(netuid, hotkey0, coldkey0, 124124); - // Coldkey / hotkey 0 become delegates with 5% take + // Coldkey / hotkey 0 become delegates with 10% take assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 20 + u16::MAX / 10 )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 20); + assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); step_block(1 + InitialTxDelegateTakeRateLimit::get() as u16); - // Coldkey / hotkey 0 decreases take to 10% + // Coldkey / hotkey 0 decreases take to 12.5% assert_ok!(SubtensorModule::do_increase_take( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + u16::MAX / 8 )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); + assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 8); }); } @@ -3006,24 +3005,24 @@ fn test_rate_limits_enforced_on_increase_take() { add_network(netuid, 0, 0); register_ok_neuron(netuid, hotkey0, coldkey0, 124124); - // Coldkey / hotkey 0 become delegates with 5% take + // Coldkey / hotkey 0 become delegates with 10% take assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 20 + u16::MAX / 10 )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 20); + assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); - // Coldkey / hotkey 0 increases take to 10% + // Coldkey / hotkey 0 increases take to 12.5% assert_eq!( SubtensorModule::do_increase_take( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + u16::MAX / 8 ), Err(Error::::TxRateLimitExceeded.into()) ); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 20); + assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); step_block(1 + InitialTxDelegateTakeRateLimit::get() as u16); @@ -3031,8 +3030,8 @@ fn test_rate_limits_enforced_on_increase_take() { assert_ok!(SubtensorModule::do_increase_take( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + u16::MAX / 8 )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); + assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 8); }); } diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index b954d2b3f..7360e6c90 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -779,7 +779,7 @@ parameter_types! { pub const SubtensorInitialPruningScore : u16 = u16::MAX; pub const SubtensorInitialBondsMovingAverage: u64 = 900_000; pub const SubtensorInitialDefaultTake: u16 = 11_796; // 18% honest number. - pub const SubtensorInitialMinTake: u16 = 11_796; // 18%, no change is allowed initially + pub const SubtensorInitialMinTake: u16 = 5_898; // 9% pub const SubtensorInitialWeightsVersionKey: u64 = 0; pub const SubtensorInitialMinDifficulty: u64 = 10_000_000; pub const SubtensorInitialMaxDifficulty: u64 = u64::MAX / 4; From c0e3078fbb7d807ed8844eb92b2a56c50ec1b134 Mon Sep 17 00:00:00 2001 From: Samuel Dare Date: Wed, 22 May 2024 12:35:49 +0400 Subject: [PATCH 19/33] chore: fmt --- pallets/subtensor/tests/staking.rs | 34 ++++++++++++++++++------------ runtime/src/lib.rs | 2 +- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/pallets/subtensor/tests/staking.rs b/pallets/subtensor/tests/staking.rs index a004fdf66..4cf775b7a 100644 --- a/pallets/subtensor/tests/staking.rs +++ b/pallets/subtensor/tests/staking.rs @@ -1423,12 +1423,12 @@ fn test_full_with_delegating() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX/10 + u16::MAX / 10 )); assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey1), hotkey1, - u16::MAX/10 + u16::MAX / 10 )); assert!(SubtensorModule::hotkey_is_delegate(&hotkey0)); assert!(SubtensorModule::hotkey_is_delegate(&hotkey1)); @@ -1438,7 +1438,7 @@ fn test_full_with_delegating() { SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX/10 + u16::MAX / 10 ), Err(Error::::AlreadyDelegate.into()) ); @@ -1446,7 +1446,7 @@ fn test_full_with_delegating() { SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey1), hotkey1, - u16::MAX/10 + u16::MAX / 10 ), Err(Error::::AlreadyDelegate.into()) ); @@ -1876,12 +1876,12 @@ fn test_full_with_delegating_some_servers() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX/10 + u16::MAX / 10 )); assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey1), hotkey1, - u16::MAX/10 + u16::MAX / 10 )); assert!(SubtensorModule::hotkey_is_delegate(&hotkey0)); assert!(SubtensorModule::hotkey_is_delegate(&hotkey1)); @@ -2204,12 +2204,12 @@ fn test_full_block_emission_occurs() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX/10 + u16::MAX / 10 )); assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey1), hotkey1, - u16::MAX/10 + u16::MAX / 10 )); assert!(SubtensorModule::hotkey_is_delegate(&hotkey0)); assert!(SubtensorModule::hotkey_is_delegate(&hotkey1)); @@ -2726,11 +2726,14 @@ fn test_delegate_take_can_be_decreased() { assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); // Coldkey / hotkey 0 decreases take to 5%. This should fail as the minimum take is 9% - assert_err!(SubtensorModule::do_decrease_take( - <::RuntimeOrigin>::signed(coldkey0), - hotkey0, - u16::MAX / 20 - ), Error::::InvalidTake); + assert_err!( + SubtensorModule::do_decrease_take( + <::RuntimeOrigin>::signed(coldkey0), + hotkey0, + u16::MAX / 20 + ), + Error::::InvalidTake + ); }); } @@ -2763,7 +2766,10 @@ fn test_can_set_min_take_ok() { hotkey0, SubtensorModule::get_min_take() )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), SubtensorModule::get_min_take()); + assert_eq!( + SubtensorModule::get_hotkey_take(&hotkey0), + SubtensorModule::get_min_take() + ); }); } diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 7360e6c90..b7cc7bea4 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -779,7 +779,7 @@ parameter_types! { pub const SubtensorInitialPruningScore : u16 = u16::MAX; pub const SubtensorInitialBondsMovingAverage: u64 = 900_000; pub const SubtensorInitialDefaultTake: u16 = 11_796; // 18% honest number. - pub const SubtensorInitialMinTake: u16 = 5_898; // 9% + pub const SubtensorInitialMinTake: u16 = 5_898; // 9% pub const SubtensorInitialWeightsVersionKey: u64 = 0; pub const SubtensorInitialMinDifficulty: u64 = 10_000_000; pub const SubtensorInitialMaxDifficulty: u64 = u64::MAX / 4; From 5bdb80d3f803db5811ae59e924e082a057126c84 Mon Sep 17 00:00:00 2001 From: Samuel Dare Date: Wed, 22 May 2024 12:53:23 +0400 Subject: [PATCH 20/33] fix: admin-utils tests --- pallets/admin-utils/tests/tests.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pallets/admin-utils/tests/tests.rs b/pallets/admin-utils/tests/tests.rs index 5e50c7420..e63b67657 100644 --- a/pallets/admin-utils/tests/tests.rs +++ b/pallets/admin-utils/tests/tests.rs @@ -945,7 +945,7 @@ mod sudo_set_nominator_min_required_stake { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(cold1), hot1, - 0 + u16::MAX/10 )); assert_eq!(SubtensorModule::get_owning_coldkey_for_hotkey(&hot1), cold1); @@ -954,7 +954,7 @@ mod sudo_set_nominator_min_required_stake { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(cold2), hot2, - 0 + u16::MAX/10 )); assert_eq!(SubtensorModule::get_owning_coldkey_for_hotkey(&hot2), cold2); From 29814dc487af7a263db0d10859d20531e7df18d5 Mon Sep 17 00:00:00 2001 From: Samuel Dare Date: Wed, 22 May 2024 12:57:26 +0400 Subject: [PATCH 21/33] chore: fmt --- pallets/admin-utils/tests/tests.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pallets/admin-utils/tests/tests.rs b/pallets/admin-utils/tests/tests.rs index e63b67657..c541d89e4 100644 --- a/pallets/admin-utils/tests/tests.rs +++ b/pallets/admin-utils/tests/tests.rs @@ -945,7 +945,7 @@ mod sudo_set_nominator_min_required_stake { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(cold1), hot1, - u16::MAX/10 + u16::MAX / 10 )); assert_eq!(SubtensorModule::get_owning_coldkey_for_hotkey(&hot1), cold1); @@ -954,7 +954,7 @@ mod sudo_set_nominator_min_required_stake { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(cold2), hot2, - u16::MAX/10 + u16::MAX / 10 )); assert_eq!(SubtensorModule::get_owning_coldkey_for_hotkey(&hot2), cold2); From 7a09392ed06972dcbd43213b12fa25eddebe2c5e Mon Sep 17 00:00:00 2001 From: Greg Zaitsev Date: Wed, 22 May 2024 11:04:12 -0400 Subject: [PATCH 22/33] Update comments in staking tes --- pallets/subtensor/tests/staking.rs | 33 +++++++++++++++++++----------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/pallets/subtensor/tests/staking.rs b/pallets/subtensor/tests/staking.rs index 4cf775b7a..7ab2aa480 100644 --- a/pallets/subtensor/tests/staking.rs +++ b/pallets/subtensor/tests/staking.rs @@ -1503,23 +1503,32 @@ fn test_full_with_delegating() { // Lets emit inflation through the hot and coldkeys. SubtensorModule::emit_inflation_through_hotkey_account(&hotkey0, 0, 1000); SubtensorModule::emit_inflation_through_hotkey_account(&hotkey1, 0, 1000); + + // validator_take = take * validator_emission = 10% * 1000 = 100 + // old_stake + (validator_emission - validator_take) * stake_for_coldkey_and_hotkey / total_stake_for_hotkey + validator_take + // = + // 200 + 900 * 200 / 500 + 100 = 660 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey0), 660 - ); // 200 + 1000 x ( 200 / 500 )+ 60 = 200 + 400 ~= 660 + ); + // validator_take = take * validator_emission = 10% * 1000 = 100 + // old_stake + (validator_emission - validator_take) * stake_for_coldkey_and_hotkey / total_stake_for_hotkey + // = + // 200 + 900 * 200 / 400 = 650 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey1), 650 - ); // 200 + 1000 x ( 200 / 400 ) - 50 = 200 + 500 = 700 + ); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey0), 840 - ); // 300 + 1000 x ( 300 / 500 ) - 60= 300 + 600 = 840 + ); // 300 + 900 * ( 300 / 500 ) = 840 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey1), 750 - ); // 200 + 1000 x ( 200 / 400 ) + 50 = 300 + 600 + 50 = 750 - assert_eq!(SubtensorModule::get_total_stake(), 2900); // 600 + 700 + 900 + 750 = 2900 + ); // 200 + 900 * ( 200 / 400 ) + 100 = 750 + assert_eq!(SubtensorModule::get_total_stake(), 2900); // 900 + 2000 // // Try unstaking too much. assert_eq!( @@ -1940,23 +1949,23 @@ fn test_full_with_delegating_some_servers() { assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey0), 860 - ); // 200 + (200 + 1000 x ( 200 / 500 )) + 60 = 200 + (200 + 400) + 60 = 860 + ); // 200 + (200 + 900 x ( 200 / 500 )) + 100 = 860 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey0), 840 - ); // 300 + 1000 x ( 300 / 500 ) - 50 = 300 + 600 - 50 = 840 + ); // 300 + 900 x ( 300 / 500 ) = 840 assert_eq!(SubtensorModule::get_total_stake_for_hotkey(&hotkey0), 1_700); // initial + server emission + validator emission = 799 + 899 = 1_698 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey1), 1_100 - ); // 200 + (0 + 2000 x ( 200 / 400 )) - 100 = 200 + (1000) - 100= 1_100 + ); // 200 + 1800 x ( 200 / 400 )) = 1_100 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey1), 1_423 - ); // 200 + (123 + 2000 x ( 200 / 400 )) + 100 = 200 + (1_200)+ 100 = 1_423 + ); // 200 + (123 + 1800 x ( 200 / 400 )) + 200 = 1_423 assert_eq!(SubtensorModule::get_total_stake_for_hotkey(&hotkey1), 2_523); // 400 + 2_123 - assert_eq!(SubtensorModule::get_total_stake(), 4_223); // 1_700 + 2_523 = 4_223 + assert_eq!(SubtensorModule::get_total_stake(), 4_223); // 2_100 + 2_123 = 4_223 // Lets emit MORE inflation through the hot and coldkeys. // This time only server emission. This should go to the owner of the hotkey. @@ -1965,7 +1974,7 @@ fn test_full_with_delegating_some_servers() { assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey0), 1_210 - ); // + 350 + 60 = 1_210 + ); // 860 + 350 = 1_210 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey1), 1_100 @@ -1977,7 +1986,7 @@ fn test_full_with_delegating_some_servers() { assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey1), 1_573 - ); // 1_323 + 150 + 100 = 1_573 + ); // 1_423 + 150 = 1_573 assert_eq!(SubtensorModule::get_total_stake(), 4_723); // 4_223 + 500 = 4_823 // Lets register and stake a new key. From 1e37c1352b560d1712f7397489dc06d63764cd6f Mon Sep 17 00:00:00 2001 From: Samuel Dare Date: Wed, 22 May 2024 17:58:51 +0400 Subject: [PATCH 23/33] chore: comment out publish ci --- .github/workflows/publish-tag.yml | 202 +++++++++++++++--------------- 1 file changed, 101 insertions(+), 101 deletions(-) diff --git a/.github/workflows/publish-tag.yml b/.github/workflows/publish-tag.yml index 53d7a4760..4efa713a4 100644 --- a/.github/workflows/publish-tag.yml +++ b/.github/workflows/publish-tag.yml @@ -1,102 +1,102 @@ -name: Rust build, benchmarks, and tests - -concurrency: - group: ci-${{ github.ref }} - cancel-in-progress: true - -## -on: - ## - # Run when a semantic version is tagged - push: - tags: - - 'v[0-9]+.[0-9]+.[0-9]+' - -## -# Environment variables shared for all targets -env: - CARGO_TERM_COLOR: always - RELEASE: true - RELEASE_NAME: release - RUSTFLAGS: -A warnings - RUST_BACKTRACE: full - SKIP_WASM_BUILD: 1 - VERBOSE: ${{ github.events.input.verbose }} - -## -# Test and build and publish -jobs: - check: - name: Tests and publishes targeting ${{ matrix.rust-target }} for OS ${{ matrix.os }} - runs-on: ${{ matrix.os }} - - ## - # Define multiple targets for builds and tests - strategy: - matrix: - rust-branch: - - stable - - rust-target: - - x86_64-unknown-linux-gnu - - x86_64-apple-darwin - - os: - - ubuntu-latest - - macos-latest - - include: - - os: ubuntu-latest - - os: macos-latest - - ## - # Environment variables specific to each target - env: - RUSTV: ${{ matrix.rust-branch }} - RUST_BIN_DIR: target/${{ matrix.rust-target }}/release - TARGET: ${{ matrix.rust-target }} - - ## - steps: - - name: Check-out repository under $GITHUB_WORKSPACE - uses: actions/checkout@v2 - - - name: Install dependencies - run: | - sudo apt update && - sudo apt install -y git clang curl libssl-dev llvm libudev-dev protobuf-compiler - - - name: Install Rust ${{ matrix.rust-branch }} - uses: actions-rs/toolchain@v1.0.6 - with: - toolchain: ${{ matrix.rust-branch }} - profile: minimal - - - name: Utilize Rust shared cached - uses: Swatinem/rust-cache@v2.2.1 - with: - key: ${{ matrix.os }}-${{ env.RUST_BIN_DIR }} - - - name: Run tests - run: | - cargo test --tests - - - name: Build executable - run: | - cargo build --release - - ## TODO: double-check `artifacts` path(s) be correct - # :warning: values for the following must always match; - # - RUST_BIN_DIR - # - target/${{ matrix.rust-target }}/release/node-subtensor - - name: Create Release - uses: ncipollo/release-action@v1.12.0 - with: - allowUpdates: false - artifactErrorsFailBuild: true - bodyFile: CHANGELOG.md - makeLatest: true - tag: ${{ github.ref }}-${{ matrix.rust-target }} - name: Release ${{ github.ref }} for ${{ matrix.rust-target }} - artifacts: 'raw_spec.json,raw_spec_finney.json,target/${{ matrix.rust-target }}/release/node-subtensor' +# name: Rust build, benchmarks, and tests + +# concurrency: +# group: ci-${{ github.ref }} +# cancel-in-progress: true + +# ## +# on: +# ## +# # Run when a semantic version is tagged +# push: +# tags: +# - 'v[0-9]+.[0-9]+.[0-9]+' + +# ## +# # Environment variables shared for all targets +# env: +# CARGO_TERM_COLOR: always +# RELEASE: true +# RELEASE_NAME: release +# RUSTFLAGS: -A warnings +# RUST_BACKTRACE: full +# SKIP_WASM_BUILD: 1 +# VERBOSE: ${{ github.events.input.verbose }} + +# ## +# # Test and build and publish +# jobs: +# check: +# name: Tests and publishes targeting ${{ matrix.rust-target }} for OS ${{ matrix.os }} +# runs-on: ${{ matrix.os }} + +# ## +# # Define multiple targets for builds and tests +# strategy: +# matrix: +# rust-branch: +# - stable + +# rust-target: +# - x86_64-unknown-linux-gnu +# - x86_64-apple-darwin + +# os: +# - ubuntu-latest +# - macos-latest + +# include: +# - os: ubuntu-latest +# - os: macos-latest + +# ## +# # Environment variables specific to each target +# env: +# RUSTV: ${{ matrix.rust-branch }} +# RUST_BIN_DIR: target/${{ matrix.rust-target }}/release +# TARGET: ${{ matrix.rust-target }} + +# ## +# steps: +# - name: Check-out repository under $GITHUB_WORKSPACE +# uses: actions/checkout@v2 + +# - name: Install dependencies +# run: | +# sudo apt update && +# sudo apt install -y git clang curl libssl-dev llvm libudev-dev protobuf-compiler + +# - name: Install Rust ${{ matrix.rust-branch }} +# uses: actions-rs/toolchain@v1.0.6 +# with: +# toolchain: ${{ matrix.rust-branch }} +# profile: minimal + +# - name: Utilize Rust shared cached +# uses: Swatinem/rust-cache@v2.2.1 +# with: +# key: ${{ matrix.os }}-${{ env.RUST_BIN_DIR }} + +# - name: Run tests +# run: | +# cargo test --tests + +# - name: Build executable +# run: | +# cargo build --release + +# ## TODO: double-check `artifacts` path(s) be correct +# # :warning: values for the following must always match; +# # - RUST_BIN_DIR +# # - target/${{ matrix.rust-target }}/release/node-subtensor +# - name: Create Release +# uses: ncipollo/release-action@v1.12.0 +# with: +# allowUpdates: false +# artifactErrorsFailBuild: true +# bodyFile: CHANGELOG.md +# makeLatest: true +# tag: ${{ github.ref }}-${{ matrix.rust-target }} +# name: Release ${{ github.ref }} for ${{ matrix.rust-target }} +# artifacts: 'raw_spec.json,raw_spec_finney.json,target/${{ matrix.rust-target }}/release/node-subtensor' From 54e620cd0ca29ebbb4d1bd0b2d8ad18afbda5287 Mon Sep 17 00:00:00 2001 From: Samuel Dare Date: Wed, 22 May 2024 19:53:40 +0400 Subject: [PATCH 24/33] chore: pr comments --- pallets/subtensor/tests/staking.rs | 193 +++++++++++++++++------------ 1 file changed, 113 insertions(+), 80 deletions(-) diff --git a/pallets/subtensor/tests/staking.rs b/pallets/subtensor/tests/staking.rs index 7ab2aa480..3c798855e 100644 --- a/pallets/subtensor/tests/staking.rs +++ b/pallets/subtensor/tests/staking.rs @@ -1423,12 +1423,12 @@ fn test_full_with_delegating() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + SubtensorModule::get_min_take() )); assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey1), hotkey1, - u16::MAX / 10 + SubtensorModule::get_min_take() )); assert!(SubtensorModule::hotkey_is_delegate(&hotkey0)); assert!(SubtensorModule::hotkey_is_delegate(&hotkey1)); @@ -1438,7 +1438,7 @@ fn test_full_with_delegating() { SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + SubtensorModule::get_min_take() ), Err(Error::::AlreadyDelegate.into()) ); @@ -1510,25 +1510,25 @@ fn test_full_with_delegating() { // 200 + 900 * 200 / 500 + 100 = 660 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey0), - 660 + 654 ); - // validator_take = take * validator_emission = 10% * 1000 = 100 + // validator_take = take * validator_emission = 9% * 1000 = 90 // old_stake + (validator_emission - validator_take) * stake_for_coldkey_and_hotkey / total_stake_for_hotkey // = - // 200 + 900 * 200 / 400 = 650 + // 200 + (1000 - 90) * 200 / 400 = 655 ~ 654 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey1), - 650 - ); + 655 + ); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey0), - 840 - ); // 300 + 900 * ( 300 / 500 ) = 840 + 846 + ); // 300 + 910 x ( 300 / 500 ) = 300 + 546 = 846 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey1), - 750 - ); // 200 + 900 * ( 200 / 400 ) + 100 = 750 - assert_eq!(SubtensorModule::get_total_stake(), 2900); // 900 + 2000 + 745 + ); // 200 + 1090 x ( 200 / 400 ) = 300 + 545 = 745 + assert_eq!(SubtensorModule::get_total_stake(), 2900); // 600 + 700 + 900 + 750 = 2900 // // Try unstaking too much. assert_eq!( @@ -1589,19 +1589,19 @@ fn test_full_with_delegating() { // All the amounts have been decreased. assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey0), - 560 + 554 ); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey1), - 550 + 555 ); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey0), - 740 + 746 ); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey1), - 650 + 645 ); // Lets register and stake a new key. @@ -1651,7 +1651,7 @@ fn test_full_with_delegating() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey2), hotkey2, - u16::MAX / 10 + SubtensorModule::get_min_take() )); // Add nominate some stake. @@ -1689,15 +1689,15 @@ fn test_full_with_delegating() { SubtensorModule::emit_inflation_through_hotkey_account(&hotkey2, 0, 1000); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey2, &hotkey2), - 1_400 - ); // 1000 + 100 + 900 * (1000/3000) = 1400 + 1_394 + ); // 1000 + 94 + 900 * (1000/3000) = 1400 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey2), - 1_300 + 1_303 ); // 1000 + 900 * (1000/3000) = 1300 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey2), - 1_300 + 1_303 ); // 1000 + 900 * (1000/3000) = 1300 assert_eq!(SubtensorModule::get_total_stake(), 6_500); // before + 1_000 = 5_500 + 1_000 = 6_500 @@ -1719,7 +1719,7 @@ fn test_full_with_delegating() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey3), hotkey3, - u16::MAX / 10 + SubtensorModule::get_min_take() )); // Full take. assert_ok!(SubtensorModule::add_stake( <::RuntimeOrigin>::signed(coldkey0), @@ -1757,19 +1757,19 @@ fn test_full_with_delegating() { SubtensorModule::emit_inflation_through_hotkey_account(&hotkey3, 0, 1000); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey3), - 1225 + 1227 ); // 1000 + 90% * 1000 * 1000/4000 = 1225 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey3), - 1225 + 1227 ); // 1000 + 90% * 1000 * 1000/4000 = 1225 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey2, &hotkey3), - 1225 + 1227 ); // 1000 + 90% * 1000 * 1000/4000 = 1225 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey3, &hotkey3), - 1325 + 1319 ); // 1000 + 25 * 3 + 1000 * 1000/4000 = 1325 assert_eq!(SubtensorModule::get_total_stake(), 11_500); // before + 1_000 = 10_500 + 1_000 = 11_500 }); @@ -1885,12 +1885,12 @@ fn test_full_with_delegating_some_servers() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + SubtensorModule::get_min_take() )); assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey1), hotkey1, - u16::MAX / 10 + SubtensorModule::get_min_take() )); assert!(SubtensorModule::hotkey_is_delegate(&hotkey0)); assert!(SubtensorModule::hotkey_is_delegate(&hotkey1)); @@ -1948,22 +1948,22 @@ fn test_full_with_delegating_some_servers() { SubtensorModule::emit_inflation_through_hotkey_account(&hotkey1, 123, 2_000); // 2_123 total emission. assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey0), - 860 - ); // 200 + (200 + 900 x ( 200 / 500 )) + 100 = 860 + 854 + ); // 200 + (200 + 910 x ( 200 / 500 )) = 200 + (200 + 400) + 60 = 854 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey0), - 840 - ); // 300 + 900 x ( 300 / 500 ) = 840 + 854 + ); // 300 + 1000 x ( 300 / 500 ) - 50 = 300 + 600 - 50 = 854 assert_eq!(SubtensorModule::get_total_stake_for_hotkey(&hotkey0), 1_700); // initial + server emission + validator emission = 799 + 899 = 1_698 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey1), - 1_100 - ); // 200 + 1800 x ( 200 / 400 )) = 1_100 + 1_110 + ); // 200 + (0 + 2000 x ( 200 / 400 )) - 100 = 200 + (1000) - 100= 1_110 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey1), - 1_423 - ); // 200 + (123 + 1800 x ( 200 / 400 )) + 200 = 1_423 + 1_413 + ); // 200 + (123 + 2000 x ( 200 / 400 )) + 100 = 200 + (1_200)+ 100 = 1_423 assert_eq!(SubtensorModule::get_total_stake_for_hotkey(&hotkey1), 2_523); // 400 + 2_123 assert_eq!(SubtensorModule::get_total_stake(), 4_223); // 2_100 + 2_123 = 4_223 @@ -1973,20 +1973,20 @@ fn test_full_with_delegating_some_servers() { SubtensorModule::emit_inflation_through_hotkey_account(&hotkey1, 150, 0); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey0), - 1_210 - ); // 860 + 350 = 1_210 + 1_204 + ); // + 350 + 54 = 1_204 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey1), - 1_100 + 1_110 ); // No change. assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey0), - 840 + 846 ); // No change. assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey1), - 1_573 - ); // 1_423 + 150 = 1_573 + 1_563 + ); // 1_323 + 150 + 90 = 1_573 assert_eq!(SubtensorModule::get_total_stake(), 4_723); // 4_223 + 500 = 4_823 // Lets register and stake a new key. @@ -2027,11 +2027,11 @@ fn test_full_with_delegating_some_servers() { assert_eq!(SubtensorModule::get_total_stake(), 5_623); // 4_723 + 900 = 5_623 - // Lets make this new key a delegate with a 10% take. + // Lets make this new key a delegate with a 9% take. assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey2), hotkey2, - u16::MAX / 10 + SubtensorModule::get_min_take() )); // Add nominate some stake. @@ -2071,15 +2071,15 @@ fn test_full_with_delegating_some_servers() { SubtensorModule::emit_inflation_through_hotkey_account(&hotkey2, 100, 1000); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey2, &hotkey2), - 1_500 - ); // 1000 + 100 + 100 + 900 * (1000/3000) = 1000 + 200 + 300 = 1500 + 1_494 + ); // 1000 + 100 + 94 + 900 * (1000/3000) = 1000 + 200 + 300 = 1_494 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey2), - 1_300 - ); // 1000 + 900 * (1000/3000) = 1000 + 300 = 1300 + 1_303 + ); // 1000 + 900 * (1000/3000) = 1000 + 300 = 1_303 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey2), - 1_300 + 1_303 ); // 1000 + 900 * (1000/3000) = 1000 + 300 = 1300 assert_eq!(SubtensorModule::get_total_stake(), 8_823); // 7_723 + 1_100 = 8_823 @@ -2090,15 +2090,15 @@ fn test_full_with_delegating_some_servers() { SubtensorModule::emit_inflation_through_hotkey_account(&hotkey2, 123, 0); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey2, &hotkey2), - 1_623 - ); // 1_500 + 123 = 1_623 + 1_617 + ); // 1_500 + 117 = 1_617 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey2), - 1_300 + 1_303 ); // No change. assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey2), - 1_300 + 1_303 ); // No change. assert_eq!(SubtensorModule::get_total_stake(), 8_946); // 8_823 + 123 = 8_946 }); @@ -2213,12 +2213,12 @@ fn test_full_block_emission_occurs() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + SubtensorModule::get_min_take() )); assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey1), hotkey1, - u16::MAX / 10 + SubtensorModule::get_min_take() )); assert!(SubtensorModule::hotkey_is_delegate(&hotkey0)); assert!(SubtensorModule::hotkey_is_delegate(&hotkey1)); @@ -2726,13 +2726,16 @@ fn test_delegate_take_can_be_decreased() { add_network(netuid, 0, 0); register_ok_neuron(netuid, hotkey0, coldkey0, 124124); - // Coldkey / hotkey 0 become delegates with 10% take + // Coldkey / hotkey 0 become delegates with 9% take assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + SubtensorModule::get_min_take() )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); + assert_eq!( + SubtensorModule::get_hotkey_take(&hotkey0), + SubtensorModule::get_min_take() + ); // Coldkey / hotkey 0 decreases take to 5%. This should fail as the minimum take is 9% assert_err!( @@ -2802,9 +2805,12 @@ fn test_delegate_take_can_not_be_increased_with_decrease_take() { assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + SubtensorModule::get_min_take() )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); + assert_eq!( + SubtensorModule::get_hotkey_take(&hotkey0), + SubtensorModule::get_min_take() + ); // Coldkey / hotkey 0 tries to increase take to 12.5% assert_eq!( @@ -2815,7 +2821,10 @@ fn test_delegate_take_can_not_be_increased_with_decrease_take() { ), Err(Error::::InvalidTake.into()) ); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); + assert_eq!( + SubtensorModule::get_hotkey_take(&hotkey0), + SubtensorModule::get_min_take() + ); }); } @@ -2835,13 +2844,16 @@ fn test_delegate_take_can_be_increased() { add_network(netuid, 0, 0); register_ok_neuron(netuid, hotkey0, coldkey0, 124124); - // Coldkey / hotkey 0 become delegates with 10% take + // Coldkey / hotkey 0 become delegates with 9% take assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + SubtensorModule::get_min_take() )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); + assert_eq!( + SubtensorModule::get_hotkey_take(&hotkey0), + SubtensorModule::get_min_take() + ); step_block(1 + InitialTxDelegateTakeRateLimit::get() as u16); @@ -2871,13 +2883,16 @@ fn test_delegate_take_can_not_be_decreased_with_increase_take() { add_network(netuid, 0, 0); register_ok_neuron(netuid, hotkey0, coldkey0, 124124); - // Coldkey / hotkey 0 become delegates with 10% take + // Coldkey / hotkey 0 become delegates with 9% take assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + SubtensorModule::get_min_take() )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); + assert_eq!( + SubtensorModule::get_hotkey_take(&hotkey0), + SubtensorModule::get_min_take() + ); // Coldkey / hotkey 0 tries to decrease take to 5% assert_eq!( @@ -2888,7 +2903,10 @@ fn test_delegate_take_can_not_be_decreased_with_increase_take() { ), Err(Error::::InvalidTake.into()) ); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); + assert_eq!( + SubtensorModule::get_hotkey_take(&hotkey0), + SubtensorModule::get_min_take() + ); }); } @@ -2908,13 +2926,16 @@ fn test_delegate_take_can_be_increased_to_limit() { add_network(netuid, 0, 0); register_ok_neuron(netuid, hotkey0, coldkey0, 124124); - // Coldkey / hotkey 0 become delegates with 10% take + // Coldkey / hotkey 0 become delegates with 9% take assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + SubtensorModule::get_min_take() )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); + assert_eq!( + SubtensorModule::get_hotkey_take(&hotkey0), + SubtensorModule::get_min_take() + ); step_block(1 + InitialTxDelegateTakeRateLimit::get() as u16); @@ -2980,13 +3001,16 @@ fn test_delegate_take_can_not_be_increased_beyond_limit() { add_network(netuid, 0, 0); register_ok_neuron(netuid, hotkey0, coldkey0, 124124); - // Coldkey / hotkey 0 become delegates with 10% take + // Coldkey / hotkey 0 become delegates with 9% take assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + SubtensorModule::get_min_take() )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); + assert_eq!( + SubtensorModule::get_hotkey_take(&hotkey0), + SubtensorModule::get_min_take() + ); // Coldkey / hotkey 0 tries to increase take to InitialDefaultTake+1 // (Disable this check if InitialDefaultTake is u16::MAX) @@ -3000,7 +3024,10 @@ fn test_delegate_take_can_not_be_increased_beyond_limit() { Err(Error::::InvalidTake.into()) ); } - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); + assert_eq!( + SubtensorModule::get_hotkey_take(&hotkey0), + SubtensorModule::get_min_take() + ); }); } @@ -3020,13 +3047,16 @@ fn test_rate_limits_enforced_on_increase_take() { add_network(netuid, 0, 0); register_ok_neuron(netuid, hotkey0, coldkey0, 124124); - // Coldkey / hotkey 0 become delegates with 10% take + // Coldkey / hotkey 0 become delegates with 9% take assert_ok!(SubtensorModule::do_become_delegate( <::RuntimeOrigin>::signed(coldkey0), hotkey0, - u16::MAX / 10 + SubtensorModule::get_min_take() )); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); + assert_eq!( + SubtensorModule::get_hotkey_take(&hotkey0), + SubtensorModule::get_min_take() + ); // Coldkey / hotkey 0 increases take to 12.5% assert_eq!( @@ -3037,7 +3067,10 @@ fn test_rate_limits_enforced_on_increase_take() { ), Err(Error::::TxRateLimitExceeded.into()) ); - assert_eq!(SubtensorModule::get_hotkey_take(&hotkey0), u16::MAX / 10); + assert_eq!( + SubtensorModule::get_hotkey_take(&hotkey0), + SubtensorModule::get_min_take() + ); step_block(1 + InitialTxDelegateTakeRateLimit::get() as u16); From 74778a61d9fd70efac7433313979a437609bf571 Mon Sep 17 00:00:00 2001 From: Samuel Dare Date: Wed, 22 May 2024 20:16:03 +0400 Subject: [PATCH 25/33] fmt , delete publish job --- .github/workflows/publish-tag.yml | 102 ----------------------------- pallets/subtensor/tests/staking.rs | 2 +- 2 files changed, 1 insertion(+), 103 deletions(-) delete mode 100644 .github/workflows/publish-tag.yml diff --git a/.github/workflows/publish-tag.yml b/.github/workflows/publish-tag.yml deleted file mode 100644 index 4efa713a4..000000000 --- a/.github/workflows/publish-tag.yml +++ /dev/null @@ -1,102 +0,0 @@ -# name: Rust build, benchmarks, and tests - -# concurrency: -# group: ci-${{ github.ref }} -# cancel-in-progress: true - -# ## -# on: -# ## -# # Run when a semantic version is tagged -# push: -# tags: -# - 'v[0-9]+.[0-9]+.[0-9]+' - -# ## -# # Environment variables shared for all targets -# env: -# CARGO_TERM_COLOR: always -# RELEASE: true -# RELEASE_NAME: release -# RUSTFLAGS: -A warnings -# RUST_BACKTRACE: full -# SKIP_WASM_BUILD: 1 -# VERBOSE: ${{ github.events.input.verbose }} - -# ## -# # Test and build and publish -# jobs: -# check: -# name: Tests and publishes targeting ${{ matrix.rust-target }} for OS ${{ matrix.os }} -# runs-on: ${{ matrix.os }} - -# ## -# # Define multiple targets for builds and tests -# strategy: -# matrix: -# rust-branch: -# - stable - -# rust-target: -# - x86_64-unknown-linux-gnu -# - x86_64-apple-darwin - -# os: -# - ubuntu-latest -# - macos-latest - -# include: -# - os: ubuntu-latest -# - os: macos-latest - -# ## -# # Environment variables specific to each target -# env: -# RUSTV: ${{ matrix.rust-branch }} -# RUST_BIN_DIR: target/${{ matrix.rust-target }}/release -# TARGET: ${{ matrix.rust-target }} - -# ## -# steps: -# - name: Check-out repository under $GITHUB_WORKSPACE -# uses: actions/checkout@v2 - -# - name: Install dependencies -# run: | -# sudo apt update && -# sudo apt install -y git clang curl libssl-dev llvm libudev-dev protobuf-compiler - -# - name: Install Rust ${{ matrix.rust-branch }} -# uses: actions-rs/toolchain@v1.0.6 -# with: -# toolchain: ${{ matrix.rust-branch }} -# profile: minimal - -# - name: Utilize Rust shared cached -# uses: Swatinem/rust-cache@v2.2.1 -# with: -# key: ${{ matrix.os }}-${{ env.RUST_BIN_DIR }} - -# - name: Run tests -# run: | -# cargo test --tests - -# - name: Build executable -# run: | -# cargo build --release - -# ## TODO: double-check `artifacts` path(s) be correct -# # :warning: values for the following must always match; -# # - RUST_BIN_DIR -# # - target/${{ matrix.rust-target }}/release/node-subtensor -# - name: Create Release -# uses: ncipollo/release-action@v1.12.0 -# with: -# allowUpdates: false -# artifactErrorsFailBuild: true -# bodyFile: CHANGELOG.md -# makeLatest: true -# tag: ${{ github.ref }}-${{ matrix.rust-target }} -# name: Release ${{ github.ref }} for ${{ matrix.rust-target }} -# artifacts: 'raw_spec.json,raw_spec_finney.json,target/${{ matrix.rust-target }}/release/node-subtensor' - diff --git a/pallets/subtensor/tests/staking.rs b/pallets/subtensor/tests/staking.rs index 3c798855e..728f93d99 100644 --- a/pallets/subtensor/tests/staking.rs +++ b/pallets/subtensor/tests/staking.rs @@ -1519,7 +1519,7 @@ fn test_full_with_delegating() { assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey0, &hotkey1), 655 - ); + ); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey0), 846 From 8aa14d98c77dc72c24a7066e38948789081ac908 Mon Sep 17 00:00:00 2001 From: Samuel Dare Date: Wed, 22 May 2024 20:35:15 +0400 Subject: [PATCH 26/33] fix: test --- pallets/subtensor/tests/staking.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pallets/subtensor/tests/staking.rs b/pallets/subtensor/tests/staking.rs index 728f93d99..f968ac55e 100644 --- a/pallets/subtensor/tests/staking.rs +++ b/pallets/subtensor/tests/staking.rs @@ -1952,8 +1952,8 @@ fn test_full_with_delegating_some_servers() { ); // 200 + (200 + 910 x ( 200 / 500 )) = 200 + (200 + 400) + 60 = 854 assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey1, &hotkey0), - 854 - ); // 300 + 1000 x ( 300 / 500 ) - 50 = 300 + 600 - 50 = 854 + 846 + ); // 300 + 910 x ( 300 / 500 ) = 300 + 546 = 846 assert_eq!(SubtensorModule::get_total_stake_for_hotkey(&hotkey0), 1_700); // initial + server emission + validator emission = 799 + 899 = 1_698 assert_eq!( From 2e586d728fa4a85d4187fc8aa33f84d0b7b8e833 Mon Sep 17 00:00:00 2001 From: Liam Date: Tue, 30 Apr 2024 19:15:44 +0400 Subject: [PATCH 27/33] typo --- pallets/subtensor/src/staking.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pallets/subtensor/src/staking.rs b/pallets/subtensor/src/staking.rs index 42c2a1ab9..588b67c8d 100644 --- a/pallets/subtensor/src/staking.rs +++ b/pallets/subtensor/src/staking.rs @@ -453,7 +453,7 @@ impl Pallet { // We remove the balance from the hotkey. Self::decrease_stake_on_coldkey_hotkey_account(&coldkey, &hotkey, stake_to_be_removed); - // We add the balancer to the coldkey. If the above fails we will not credit this coldkey. + // We add the balance to the coldkey. If the above fails we will not credit this coldkey. Self::add_balance_to_coldkey_account(&coldkey, stake_to_be_removed); // Set last block for rate limiting From 25300669336e5097af0531691b3a21024bc76811 Mon Sep 17 00:00:00 2001 From: Cameron Fairchild Date: Thu, 23 May 2024 08:03:58 -0400 Subject: [PATCH 28/33] use removed stake to update balance in clear nom --- pallets/subtensor/src/staking.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pallets/subtensor/src/staking.rs b/pallets/subtensor/src/staking.rs index 588b67c8d..fd4cc400c 100644 --- a/pallets/subtensor/src/staking.rs +++ b/pallets/subtensor/src/staking.rs @@ -679,17 +679,24 @@ impl Pallet { /// It also removes the stake entry for the hotkey-coldkey pairing and adjusts the TotalStake /// and TotalIssuance by subtracting the removed stake amount. /// + /// Returns the amount of stake that was removed. + /// /// # Arguments /// /// * `coldkey` - A reference to the AccountId of the coldkey involved in the staking. /// * `hotkey` - A reference to the AccountId of the hotkey associated with the coldkey. - pub fn empty_stake_on_coldkey_hotkey_account(coldkey: &T::AccountId, hotkey: &T::AccountId) { + pub fn empty_stake_on_coldkey_hotkey_account( + coldkey: &T::AccountId, + hotkey: &T::AccountId, + ) -> u64 { let current_stake: u64 = Stake::::get(hotkey, coldkey); TotalColdkeyStake::::mutate(coldkey, |old| *old = old.saturating_sub(current_stake)); TotalHotkeyStake::::mutate(hotkey, |stake| *stake = stake.saturating_sub(current_stake)); Stake::::remove(hotkey, coldkey); TotalStake::::mutate(|stake| *stake = stake.saturating_sub(current_stake)); TotalIssuance::::mutate(|issuance| *issuance = issuance.saturating_sub(current_stake)); + + current_stake } /// Clears the nomination for an account, if it is a nominator account and the stake is below the minimum required threshold. @@ -704,9 +711,9 @@ impl Pallet { if stake < Self::get_nominator_min_required_stake() { // Remove the stake from the nominator account. (this is a more forceful unstake operation which ) // Actually deletes the staking account. - Self::empty_stake_on_coldkey_hotkey_account(coldkey, hotkey); + let cleared_stake = Self::empty_stake_on_coldkey_hotkey_account(coldkey, hotkey); // Add the stake to the coldkey account. - Self::add_balance_to_coldkey_account(coldkey, stake); + Self::add_balance_to_coldkey_account(coldkey, cleared_stake); } } } From e380c6b8e620b7fd4d691a7183c716fd2134a412 Mon Sep 17 00:00:00 2001 From: Cameron Fairchild Date: Thu, 23 May 2024 09:11:52 -0400 Subject: [PATCH 29/33] add tests --- pallets/subtensor/tests/staking.rs | 57 +++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/pallets/subtensor/tests/staking.rs b/pallets/subtensor/tests/staking.rs index f968ac55e..3633a26ac 100644 --- a/pallets/subtensor/tests/staking.rs +++ b/pallets/subtensor/tests/staking.rs @@ -2698,16 +2698,55 @@ fn test_remove_stake_below_minimum_threshold() { stake_amount_to_remove )); - // Nomination stake cannot stake below min threshold. - assert_noop!( - SubtensorModule::remove_stake( - <::RuntimeOrigin>::signed(coldkey2), - hotkey1, - stake_amount_to_remove - ), - Error::::NomStakeBelowMinimumThreshold + // Nomination stake cannot unstake below min threshold, + // without unstaking all and removing the nomination. + let total_hotkey_stake_before = SubtensorModule::get_total_stake_for_hotkey(&hotkey1); + let bal_before = Balances::free_balance(coldkey2); + let staked_before = SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey2, &hotkey1); + let total_network_stake_before = SubtensorModule::get_total_stake(); + let total_issuance_before = SubtensorModule::get_total_issuance(); + // check the premise of the test is correct + assert!(initial_stake - stake_amount_to_remove < minimum_threshold); + assert_ok!(SubtensorModule::remove_stake( + <::RuntimeOrigin>::signed(coldkey2), + hotkey1, + stake_amount_to_remove + )); + + // Has no stake now + assert_eq!( + SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey2, &hotkey1), + 0 ); - }) + let stake_removed = staked_before; // All stake was removed + // Has the full balance + assert_eq!(Balances::free_balance(coldkey2), bal_before + stake_removed); + + // Stake map entry is removed + assert_eq!( + Stake::::try_get(hotkey1, coldkey2).is_err(), + true // Entry was removed + ); + // Stake tracking is updated + assert_eq!( + TotalColdkeyStake::::try_get(coldkey2).unwrap(), + 0 // Did not have any stake before; Entry is NOT removed + ); + assert_eq!( + TotalHotkeyStake::::try_get(hotkey1).unwrap(), + total_hotkey_stake_before - stake_removed // Stake was removed from hotkey1 tracker + ); + assert_eq!( + TotalStake::::try_get().unwrap(), + total_network_stake_before - stake_removed + ); + + // Total issuance is the same + assert_eq!( + SubtensorModule::get_total_issuance(), + total_issuance_before // Nothing was issued + ); + }); } // Verify delegate take can be decreased From dd25a7ce613b0d3cec2c50beb16a318a5e862510 Mon Sep 17 00:00:00 2001 From: Cameron Fairchild Date: Thu, 23 May 2024 09:12:21 -0400 Subject: [PATCH 30/33] Sweep nom stake below minimum --- pallets/subtensor/src/staking.rs | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/pallets/subtensor/src/staking.rs b/pallets/subtensor/src/staking.rs index fd4cc400c..1c99fa040 100644 --- a/pallets/subtensor/src/staking.rs +++ b/pallets/subtensor/src/staking.rs @@ -436,26 +436,18 @@ impl Pallet { Error::::UnstakeRateLimitExceeded ); - // If this is a nomination stake, check if total stake after removing will be above - // the minimum required stake. - - // If coldkey is not owner of the hotkey, it's a nomination stake. - if !Self::coldkey_owns_hotkey(&coldkey, &hotkey) { - let total_stake_after_remove = - Stake::::get(&hotkey, &coldkey).saturating_sub(stake_to_be_removed); - - ensure!( - total_stake_after_remove >= NominatorMinRequiredStake::::get(), - Error::::NomStakeBelowMinimumThreshold - ); - } - // We remove the balance from the hotkey. Self::decrease_stake_on_coldkey_hotkey_account(&coldkey, &hotkey, stake_to_be_removed); // We add the balance to the coldkey. If the above fails we will not credit this coldkey. Self::add_balance_to_coldkey_account(&coldkey, stake_to_be_removed); + // If the stake is below the minimum, we clear the nomination from storage. + // Not, this only applies to nominator stakes. + // If the coldkey does not own the hotkey, it's a nominator stake. + let new_stake = Self::get_stake_for_coldkey_and_hotkey(&coldkey, &hotkey); + Self::clear_small_nomination_if_required(&hotkey, &coldkey, new_stake); + // Set last block for rate limiting let block: u64 = Self::get_current_block_as_u64(); Self::set_last_tx_block(&coldkey, block); From a4a8b87ba734bf03f7c72e2612c94473a5328d69 Mon Sep 17 00:00:00 2001 From: shibshib Date: Mon, 29 Apr 2024 23:35:30 +0000 Subject: [PATCH 31/33] Fix hotregs hotpatch rebased off of main --- pallets/subtensor/src/lib.rs | 2 +- pallets/subtensor/tests/mock.rs | 2 +- pallets/subtensor/tests/registration.rs | 93 +++++++++++++++++++------ 3 files changed, 72 insertions(+), 25 deletions(-) diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index 8d424782b..ae403b30f 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -1988,7 +1988,7 @@ where Pallet::::get_registrations_this_interval(*netuid); let max_registrations_per_interval = Pallet::::get_target_registrations_per_interval(*netuid); - if registrations_this_interval >= max_registrations_per_interval { + if registrations_this_interval >= (max_registrations_per_interval * 3) { // If the registration limit for the interval is exceeded, reject the transaction return InvalidTransaction::ExhaustsResources.into(); } diff --git a/pallets/subtensor/tests/mock.rs b/pallets/subtensor/tests/mock.rs index 9b964fcb0..f90cd5d88 100644 --- a/pallets/subtensor/tests/mock.rs +++ b/pallets/subtensor/tests/mock.rs @@ -141,7 +141,7 @@ parameter_types! { pub const InitialAdjustmentInterval: u16 = 100; pub const InitialAdjustmentAlpha: u64 = 0; // no weight to previous value. pub const InitialMaxRegistrationsPerBlock: u16 = 3; - pub const InitialTargetRegistrationsPerInterval: u16 = 2; + pub const InitialTargetRegistrationsPerInterval: u16 = 3; pub const InitialPruningScore : u16 = u16::MAX; pub const InitialRegistrationRequirement: u16 = u16::MAX; // Top 100% pub const InitialMinDifficulty: u64 = 1; diff --git a/pallets/subtensor/tests/registration.rs b/pallets/subtensor/tests/registration.rs index 63ef2b947..fa4494f2c 100644 --- a/pallets/subtensor/tests/registration.rs +++ b/pallets/subtensor/tests/registration.rs @@ -290,18 +290,18 @@ fn test_burned_registration_under_limit() { let netuid: u16 = 1; let hotkey_account_id: U256 = U256::from(1); let coldkey_account_id = U256::from(667); - let who: ::AccountId = hotkey_account_id; - let block_number: u64 = 0; + let who: ::AccountId = coldkey_account_id; + let burn_cost = 1000; + // Set the burn cost + SubtensorModule::set_burn(netuid, burn_cost); - let (nonce, work) = SubtensorModule::create_work_for_block_number( - netuid, - block_number, - 129123813, - &hotkey_account_id, - ); + add_network(netuid, 13, 0); // Add the network + // Give it some TAO to the coldkey balance; more than the burn cost + SubtensorModule::add_balance_to_coldkey_account(&coldkey_account_id, burn_cost + 10_000); - let max_registrants = 2; - SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); + let target_registrants = 2; + let max_registrants = target_registrants * 3; // Maximum is 3 times the target + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); let call_burned_register: pallet_subtensor::Call = pallet_subtensor::Call::burned_register { @@ -317,21 +317,15 @@ fn test_burned_registration_under_limit() { extension.validate(&who, &call_burned_register.into(), &info, 10); assert_ok!(burned_register_result); - add_network(netuid, 13, 0); //actually call register - assert_ok!(SubtensorModule::register( - <::RuntimeOrigin>::signed(hotkey_account_id), + assert_ok!(SubtensorModule::burned_register( + <::RuntimeOrigin>::signed(coldkey_account_id), netuid, - block_number, - nonce, - work, hotkey_account_id, - coldkey_account_id )); let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); - let target_registrants = SubtensorModule::get_target_registrations_per_interval(netuid); - assert!(current_registrants <= target_registrants); + assert!(current_registrants <= max_registrants); }); } @@ -340,11 +334,15 @@ fn test_burned_registration_rate_limit_exceeded() { new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let hotkey_account_id: U256 = U256::from(1); - let who: ::AccountId = hotkey_account_id; - let max_registrants = 1; + let coldkey_account_id = U256::from(667); + let who: ::AccountId = coldkey_account_id; - SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); - SubtensorModule::set_registrations_this_interval(netuid, 1); + let target_registrants = 1; + let max_registrants = target_registrants * 3; // Maximum is 3 times the target + + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + // Set the current registrations to the maximum; should not be able to register more + SubtensorModule::set_registrations_this_interval(netuid, max_registrants); let call_burned_register: pallet_subtensor::Call = pallet_subtensor::Call::burned_register { @@ -369,6 +367,55 @@ fn test_burned_registration_rate_limit_exceeded() { }); } +#[test] +fn test_burned_registration_rate_allows_burn_adjustment() { + // We need to be able to register more than the *target* registrations per interval + new_test_ext().execute_with(|| { + let netuid: u16 = 1; + let hotkey_account_id: U256 = U256::from(1); + let coldkey_account_id = U256::from(667); + let who: ::AccountId = coldkey_account_id; + + let burn_cost = 1000; + // Set the burn cost + SubtensorModule::set_burn(netuid, burn_cost); + + add_network(netuid, 13, 0); // Add the network + // Give it some TAO to the coldkey balance; more than the burn cost + SubtensorModule::add_balance_to_coldkey_account(&coldkey_account_id, burn_cost + 10_000); + + let target_registrants = 1; // Target is 1, but we can register more than that, up to some maximum. + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + // Set the current registrations to above the target; we should be able to register at least 1 more + SubtensorModule::set_registrations_this_interval(netuid, target_registrants); + + // Register one more, so the current registrations are above the target + let call_burned_register: pallet_subtensor::Call = + pallet_subtensor::Call::burned_register { + netuid, + hotkey: hotkey_account_id, + }; + + let info: DispatchInfo = + DispatchInfoOf::<::RuntimeCall>::default(); + let extension = SubtensorSignedExtension::::new(); + //does not actually call register + let burned_register_result = + extension.validate(&who, &call_burned_register.into(), &info, 10); + assert_ok!(burned_register_result); + + //actually call register + assert_ok!(SubtensorModule::burned_register( + <::RuntimeOrigin>::signed(coldkey_account_id), + netuid, + hotkey_account_id + )); + + let current_registrants = SubtensorModule::get_registrations_this_interval(netuid); + assert!(current_registrants > target_registrants); // Should be able to register more than the target + }); +} + #[test] fn test_burned_registration_ok() { new_test_ext(1).execute_with(|| { From ac0be46971696743f6447263a6b370fd88fb7b82 Mon Sep 17 00:00:00 2001 From: Cameron Fairchild Date: Thu, 23 May 2024 09:43:14 -0400 Subject: [PATCH 32/33] fix test for POW register --- pallets/subtensor/tests/registration.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pallets/subtensor/tests/registration.rs b/pallets/subtensor/tests/registration.rs index fa4494f2c..540e004ec 100644 --- a/pallets/subtensor/tests/registration.rs +++ b/pallets/subtensor/tests/registration.rs @@ -249,9 +249,10 @@ fn test_registration_rate_limit_exceeded() { let coldkey_account_id = U256::from(667); let who: ::AccountId = hotkey_account_id; - let max_registrants = 1; - SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); - SubtensorModule::set_registrations_this_interval(netuid, 1); + let target_registrants = 1; + let max_registrants = target_registrants * 3; + SubtensorModule::set_target_registrations_per_interval(netuid, target_registrants); + SubtensorModule::set_registrations_this_interval(netuid, max_registrants); let (nonce, work) = SubtensorModule::create_work_for_block_number( netuid, @@ -370,7 +371,7 @@ fn test_burned_registration_rate_limit_exceeded() { #[test] fn test_burned_registration_rate_allows_burn_adjustment() { // We need to be able to register more than the *target* registrations per interval - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let hotkey_account_id: U256 = U256::from(1); let coldkey_account_id = U256::from(667); From 94a55e6844881a5477c981bb7812d9f715b5b7db Mon Sep 17 00:00:00 2001 From: Cameron Fairchild Date: Thu, 23 May 2024 09:47:15 -0400 Subject: [PATCH 33/33] bump spec --- runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index b7cc7bea4..921237ae7 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -137,7 +137,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 149, + spec_version: 150, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1,