diff --git a/.github/PULL_REQUEST_TEMPLATE/add-feature.md b/.github/PULL_REQUEST_TEMPLATE/add-feature.md deleted file mode 100644 index a791dad6f8..0000000000 --- a/.github/PULL_REQUEST_TEMPLATE/add-feature.md +++ /dev/null @@ -1,22 +0,0 @@ -## 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 deleted file mode 100644 index 4883ceab79..0000000000 --- a/.github/PULL_REQUEST_TEMPLATE/fix-bug.md +++ /dev/null @@ -1,21 +0,0 @@ -## 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 new file mode 100644 index 0000000000..1e279b2ebe --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,47 @@ +## 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 4e2123e41e..b1c36057d1 100644 --- a/.github/workflows/check-rust.yml +++ b/.github/workflows/check-rust.yml @@ -1,13 +1,13 @@ -name: Rust build, benchmarks, and tests +name: CI concurrency: group: ci-${{ github.ref }} cancel-in-progress: true -## on: - ## - # Run automatically for any push that changes Rust file(s) + ## 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 push: branches: [main, development, staging] @@ -24,48 +24,176 @@ on: required: false default: "" -## env: CARGO_TERM_COLOR: always VERBOSE: ${{ github.events.input.verbose }} -## -# jobs: - check: - name: Tests targeting ${{ matrix.rust-target }} for OS ${{ matrix.os }} + # runs cargo fmt + cargo-fmt: + name: cargo fmt runs-on: SubtensorCI - - ## - # Define multiple targets for builds and tests strategy: matrix: rust-branch: - - nightly-2023-01-18 - + - 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 + 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 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 + # 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 @@ -73,12 +201,13 @@ jobs: - name: Install dependencies run: | sudo apt-get update && - sudo apt-get install -y git clang curl libssl-dev llvm libudev-dev protobuf-compiler + 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 @@ -86,21 +215,137 @@ jobs: with: key: ${{ matrix.os }}-${{ env.RUST_BIN_DIR }} - - name: cargo fmt - run: cargo fmt --check + - name: cargo test --workspace --features=runtime-benchmarks + run: cargo test --workspace --features=runtime-benchmarks - ## TODO: maybe use `if` conditions in tests to target `--package ` - - name: cargo test - # timeout-minutes: 30 - run: cargo test --workspace + # 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 + 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: Run benchmarks - # timeout-minutes: 30 + - name: Utilize Rust shared cached + uses: Swatinem/rust-cache@v2.2.1 + with: + key: ${{ matrix.os }}-${{ env.RUST_BIN_DIR }} + + - name: cargo fix --workspace run: | - pushd node && - cargo build --features=runtime-benchmarks --release + # 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 - - name: Build executable - # timeout-minutes: 30 - run: cargo build --release + 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: Check features + run: zepter run check + + check-finney-migrations: + name: check finney 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://entrypoint-finney.opentensor.ai:443" + checks: "pre-and-post" + extra-args: "--disable-spec-version-check --no-weight-warnings --disable-idempotency-checks" + # ---- + # 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 77ba885b19..dca2eea4c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,20 +14,20 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.17.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ - "gimli 0.26.2", + "gimli 0.27.3", ] [[package]] name = "addr2line" -version = "0.19.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ - "gimli 0.27.1", + "gimli 0.28.1", ] [[package]] @@ -38,149 +38,149 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aead" -version = "0.3.2" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ - "generic-array 0.14.6", + "crypto-common", + "generic-array 0.14.7", ] [[package]] -name = "aead" -version = "0.4.3" +name = "aes" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ - "generic-array 0.14.6", - "rand_core 0.6.4", + "cfg-if", + "cipher", + "cpufeatures", ] [[package]] -name = "aes" -version = "0.6.0" +name = "aes-gcm" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" dependencies = [ - "aes-soft", - "aesni", - "cipher 0.2.5", + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", ] [[package]] -name = "aes" -version = "0.7.5" +name = "ahash" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "cfg-if", - "cipher 0.3.0", - "cpufeatures", - "opaque-debug 0.3.0", + "getrandom 0.2.14", + "once_cell", + "version_check", ] [[package]] -name = "aes-gcm" -version = "0.8.0" +name = "ahash" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ - "aead 0.3.2", - "aes 0.6.0", - "cipher 0.2.5", - "ctr 0.6.0", - "ghash 0.3.1", - "subtle", + "cfg-if", + "getrandom 0.2.14", + "once_cell", + "version_check", + "zerocopy", ] [[package]] -name = "aes-gcm" -version = "0.9.4" +name = "aho-corasick" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ - "aead 0.4.3", - "aes 0.7.5", - "cipher 0.3.0", - "ctr 0.8.0", - "ghash 0.4.4", - "subtle", + "memchr", ] [[package]] -name = "aes-soft" -version = "0.6.4" +name = "android-tzdata" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" -dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", -] +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" [[package]] -name = "aesni" -version = "0.10.0" +name = "android_system_properties" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "cipher 0.2.5", - "opaque-debug 0.3.0", + "libc", ] [[package]] -name = "ahash" -version = "0.7.6" +name = "ansi_term" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ - "getrandom 0.2.8", - "once_cell", - "version_check", + "winapi", ] [[package]] -name = "ahash" -version = "0.8.3" +name = "anstream" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" dependencies = [ - "cfg-if", - "getrandom 0.2.8", - "once_cell", - "version_check", + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", ] [[package]] -name = "aho-corasick" -version = "0.7.20" +name = "anstyle" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" dependencies = [ - "memchr", + "utf8parse", ] [[package]] -name = "android_system_properties" -version = "0.1.5" +name = "anstyle-query" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" dependencies = [ - "libc", + "windows-sys 0.52.0", ] [[package]] -name = "ansi_term" -version = "0.12.1" +name = "anstyle-wincon" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ - "winapi", + "anstyle", + "windows-sys 0.52.0", ] [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" [[package]] name = "approx" @@ -191,23 +191,17 @@ 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 = "4.2.0" +version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" +checksum = "6f840fb7195bcfc5e17ea40c26e5ce6d5b9ce5d584466e17703209657e459ae0" [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] name = "arrayvec" @@ -217,52 +211,24 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "arrayvec" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" - -[[package]] -name = "asn1-rs" -version = "0.3.1" +version = "0.7.4" 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", -] +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "asn1-rs" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ - "asn1-rs-derive 0.4.0", + "asn1-rs-derive", "asn1-rs-impl", "displaydoc", "nom", "num-traits", "rusticata-macros", "thiserror", - "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", + "time", ] [[package]] @@ -273,7 +239,7 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", "synstructure", ] @@ -285,75 +251,94 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] -name = "asn1_der" -version = "0.7.5" +name = "async-channel" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] [[package]] name = "async-io" -version = "1.12.0" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" +checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" dependencies = [ - "async-lock", - "autocfg", + "async-lock 3.3.0", + "cfg-if", "concurrent-queue", + "futures-io", "futures-lite", - "libc", - "log", "parking", "polling", + "rustix 0.38.32", "slab", - "socket2", - "waker-fn", - "windows-sys 0.42.0", + "tracing", + "windows-sys 0.52.0", ] [[package]] name = "async-lock" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ - "event-listener", - "futures-lite", + "event-listener 2.5.3", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30c5ef0ede93efbf733c1a727f3b6b5a1060bbedd5600183e66f6e4be4af0ec5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.58", ] [[package]] name = "async-trait" -version = "0.1.64" +version = "0.1.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" +checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "asynchronous-codec" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06a0daa378f5fd10634e44b0a29b2a87b890657658e072a30d6f26e57ddee182" +checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" dependencies = [ "bytes", "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.14", ] -[[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" @@ -367,22 +352,22 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" [[package]] name = "backtrace" -version = "0.3.67" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" dependencies = [ - "addr2line 0.19.0", + "addr2line 0.21.0", "cc", "cfg-if", "libc", "miniz_oxide", - "object 0.30.3", + "object 0.32.2", "rustc-demangle", ] @@ -394,15 +379,9 @@ 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 = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base64" @@ -412,15 +391,15 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.0" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" -version = "1.5.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "beef" @@ -442,21 +421,23 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.60.1" +version = "0.65.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" dependencies = [ - "bitflags", + "bitflags 1.3.2", "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]] @@ -465,6 +446,12 @@ 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" @@ -483,7 +470,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -493,32 +480,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", - "arrayvec 0.7.2", - "constant_time_eq 0.3.0", + "arrayvec 0.7.4", + "constant_time_eq", ] [[package]] name = "blake2s_simd" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db539cc2b5f6003621f1cd9ef92d7ded8ea5232c7de0f9faa2de251cd98730d4" +checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", - "arrayvec 0.7.2", - "constant_time_eq 0.1.5", + "arrayvec 0.7.4", + "constant_time_eq", ] [[package]] name = "blake3" -version = "1.3.3" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" +checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" dependencies = [ "arrayref", - "arrayvec 0.7.2", + "arrayvec 0.7.4", "cc", "cfg-if", - "constant_time_eq 0.2.4", + "constant_time_eq", ] [[package]] @@ -527,7 +514,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ - "block-padding 0.1.5", + "block-padding", "byte-tools", "byteorder", "generic-array 0.12.4", @@ -539,26 +526,16 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] name = "block-buffer" -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" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "block-padding 0.2.1", - "cipher 0.2.5", + "generic-array 0.14.7", ] [[package]] @@ -570,17 +547,11 @@ 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.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b05133427c07c4776906f673ccf36c21b102c9829c641a5b56bd151d44fd6" +checksum = "ca548b6163b872067dc5eb82fd130c56881435e30367d2073594a3d9744120dd" dependencies = [ "log", "parity-scale-codec", @@ -596,9 +567,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.2.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" dependencies = [ "memchr", "serde", @@ -615,9 +586,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "byte-slice-cast" @@ -633,21 +604,21 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" [[package]] name = "bzip2-sys" @@ -662,9 +633,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.2" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" dependencies = [ "serde", ] @@ -677,22 +648,22 @@ checksum = "7b02b629252fe8ef6460461409564e2c21d0c8e77e0944f3d189ff06c4e932ad" [[package]] name = "cargo-platform" -version = "0.1.2" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" dependencies = [ "serde", ] [[package]] name = "cargo_metadata" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" +checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.16", + "semver 1.0.22", "serde", "serde_json", "thiserror", @@ -700,22 +671,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.79" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "1fd97381a8cc6493395a5afc4c691c1084b3768db713b73aa215217aa245d153" dependencies = [ "jobserver", -] - -[[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", + "libc", ] [[package]] @@ -729,9 +690,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.10.3" +version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" +checksum = "fa50868b64a9a6fda9d593ce778849ea8715cd2a3d2cc17ffdb4a2f2f2f1961d" dependencies = [ "smallvec", ] @@ -750,49 +711,48 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] name = "chacha20" -version = "0.8.2" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ "cfg-if", - "cipher 0.3.0", + "cipher", "cpufeatures", - "zeroize", ] [[package]] name = "chacha20poly1305" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ - "aead 0.4.3", + "aead", "chacha20", - "cipher 0.3.0", + "cipher", "poly1305", "zeroize", ] [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "8a0d04d43504c61aa6c7531f1871dd0d418d91130162063b789da00fd7057a5e" dependencies = [ + "android-tzdata", "iana-time-zone", "js-sys", - "num-integer", "num-traits", - "time 0.1.45", + "serde", "wasm-bindgen", - "winapi", + "windows-targets 0.52.4", ] [[package]] name = "cid" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2" +checksum = "b9b68e3193982cd54187d71afdb2a271ad4cf8af157858e9cb911b91321de143" dependencies = [ "core2", "multibase", @@ -803,27 +763,20 @@ dependencies = [ [[package]] name = "cipher" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "cipher" -version = "0.3.0" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "generic-array 0.14.6", + "crypto-common", + "inout", + "zeroize", ] [[package]] name = "clang-sys" -version = "1.4.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" dependencies = [ "glob", "libc", @@ -832,40 +785,43 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.4" +version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" dependencies = [ - "bitflags", + "clap_builder", "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", - "is-terminal", - "once_cell", - "strsim", - "termcolor", + "strsim 0.11.1", ] [[package]] name = "clap_derive" -version = "4.1.0" +version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" dependencies = [ - "heck", - "proc-macro-error", + "heck 0.5.0", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "clap_lex" -version = "0.3.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "783fe232adfca04f90f56201b26d79682d4cd2625e0bc7290b95123afe558ade" -dependencies = [ - "os_str_bytes", -] +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "codespan-reporting" @@ -877,43 +833,70 @@ 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 = "6.1.4" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" +checksum = "b34115915337defe99b2aff5c2ce6771e5fbc4079f4b506301f5cf394c8452f7" dependencies = [ - "strum", - "strum_macros", + "strum 0.26.2", + "strum_macros 0.26.2", "unicode-width", ] [[package]] name = "concurrent-queue" -version = "2.1.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" 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.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] -name = "constant_time_eq" -version = "0.1.5" +name = "const-random" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] [[package]] -name = "constant_time_eq" -version = "0.2.4" +name = "const-random-macro" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.14", + "once_cell", + "tiny-keccak", +] [[package]] name = "constant_time_eq" @@ -923,9 +906,9 @@ checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -933,9 +916,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "core2" @@ -957,43 +940,36 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" 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.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc42ba2e232e5b20ff7dc299a812d53337dadce9a7e39a238e6a5cb82d2e57b" +checksum = "1277fbfa94bc82c8ec4af2ded3e639d49ca5f7f3c7eeab2c66accd135ece4e70" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "253531aca9b6f56103c9420369db3263e784df39aa1c90685a1f69cfbba0623e" +checksum = "c6e8c31ad3b2270e9aeec38723888fe1b0ace3bea2b06b3f749ccf46661d3220" dependencies = [ - "arrayvec 0.7.2", "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", "cranelift-entity", "cranelift-isle", - "gimli 0.26.2", - "hashbrown 0.12.3", + "gimli 0.27.3", + "hashbrown 0.13.2", "log", "regalloc2", "smallvec", @@ -1002,33 +978,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f2154365e2bff1b1b8537a7181591fdff50d8e27fa6e40d5c69c3bad0ca7c8" +checksum = "c8ac5ac30d62b2d66f12651f6b606dbdfd9c2cfd0908de6b387560a277c5c9da" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "687e14e3f5775248930e0d5a84195abef8b829958e9794bf8d525104993612b4" +checksum = "dd82b8b376247834b59ed9bdc0ddeb50f517452827d4a11bccf5937b213748b8" [[package]] name = "cranelift-entity" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f42ea692c7b450ad18b8c9889661505d51c09ec4380cf1c2d278dbb2da22cae1" +checksum = "40099d38061b37e505e63f89bab52199037a72b931ad4868d9089ff7268660b0" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8483c2db6f45fe9ace984e5adc5d058102227e4c62e5aa2054e16b0275fd3a6e" +checksum = "64a25d9d0a0ae3079c463c34115ec59507b4707175454f0eee0891e83e30e82d" dependencies = [ "cranelift-codegen", "log", @@ -1038,15 +1014,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9793158837678902446c411741d87b43f57dadfb944f2440db4287cda8cbd59" +checksum = "80de6a7d0486e4acbd5f9f87ec49912bf4c8fb6aea00087b989685460d4469ba" [[package]] name = "cranelift-native" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72668c7755f2b880665cb422c8ad2d56db58a88b9bebfef0b73edc2277c13c49" +checksum = "bb6b03e0e03801c4b3fd8ce0758a94750c07a44e7944cc0ffbf0d3f2e7c79b00" dependencies = [ "cranelift-codegen", "libc", @@ -1055,9 +1031,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.93.2" +version = "0.95.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3852ce4b088b44ac4e29459573943009a70d1b192c8d77ef949b4e814f656fc1" +checksum = "ff3220489a3d928ad91e59dd7aeaa8b3de18afb554a6211213673a71c90737ac" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1069,72 +1045,39 @@ 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.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" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" dependencies = [ "cfg-if", - "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.13" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset 0.7.1", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" @@ -1144,11 +1087,11 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.4.9" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "rand_core 0.6.4", "subtle", "zeroize", @@ -1160,8 +1103,9 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.6", - "typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array 0.14.7", + "rand_core 0.6.4", + "typenum 1.17.0", ] [[package]] @@ -1170,17 +1114,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "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", + "generic-array 0.14.7", "subtle", ] @@ -1190,26 +1124,17 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "subtle", ] [[package]] name = "ctr" -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" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.3.0", + "cipher", ] [[package]] @@ -1240,23 +1165,37 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.0.0-rc.0" +version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da00a7a9a4eb92a0a0f8e75660926d48f0d0f3c537e455c457bcdaa1e16b1ac" +checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" dependencies = [ "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", "fiat-crypto", - "packed_simd_2", - "platforms 3.0.2", + "platforms", + "rustc_version 0.4.0", "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.89" +version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9" +checksum = "ff4dc7287237dd438b926a81a1a5605dad33d286870e5eee2db17bf2bcd9e92a" dependencies = [ "cc", "cxxbridge-flags", @@ -1266,9 +1205,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.89" +version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d" +checksum = "f47c6c8ad7c1a10d3ef0fe3ff6733f4db0d78f08ef0b13121543163ef327058b" dependencies = [ "cc", "codespan-reporting", @@ -1276,31 +1215,31 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "cxxbridge-flags" -version = "1.0.89" +version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a" +checksum = "701a1ac7a697e249cdd8dc026d7a7dafbfd0dbcd8bd24ec55889f2bc13dd6287" [[package]] name = "cxxbridge-macro" -version = "1.0.89" +version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2" +checksum = "b404f596046b0bb2d903a9c786b875a126261b52b7c3a64bbb66382c41c771df" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "darling" -version = "0.14.3" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" dependencies = [ "darling_core", "darling_macro", @@ -1308,40 +1247,40 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.3" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim", - "syn 1.0.107", + "strsim 0.10.0", + "syn 2.0.58", ] [[package]] name = "darling_macro" -version = "0.14.3" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "data-encoding" -version = "2.3.3" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "data-encoding-macro" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca" +checksum = "20c01c06f5f429efdf2bae21eb67c28b3df3cf85b7dd2d8ef09c0838dac5d33e" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -1349,32 +1288,31 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" +checksum = "0047d07f2c89b17dd631c80450d69841a6b5d7fb17278cbc43d7e4cfcf2576f3" dependencies = [ "data-encoding", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "der" -version = "0.6.1" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ "const-oid", - "pem-rfc7468", "zeroize", ] [[package]] name = "der-parser" -version = "7.0.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs 0.3.1", + "asn1-rs", "displaydoc", "nom", "num-bigint", @@ -1383,17 +1321,13 @@ dependencies = [ ] [[package]] -name = "der-parser" -version = "8.1.0" +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ - "asn1-rs 0.5.1", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", + "powerfmt", + "serde", ] [[package]] @@ -1404,38 +1338,7 @@ checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ "proc-macro2", "quote", - "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", + "syn 1.0.109", ] [[package]] @@ -1446,7 +1349,7 @@ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -1470,16 +1373,17 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", + "const-oid", "crypto-common", "subtle", ] @@ -1527,13 +1431,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] @@ -1542,17 +1446,11 @@ 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.5" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] name = "dyn-clonable" @@ -1572,25 +1470,27 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "dyn-clone" -version = "1.0.10" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "ecdsa" -version = "0.14.8" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", + "digest 0.10.7", "elliptic-curve", "rfc6979", - "signature", + "signature 2.2.0", + "spki", ] [[package]] @@ -1599,7 +1499,17 @@ version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" dependencies = [ - "signature", + "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", ] [[package]] @@ -1609,13 +1519,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" dependencies = [ "curve25519-dalek 3.2.0", - "ed25519", - "rand 0.7.3", - "serde", + "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", + "serde", + "sha2 0.10.8", + "subtle", + "zeroize", +] + [[package]] name = "ed25519-zebra" version = "3.1.0" @@ -1632,25 +1555,22 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" [[package]] name = "elliptic-curve" -version = "0.12.3" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "der", - "digest 0.10.6", + "digest 0.10.7", "ff", - "generic-array 0.14.6", + "generic-array 0.14.7", "group", - "hkdf", - "pem-rfc7468", "pkcs8", "rand_core 0.6.4", "sec1", @@ -1658,43 +1578,49 @@ 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", + "heck 0.4.1", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "enumflags2" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939" +checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" dependencies = [ "enumflags2_derive", ] [[package]] name = "enumflags2_derive" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246" +checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.58", ] [[package]] name = "env_logger" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" dependencies = [ "humantime", "is-terminal", @@ -1710,24 +1636,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] -name = "errno" -version = "0.2.8" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" -dependencies = [ - "errno-dragonfly", - "libc", - "winapi", -] +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "errno" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] @@ -1763,6 +1684,27 @@ 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" @@ -1772,6 +1714,20 @@ 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" @@ -1786,12 +1742,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "1.8.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" -dependencies = [ - "instant", -] +checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" [[package]] name = "fdlimit" @@ -1804,9 +1757,9 @@ dependencies = [ [[package]] name = "ff" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ "rand_core 0.6.4", "subtle", @@ -1814,9 +1767,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.1.17" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" +checksum = "c007b1ae3abe1cb6f85a16305acd418b7ca6343b953633fee2b76d8f108b830f" [[package]] name = "file-per-thread-logger" @@ -1830,21 +1783,21 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.19" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" dependencies = [ "cfg-if", "libc", - "redox_syscall", - "windows-sys 0.42.0", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", ] [[package]] name = "finality-grandpa" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24e6c429951433ccb7c87fd528c60084834dcd14763182c1f83291bcde24c34" +checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" dependencies = [ "either", "futures", @@ -1888,9 +1841,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.25" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "libz-sys", @@ -1915,16 +1868,16 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", ] [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -1938,7 +1891,7 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-support", "frame-support-procedural", @@ -1963,7 +1916,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "Inflector", "array-bytes", @@ -1997,12 +1950,13 @@ 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", ] @@ -2010,7 +1964,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-support", "frame-system", @@ -2026,9 +1980,9 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "15.0.0" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" dependencies = [ "cfg-if", "parity-scale-codec", @@ -2039,31 +1993,37 @@ dependencies = [ [[package]] name = "frame-remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" 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-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "bitflags", + "bitflags 1.3.2", + "environmental", "frame-metadata", "frame-support-procedural", "impl-trait-for-tuples", "k256", "log", - "once_cell", + "macro_magic", "parity-scale-codec", "paste", "scale-info", @@ -2073,6 +2033,7 @@ dependencies = [ "sp-arithmetic", "sp-core", "sp-core-hashing-proc-macro", + "sp-debug-derive", "sp-inherents", "sp-io", "sp-runtime", @@ -2087,45 +2048,49 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "Inflector", "cfg-expr", "derive-syn-parse", + "expander", "frame-support-procedural-tools", "itertools", + "macro_magic", + "proc-macro-warning", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-support-procedural-tools-derive", - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ + "cfg-if", "frame-support", "log", "parity-scale-codec", @@ -2142,7 +2107,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-benchmarking", "frame-support", @@ -2157,7 +2122,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "sp-api", @@ -2166,7 +2131,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-support", "parity-scale-codec", @@ -2175,6 +2140,15 @@ 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" @@ -2193,9 +2167,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.26" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -2208,9 +2182,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.26" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -2218,15 +2192,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.26" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.26" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -2236,34 +2210,29 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.26" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-lite" -version = "1.12.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand", "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite 0.2.9", - "waker-fn", + "pin-project-lite 0.2.14", ] [[package]] name = "futures-macro" -version = "0.3.26" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] @@ -2273,33 +2242,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" dependencies = [ "futures-io", - "rustls 0.20.8", - "webpki 0.22.0", + "rustls 0.20.9", + "webpki", ] [[package]] name = "futures-sink" -version = "0.3.26" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.26" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-timer" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.26" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -2308,7 +2277,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.14", "pin-utils", "slab", ] @@ -2328,17 +2297,18 @@ version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" dependencies = [ - "typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)", + "typenum 1.17.0", ] [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ - "typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)", + "typenum 1.17.0", "version_check", + "zeroize", ] [[package]] @@ -2364,9 +2334,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" dependencies = [ "cfg-if", "libc", @@ -2374,41 +2344,40 @@ dependencies = [ ] [[package]] -name = "ghash" -version = "0.3.1" +name = "getrandom_or_panic" +version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" +checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" dependencies = [ - "opaque-debug 0.3.0", - "polyval 0.4.5", + "rand_core 0.6.4", ] [[package]] name = "ghash" -version = "0.4.4" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ - "opaque-debug 0.3.0", - "polyval 0.5.3", + "opaque-debug 0.3.1", + "polyval", ] [[package]] name = "gimli" -version = "0.26.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" dependencies = [ "fallible-iterator", - "indexmap", + "indexmap 1.9.3", "stable_deref_trait", ] [[package]] name = "gimli" -version = "0.27.1" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" @@ -2418,22 +2387,22 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.10" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" dependencies = [ "aho-corasick", "bstr", - "fnv", "log", - "regex", + "regex-automata 0.4.6", + "regex-syntax 0.8.3", ] [[package]] name = "group" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", "rand_core 0.6.4", @@ -2442,9 +2411,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.18" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", @@ -2452,7 +2421,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap", + "indexmap 2.2.6", "slab", "tokio", "tokio-util", @@ -2461,9 +2430,9 @@ dependencies = [ [[package]] name = "handlebars" -version = "4.3.6" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a" +checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" dependencies = [ "log", "pest", @@ -2475,9 +2444,9 @@ dependencies = [ [[package]] name = "hash-db" -version = "0.15.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" +checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" [[package]] name = "hash256-std-hasher" @@ -2494,7 +2463,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.8", ] [[package]] @@ -2503,9 +2472,15 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.11", ] +[[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" @@ -2513,28 +2488,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "hermit-abi" -version = "0.1.19" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.2.6" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] [[package]] name = "hermit-abi" -version = "0.3.0" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "856b5cb0902c2b6d65d5fd97dfa30f9b70c7538e770b98eab5ed52d8db923e01" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hex" @@ -2549,34 +2521,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] -name = "hkdf" -version = "0.12.3" +name = "hmac" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -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" +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" @@ -2593,7 +2546,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -2603,10 +2556,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array 0.14.6", + "generic-array 0.14.7", "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" @@ -2620,9 +2582,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", @@ -2631,20 +2593,20 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.14", ] [[package]] name = "http-range-header" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" [[package]] name = "httparse" @@ -2654,9 +2616,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" @@ -2666,9 +2628,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.24" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -2680,8 +2642,8 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project-lite 0.2.9", - "socket2", + "pin-project-lite 0.2.14", + "socket2 0.5.6", "tokio", "tower-service", "tracing", @@ -2690,41 +2652,42 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.2" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ + "futures-util", "http", "hyper", "log", - "rustls 0.20.8", + "rustls 0.21.10", "rustls-native-certs", "tokio", "tokio-rustls", + "webpki-roots 0.25.4", ] [[package]] name = "iana-time-zone" -version = "0.1.53" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows-core 0.52.0", ] [[package]] name = "iana-time-zone-haiku" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "cxx", - "cxx-build", + "cc", ] [[package]] @@ -2746,9 +2709,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2756,19 +2719,19 @@ dependencies = [ [[package]] name = "if-addrs" -version = "0.7.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9" +checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" dependencies = [ "libc", - "winapi", + "windows-sys 0.48.0", ] [[package]] name = "if-watch" -version = "3.0.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba7abdbb86e485125dad06c2691e1e393bf3b08c7b743b43aa162a00fd39062e" +checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e" dependencies = [ "async-io", "core-foundation", @@ -2827,20 +2790,52 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 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" @@ -2866,33 +2861,15 @@ 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.5" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ + "hermit-abi 0.3.9", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -2903,32 +2880,31 @@ checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" [[package]] name = "ipconfig" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2", + "socket2 0.5.6", "widestring", - "winapi", + "windows-sys 0.48.0", "winreg", ] [[package]] name = "ipnet" -version = "2.7.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" -version = "0.4.3" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0a45d56fe973d6db23972bf5bc46f988a4a2385deac9cc29572f09daef" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" dependencies = [ - "hermit-abi 0.3.0", - "io-lifetimes", - "rustix", - "windows-sys 0.45.0", + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.52.0", ] [[package]] @@ -2942,35 +2918,36 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jobserver" -version = "0.1.25" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.61" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] [[package]] name = "jsonrpsee" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d291e3a5818a2384645fd9756362e6d89cf0541b0b916fa7702ea4a9833608e" +checksum = "367a292944c07385839818bb71c8d76611138e2dedb0677d035b8da21d29c78b" dependencies = [ "jsonrpsee-core", + "jsonrpsee-http-client", "jsonrpsee-proc-macros", "jsonrpsee-server", "jsonrpsee-types", @@ -2980,9 +2957,9 @@ dependencies = [ [[package]] name = "jsonrpsee-client-transport" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965de52763f2004bc91ac5bcec504192440f0b568a5d621c59d9dbd6f886c3fb" +checksum = "c8b3815d9f5d5de348e5f162b316dc9cdf4548305ebb15b4eb9328e66cf27d7a" dependencies = [ "futures-util", "http", @@ -2996,18 +2973,18 @@ dependencies = [ "tokio-rustls", "tokio-util", "tracing", - "webpki-roots", + "webpki-roots 0.25.4", ] [[package]] name = "jsonrpsee-core" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b" +checksum = "2b5dde66c53d6dcdc8caea1874a45632ec0fcf5b437789f1e45766a1512ce803" dependencies = [ "anyhow", - "arrayvec 0.7.2", - "async-lock", + "arrayvec 0.7.4", + "async-lock 2.8.0", "async-trait", "beef", "futures-channel", @@ -3027,24 +3004,43 @@ 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.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa6da1e4199c10d7b1d0a6e5e8bd8e55f351163b6f4b3cbb044672a69bd4c1c" +checksum = "44e8ab85614a08792b9bff6c8feee23be78c98d0182d4c622c05256ab553892a" dependencies = [ - "heck", - "proc-macro-crate", + "heck 0.4.1", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "jsonrpsee-server" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb69dad85df79527c019659a992498d03f8495390496da2f07e6c24c2b356fc" +checksum = "cf4d945a6008c9b03db3354fb3c83ee02d2faa9f2e755ec1dfb69c3551b8f4ba" dependencies = [ "futures-channel", "futures-util", @@ -3064,9 +3060,9 @@ dependencies = [ [[package]] name = "jsonrpsee-types" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd522fe1ce3702fd94812965d7bb7a3364b1c9aba743944c5a00529aae80f8c" +checksum = "245ba8e5aa633dd1c1e4fae72bce06e71f42d34c14a2767c6b4d173b57bee5e5" dependencies = [ "anyhow", "beef", @@ -3078,9 +3074,9 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b83daeecfc6517cfe210df24e570fb06213533dfb990318fae781f4c7119dd9" +checksum = "4e1b3975ed5d73f456478681a417128597acd6a2487855fdb7b4a3d4d195bf5e" dependencies = [ "http", "jsonrpsee-client-transport", @@ -3090,21 +3086,22 @@ dependencies = [ [[package]] name = "k256" -version = "0.11.6" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ "cfg-if", "ecdsa", "elliptic-curve", - "sha2 0.10.6", + "once_cell", + "sha2 0.10.8", ] [[package]] name = "keccak" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ "cpufeatures", ] @@ -3130,9 +3127,9 @@ dependencies = [ [[package]] name = "kvdb-rocksdb" -version = "0.17.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2182b8219fee6bd83aacaab7344e840179ae079d5216aa4e249b4d704646a844" +checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" dependencies = [ "kvdb", "num_cpus", @@ -3156,50 +3153,40 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.139" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libloading" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" dependencies = [ "cfg-if", - "winapi", + "windows-targets 0.52.4", ] -[[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.50.0" +version = "0.51.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e0a0d2f693675f49ded13c5d510c48b78069e23cbd9108d7ccd59f6dc568819" +checksum = "f35eae38201a993ece6bdc823292d6abd1bffed1c4d0f4a3517d2bd8e1d917fe" dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.8", + "getrandom 0.2.14", "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", @@ -3207,29 +3194,48 @@ dependencies = [ "libp2p-swarm", "libp2p-tcp", "libp2p-wasm-ext", - "libp2p-webrtc", "libp2p-websocket", "libp2p-yamux", "multiaddr", - "parking_lot 0.12.1", "pin-project", - "smallvec", +] + +[[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", ] [[package]] name = "libp2p-core" -version = "0.38.0" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f" +checksum = "3c1df63c0b582aa434fb09b2d86897fa2b419ffeccf934b36f87fcedc8e835c2" dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", "either", "fnv", "futures", "futures-timer", "instant", + "libp2p-identity", "log", "multiaddr", "multihash", @@ -3237,24 +3243,20 @@ dependencies = [ "once_cell", "parking_lot 0.12.1", "pin-project", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", "rw-stream-sink", - "sec1", - "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", "void", - "zeroize", ] [[package]] name = "libp2p-dns" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" +checksum = "146ff7034daae62077c415c2376b8057368042df6ab95f5432ad5e88568b1554" dependencies = [ "futures", "libp2p-core", @@ -3266,32 +3268,51 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.41.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf" +checksum = "5455f472243e63b9c497ff320ded0314254a9eb751799a39c283c6f20b793f3c" dependencies = [ "asynchronous-codec", + "either", "futures", "futures-timer", "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", - "lru 0.8.1", - "prost", - "prost-build", - "prost-codec", + "lru 0.10.1", + "quick-protobuf", + "quick-protobuf-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.42.1" +version = "0.43.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2" +checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff" dependencies = [ - "arrayvec 0.7.2", + "arrayvec 0.7.4", "asynchronous-codec", "bytes", "either", @@ -3300,12 +3321,12 @@ dependencies = [ "futures-timer", "instant", "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", - "sha2 0.10.6", + "sha2 0.10.8", "smallvec", "thiserror", "uint", @@ -3315,19 +3336,20 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.42.0" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b" +checksum = "19983e1f949f979a928f2c603de1cf180cc0dc23e4ac93a62651ccb18341460b" dependencies = [ "data-encoding", "futures", "if-watch", "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", "rand 0.8.5", "smallvec", - "socket2", + "socket2 0.4.10", "tokio", "trust-dns-proto", "void", @@ -3335,9 +3357,9 @@ dependencies = [ [[package]] name = "libp2p-metrics" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" +checksum = "a42ec91e227d7d0dafa4ce88b333cdf5f277253873ab087555c92798db2ddd46" dependencies = [ "libp2p-core", "libp2p-identify", @@ -3347,53 +3369,36 @@ 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.41.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e" +checksum = "9c3673da89d29936bc6435bafc638e2f184180d554ce844db65915113f86ec5e" dependencies = [ "bytes", "curve25519-dalek 3.2.0", "futures", "libp2p-core", + "libp2p-identity", "log", "once_cell", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", - "sha2 0.10.6", + "sha2 0.10.8", "snow", "static_assertions", "thiserror", - "x25519-dalek 1.1.1", + "x25519-dalek", "zeroize", ] [[package]] name = "libp2p-ping" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f" +checksum = "3e57759c19c28a73ef1eb3585ca410cefb72c1a709fcf6de1612a378e4219202" dependencies = [ + "either", "futures", "futures-timer", "instant", @@ -3406,48 +3411,47 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.7.0-alpha" +version = "0.7.0-alpha.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" +checksum = "c6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735" 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.8", + "rustls 0.20.9", "thiserror", "tokio", ] [[package]] name = "libp2p-request-response" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884" +checksum = "7ffdb374267d42dc5ed5bc53f6e601d4a64ac5964779c6e40bb9e4f14c1e30d5" 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.41.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0" +checksum = "903b3d592d7694e56204d211f29d31bc004be99386644ba8731fc3e3ef27b296" dependencies = [ "either", "fnv", @@ -3455,32 +3459,31 @@ 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.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" +checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f" dependencies = [ - "heck", + "heck 0.4.1", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "libp2p-tcp" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d" +checksum = "33d33698596d7722d85d3ab0c86c2c322254fce1241e91208e3679b4eb3026cf" dependencies = [ "futures", "futures-timer", @@ -3488,33 +3491,34 @@ dependencies = [ "libc", "libp2p-core", "log", - "socket2", + "socket2 0.4.10", "tokio", ] [[package]] name = "libp2p-tls" -version = "0.1.0-alpha" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7905ce0d040576634e8a3229a7587cc8beab83f79db6023800f1792895defa8" +checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" dependencies = [ "futures", "futures-rustls", "libp2p-core", - "rcgen 0.10.0", - "ring", - "rustls 0.20.8", + "libp2p-identity", + "rcgen", + "ring 0.16.20", + "rustls 0.20.9", "thiserror", - "webpki 0.22.0", - "x509-parser 0.14.0", + "webpki", + "x509-parser", "yasna", ] [[package]] name = "libp2p-wasm-ext" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069" +checksum = "77dff9d32353a5887adb86c8afc1de1a94d9e8c3bc6df8b2201d7cdf5c848f43" dependencies = [ "futures", "js-sys", @@ -3524,42 +3528,11 @@ 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.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54" +checksum = "111273f7b3d3510524c752e8b7a5314b7f7a1fee7e68161c01a7d72cbb06db9f" dependencies = [ "either", "futures", @@ -3571,28 +3544,37 @@ dependencies = [ "rw-stream-sink", "soketto", "url", - "webpki-roots", + "webpki-roots 0.22.6", ] [[package]] name = "libp2p-yamux" -version = "0.42.0" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" +checksum = "4dcd21d950662700a385d4c6d68e2f5f54d778e97068cdd718522222ef513bda" 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.8.0+7.4.4" +version = "0.11.0+8.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611804e4666a25136fcc5f8cf425ab4d26c7f74ea245ffe92ea23b85b6420b5d" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" dependencies = [ "bindgen", "bzip2-sys", @@ -3619,7 +3601,7 @@ dependencies = [ "rand 0.8.5", "serde", "sha2 0.9.9", - "typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)", + "typenum 1.17.0", ] [[package]] @@ -3653,9 +3635,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.8" +version = "1.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" +checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9" dependencies = [ "cc", "pkg-config", @@ -3664,9 +3646,9 @@ dependencies = [ [[package]] name = "link-cplusplus" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" dependencies = [ "cc", ] @@ -3688,9 +3670,9 @@ dependencies = [ [[package]] name = "linregress" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "475015a7f8f017edb28d2e69813be23500ad4b32cfe3421c4148efc97324ee52" +checksum = "4de04dcecc58d366391f9920245b85ffa684558a5ef6e7736e754347c3aea9c2" dependencies = [ "nalgebra", ] @@ -3701,11 +3683,17 @@ 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.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -3713,12 +3701,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "lru" @@ -3731,11 +3716,11 @@ dependencies = [ [[package]] name = "lru" -version = "0.8.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" +checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" dependencies = [ - "hashbrown 0.12.3", + "hashbrown 0.13.2", ] [[package]] @@ -3776,6 +3761,60 @@ 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" @@ -3788,7 +3827,7 @@ version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] @@ -3799,80 +3838,56 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matrixmultiply" -version = "0.3.2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" 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.5.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "memfd" -version = "0.6.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" +checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" dependencies = [ - "rustix", + "rustix 0.38.32", ] [[package]] name = "memmap2" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" dependencies = [ "libc", ] [[package]] name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" dependencies = [ "autocfg", ] [[package]] name = "memory-db" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e0c7cba9ce19ac7ffd2053ac9f49843bbd3f4318feedfd74e85c19d5fb0ba66" +checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" dependencies = [ "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 = "2.0.1" @@ -3885,6 +3900,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -3893,30 +3920,29 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.5" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", - "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", + "windows-sys 0.48.0", ] [[package]] name = "mockall" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" +checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" dependencies = [ "cfg-if", "downcast", @@ -3929,25 +3955,26 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" +checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "multiaddr" -version = "0.16.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e" +checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" dependencies = [ "arrayref", "byteorder", "data-encoding", + "log", "multibase", "multihash", "percent-encoding", @@ -3970,17 +3997,17 @@ dependencies = [ [[package]] name = "multihash" -version = "0.16.3" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" dependencies = [ "blake2b_simd", "blake2s_simd", "blake3", "core2", - "digest 0.10.6", + "digest 0.10.7", "multihash-derive", - "sha2 0.10.6", + "sha2 0.10.8", "sha3", "unsigned-varint", ] @@ -3991,11 +4018,11 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", "synstructure", ] @@ -4021,9 +4048,9 @@ dependencies = [ [[package]] name = "nalgebra" -version = "0.32.2" +version = "0.32.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" +checksum = "3ea4908d4f23254adda3daa60ffef0f1ac7b8c3e9a864cf3cc154b251908a2ef" dependencies = [ "approx", "matrixmultiply", @@ -4032,18 +4059,18 @@ dependencies = [ "num-rational", "num-traits", "simba", - "typenum 1.16.0 (registry+https://github.com/rust-lang/crates.io-index)", + "typenum 1.17.0", ] [[package]] name = "nalgebra-macros" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" +checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -4087,7 +4114,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" dependencies = [ "anyhow", - "bitflags", + "bitflags 1.3.2", "byteorder", "libc", "netlink-packet-core", @@ -4123,9 +4150,9 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" +checksum = "416060d346fbaf1f23f9512963e3e878f1a78e707cb699ba9215761754244307" dependencies = [ "bytes", "futures", @@ -4140,24 +4167,9 @@ version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ - "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", + "bitflags 1.3.2", "cfg-if", "libc", - "memoffset 0.7.1", - "pin-utils", - "static_assertions", ] [[package]] @@ -4180,9 +4192,12 @@ 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", @@ -4196,8 +4211,8 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-aura", + "sp-consensus-grandpa", "sp-core", - "sp-finality-grandpa", "sp-inherents", "sp-io", "sp-keyring", @@ -4231,6 +4246,7 @@ dependencies = [ "pallet-membership", "pallet-multisig", "pallet-preimage", + "pallet-proxy", "pallet-registry", "pallet-scheduler", "pallet-subtensor", @@ -4248,10 +4264,12 @@ 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", @@ -4282,9 +4300,9 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -4293,30 +4311,35 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.3" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" 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.2", + "arrayvec 0.7.4", "itoa", ] [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] @@ -4327,58 +4350,54 @@ 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.15" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi 0.3.9", "libc", ] [[package]] -name = "object" -version = "0.29.0" +name = "number_prefix" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" -dependencies = [ - "crc32fast", - "hashbrown 0.12.3", - "indexmap", - "memchr", -] +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.30.3" +version = "0.30.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" dependencies = [ + "crc32fast", + "hashbrown 0.13.2", + "indexmap 1.9.3", "memchr", ] [[package]] -name = "oid-registry" -version = "0.4.0" +name = "object" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ - "asn1-rs 0.3.1", + "memchr", ] [[package]] @@ -4387,14 +4406,14 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs", ] [[package]] name = "once_cell" -version = "1.17.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" @@ -4404,9 +4423,9 @@ checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl-probe" @@ -4414,44 +4433,6 @@ 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" @@ -4475,7 +4456,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-support", "frame-system", @@ -4491,7 +4472,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-support", "frame-system", @@ -4505,7 +4486,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4553,7 +4534,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4564,8 +4545,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-application-crypto", + "sp-consensus-grandpa", "sp-core", - "sp-finality-grandpa", "sp-io", "sp-runtime", "sp-session", @@ -4576,7 +4557,7 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-support", "frame-system", @@ -4590,7 +4571,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4607,7 +4588,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4623,7 +4604,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4637,6 +4618,21 @@ 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" @@ -4656,7 +4652,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4673,7 +4669,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-support", "frame-system", @@ -4727,8 +4723,9 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", "parity-scale-codec", @@ -4741,7 +4738,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4759,7 +4756,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-support", "frame-system", @@ -4775,7 +4772,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -4791,7 +4788,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-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -4803,7 +4800,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-benchmarking", "frame-support", @@ -4818,9 +4815,9 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.4.3" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd684a725651d9588ef21f140a328b6b4f64e646b2e931f3e6f14f75eedf9980" +checksum = "592a28a24b09c9dc20ac8afaa6839abc417c720afe42c12e1e4a9d6aa2508d2e" dependencies = [ "blake2", "crc32fast", @@ -4832,16 +4829,18 @@ dependencies = [ "memmap2", "parking_lot 0.12.1", "rand 0.8.5", + "siphasher", "snap", + "winapi", ] [[package]] name = "parity-scale-codec" -version = "3.6.5" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" dependencies = [ - "arrayvec 0.7.2", + "arrayvec 0.7.4", "bitvec", "byte-slice-cast", "bytes", @@ -4852,14 +4851,14 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.6.5" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -4893,7 +4892,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2" dependencies = [ "proc-macro2", - "syn 1.0.107", + "syn 1.0.109", "synstructure", ] @@ -4905,9 +4904,9 @@ checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] name = "parking" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] name = "parking_lot" @@ -4927,7 +4926,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.7", + "parking_lot_core 0.9.9", ] [[package]] @@ -4939,29 +4938,35 @@ dependencies = [ "cfg-if", "instant", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "winapi", ] [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.4.1", "smallvec", - "windows-sys 0.45.0", + "windows-targets 0.48.5", ] +[[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.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "pbkdf2" @@ -4978,7 +4983,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -4996,36 +5001,28 @@ 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.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.5.4" +version = "2.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f" +checksum = "311fb059dee1a7b802f036316d790138c613a4e8b180c822e3925a662e9f0c95" dependencies = [ + "memchr", "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.5.4" +version = "2.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea" +checksum = "f73541b156d32197eecda1a4014d7f868fd2bcb3c550d5386087cfba442bf69c" dependencies = [ "pest", "pest_generator", @@ -5033,56 +5030,56 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.4" +version = "2.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f" +checksum = "c35eeed0a3fab112f75165fdc026b3913f4183133f19b49be773ac9ea966e8bd" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "pest_meta" -version = "2.5.4" +version = "2.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d" +checksum = "2adbf29bb9776f28caece835398781ab24435585fe0d4dc1374a61db5accedca" dependencies = [ "once_cell", "pest", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] name = "petgraph" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.6", ] [[package]] name = "pin-project" -version = "1.0.12" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.12" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] @@ -5093,9 +5090,9 @@ checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -5105,9 +5102,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkcs8" -version = "0.9.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ "der", "spki", @@ -5115,69 +5112,65 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" - -[[package]] -name = "platforms" -version = "2.0.0" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "platforms" -version = "3.0.2" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" +checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" [[package]] name = "polling" -version = "2.5.2" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" +checksum = "e0c976a60b2d7e99d6f229e414670a9b85d13ac305cc6d1e9c134de58c5aaaf6" dependencies = [ - "autocfg", "cfg-if", - "libc", - "log", - "wepoll-ffi", - "windows-sys 0.42.0", + "concurrent-queue", + "hermit-abi 0.3.9", + "pin-project-lite 0.2.14", + "rustix 0.38.32", + "tracing", + "windows-sys 0.52.0", ] [[package]] name = "poly1305" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ "cpufeatures", - "opaque-debug 0.3.0", + "opaque-debug 0.3.1", "universal-hash", ] [[package]] name = "polyval" -version = "0.4.5" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ - "cpuid-bool", - "opaque-debug 0.3.0", + "cfg-if", + "cpufeatures", + "opaque-debug 0.3.1", "universal-hash", ] [[package]] -name = "polyval" -version = "0.5.3" +name = "portable-atomic" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug 0.3.0", - "universal-hash", -] +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" @@ -5201,28 +5194,48 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" 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.23" +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" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" +checksum = "8d3928fb5db768cb86f891ff014f0144589297e3c6a1aba6ed7cecfdace270c7" dependencies = [ "proc-macro2", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] @@ -5240,9 +5253,9 @@ dependencies = [ [[package]] name = "primitive-types" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash 0.8.0", "impl-codec", @@ -5258,19 +5271,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ "thiserror", - "toml", + "toml 0.5.11", ] [[package]] -name = "proc-macro-error" -version = "1.0.4" +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", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", "version_check", ] @@ -5285,11 +5308,22 @@ 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.69" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] @@ -5310,32 +5344,32 @@ dependencies = [ [[package]] name = "prometheus-client" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" +checksum = "5d6fa99d535dd930d1249e6c79cb3c2915f9172a540fe2b02a4c8f9ca954721e" dependencies = [ "dtoa", "itoa", "parking_lot 0.12.1", - "prometheus-client-derive-text-encode", + "prometheus-client-derive-encode", ] [[package]] -name = "prometheus-client-derive-text-encode" -version = "0.3.0" +name = "prometheus-client-derive-encode" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "prost" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" dependencies = [ "bytes", "prost-derive", @@ -5343,59 +5377,45 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f8ad728fb08fe212df3c05169e940fbb6d9d16a877ddde14644a983ba2012e" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" dependencies = [ "bytes", - "heck", + "heck 0.4.1", "itertools", "lazy_static", "log", "multimap", "petgraph", - "prettyplease", + "prettyplease 0.1.11", "prost", "prost-types", "regex", - "syn 1.0.107", + "syn 1.0.109", "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.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", "itertools", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "prost-types" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" dependencies = [ - "bytes", "prost", ] @@ -5414,6 +5434,28 @@ 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" @@ -5427,27 +5469,27 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.9.2" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9" +checksum = "94b0b33c13a79f669c85defaf4c275dc86a0c0372807d0ca3d78e0bb87274863" dependencies = [ "bytes", "rand 0.8.5", - "ring", + "ring 0.16.20", "rustc-hash", - "rustls 0.20.8", + "rustls 0.20.9", "slab", "thiserror", "tinyvec", "tracing", - "webpki 0.22.0", + "webpki", ] [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -5517,7 +5559,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.14", ] [[package]] @@ -5546,9 +5588,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.6.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -5556,86 +5598,80 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.10.2" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] name = "rcgen" -version = "0.9.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" +checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" dependencies = [ "pem", - "ring", - "time 0.3.17", - "x509-parser 0.13.2", + "ring 0.16.20", + "time", "yasna", ] [[package]] -name = "rcgen" -version = "0.10.0" +name = "redox_syscall" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "pem", - "ring", - "time 0.3.17", - "yasna", + "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" dependencies = [ - "getrandom 0.2.8", - "redox_syscall", + "getrandom 0.2.14", + "libredox", "thiserror", ] [[package]] name = "ref-cast" -version = "1.0.14" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" +checksum = "c4846d4c50d1721b1a3bef8af76924eef20d5e723647333798c1b519b3a9473f" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.14" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" +checksum = "5fddb4f8d99b0a2ebafc65a87a69a7b9875e4b1ae1f00db265d300ef7f28bccc" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "regalloc2" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" +checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" dependencies = [ "fxhash", "log", @@ -5645,13 +5681,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.1" +version = "1.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-automata 0.4.6", + "regex-syntax 0.8.3", ] [[package]] @@ -5660,35 +5697,31 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax", + "regex-syntax 0.6.29", ] [[package]] -name = "regex-syntax" -version = "0.6.28" +name = "regex-automata" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.3", +] [[package]] -name = "region" -version = "3.0.0" +name = "regex-syntax" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e" -dependencies = [ - "bitflags", - "libc", - "mach", - "winapi", -] +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] -name = "remove_dir_all" -version = "0.5.3" +name = "regex-syntax" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" [[package]] name = "resolv-conf" @@ -5702,13 +5735,12 @@ dependencies = [ [[package]] name = "rfc6979" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "crypto-bigint", "hmac 0.12.1", - "zeroize", + "subtle", ] [[package]] @@ -5720,12 +5752,27 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", - "untrusted", + "spin 0.5.2", + "untrusted 0.7.1", "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" @@ -5738,9 +5785,9 @@ dependencies = [ [[package]] name = "rocksdb" -version = "0.19.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc" +checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" dependencies = [ "libc", "librocksdb-sys", @@ -5748,24 +5795,13 @@ dependencies = [ [[package]] name = "rpassword" -version = "7.2.0" +version = "7.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322" +checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" dependencies = [ "libc", "rtoolbox", - "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", + "windows-sys 0.48.0", ] [[package]] @@ -5778,40 +5814,26 @@ dependencies = [ "log", "netlink-packet-route", "netlink-proto", - "nix 0.24.3", + "nix", "thiserror", "tokio", ] [[package]] name = "rtoolbox" -version = "0.0.1" +version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" +checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" dependencies = [ "libc", - "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", + "windows-sys 0.48.0", ] [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustc-hash" @@ -5840,7 +5862,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.16", + "semver 1.0.22", ] [[package]] @@ -5854,48 +5876,60 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.8" +version = "0.36.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" +checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", - "linux-raw-sys", + "linux-raw-sys 0.1.4", "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.19.1" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" dependencies = [ - "base64 0.13.1", "log", - "ring", - "sct 0.6.1", - "webpki 0.21.4", + "ring 0.16.20", + "sct", + "webpki", ] [[package]] name = "rustls" -version = "0.20.8" +version = "0.21.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", - "ring", - "sct 0.7.0", - "webpki 0.22.0", + "ring 0.17.8", + "rustls-webpki", + "sct", ] [[package]] name = "rustls-native-certs" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ "openssl-probe", "rustls-pemfile", @@ -5905,18 +5939,28 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.2" +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" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "base64 0.21.0", + "ring 0.17.8", + "untrusted 0.9.0", ] [[package]] name = "rustversion" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" [[package]] name = "rw-stream-sink" @@ -5931,9 +5975,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "safe-mix" @@ -5946,9 +5990,9 @@ dependencies = [ [[package]] name = "safe_arch" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" +checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" dependencies = [ "bytemuck", ] @@ -5965,7 +6009,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "log", "sp-core", @@ -5976,7 +6020,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "futures", "futures-timer", @@ -5999,7 +6043,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6009,46 +6053,49 @@ 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-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "memmap2", "sc-chain-spec-derive", - "sc-network-common", + "sc-client-api", + "sc-executor", + "sc-network", "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-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", "chrono", "clap", "fdlimit", "futures", - "libp2p", + "libp2p-identity", "log", "names", "parity-scale-codec", @@ -6059,7 +6106,6 @@ dependencies = [ "sc-client-db", "sc-keystore", "sc-network", - "sc-network-common", "sc-service", "sc-telemetry", "sc-tracing", @@ -6081,7 +6127,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "fnv", "futures", @@ -6097,9 +6143,9 @@ dependencies = [ "sp-core", "sp-database", "sp-externalities", - "sp-keystore", "sp-runtime", "sp-state-machine", + "sp-statement-store", "sp-storage", "substrate-prometheus-endpoint", ] @@ -6107,7 +6153,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "hash-db", "kvdb", @@ -6133,12 +6179,12 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "futures", "futures-timer", - "libp2p", + "libp2p-identity", "log", "mockall", "parking_lot 0.12.1", @@ -6158,7 +6204,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "futures", @@ -6184,10 +6230,71 @@ 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-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "futures", @@ -6210,14 +6317,13 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" 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", @@ -6228,46 +6334,30 @@ 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-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" 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-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "anyhow", "cfg-if", "libc", "log", - "once_cell", - "rustix", + "rustix 0.36.17", "sc-allocator", "sc-executor-common", "sp-runtime-interface", @@ -6276,56 +6366,17 @@ dependencies = [ ] [[package]] -name = "sc-finality-grandpa" +name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "ahash 0.8.3", - "array-bytes", - "async-trait", - "dyn-clone", - "finality-grandpa", - "fork-tree", + "ansi_term", "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", ] @@ -6333,10 +6384,9 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", - "async-trait", "parking_lot 0.12.1", "serde_json", "sp-application-crypto", @@ -6348,12 +6398,12 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", + "async-channel", "async-trait", "asynchronous-codec", - "backtrace", "bytes", "either", "fnv", @@ -6361,46 +6411,45 @@ 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-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ + "async-channel", "cid", "futures", - "libp2p", + "libp2p-identity", "log", "prost", "prost-build", "sc-client-api", - "sc-network-common", + "sc-network", "sp-blockchain", "sp-runtime", "thiserror", @@ -6410,42 +6459,33 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", - "bitflags", - "bytes", + "bitflags 1.3.2", "futures", - "futures-timer", - "libp2p", - "linked_hash_set", + "libp2p-identity", "parity-scale-codec", "prost-build", "sc-consensus", - "sc-peerset", - "serde", - "smallvec", - "sp-blockchain", "sp-consensus", - "sp-finality-grandpa", + "sp-consensus-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-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.11", "futures", "futures-timer", "libp2p", "log", - "lru 0.8.1", + "sc-network", "sc-network-common", - "sc-peerset", + "schnellru", "sp-runtime", "substrate-prometheus-endpoint", "tracing", @@ -6454,18 +6494,18 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", + "async-channel", "futures", - "libp2p", + "libp2p-identity", "log", "parity-scale-codec", "prost", "prost-build", "sc-client-api", - "sc-network-common", - "sc-peerset", + "sc-network", "sp-blockchain", "sp-core", "sp-runtime", @@ -6475,30 +6515,32 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" 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", @@ -6507,16 +6549,15 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", "futures", "libp2p", "log", "parity-scale-codec", - "pin-project", + "sc-network", "sc-network-common", - "sc-peerset", "sc-utils", "sp-consensus", "sp-runtime", @@ -6526,7 +6567,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", "bytes", @@ -6536,40 +6577,31 @@ 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-peerset", + "sc-transaction-pool-api", "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-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -6578,7 +6610,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "futures", "jsonrpsee", @@ -6601,6 +6633,7 @@ dependencies = [ "sp-rpc", "sp-runtime", "sp-session", + "sp-statement-store", "sp-version", "tokio", ] @@ -6608,7 +6641,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -6627,7 +6660,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "http", "jsonrpsee", @@ -6642,7 +6675,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", "futures", @@ -6668,7 +6701,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "directories", @@ -6695,11 +6728,9 @@ 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", @@ -6734,7 +6765,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "log", "parity-scale-codec", @@ -6742,26 +6773,10 @@ 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-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "futures", "libc", @@ -6780,7 +6795,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "chrono", "futures", @@ -6799,7 +6814,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "ansi_term", "atty", @@ -6807,12 +6822,10 @@ 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", @@ -6830,25 +6843,24 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "futures", "futures-timer", "linked-hash-map", "log", - "num-traits", "parity-scale-codec", "parking_lot 0.12.1", "sc-client-api", @@ -6868,13 +6880,15 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "futures", "log", + "parity-scale-codec", "serde", "sp-blockchain", + "sp-core", "sp-runtime", "thiserror", ] @@ -6882,22 +6896,23 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "backtrace", + "async-channel", "futures", "futures-timer", "lazy_static", "log", "parking_lot 0.12.1", "prometheus", + "sp-arithmetic", ] [[package]] name = "scale-info" -version = "2.9.0" +version = "2.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782" +checksum = "7c453e59a955f81fb62ee5d596b450383d699f152d350e9d23a0db2adb78e4c0" dependencies = [ "bitvec", "cfg-if", @@ -6909,23 +6924,23 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.9.0" +version = "2.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29" +checksum = "18cf6c6447f813ef19eb450e985bcce6705f9ce7660db221b59093d15c79c4b7" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "schannel" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" dependencies = [ - "windows-sys 0.42.0", + "windows-sys 0.52.0", ] [[package]] @@ -6934,7 +6949,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.11", "cfg-if", "hashbrown 0.13.2", ] @@ -6949,7 +6964,7 @@ dependencies = [ "arrayvec 0.5.2", "curve25519-dalek 2.1.3", "getrandom 0.1.16", - "merlin", + "merlin 2.0.1", "rand 0.7.3", "rand_core 0.5.1", "sha2 0.8.2", @@ -6958,58 +6973,53 @@ dependencies = [ ] [[package]] -name = "scopeguard" -version = "1.1.0" +name = "schnorrkel" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +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", +] [[package]] -name = "scratch" -version = "1.0.3" +name = "scopeguard" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "sct" -version = "0.6.1" +name = "scratch" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted", -] +checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" [[package]] name = "sct" -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" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "rand 0.8.5", - "substring", - "thiserror", - "url", + "ring 0.17.8", + "untrusted 0.9.0", ] [[package]] name = "sec1" -version = "0.3.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", - "generic-array 0.14.6", + "generic-array 0.14.7", "pkcs8", "subtle", "zeroize", @@ -7044,11 +7054,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.8.2" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -7057,9 +7067,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.8.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" dependencies = [ "core-foundation-sys", "libc", @@ -7085,9 +7095,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.16" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" dependencies = [ "serde", ] @@ -7100,9 +7110,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.188" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] @@ -7118,55 +7128,70 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.9" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" +checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.188" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.58", ] [[package]] name = "serde_json" -version = "1.0.92" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7434af0dc1cbd59268aa98b4c22c131c0584d2232f6fb166efb993e2832e896a" +checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" 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.2.0" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1966009f3c05f095697c537312f5415d1e3ed31ce0a56942bac4c771c5c335e" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ "darling", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] @@ -7179,7 +7204,7 @@ dependencies = [ "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.0", + "opaque-debug 0.3.1", ] [[package]] @@ -7204,50 +7229,50 @@ dependencies = [ "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.0", + "opaque-debug 0.3.1", ] [[package]] name = "sha2" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.6", + "digest 0.10.7", ] [[package]] name = "sha3" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "keccak", ] [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] [[package]] name = "shlex" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] @@ -7257,16 +7282,22 @@ 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.6", + "digest 0.10.7", "rand_core 0.6.4", ] [[package]] name = "simba" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50582927ed6f77e4ac020c057f37a268fc6aebc29225050365aacbb9deeeddc4" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" dependencies = [ "approx", "num-complex", @@ -7275,60 +7306,76 @@ 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.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "slice-group-by" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "smallvec" -version = "1.10.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "snap" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" [[package]] name = "snow" -version = "0.9.1" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" +checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" dependencies = [ - "aes-gcm 0.9.4", + "aes-gcm", "blake2", "chacha20poly1305", - "curve25519-dalek 4.0.0-rc.0", + "curve25519-dalek 4.1.2", "rand_core 0.6.4", - "ring", + "ring 0.17.8", "rustc_version 0.4.0", - "sha2 0.10.6", + "sha2 0.10.8", "subtle", ] [[package]] name = "socket2" -version = "0.4.7" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" 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" @@ -7349,13 +7396,16 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" 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", @@ -7367,19 +7417,21 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ + "Inflector", "blake2", - "proc-macro-crate", + "expander", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "sp-application-crypto" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "23.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "scale-info", @@ -7391,8 +7443,8 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "16.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "integer-sqrt", "num-traits", @@ -7406,9 +7458,8 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "parity-scale-codec", "sp-api", "sp-inherents", "sp-runtime", @@ -7418,13 +7469,13 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "futures", "log", - "lru 0.8.1", "parity-scale-codec", "parking_lot 0.12.1", + "schnellru", "sp-api", "sp-consensus", "sp-database", @@ -7436,32 +7487,28 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" 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-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "parity-scale-codec", "scale-info", "sp-api", "sp-application-crypto", - "sp-consensus", "sp-consensus-slots", "sp-inherents", "sp-runtime", @@ -7472,61 +7519,62 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" 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-slots" -version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +name = "sp-consensus-grandpa" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" 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-vrf" +name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "scale-info", - "schnorrkel", - "sp-core", - "sp-runtime", + "serde", "sp-std", + "sp-timestamp", ] [[package]] name = "sp-core" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "21.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "array-bytes", - "base58", - "bitflags", + "bitflags 1.3.2", "blake2", "bounded-collections", + "bs58", "dyn-clonable", "ed25519-zebra", "futures", @@ -7536,14 +7584,15 @@ dependencies = [ "lazy_static", "libsecp256k1", "log", - "merlin", + "merlin 2.0.1", "parity-scale-codec", "parking_lot 0.12.1", - "primitive-types 0.12.1", + "paste", + "primitive-types 0.12.2", "rand 0.8.5", "regex", "scale-info", - "schnorrkel", + "schnorrkel 0.9.1", "secp256k1", "secrecy", "serde", @@ -7557,38 +7606,37 @@ dependencies = [ "substrate-bip39", "thiserror", "tiny-bip39", + "tracing", "zeroize", ] [[package]] name = "sp-core-hashing" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "9.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "blake2", + "blake2b_simd", "byteorder", - "digest 0.10.6", - "sha2 0.10.6", + "digest 0.10.7", + "sha2 0.10.8", "sha3", - "sp-std", "twox-hash", ] [[package]] name = "sp-core-hashing-proc-macro" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "9.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "proc-macro2", "quote", "sp-core-hashing", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -7596,18 +7644,18 @@ dependencies = [ [[package]] name = "sp-debug-derive" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "8.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "sp-externalities" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "0.19.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "environmental", "parity-scale-codec", @@ -7615,34 +7663,15 @@ 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-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-core", "sp-runtime", "sp-std", "thiserror", @@ -7650,16 +7679,16 @@ dependencies = [ [[package]] name = "sp-io" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "23.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "bytes", - "ed25519", - "ed25519-dalek", - "futures", + "ed25519 1.5.3", + "ed25519-dalek 1.0.1", "libsecp256k1", "log", "parity-scale-codec", + "rustversion", "secp256k1", "sp-core", "sp-externalities", @@ -7675,27 +7704,22 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "24.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "lazy_static", "sp-core", "sp-runtime", - "strum", + "strum 0.24.1", ] [[package]] name = "sp-keystore" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "0.27.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "async-trait", - "futures", - "merlin", "parity-scale-codec", "parking_lot 0.12.1", - "schnorrkel", - "serde", "sp-core", "sp-externalities", "thiserror", @@ -7704,16 +7728,27 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "thiserror", - "zstd", + "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", ] [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "sp-api", "sp-core", @@ -7722,8 +7757,8 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "8.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "backtrace", "lazy_static", @@ -7733,7 +7768,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "rustc-hash", "serde", @@ -7742,8 +7777,8 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "24.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "either", "hash256-std-hasher", @@ -7764,13 +7799,13 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "17.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "bytes", "impl-trait-for-tuples", "parity-scale-codec", - "primitive-types 0.12.1", + "primitive-types 0.12.2", "sp-externalities", "sp-runtime-interface-proc-macro", "sp-std", @@ -7782,25 +7817,26 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "11.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "Inflector", - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-core", + "sp-keystore", "sp-runtime", "sp-staking", "sp-std", @@ -7809,10 +7845,12 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ + "impl-trait-for-tuples", "parity-scale-codec", "scale-info", + "serde", "sp-core", "sp-runtime", "sp-std", @@ -7820,8 +7858,8 @@ dependencies = [ [[package]] name = "sp-state-machine" -version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "0.28.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "hash-db", "log", @@ -7836,34 +7874,50 @@ dependencies = [ "sp-trie", "thiserror", "tracing", + "trie-db", ] [[package]] -name = "sp-std" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" - -[[package]] -name = "sp-storage" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +name = "sp-statement-store" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "impl-serde 0.4.0", "parity-scale-codec", - "ref-cast", - "serde", - "sp-debug-derive", - "sp-std", -] - -[[package]] + "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" + +[[package]] +name = "sp-storage" +version = "13.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" +dependencies = [ + "impl-serde 0.4.0", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive", + "sp-std", +] + +[[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", - "futures-timer", - "log", "parity-scale-codec", "sp-inherents", "sp-runtime", @@ -7873,8 +7927,8 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "10.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "sp-std", @@ -7886,7 +7940,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "sp-api", "sp-runtime", @@ -7895,10 +7949,9 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", - "log", "parity-scale-codec", "scale-info", "sp-core", @@ -7910,12 +7963,12 @@ dependencies = [ [[package]] name = "sp-trie" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "22.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.11", "hash-db", - "hashbrown 0.12.3", + "hashbrown 0.13.2", "lazy_static", "memory-db", "nohash-hasher", @@ -7933,8 +7986,8 @@ dependencies = [ [[package]] name = "sp-version" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "22.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "impl-serde 0.4.0", "parity-scale-codec", @@ -7950,33 +8003,32 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "8.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "sp-wasm-interface" -version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "14.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "anyhow", "impl-trait-for-tuples", "log", "parity-scale-codec", "sp-std", - "wasmi", "wasmtime", ] [[package]] name = "sp-weights" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +version = "20.0.0" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "parity-scale-codec", "scale-info", @@ -7994,11 +8046,28 @@ 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.6.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", "der", @@ -8006,9 +8075,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.38.0" +version = "1.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e40c020d72bc0a9c5660bb71e4a6fdef081493583062c474740a7d59f55f0e7b" +checksum = "4743ce898933fbff7bbf414f497c459a782d496269644b3d650a398ae6a487ba" dependencies = [ "Inflector", "num-format", @@ -8037,7 +8106,7 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg_aliases", "libc", "parking_lot 0.11.2", @@ -8056,7 +8125,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -8065,56 +8134,62 @@ 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", + "strum_macros 0.24.3", ] +[[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", + "heck 0.4.1", "proc-macro2", "quote", "rustversion", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] -name = "stun" -version = "0.4.4" +name = "strum_macros" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25" +checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" dependencies = [ - "base64 0.13.1", - "crc", - "lazy_static", - "md-5", - "rand 0.8.5", - "ring", - "subtle", - "thiserror", - "tokio", - "url", - "webrtc-util", + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.58", ] [[package]] name = "substrate-bip39" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c" +checksum = "6a7590dc041b9bc2825e52ce5af8416c73dbe9d0654402bfd4b4941938b94d8f" dependencies = [ "hmac 0.11.0", "pbkdf2 0.8.0", - "schnorrkel", + "schnorrkel 0.11.4", "sha2 0.9.9", "zeroize", ] @@ -8122,10 +8197,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" -dependencies = [ - "platforms 2.0.0", -] +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" [[package]] name = "substrate-fixed" @@ -8134,13 +8206,14 @@ source = "git+https://github.com/encointer/substrate-fixed.git?tag=v0.5.9#a4fb46 dependencies = [ "parity-scale-codec", "scale-info", - "typenum 1.16.0 (git+https://github.com/encointer/typenum?tag=v1.16.0)", + "serde", + "typenum 1.16.0", ] [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -8159,7 +8232,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "hyper", "log", @@ -8171,7 +8244,7 @@ dependencies = [ [[package]] name = "substrate-rpc-client" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "jsonrpsee", @@ -8184,29 +8257,21 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "ansi_term", "build-helper", "cargo_metadata", "filetime", + "parity-wasm", "sp-maybe-compressed-blob", - "strum", + "strum 0.24.1", "tempfile", - "toml", + "toml 0.7.8", "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" @@ -8240,9 +8305,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.107" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -8251,9 +8316,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.38" +version = "2.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687" dependencies = [ "proc-macro2", "quote", @@ -8268,17 +8333,17 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", "unicode-xid", ] [[package]] name = "system-configuration" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "system-configuration-sys", ] @@ -8301,57 +8366,55 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.5" +version = "0.12.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9410d0f6853b1d94f0e519fb95df60f29d2c1eff2d921ffdf01a4c8a3b54f12d" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" [[package]] name = "tempfile" -version = "3.3.0" +version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "rustix 0.38.32", + "windows-sys 0.52.0", ] [[package]] name = "termcolor" -version = "1.2.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] [[package]] name = "termtree" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] @@ -8362,10 +8425,11 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ + "cfg-if", "once_cell", ] @@ -8380,9 +8444,9 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.5.3+5.3.0-patched" +version = "0.5.4+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" +checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1" dependencies = [ "cc", "libc", @@ -8390,22 +8454,14 @@ dependencies = [ [[package]] name = "time" -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" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" dependencies = [ + "deranged", "itoa", + "num-conv", + "powerfmt", "serde", "time-core", "time-macros", @@ -8413,16 +8469,17 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.6" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" dependencies = [ + "num-conv", "time-core", ] @@ -8438,7 +8495,7 @@ dependencies = [ "pbkdf2 0.11.0", "rand 0.8.5", "rustc-hash", - "sha2 0.10.6", + "sha2 0.10.8", "thiserror", "unicode-normalization", "wasm-bindgen", @@ -8454,16 +8511,6 @@ 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" @@ -8481,69 +8528,78 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.25.0" +version = "1.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", - "memchr", "mio", "num_cpus", "parking_lot 0.12.1", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.14", "signal-hook-registry", - "socket2", + "socket2 0.5.6", "tokio-macros", - "windows-sys 0.42.0", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "1.8.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "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", ] [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.20.8", + "rustls 0.21.10", "tokio", - "webpki 0.22.0", ] [[package]] name = "tokio-stream" -version = "0.1.11" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" dependencies = [ "futures-core", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.14", "tokio", "tokio-util", ] [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.14", "tokio", "tracing", ] @@ -8557,6 +8613,51 @@ 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" @@ -8570,18 +8671,18 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.3.5" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" +checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" dependencies = [ - "bitflags", + "bitflags 2.5.0", "bytes", "futures-core", "futures-util", "http", "http-body", "http-range-header", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.14", "tower-layer", "tower-service", ] @@ -8600,33 +8701,32 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "log", - "pin-project-lite 0.2.9", + "pin-project-lite 0.2.14", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -8644,12 +8744,12 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] @@ -8688,9 +8788,9 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.25.1" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3390c0409daaa6027d6681393316f4ccd3ff82e1590a1e4725014e3ae2bf1920" +checksum = "767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85" dependencies = [ "hash-db", "hashbrown 0.13.2", @@ -8701,9 +8801,9 @@ dependencies = [ [[package]] name = "trie-root" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a36c5ca3911ed3c9a5416ee6c679042064b93fc637ded67e25f92e68d783891" +checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" dependencies = [ "hash-db", ] @@ -8726,7 +8826,7 @@ dependencies = [ "lazy_static", "rand 0.8.5", "smallvec", - "socket2", + "socket2 0.4.10", "thiserror", "tinyvec", "tokio", @@ -8756,14 +8856,14 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.39#8c4b84520cee2d7de53cc33cb67605ce4efefba8" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v1.0.0#948fbd2fd1233dc26dbb9f9bbc1d2cca2c03945d" dependencies = [ "async-trait", "clap", @@ -8774,7 +8874,6 @@ dependencies = [ "parity-scale-codec", "sc-cli", "sc-executor", - "sc-service", "serde", "serde_json", "sp-api", @@ -8794,7 +8893,7 @@ dependencies = [ "sp-version", "sp-weights", "substrate-rpc-client", - "zstd", + "zstd 0.12.4", ] [[package]] @@ -8803,25 +8902,6 @@ 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" @@ -8829,17 +8909,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", - "digest 0.10.6", + "digest 0.10.7", "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" @@ -8849,11 +8923,17 @@ 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.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" [[package]] name = "uint" @@ -8869,30 +8949,30 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.10" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -8902,19 +8982,19 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "universal-hash" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ - "generic-array 0.14.6", + "crypto-common", "subtle", ] [[package]] name = "unsigned-varint" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" dependencies = [ "asynchronous-codec", "bytes", @@ -8928,25 +9008,28 @@ 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.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", - "idna 0.3.0", + "idna 0.5.0", "percent-encoding", ] [[package]] -name = "uuid" -version = "1.3.0" +name = "utf8parse" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" -dependencies = [ - "getrandom 0.2.8", -] +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "valuable" @@ -8972,39 +9055,22 @@ 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.3.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", - "winapi", "winapi-util", ] [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] @@ -9014,12 +9080,6 @@ 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" @@ -9028,9 +9088,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.84" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -9038,24 +9098,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.84" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.34" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" dependencies = [ "cfg-if", "js-sys", @@ -9065,9 +9125,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.84" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -9075,22 +9135,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.84" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.58", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.84" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "wasm-instrument" @@ -9103,14 +9163,14 @@ dependencies = [ [[package]] name = "wasm-opt" -version = "0.111.0" +version = "0.112.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a303793cbc01fb96551badfc7367db6007396bba6bac97936b3c8b6f7fdb41" +checksum = "87fef6d0d508f08334e0ab0e6877feb4c0ecb3956bcf2cb950699b22fedf3e9c" dependencies = [ "anyhow", "libc", - "strum", - "strum_macros", + "strum 0.24.1", + "strum_macros 0.24.3", "tempfile", "thiserror", "wasm-opt-cxx-sys", @@ -9119,9 +9179,9 @@ dependencies = [ [[package]] name = "wasm-opt-cxx-sys" -version = "0.111.0" +version = "0.112.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c9deb56f8a9f2ec177b3bd642a8205621835944ed5da55f2388ef216aca5a4" +checksum = "bc816bbc1596c8f2e8127e137a760c798023ef3d378f2ae51f0f1840e2dfa445" dependencies = [ "anyhow", "cxx", @@ -9131,15 +9191,14 @@ dependencies = [ [[package]] name = "wasm-opt-sys" -version = "0.111.0" +version = "0.112.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4432e28b542738a9776cedf92e8a99d8991c7b4667ee2c7ccddfb479dd2856a7" +checksum = "40199e4f68ef1071b3c6d0bd8026a12b481865d4b9e49c156932ea9a6234dd14" dependencies = [ "anyhow", "cc", "cxx", "cxx-build", - "regex", ] [[package]] @@ -9157,63 +9216,29 @@ 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.100.0" +version = "0.102.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" +checksum = "48134de3d7598219ab9eaf6b91b15d8e50d31da76b8519fe4ecfcec2cf35104b" dependencies = [ - "indexmap", + "indexmap 1.9.3", "url", ] [[package]] name = "wasmtime" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a222f5fa1e14b2cefc286f1b68494d7a965f4bf57ec04c59bb62673d639af6" +checksum = "f907fdead3153cb9bfb7a93bbd5b62629472dc06dee83605358c64c52ed3dda9" dependencies = [ "anyhow", "bincode", "cfg-if", - "indexmap", + "indexmap 1.9.3", "libc", "log", - "object 0.29.0", + "object 0.30.4", "once_cell", "paste", "psm", @@ -9226,43 +9251,43 @@ dependencies = [ "wasmtime-environ", "wasmtime-jit", "wasmtime-runtime", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-asm-macros" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4407a7246e7d2f3d8fb1cf0c72fda8dbafdb6dd34d555ae8bea0e5ae031089cc" +checksum = "d3b9daa7c14cd4fa3edbf69de994408d5f4b7b0959ac13fa69d465f6597f810d" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ceb3adf61d654be0be67fffdce42447b0880481348785be5fe40b5dd7663a4c" +checksum = "c86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213" dependencies = [ "anyhow", - "base64 0.13.1", + "base64 0.21.7", "bincode", "directories-next", "file-per-thread-logger", "log", - "rustix", + "rustix 0.36.17", "serde", - "sha2 0.10.6", - "toml", - "windows-sys 0.42.0", - "zstd", + "sha2 0.10.8", + "toml 0.5.11", + "windows-sys 0.45.0", + "zstd 0.11.2+zstd.1.5.2", ] [[package]] name = "wasmtime-cranelift" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c366bb8647e01fd08cb5589976284b00abfded5529b33d7e7f3f086c68304a4" +checksum = "b1cefde0cce8cb700b1b21b6298a3837dba46521affd7b8c38a9ee2c869eee04" dependencies = [ "anyhow", "cranelift-codegen", @@ -9270,27 +9295,43 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli 0.26.2", + "gimli 0.27.3", "log", - "object 0.29.0", + "object 0.30.4", "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 = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b8b50962eae38ee319f7b24900b7cf371f03eebdc17400c1dc8575fc10c9a7" +checksum = "a990198cee4197423045235bf89d3359e69bd2ea031005f4c2d901125955c949" dependencies = [ "anyhow", "cranelift-entity", - "gimli 0.26.2", - "indexmap", + "gimli 0.27.3", + "indexmap 1.9.3", "log", - "object 0.29.0", + "object 0.30.4", "serde", "target-lexicon", "thiserror", @@ -9300,18 +9341,18 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffaed4f9a234ba5225d8e64eac7b4a5d13b994aeb37353cde2cbeb3febda9eaa" +checksum = "0de48df552cfca1c9b750002d3e07b45772dd033b0b206d5c0968496abf31244" dependencies = [ - "addr2line 0.17.0", + "addr2line 0.19.0", "anyhow", "bincode", "cfg-if", "cpp_demangle", - "gimli 0.26.2", + "gimli 0.27.3", "log", - "object 0.29.0", + "object 0.30.4", "rustc-demangle", "serde", "target-lexicon", @@ -9319,60 +9360,60 @@ dependencies = [ "wasmtime-jit-debug", "wasmtime-jit-icache-coherence", "wasmtime-runtime", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-jit-debug" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed41cbcbf74ce3ff6f1d07d1b707888166dc408d1a880f651268f4f7c9194b2" +checksum = "6e0554b84c15a27d76281d06838aed94e13a77d7bf604bbbaf548aa20eb93846" dependencies = [ - "object 0.29.0", + "object 0.30.4", "once_cell", - "rustix", + "rustix 0.36.17", ] [[package]] name = "wasmtime-jit-icache-coherence" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a28ae1e648461bfdbb79db3efdaee1bca5b940872e4175390f465593a2e54c" +checksum = "aecae978b13f7f67efb23bd827373ace4578f2137ec110bbf6a4a7cde4121bbd" dependencies = [ "cfg-if", "libc", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-runtime" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e704b126e4252788ccfc3526d4d4511d4b23c521bf123e447ac726c14545217b" +checksum = "658cf6f325232b6760e202e5255d823da5e348fdea827eff0a2a22319000b441" dependencies = [ "anyhow", "cc", "cfg-if", - "indexmap", + "indexmap 1.9.3", "libc", "log", "mach", "memfd", - "memoffset 0.6.5", + "memoffset", "paste", "rand 0.8.5", - "rustix", + "rustix 0.36.17", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-types" -version = "6.0.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e5572c5727c1ee7e8f28717aaa8400e4d22dcbd714ea5457d85b5005206568" +checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f" dependencies = [ "cranelift-entity", "serde", @@ -9382,9 +9423,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.61" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", @@ -9392,443 +9433,331 @@ dependencies = [ [[package]] name = "webpki" -version = "0.21.4" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" dependencies = [ - "ring", - "untrusted", + "ring 0.17.8", + "untrusted 0.9.0", ] [[package]] -name = "webpki" -version = "0.22.0" +name = "webpki-roots" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" dependencies = [ - "ring", - "untrusted", + "webpki", ] [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki 0.22.0", -] +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] -name = "webrtc" -version = "0.6.0" +name = "which" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ - "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", + "either", + "home", + "once_cell", + "rustix 0.38.32", ] [[package]] -name = "webrtc-data" -version = "0.6.0" +name = "wide" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100" +checksum = "89beec544f246e679fc25490e3f8e08003bc4bf612068f325120dad4cea02c1c" dependencies = [ - "bytes", - "derive_builder", - "log", - "thiserror", - "tokio", - "webrtc-sctp", - "webrtc-util", + "bytemuck", + "safe_arch", ] [[package]] -name = "webrtc-dtls" -version = "0.7.0" +name = "widestring" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -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", -] +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" [[package]] -name = "webrtc-ice" -version = "0.9.0" +name = "winapi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494483fbb2f5492620871fdc78b084aed8807377f6e3fe88b2e49f0a9c9c41d7" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ - "arc-swap", - "async-trait", - "crc", - "log", - "rand 0.8.5", - "serde", - "serde_json", - "stun", - "thiserror", - "tokio", - "turn", - "url", - "uuid", - "waitgroup", - "webrtc-mdns", - "webrtc-util", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] -name = "webrtc-mdns" -version = "0.5.2" +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106" -dependencies = [ - "log", - "socket2", - "thiserror", - "tokio", - "webrtc-util", -] +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] -name = "webrtc-media" -version = "0.5.0" +name = "winapi-util" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2a3c157a040324e5049bcbd644ffc9079e6738fa2cfab2bcff64e5cc4c00d7" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ - "byteorder", - "bytes", - "derive_builder", - "displaydoc", - "rand 0.8.5", - "rtp", - "thiserror", - "webrtc-util", + "winapi", ] [[package]] -name = "webrtc-sctp" -version = "0.7.0" +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0" -dependencies = [ - "arc-swap", - "async-trait", - "bytes", - "crc", - "log", - "rand 0.8.5", - "thiserror", - "tokio", - "webrtc-util", -] +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "webrtc-srtp" -version = "0.9.1" +name = "windows" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" dependencies = [ - "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", + "windows-core 0.51.1", + "windows-targets 0.48.5", ] [[package]] -name = "webrtc-util" -version = "0.7.0" +name = "windows-core" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ - "async-trait", - "bitflags", - "bytes", - "cc", - "ipnet", - "lazy_static", - "libc", - "log", - "nix 0.24.3", - "rand 0.8.5", - "thiserror", - "tokio", - "winapi", + "windows-targets 0.48.5", ] [[package]] -name = "wepoll-ffi" -version = "0.1.2" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "cc", + "windows-targets 0.52.4", ] [[package]] -name = "which" -version = "4.4.0" +name = "windows-sys" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "either", - "libc", - "once_cell", + "windows-targets 0.42.2", ] [[package]] -name = "wide" -version = "0.7.8" +name = "windows-sys" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b689b6c49d6549434bf944e6b0f39238cf63693cb7a147e9d887507fffa3b223" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "bytemuck", - "safe_arch", + "windows-targets 0.48.5", ] [[package]] -name = "widestring" -version = "0.5.1" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.4", +] [[package]] -name = "winapi" -version = "0.3.9" +name = "windows-targets" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "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", ] [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" +name = "windows-targets" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +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", +] [[package]] -name = "winapi-util" -version = "0.1.5" +name = "windows-targets" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" dependencies = [ - "winapi", + "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", ] [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "windows_aarch64_gnullvm" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] -name = "windows" -version = "0.34.0" +name = "windows_aarch64_gnullvm" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -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", -] +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] -name = "windows-sys" -version = "0.42.0" +name = "windows_aarch64_gnullvm" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -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", -] +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" [[package]] -name = "windows-sys" -version = "0.45.0" +name = "windows_aarch64_msvc" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets", -] +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] -name = "windows-targets" -version = "0.42.1" +name = "windows_aarch64_msvc" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -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", -] +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.1" +name = "windows_aarch64_msvc" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" [[package]] -name = "windows_aarch64_msvc" -version = "0.34.0" +name = "windows_i686_gnu" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] -name = "windows_aarch64_msvc" -version = "0.42.1" +name = "windows_i686_gnu" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.34.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" [[package]] -name = "windows_i686_gnu" -version = "0.42.1" +name = "windows_i686_msvc" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.34.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" [[package]] name = "windows_x86_64_gnu" -version = "0.34.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[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" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" [[package]] name = "windows_x86_64_msvc" -version = "0.34.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.4" +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 = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] @@ -9851,52 +9780,22 @@ 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 0.5.1", + "asn1-rs", "base64 0.13.1", "data-encoding", - "der-parser 8.1.0", + "der-parser", "lazy_static", "nom", - "oid-registry 0.6.1", + "oid-registry", "rusticata-macros", "thiserror", - "time 0.3.17", + "time", ] [[package]] @@ -9915,32 +9814,51 @@ dependencies = [ [[package]] name = "yasna" -version = "0.5.1" +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 = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" dependencies = [ - "time 0.3.17", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.58", ] [[package]] name = "zeroize" -version = "1.5.7" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.3" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", - "synstructure", + "syn 2.0.58", ] [[package]] @@ -9949,7 +9867,16 @@ version = "0.11.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" dependencies = [ - "zstd-safe", + "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", ] [[package]] @@ -9962,13 +9889,22 @@ 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.6+zstd.1.5.2" +version = "2.0.10+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a3f9792c0c3dc6c165840a75f47ae1f4da402c2d006881129579f6597e801b" +checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" dependencies = [ "cc", - "libc", "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index 5389d330c3..a05b3c9e55 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,13 +2,22 @@ members = [ "integration-tests", "node", - "pallets/subtensor", "pallets/commitments", + "pallets/subtensor", "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 b1e6c1a996..47639b6407 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,15 +42,29 @@ 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). -### Run +**Build and Run** Use Rust's native `cargo` command to build and launch the template node: @@ -58,15 +72,20 @@ Use Rust's native `cargo` command to build and launch the template node: cargo run --release -- --dev ``` -### Build +**Build only** -The `cargo run` command will perform an initial build. Use the following command to build the node +The above `cargo run` command will perform an initial build and launch the node. Use the following command to build the node without launching it: ```sh cargo build --release ``` + -## Run +## Other ways to launch the node -The provided `cargo run` command will launch a temporary node and its state will be discarded after +The above `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. @@ -148,7 +168,7 @@ Running code coverage bash scripts/code-coverage.sh ``` -> Note; above requires `cargo-tarpaulin` is installed to the host, eg. `cargo install cargo-tarpaulin` +> Note: They 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). @@ -158,10 +178,10 @@ bash scripts/code-coverage.sh > - Alice//stash > - Bob//stash -In case of being interested in maintaining the chain' state between runs a base path must be added +If we want to maintain 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 shows how to use a newly created folder as our db base path. +is ran. The following commands show how to use a newly created folder as our db base path: ```bash # Create a folder to use as the db base path @@ -179,7 +199,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 @@ -196,7 +216,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 +### Node Capabilities A blockchain node is an application that allows users to participate in a blockchain network. Substrate-based blockchain nodes expose a number of capabilities: @@ -210,7 +230,9 @@ 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. -There are several files in the `node` directory - take special note of the following: +**Directory structure** + +There are several files in the [`node`](./node/) directory. Make a note of the following important files: - [`chain_spec.rs`](./node/src/chain_spec.rs): A [chain specification](https://docs.substrate.io/main-docs/build/chain-spec/) is a @@ -228,11 +250,13 @@ There are several files in the `node` directory - take special note of the follo 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-template --help +./target/release/node-subtensor --help ``` ### Runtime @@ -278,6 +302,7 @@ 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. + - -## 6. License +## License The MIT License (MIT) Copyright © 2021 Yuma Rao @@ -317,5 +342,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. -## 7. Acknowledgments +## Acknowledgments **parralax** diff --git a/docs/running-subtensor-locally.md b/docs/running-subtensor-locally.md index 0f7f73f6d3..f205eea5ca 100644 --- a/docs/running-subtensor-locally.md +++ b/docs/running-subtensor-locally.md @@ -1,77 +1,205 @@ -# Running subtensor locally +# Running subtensor node locally -- [Running docker](#running-docker) -- [Compiling your own binary](#compiling-your-own-binary) -- [Running on cloud](#running-on-cloud) +- [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 +## Method 1: Using Docker -### Install git -`sudo apt install git` +To run a subtensor node with Docker, follow the below steps. -### Install Docker Engine - You can follow Docker's [oficial installation guides](https://docs.docker.com/engine/install/) +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: -### Run node-subtensor container ```bash git clone https://github.com/opentensor/subtensor.git -cd subtensor -# 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 ``` -## Compiling your own binary -### Requirements +### Step 4: Go into subtensor directory + +Then `cd` into the subtensor directory: + ```bash -sudo apt install build-essential git make clang libssl-dev llvm libudev-dev protobuf-compiler -y +cd subtensor ``` -### Install Rust +### 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 -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" +git checkout main ``` -### Rustup update +Pull the latest `main` branch contents: + ```bash -rustup default stable && \ - rustup update && \ - rustup update nightly && \ - rustup target add wasm32-unknown-unknown --toolchain nightly +git pull ``` -### Compiling +Stop the currently running Docker containers: + ```bash -git clone https://github.com/opentensor/subtensor.git -cd subtensor -cargo build --release --features runtime-benchmarks +docker compose down --volumes ``` -### Running the node -#### Mainnet / Lite node +### Run a lite node on mainchain + +To run a lite node connected to the Bittensor mainchain, run the below command. + ```bash -sudo ./scripts/run/subtensor.sh -e binary --network mainnet --node-type lite -``` +sudo ./scripts/run/subtensor.sh -e docker --network mainnet --node-type lite +``` + +### Run an archive node on mainchain + +To run an archive node connected to the Bittensor mainchain, run the below command. -#### Mainnet / Archive node ```bash sudo ./scripts/run/subtensor.sh -e docker --network mainnet --node-type archive ``` -#### Testnet / Lite node +### Run a lite node on testchain + +To run a lite node connected to the Bittensor testchain, run the below command. + ```bash sudo ./scripts/run/subtensor.sh -e docker --network testnet --node-type lite ``` -#### Testnet / Archive node +### Run an archive node on testchain + +To run an archive node connected to the Bittensor testchain, run the below command. + ```bash sudo ./scripts/run/subtensor.sh -e docker --network testnet --node-type archive ``` +--- + +## 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: + +```bash +git clone https://github.com/opentensor/subtensor.git +``` + +`cd` into the subtensor directory: + +```bash +cd subtensor +``` + +Make sure you are on the `main` branch. If not, switch to it: + +```bash +git checkout main +``` + +Remove previous chain state: + +```bash +rm -rf /tmp/blockchain +``` + +Install subtensor by compiling with `cargo`: + +```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 +``` + +### 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 +``` + ## 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 [Compiling your own binary](#compiling-your-own-binary) 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 [Method 2: Using Source Code](#method-2-using-source-code) section. Note that these scripts have not been tested on Runpod. diff --git a/integration-tests/Cargo.toml b/integration-tests/Cargo.toml index d59aece3bd..a834101675 100644 --- a/integration-tests/Cargo.toml +++ b/integration-tests/Cargo.toml @@ -7,6 +7,9 @@ edition = "2021" license = "Unlicense" repository = "https://github.com/opentensor/subtensor" +[lints] +workspace = true + [dependencies] ## diff --git a/justfile b/justfile new file mode 100644 index 0000000000..691d5bca22 --- /dev/null +++ b/justfile @@ -0,0 +1,40 @@ +#!/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 286ce58862..5c0a0e4897 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -10,6 +10,9 @@ publish = false repository = "https://github.com/opentensor/subtensor" build = "build.rs" +[lints] +workspace = true + [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -25,44 +28,47 @@ 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-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" } +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" } 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-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" } +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" } # These dependencies are used for runtime benchmarking -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" } +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" } # Local Dependencies node-subtensor-runtime = { version = "4.0.0-dev", path = "../runtime" } @@ -70,10 +76,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-v0.9.39" } +try-runtime-cli = { version = "0.10.0-dev", optional = true, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } [build-dependencies] -substrate-build-script-utils = { version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +substrate-build-script-utils = { version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } [features] default = [] @@ -82,6 +88,10 @@ 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 = [] @@ -90,4 +100,8 @@ 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 7848c2bbee..07c5969474 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.into(), + value: self.value, } .into(), nonce, diff --git a/node/src/chain_spec.rs b/node/src/chain_spec.rs index cce3f93991..c4f703a12f 100644 --- a/node/src/chain_spec.rs +++ b/node/src/chain_spec.rs @@ -1,24 +1,22 @@ use node_subtensor_runtime::{ - AccountId, AuraConfig, BalancesConfig, GenesisConfig, GrandpaConfig, SenateMembersConfig, - Signature, SubtensorModuleConfig, SudoConfig, SystemConfig, TriumvirateConfig, - TriumvirateMembersConfig, WASM_BINARY, + AccountId, AuraConfig, BalancesConfig, GrandpaConfig, RuntimeGenesisConfig, + 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) @@ -26,10 +24,8 @@ 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 @@ -38,7 +34,6 @@ 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)) @@ -95,14 +90,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))); @@ -114,7 +109,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)); @@ -271,14 +266,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))); @@ -290,7 +285,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)); @@ -414,7 +409,7 @@ fn localnet_genesis( wasm_binary: &[u8], initial_authorities: Vec<(AuraId, GrandpaId)>, _enable_println: bool, -) -> GenesisConfig { +) -> RuntimeGenesisConfig { let mut balances = vec![ ( get_account_id_from_seed::("Alice"), @@ -451,10 +446,11 @@ fn localnet_genesis( } } - GenesisConfig { + RuntimeGenesisConfig { system: SystemConfig { // Add Wasm runtime to storage. code: wasm_binary.to_vec(), + ..Default::default() }, balances: BalancesConfig { balances }, aura: AuraConfig { @@ -465,6 +461,7 @@ fn localnet_genesis( .iter() .map(|x| (x.1.clone(), 1)) .collect(), + ..Default::default() }, sudo: SudoConfig { key: Some(get_account_id_from_seed::("Alice")), @@ -495,6 +492,7 @@ 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)>, @@ -504,11 +502,12 @@ fn testnet_genesis( _stakes: Vec<(AccountId, Vec<(AccountId, (u64, u16))>)>, _balances: Vec<(AccountId, u64)>, _balances_issuance: u64, -) -> GenesisConfig { - GenesisConfig { +) -> RuntimeGenesisConfig { + RuntimeGenesisConfig { system: SystemConfig { // Add Wasm runtime to storage. code: wasm_binary.to_vec(), + ..Default::default() }, balances: BalancesConfig { // Configure sudo balance @@ -526,6 +525,7 @@ fn testnet_genesis( .iter() .map(|x| (x.1.clone(), 1)) .collect(), + ..Default::default() }, sudo: SudoConfig { key: Some( @@ -552,6 +552,7 @@ 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)>, @@ -561,16 +562,17 @@ fn finney_genesis( stakes: Vec<(AccountId, Vec<(AccountId, (u64, u16))>)>, balances: Vec<(AccountId, u64)>, balances_issuance: u64, -) -> GenesisConfig { - GenesisConfig { +) -> RuntimeGenesisConfig { + RuntimeGenesisConfig { 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.iter().cloned().map(|k| k).collect(), + balances: balances.to_vec(), }, aura: AuraConfig { authorities: initial_authorities.iter().map(|x| (x.0.clone())).collect(), @@ -580,6 +582,7 @@ fn finney_genesis( .iter() .map(|x| (x.1.clone(), 1)) .collect(), + ..Default::default() }, sudo: SudoConfig { key: Some( @@ -589,8 +592,8 @@ fn finney_genesis( }, transaction_payment: Default::default(), subtensor_module: SubtensorModuleConfig { - stakes: stakes, - balances_issuance: balances_issuance, + stakes, + balances_issuance, }, triumvirate: TriumvirateConfig { // Add initial authorities as collective members diff --git a/node/src/cli.rs b/node/src/cli.rs index a37ff9b1f2..2c9c4c9fd4 100644 --- a/node/src/cli.rs +++ b/node/src/cli.rs @@ -9,6 +9,7 @@ pub struct Cli { pub run: RunCmd, } +#[allow(clippy::large_enum_variant)] #[derive(Debug, clap::Subcommand)] pub enum Subcommand { // Key management cli utilities @@ -41,14 +42,6 @@ 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 2ba0e08414..1ce7d4f123 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::{ChainSpec, RuntimeVersion, SubstrateCli}; +use sc_cli::SubstrateCli; use sc_service::PartialComponents; impl SubstrateCli for Cli { @@ -52,10 +52,6 @@ impl SubstrateCli for Cli { )?), }) } - - fn native_runtime_version(_: &Box) -> &'static RuntimeVersion { - &node_subtensor_runtime::VERSION - } } // Parse and run command line arguments @@ -128,7 +124,7 @@ pub fn run() -> sc_cli::Result<()> { .. } = service::new_partial(&config)?; let aux_revert = Box::new(|client, _, blocks| { - sc_finality_grandpa::revert(client, blocks)?; + sc_consensus_grandpa::revert(client, blocks)?; Ok(()) }); Ok((cmd.run(client, backend, Some(aux_revert)), task_manager)) @@ -204,31 +200,6 @@ 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 9752c379a3..511fb74c36 100644 --- a/node/src/rpc.rs +++ b/node/src/rpc.rs @@ -8,7 +8,8 @@ use std::sync::Arc; use jsonrpsee::RpcModule; -use node_subtensor_runtime::{opaque::Block, AccountId, Balance, Index}; +use node_subtensor_runtime::{opaque::Block, AccountId, Balance, BlockNumber, Hash, Index}; +use sc_consensus_grandpa::FinalityProofProvider; use sc_transaction_pool_api::TransactionPool; use sp_api::ProvideRuntimeApi; use sp_block_builder::BlockBuilder; @@ -16,19 +17,37 @@ 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, @@ -41,9 +60,11 @@ 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}; @@ -52,6 +73,8 @@ where client, pool, deny_unsafe, + grandpa, + backend: _, } = deps; // Custom RPC methods for Paratensor @@ -60,6 +83,25 @@ 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 79c94d643f..c7eb3d4165 100644 --- a/node/src/service.rs +++ b/node/src/service.rs @@ -1,19 +1,35 @@ //! Service and ServiceFactory implementation. Specialized wrapper over substrate service. -use node_subtensor_runtime::{self, opaque::Block, RuntimeApi}; -use sc_client_api::BlockBackend; +use futures::FutureExt; +use node_subtensor_runtime::{opaque::Block, RuntimeApi}; +use sc_client_api::{Backend, 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")] @@ -46,24 +62,18 @@ pub fn new_partial( sc_consensus::DefaultImportQueue, sc_transaction_pool::FullPool, ( - sc_finality_grandpa::GrandpaBlockImport< + sc_consensus_grandpa::GrandpaBlockImport< FullBackend, Block, FullClient, FullSelectChain, >, - sc_finality_grandpa::LinkHalf, + sc_consensus_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() @@ -75,12 +85,7 @@ pub fn new_partial( }) .transpose()?; - let executor = NativeElseWasmExecutor::::new( - config.wasm_method, - Some(16384), //config.default_heap_pages, - config.max_runtime_instances, - config.runtime_cache_size, - ); + let executor = sc_service::new_native_or_wasm_executor(config); let (client, backend, keystore_container, task_manager) = sc_service::new_full_parts::( @@ -107,7 +112,7 @@ pub fn new_partial( client.clone(), ); - let (grandpa_block_import, grandpa_link) = sc_finality_grandpa::block_import( + let (grandpa_block_import, grandpa_link) = sc_consensus_grandpa::block_import( client.clone(), &(client.clone() as Arc<_>), select_chain.clone(), @@ -151,38 +156,22 @@ 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(mut config: Configuration) -> Result { +pub fn new_full(config: Configuration) -> Result { let sc_service::PartialComponents { client, backend, mut task_manager, import_queue, - mut keystore_container, + keystore_container, select_chain, transaction_pool, other: (block_import, grandpa_link, mut telemetry), } = new_partial(&config)?; - 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( + let mut net_config = sc_network::config::FullNetworkConfiguration::new(&config.network); + + let grandpa_protocol_name = sc_consensus_grandpa::protocol_standard_name( &client .block_hash(0) .ok() @@ -191,21 +180,19 @@ pub fn new_full(mut config: Configuration) -> Result &config.chain_spec, ); - 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( + 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( backend.clone(), grandpa_link.shared_authority_set().clone(), Vec::default(), )); - let (network, system_rpc_tx, tx_handler_controller, network_starter) = + let (network, system_rpc_tx, tx_handler_controller, network_starter, sync_service) = 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(), @@ -215,14 +202,35 @@ pub fn new_full(mut config: Configuration) -> Result })?; if config.offchain_worker.enabled { - sc_service::build_offchain_workers( - &config, - task_manager.spawn_handle(), - client.clone(), - network.clone(), + 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(), ); } + 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; @@ -234,26 +242,37 @@ pub fn new_full(mut config: Configuration) -> Result let client = client.clone(); let pool = transaction_pool.clone(); - 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) - }) + 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) + }, + ) }; let _rpc_handlers = sc_service::spawn_tasks(sc_service::SpawnTasksParams { network: network.clone(), client: client.clone(), - keystore: keystore_container.sync_keystore(), + keystore: keystore_container.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(), })?; @@ -262,7 +281,7 @@ pub fn new_full(mut config: Configuration) -> Result let proposer_factory = sc_basic_authorship::ProposerFactory::new( task_manager.spawn_handle(), client.clone(), - transaction_pool, + transaction_pool.clone(), prometheus_registry.as_ref(), telemetry.as_ref().map(|x| x.handle()), ); @@ -289,9 +308,9 @@ pub fn new_full(mut config: Configuration) -> Result }, force_authoring, backoff_authoring_blocks, - keystore: keystore_container.sync_keystore(), - sync_oracle: network.clone(), - justification_sync_link: network.clone(), + keystore: keystore_container.keystore(), + sync_oracle: sync_service.clone(), + justification_sync_link: sync_service.clone(), block_proposal_slot_portion: SlotProportion::new(2f32 / 3f32), max_block_proposal_slot_portion: None, telemetry: telemetry.as_ref().map(|x| x.handle()), @@ -310,12 +329,12 @@ pub fn new_full(mut 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.sync_keystore()) + Some(keystore_container.keystore()) } else { None }; - let grandpa_config = sc_finality_grandpa::Config { + let grandpa_config = sc_consensus_grandpa::Config { // FIXME #1578 make this available through chainspec gossip_duration: Duration::from_millis(333), justification_period: 512, @@ -333,14 +352,16 @@ pub fn new_full(mut 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_finality_grandpa::GrandpaParams { + let grandpa_config = sc_consensus_grandpa::GrandpaParams { config: grandpa_config, link: grandpa_link, network, - voting_rule: sc_finality_grandpa::VotingRulesBuilder::default().build(), + voting_rule: sc_consensus_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. @@ -348,7 +369,7 @@ pub fn new_full(mut config: Configuration) -> Result task_manager.spawn_essential_handle().spawn_blocking( "grandpa-voter", None, - sc_finality_grandpa::run_grandpa_voter(grandpa_config)?, + sc_consensus_grandpa::run_grandpa_voter(grandpa_config)?, ); } diff --git a/node/tests/chain_spec.rs b/node/tests/chain_spec.rs index 611a8450d3..42665c476b 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_finality_grandpa::AuthorityId as GrandpaId; +// use sp_consensus_grandpa::AuthorityId as GrandpaId; use node_subtensor::chain_spec::*; diff --git a/pallets/admin-utils/Cargo.toml b/pallets/admin-utils/Cargo.toml index ead04efef0..cecd3cf397 100644 --- a/pallets/admin-utils/Cargo.toml +++ b/pallets/admin-utils/Cargo.toml @@ -9,6 +9,9 @@ license = "Unlicense" publish = false repository = "https://github.com/opentensor/subtensor" +[lints] +workspace = true + [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -19,21 +22,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-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" } +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" } 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-v0.9.39" } +sp-weights = { git = "https://github.com/paritytech/substrate.git", default-features = false, branch = "polkadot-v1.0.0" } [dev-dependencies] -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 = [ +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 = [ "std", ] } @@ -48,6 +51,24 @@ 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 cee1a3fa20..ca66bef3b1 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_ref_time(14_000_000) + Weight::from_parts(14_000_000, 0) .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_ref_time(4_000_000) - .saturating_add(Weight::from_proof_size(0)) + Weight::from_parts(4_000_000, 0) + .saturating_add(Weight::from_parts(0, 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_ref_time(14_000_000) + Weight::from_parts(14_000_000, 0) .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_ref_time(14_000_000) + Weight::from_parts(14_000_000, 0) .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_ref_time(14_000_000) + Weight::from_parts(14_000_000, 0) .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_ref_time(14_000_000) + Weight::from_parts(14_000_000, 0) .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_ref_time(14_000_000) + Weight::from_parts(14_000_000, 0) .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_ref_time(14_000_000) + Weight::from_parts(14_000_000, 0) .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_ref_time(14_000_000) + Weight::from_parts(14_000_000, 0) .saturating_add(T::DbWeight::get().writes(1)), DispatchClass::Operational, Pays::No @@ -836,7 +836,6 @@ 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 77839500f5..abf663678b 100644 --- a/pallets/admin-utils/tests/mock.rs +++ b/pallets/admin-utils/tests/mock.rs @@ -1,33 +1,28 @@ use frame_support::{ assert_ok, parameter_types, - traits::{Everything, Hooks, StorageMapShim}, + traits::{Everything, Hooks}, 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}, - DispatchError, + BuildStorage, 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 where - Block = Block, - NodeBlock = Block, - UncheckedExtrinsic = UncheckedExtrinsic, + pub enum Test { System: frame_system, Balances: pallet_balances, AdminUtils: pallet_admin_utils, - SubtensorModule: pallet_subtensor::{Pallet, Call, Storage, Event} + SubtensorModule: pallet_subtensor::{Pallet, Call, Storage, Event}, } ); @@ -67,7 +62,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_ref_time(1024)); + pub BlockWeights: limits::BlockWeights = limits::BlockWeights::simple_max(weights::Weight::from_parts(1024, 0)); pub const ExistentialDeposit: Balance = 1; pub const TransactionByteFee: Balance = 100; pub const SDebug:u64 = 1; @@ -170,41 +165,39 @@ 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 = (); + type AccountData = pallet_balances::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 Balance = Balance; + type MaxLocks = (); + type MaxReserves = (); + type ReserveIdentifier = [u8; 8]; + type Balance = u64; type RuntimeEvent = RuntimeEvent; type DustRemoval = (); - type ExistentialDeposit = (); - type AccountStore = StorageMapShim< - pallet_balances::Account, - frame_system::Provider, - AccountId, - pallet_balances::AccountData, - >; - type MaxLocks = (); + type ExistentialDeposit = ConstU64<1>; + type AccountStore = System; type WeightInfo = (); - type MaxReserves = (); - type ReserveIdentifier = (); + type FreezeIdentifier = (); + type MaxFreezes = (); + type RuntimeHoldReason = (); + type MaxHolds = (); } pub struct SubtensorIntrf; @@ -263,19 +256,19 @@ impl pallet_admin_utils::SubtensorInterface f } fn get_root_netuid() -> u16 { - return SubtensorModule::get_root_netuid(); + SubtensorModule::get_root_netuid() } fn if_subnet_exist(netuid: u16) -> bool { - return SubtensorModule::if_subnet_exist(netuid); + SubtensorModule::if_subnet_exist(netuid) } fn create_account_if_non_existent(coldkey: &AccountId, hotkey: &AccountId) { - return SubtensorModule::create_account_if_non_existent(coldkey, hotkey); + SubtensorModule::create_account_if_non_existent(coldkey, hotkey) } fn coldkey_owns_hotkey(coldkey: &AccountId, hotkey: &AccountId) -> bool { - return SubtensorModule::coldkey_owns_hotkey(coldkey, hotkey); + SubtensorModule::coldkey_owns_hotkey(coldkey, hotkey) } fn increase_stake_on_coldkey_hotkey_account( @@ -286,32 +279,28 @@ 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 { - return SubtensorModule::get_current_block_as_u64(); + SubtensorModule::get_current_block_as_u64() } fn get_subnetwork_n(netuid: u16) -> u16 { - return SubtensorModule::get_subnetwork_n(netuid); + SubtensorModule::get_subnetwork_n(netuid) } fn get_max_allowed_uids(netuid: u16) -> u16 { - return SubtensorModule::get_max_allowed_uids(netuid); + SubtensorModule::get_max_allowed_uids(netuid) } fn append_neuron(netuid: u16, new_hotkey: &AccountId, block_number: u64) { - return SubtensorModule::append_neuron(netuid, new_hotkey, block_number); + SubtensorModule::append_neuron(netuid, new_hotkey, block_number) } fn get_neuron_to_prune(netuid: u16) -> u16 { - return SubtensorModule::get_neuron_to_prune(netuid); + SubtensorModule::get_neuron_to_prune(netuid) } fn replace_neuron(netuid: u16, uid_to_replace: u16, new_hotkey: &AccountId, block_number: u64) { @@ -378,7 +367,7 @@ impl pallet_admin_utils::SubtensorInterface f } fn ensure_subnet_owner_or_root(o: RuntimeOrigin, netuid: u16) -> Result<(), DispatchError> { - return SubtensorModule::ensure_subnet_owner_or_root(o, netuid); + SubtensorModule::ensure_subnet_owner_or_root(o, netuid) } fn set_rho(netuid: u16, rho: u16) { @@ -426,7 +415,7 @@ impl pallet_admin_utils::SubtensorInterface f } fn is_hotkey_registered_on_network(netuid: u16, hotkey: &AccountId) -> bool { - return SubtensorModule::is_hotkey_registered_on_network(netuid, hotkey); + SubtensorModule::is_hotkey_registered_on_network(netuid, hotkey) } fn init_new_network(netuid: u16, tempo: u16) { @@ -460,13 +449,15 @@ impl pallet_admin_utils::Config for Test { type WeightInfo = (); } -#[allow(dead_code)] +// Build genesis storage according to the mock runtime. pub fn new_test_ext() -> sp_io::TestExternalities { sp_tracing::try_init_simple(); - frame_system::GenesisConfig::default() - .build_storage::() - .unwrap() - .into() + 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 } #[allow(dead_code)] @@ -513,7 +504,7 @@ pub fn register_ok_neuron( } #[allow(dead_code)] -pub fn add_network(netuid: u16, tempo: u16, _modality: u16) { +pub fn add_network(netuid: u16, tempo: 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 814c32d4a2..4d2c44013e 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.into()) + Err(DispatchError::BadOrigin) ); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); 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, 0); + add_network(netuid, 10); 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.into()) + Err(DispatchError::BadOrigin) ); assert_eq!( AdminUtils::sudo_set_rao_recycled( @@ -785,13 +785,10 @@ fn test_sudo_set_rao_recycled() { assert_eq!( System::events() .last() - .expect( - format!( - "Expected there to be events: {:?}", - System::events().to_vec() - ) - .as_str() - ) + .unwrap_or_else(|| panic!( + "Expected there to be events: {:?}", + System::events().to_vec() + )) .event, RuntimeEvent::SubtensorModule(Event::RAORecycledForRegistrationSet(netuid, to_be_set)) ); @@ -803,7 +800,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, 0); + add_network(netuid, 10); let init_value: u16 = SubtensorModule::get_max_subnets(); assert_eq!( @@ -811,7 +808,7 @@ fn test_sudo_set_subnet_limit() { <::RuntimeOrigin>::signed(U256::from(1)), to_be_set ), - Err(DispatchError::BadOrigin.into()) + Err(DispatchError::BadOrigin) ); assert_eq!(SubtensorModule::get_max_subnets(), init_value); assert_ok!(AdminUtils::sudo_set_subnet_limit( @@ -827,7 +824,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, 0); + add_network(netuid, 10); let init_value: u64 = SubtensorModule::get_lock_reduction_interval(); assert_eq!( @@ -835,7 +832,7 @@ fn test_sudo_set_network_lock_reduction_interval() { <::RuntimeOrigin>::signed(U256::from(1)), to_be_set ), - Err(DispatchError::BadOrigin.into()) + Err(DispatchError::BadOrigin) ); assert_eq!(SubtensorModule::get_lock_reduction_interval(), init_value); assert_ok!(AdminUtils::sudo_set_lock_reduction_interval( @@ -851,7 +848,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, 0); + add_network(netuid, 10); let init_value: bool = SubtensorModule::get_network_pow_registration_allowed(netuid); assert_eq!( @@ -860,7 +857,7 @@ fn test_sudo_set_network_pow_registration_allowed() { netuid, to_be_set ), - Err(DispatchError::BadOrigin.into()) + Err(DispatchError::BadOrigin) ); assert_eq!( SubtensorModule::get_network_pow_registration_allowed(netuid), @@ -884,13 +881,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 as u64; + let to_be_set: u64 = SubtensorModule::get_nominator_min_required_stake() + 5_u64; assert_eq!( AdminUtils::sudo_set_nominator_min_required_stake( <::RuntimeOrigin>::signed(U256::from(0)), to_be_set ), - Err(DispatchError::BadOrigin.into()) + Err(DispatchError::BadOrigin) ); }); } @@ -915,7 +912,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 as u64; + let to_be_set: u64 = SubtensorModule::get_nominator_min_required_stake() + 5_u64; assert_ok!(AdminUtils::sudo_set_nominator_min_required_stake( <::RuntimeOrigin>::root(), to_be_set @@ -941,7 +938,7 @@ mod sudo_set_nominator_min_required_stake { SubtensorModule::set_target_stakes_per_interval(10); // Register network. - add_network(netuid, 0, 0); + add_network(netuid, 0); // Register hot1. register_ok_neuron(netuid, hot1, cold1, 0); diff --git a/pallets/collective/Cargo.toml b/pallets/collective/Cargo.toml index 126ef8d6c5..c29f55d09f 100644 --- a/pallets/collective/Cargo.toml +++ b/pallets/collective/Cargo.toml @@ -9,6 +9,9 @@ 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"] @@ -20,13 +23,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-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" } +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" } [features] default = ["std"] @@ -48,4 +51,8 @@ runtime-benchmarks = [ "frame-system/runtime-benchmarks", "sp-runtime/runtime-benchmarks", ] -try-runtime = ["frame-support/try-runtime"] +try-runtime = [ + "frame-support/try-runtime", + "frame-system/try-runtime", + "sp-runtime/try-runtime" +] diff --git a/pallets/collective/src/benchmarking.rs b/pallets/collective/src/benchmarking.rs index 48a545634c..cf44e99488 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: Err(DispatchError::BadOrigin) }.into() + Event::MemberExecuted { proposal_hash, result: Ok(()) }.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: Err(DispatchError::BadOrigin) }.into()); + assert_last_event::(Event::Executed { proposal_hash: last_hash, result: Ok(()) }.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(T::BlockNumber::max_value()); + System::::set_block_number(BlockNumberFor::::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(T::BlockNumber::max_value()); + System::::set_block_number(BlockNumberFor::::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: Err(DispatchError::BadOrigin) }.into()); + assert_last_event::(Event::Executed { proposal_hash: last_hash, result: Ok(()) }.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(T::BlockNumber::max_value()); + System::::set_block_number(BlockNumberFor::::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 63cb96decf..bcd88cc319 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::{OldWeight, Weight}, + weights::Weight, }; #[cfg(test)] @@ -177,7 +177,6 @@ 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)>); @@ -200,7 +199,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; @@ -237,7 +236,6 @@ pub mod pallet { pub members: Vec, } - #[cfg(feature = "std")] impl, I: 'static> Default for GenesisConfig { fn default() -> Self { Self { @@ -248,7 +246,7 @@ pub mod pallet { } #[pallet::genesis_build] - impl, I: 'static> GenesisBuild for GenesisConfig { + impl, I: 'static> BuildGenesisConfig for GenesisConfig { fn build(&self) { use sp_std::collections::btree_set::BTreeSet; let members_set: BTreeSet<_> = self.members.iter().collect(); @@ -282,7 +280,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] @@ -519,7 +517,7 @@ pub mod pallet { origin: OriginFor, proposal: Box<>::Proposal>, #[pallet::compact] length_bound: u32, - duration: T::BlockNumber, + duration: BlockNumberFor, ) -> DispatchResultWithPostInfo { let who = ensure_signed(origin.clone())?; ensure!(T::CanPropose::can_propose(&who), Error::::NotMember); @@ -536,7 +534,7 @@ pub mod pallet { Self::do_propose_proposed(who, threshold, proposal, length_bound, duration)?; Ok(Some(T::WeightInfo::propose_proposed( - proposal_len as u32, // B + proposal_len, // B members.len() as u32, // M active_proposals, // P2 )) @@ -574,59 +572,8 @@ pub mod pallet { } } - /// 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) - } + // NOTE: call_index(4) was `close_old_weight` and was removed due to weights v1 + // deprecation /// Disapprove a proposal, close, and remove it from the system, regardless of its current /// state. @@ -702,6 +649,8 @@ 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. @@ -752,7 +701,7 @@ impl, I: 'static> Pallet { threshold: MemberCount, proposal: Box<>::Proposal>, length_bound: MemberCount, - duration: T::BlockNumber, + duration: BlockNumberFor, ) -> Result<(u32, u32), DispatchError> { let proposal_len = proposal.encoded_size(); ensure!( @@ -806,7 +755,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); @@ -845,7 +794,7 @@ impl, I: 'static> Pallet { no: no_votes, }); - Voting::::insert(&proposal, voting); + Voting::::insert(proposal, voting); Ok(is_account_voting_first_time) } @@ -857,7 +806,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; @@ -1030,8 +979,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 @@ -1043,8 +992,8 @@ impl, I: 'static> Pallet { for h in Self::proposals().into_iter() { >::mutate(h, |v| { if let Some(mut votes) = v.take() { - votes.ayes = votes.ayes.into_iter().filter(|i| i != who).collect(); - votes.nays = votes.nays.into_iter().filter(|i| i != who).collect(); + votes.ayes.retain(|i| i != who); + votes.nays.retain(|i| i != who); *v = Some(votes); } }); @@ -1058,7 +1007,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); @@ -1098,16 +1047,8 @@ 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 = 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(); + votes.ayes.retain(|i| outgoing.binary_search(i).is_err()); + votes.nays.retain(|i| outgoing.binary_search(i).is_err()); *v = Some(votes); } }); diff --git a/pallets/collective/src/tests.rs b/pallets/collective/src/tests.rs index c0d71334b3..0505d86f08 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, - dispatch::Pays, - parameter_types, - traits::{ConstU32, ConstU64, GenesisBuild}, + assert_noop, assert_ok, parameter_types, + traits::{ConstU32, ConstU64}, Hashable, }; use frame_system::{EnsureRoot, EventRecord, Phase}; @@ -36,10 +36,7 @@ pub type Block = sp_runtime::generic::Block; pub type UncheckedExtrinsic = sp_runtime::generic::UncheckedExtrinsic; frame_support::construct_runtime!( - pub enum Test where - Block = Block, - NodeBlock = Block, - UncheckedExtrinsic = UncheckedExtrinsic + pub enum Test { System: frame_system::{Pallet, Call, Event}, Collective: pallet_collective::::{Pallet, Call, Event, Origin, Config}, @@ -48,16 +45,14 @@ frame_support::construct_runtime!( Democracy: mock_democracy::{Pallet, Call, Event}, } ); - mod mock_democracy { pub use pallet::*; - #[frame_support::pallet] + #[frame_support::pallet(dev_mode)] 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] @@ -70,7 +65,6 @@ 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); @@ -98,14 +92,11 @@ 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 = (); @@ -117,6 +108,8 @@ impl frame_system::Config for Test { type SS58Prefix = (); type OnSetCode = (); type MaxConsumers = ConstU32<16>; + type Block = Block; + type Nonce = u64; } pub struct CanProposeCollective; @@ -247,7 +240,7 @@ impl Config for Test { } pub fn new_test_ext() -> sp_io::TestExternalities { - let mut ext: sp_io::TestExternalities = GenesisConfig { + let mut ext: sp_io::TestExternalities = RuntimeGenesisConfig { collective: pallet_collective::GenesisConfig { members: vec![1, 2, 3], phantom: Default::default(), @@ -299,9 +292,7 @@ fn close_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); @@ -372,9 +363,7 @@ fn proposal_weight_limit_works_on_approve() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); // With 1's prime vote, this should pass @@ -384,7 +373,7 @@ fn proposal_weight_limit_works_on_approve() { RuntimeOrigin::signed(4), hash, 0, - proposal_weight - Weight::from_ref_time(100), + proposal_weight - Weight::from_parts(100, 0), proposal_len ), Error::::WrongProposalWeight @@ -415,9 +404,7 @@ fn proposal_weight_limit_ignored_on_disapprove() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); // No votes, this proposal wont pass System::set_block_number(4); @@ -425,7 +412,7 @@ fn proposal_weight_limit_ignored_on_disapprove() { RuntimeOrigin::signed(4), hash, 0, - proposal_weight - Weight::from_ref_time(100), + proposal_weight - Weight::from_parts(100, 0), proposal_len )); }) @@ -449,9 +436,7 @@ fn close_with_prime_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); @@ -511,9 +496,7 @@ fn close_with_voting_prime_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); @@ -577,9 +560,7 @@ fn close_with_no_prime_but_majority_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); assert_ok!(CollectiveMajority::vote( RuntimeOrigin::signed(1), @@ -673,14 +654,12 @@ fn removal_of_old_voters_votes_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).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, @@ -691,7 +670,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, @@ -708,14 +687,12 @@ fn removal_of_old_voters_votes_works() { RuntimeOrigin::signed(2), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).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, @@ -726,7 +703,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, @@ -749,14 +726,12 @@ fn removal_of_old_voters_votes_works_with_set_members() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).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, @@ -772,7 +747,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, @@ -789,14 +764,12 @@ fn removal_of_old_voters_votes_works_with_set_members() { RuntimeOrigin::signed(2), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).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, @@ -812,7 +785,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, @@ -835,14 +808,12 @@ fn propose_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).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, @@ -876,8 +847,7 @@ fn limit_active_proposals() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() + TryInto::>::try_into(3u64) .expect("convert u64 to block number.") )); } @@ -888,8 +858,7 @@ fn limit_active_proposals() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() + TryInto::>::try_into(3u64) .expect("convert u64 to block number.") ), Error::::TooManyProposals @@ -910,9 +879,7 @@ fn correct_validate_and_get_proposal() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), length, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); let hash = BlakeTwo256::hash_of(&proposal); @@ -933,7 +900,7 @@ fn correct_validate_and_get_proposal() { Collective::validate_and_get_proposal( &hash, length, - weight - Weight::from_ref_time(10) + weight - Weight::from_parts(10, 0) ), Error::::WrongProposalWeight ); @@ -955,8 +922,7 @@ fn motions_ignoring_non_collective_proposals_works() { RuntimeOrigin::signed(42), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() + TryInto::>::try_into(3u64) .expect("convert u64 to block number.") ), Error::::NotMember @@ -974,9 +940,7 @@ fn motions_ignoring_non_collective_votes_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); assert_noop!( Collective::vote(RuntimeOrigin::signed(42), hash, 0, true), @@ -996,9 +960,7 @@ fn motions_ignoring_bad_index_collective_vote_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); assert_noop!( Collective::vote(RuntimeOrigin::signed(2), hash, 1, true), @@ -1018,13 +980,11 @@ fn motions_vote_after_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).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, @@ -1036,7 +996,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, @@ -1053,7 +1013,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, @@ -1107,12 +1067,10 @@ fn motions_all_first_vote_free_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); assert_eq!( - Collective::voting(&hash), + Collective::voting(hash), Some(Votes { index: 0, threshold: 2, @@ -1183,9 +1141,7 @@ fn motions_reproposing_disapproved_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, false)); @@ -1203,9 +1159,7 @@ fn motions_reproposing_disapproved_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); assert_eq!(*Collective::proposals(), vec![hash]); }); @@ -1227,9 +1181,7 @@ fn motions_approval_with_enough_votes_and_lower_voting_threshold_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).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)); @@ -1285,9 +1237,7 @@ fn motions_approval_with_enough_votes_and_lower_voting_threshold_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).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)); @@ -1360,9 +1310,7 @@ fn motions_disapproval_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).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)); @@ -1421,9 +1369,7 @@ fn motions_approval_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).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)); @@ -1486,9 +1432,7 @@ fn motion_with_no_votes_closes_with_disapproval() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); assert_eq!( System::events()[0], @@ -1556,9 +1500,7 @@ fn close_disapprove_does_not_care_about_weight_or_len() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).expect("convert u64 to block number.") )); // First we make the proposal succeed assert_ok!(Collective::vote(RuntimeOrigin::signed(1), hash, 0, true)); @@ -1602,9 +1544,7 @@ fn disapprove_proposal_works() { RuntimeOrigin::signed(1), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(3u64) - .ok() - .expect("convert u64 to block number.") + TryInto::>::try_into(3u64).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 d8a7131186..df233fc248 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_ref_time(5_143_145).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(5_143_145, 0).saturating_mul(m.into())) // Standard Error: 64_700 - .saturating_add(Weight::from_ref_time(7_480_941).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(7_480_941, 0).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_proof_size(7809).saturating_mul(m.into())) - .saturating_add(Weight::from_proof_size(10238).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())) } /// 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_ref_time(1_775).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(1_775, 0).saturating_mul(b.into())) // Standard Error: 334 - .saturating_add(Weight::from_ref_time(17_052).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(17_052, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(Weight::from_proof_size(32).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 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_ref_time(1_807).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(1_807, 0).saturating_mul(b.into())) // Standard Error: 432 - .saturating_add(Weight::from_ref_time(27_986).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(27_986, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(Weight::from_proof_size(64).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 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_ref_time(2_355).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(2_355, 0).saturating_mul(b.into())) // Standard Error: 765 - .saturating_add(Weight::from_ref_time(20_518).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(20_518, 0).saturating_mul(m.into())) // Standard Error: 755 - .saturating_add(Weight::from_ref_time(85_670).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(85_670, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_proof_size(165).saturating_mul(m.into())) - .saturating_add(Weight::from_proof_size(180).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 165).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 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_ref_time(48_856).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(48_856, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(Weight::from_proof_size(128).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 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_ref_time(27_956).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(27_956, 0).saturating_mul(m.into())) // Standard Error: 595 - .saturating_add(Weight::from_ref_time(84_835).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(84_835, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_proof_size(260).saturating_mul(m.into())) - .saturating_add(Weight::from_proof_size(144).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 260).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 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_ref_time(2_295).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(2_295, 0).saturating_mul(b.into())) // Standard Error: 1_036 - .saturating_add(Weight::from_ref_time(22_182).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(22_182, 0).saturating_mul(m.into())) // Standard Error: 1_010 - .saturating_add(Weight::from_ref_time(100_034).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(100_034, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) - .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())) + .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())) } /// 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_ref_time(34_031).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(34_031, 0).saturating_mul(m.into())) // Standard Error: 599 - .saturating_add(Weight::from_ref_time(85_744).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(85_744, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_proof_size(325).saturating_mul(m.into())) - .saturating_add(Weight::from_proof_size(180).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 325).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 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_ref_time(2_045).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(2_045, 0).saturating_mul(b.into())) // Standard Error: 895 - .saturating_add(Weight::from_ref_time(22_669).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(22_669, 0).saturating_mul(m.into())) // Standard Error: 872 - .saturating_add(Weight::from_ref_time(95_525).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(95_525, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) - .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())) + .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())) } /// 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_ref_time(76_786).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(76_786, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_proof_size(96).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 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_ref_time(5_143_145).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(5_143_145, 0).saturating_mul(m.into())) // Standard Error: 64_700 - .saturating_add(Weight::from_ref_time(7_480_941).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(7_480_941, 0).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_proof_size(7809).saturating_mul(m.into())) - .saturating_add(Weight::from_proof_size(10238).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())) } /// 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_ref_time(1_775).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(1_775, 0).saturating_mul(b.into())) // Standard Error: 334 - .saturating_add(Weight::from_ref_time(17_052).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(17_052, 0).saturating_mul(m.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) - .saturating_add(Weight::from_proof_size(32).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 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_ref_time(1_807).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(1_807, 0).saturating_mul(b.into())) // Standard Error: 432 - .saturating_add(Weight::from_ref_time(27_986).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(27_986, 0).saturating_mul(m.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) - .saturating_add(Weight::from_proof_size(64).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 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_ref_time(2_355).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(2_355, 0).saturating_mul(b.into())) // Standard Error: 765 - .saturating_add(Weight::from_ref_time(20_518).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(20_518, 0).saturating_mul(m.into())) // Standard Error: 755 - .saturating_add(Weight::from_ref_time(85_670).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(85_670, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_proof_size(165).saturating_mul(m.into())) - .saturating_add(Weight::from_proof_size(180).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 165).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 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_ref_time(48_856).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(48_856, 0).saturating_mul(m.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) - .saturating_add(Weight::from_proof_size(128).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 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_ref_time(27_956).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(27_956, 0).saturating_mul(m.into())) // Standard Error: 595 - .saturating_add(Weight::from_ref_time(84_835).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(84_835, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_proof_size(260).saturating_mul(m.into())) - .saturating_add(Weight::from_proof_size(144).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 260).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 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_ref_time(2_295).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(2_295, 0).saturating_mul(b.into())) // Standard Error: 1_036 - .saturating_add(Weight::from_ref_time(22_182).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(22_182, 0).saturating_mul(m.into())) // Standard Error: 1_010 - .saturating_add(Weight::from_ref_time(100_034).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(100_034, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) - .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())) + .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())) } /// 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_ref_time(34_031).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(34_031, 0).saturating_mul(m.into())) // Standard Error: 599 - .saturating_add(Weight::from_ref_time(85_744).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(85_744, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_proof_size(325).saturating_mul(m.into())) - .saturating_add(Weight::from_proof_size(180).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 325).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 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_ref_time(2_045).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(2_045, 0).saturating_mul(b.into())) // Standard Error: 895 - .saturating_add(Weight::from_ref_time(22_669).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(22_669, 0).saturating_mul(m.into())) // Standard Error: 872 - .saturating_add(Weight::from_ref_time(95_525).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(95_525, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) - .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())) + .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())) } /// 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_ref_time(76_786).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(76_786, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) - .saturating_add(Weight::from_proof_size(96).saturating_mul(p.into())) + .saturating_add(Weight::from_parts(0, 96).saturating_mul(p.into())) } } diff --git a/pallets/commitments/Cargo.toml b/pallets/commitments/Cargo.toml index b3db3cd325..885ace2f5e 100644 --- a/pallets/commitments/Cargo.toml +++ b/pallets/commitments/Cargo.toml @@ -9,6 +9,9 @@ license = "Unlicense" publish = false repository = "https://github.com/opentensor/subtensor" +[lints] +workspace = true + [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -20,19 +23,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-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" } +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" } [dependencies.enumflags2] version = "0.7.7" [dev-dependencies] -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" } +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" } [features] default = ["std"] @@ -43,11 +46,19 @@ 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 cdf0769338..27b886e3af 100644 --- a/pallets/commitments/src/benchmarking.rs +++ b/pallets/commitments/src/benchmarking.rs @@ -4,13 +4,10 @@ use super::*; #[allow(unused)] use crate::Pallet as Commitments; -use frame_benchmarking::v1::account; use frame_benchmarking::v2::*; use frame_system::RawOrigin; -use frame_support::traits::Get; -use sp_runtime::traits::{Bounded, StaticLookup}; -use sp_std::mem::size_of; +use sp_runtime::traits::Bounded; fn assert_last_event(generic_event: ::RuntimeEvent) { frame_system::Pallet::::assert_last_event(generic_event.into()); @@ -18,8 +15,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 26716d65bf..fd9b0bbb3f 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(().into()) + Ok(()) } } } @@ -181,16 +181,12 @@ impl CanCommit for () { /************************************************************ CallType definition ************************************************************/ -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Default)] pub enum CallType { SetCommitment, + #[default] Other, } -impl Default for CallType { - fn default() -> Self { - CallType::Other - } -} use { frame_support::{ @@ -207,6 +203,16 @@ 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, @@ -219,15 +225,7 @@ 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 - return u64::max_value(); - } - - pub fn u64_to_balance( - input: u64, - ) -> Option< - <::Currency as Currency<::AccountId>>::Balance, - > { - input.try_into().ok() + u64::max_value() } } @@ -260,12 +258,11 @@ where _info: &DispatchInfoOf, _len: usize, ) -> TransactionValidity { - match call.is_sub_type() { - _ => Ok(ValidTransaction { - priority: Self::get_priority_vanilla(), - ..Default::default() - }), - } + 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. @@ -289,17 +286,12 @@ 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 4c3b4fffd2..9957336b29 100644 --- a/pallets/commitments/src/tests.rs +++ b/pallets/commitments/src/tests.rs @@ -1,30 +1,21 @@ -use super::{Event as CommitmentEvent, *}; +#![allow(non_camel_case_types)] + +use super::*; use crate as pallet_commitments; -use frame_support::{ - assert_noop, assert_ok, - dispatch::Pays, - parameter_types, - traits::{ConstU32, ConstU64, GenesisBuild, StorageMapShim}, - Hashable, -}; -use frame_system::{EnsureRoot, EventRecord, Phase}; +use frame_support::traits::ConstU64; 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 where - Block = Block, - NodeBlock = Block, - UncheckedExtrinsic = UncheckedExtrinsic + pub enum Test { - System: frame_system::{Pallet, Call, Event}, + System: frame_system, Balances: pallet_balances, Commitments: pallet_commitments } @@ -46,20 +37,19 @@ pub type Balance = u64; pub type BlockNumber = u64; impl pallet_balances::Config for Test { - type Balance = Balance; + type MaxLocks = (); + type MaxReserves = (); + type ReserveIdentifier = [u8; 8]; + type Balance = u64; type RuntimeEvent = RuntimeEvent; type DustRemoval = (); - type ExistentialDeposit = (); - type AccountStore = StorageMapShim< - pallet_balances::Account, - frame_system::Provider, - AccountId, - pallet_balances::AccountData, - >; - type MaxLocks = (); + type ExistentialDeposit = ConstU64<1>; + type AccountStore = System; type WeightInfo = (); - type MaxReserves = (); - type ReserveIdentifier = (); + type FreezeIdentifier = (); + type MaxFreezes = (); + type RuntimeHoldReason = (); + type MaxHolds = (); } impl frame_system::Config for Test { @@ -77,16 +67,15 @@ impl frame_system::Config for Test { type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; - type AccountData = (); + type AccountData = pallet_balances::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 { @@ -100,10 +89,12 @@ 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 { - frame_system::GenesisConfig::default() - .build_storage::() - .unwrap() - .into() -} +// // 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 +// } diff --git a/pallets/commitments/src/types.rs b/pallets/commitments/src/types.rs index be8bd589a5..4753046e5e 100644 --- a/pallets/commitments/src/types.rs +++ b/pallets/commitments/src/types.rs @@ -15,22 +15,20 @@ // 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}, - meta_type, Path, Type, TypeInfo, TypeParameter, + Path, Type, TypeInfo, }; use sp_runtime::{ - traits::{AppendZerosInput, AtLeast32BitUnsigned, Block, Zero}, + traits::{AppendZerosInput, AtLeast32BitUnsigned}, RuntimeDebug, }; -use sp_std::{fmt::Debug, iter::once, ops::Add, prelude::*}; +use sp_std::{fmt::Debug, iter::once, 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. @@ -90,7 +88,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 as usize]); + r[1..].copy_from_slice(&x[..l]); r } Data::BlakeTwo256(ref h) => once(130).chain(h.iter().cloned()).collect(), @@ -318,16 +316,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, @@ -354,7 +352,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 { @@ -365,20 +363,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) - .expect(&format!("Expected to find variant {}", variant_name)); + .unwrap_or_else(|| panic!("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 590da1501e..40bc5b960e 100644 --- a/pallets/registry/Cargo.toml +++ b/pallets/registry/Cargo.toml @@ -9,6 +9,9 @@ license = "Unlicense" publish = false repository = "https://github.com/opentensor/subtensor" +[lints] +workspace = true + [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -20,18 +23,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-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" } +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" } [dependencies.enumflags2] version = "0.7.7" [dev-dependencies] -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-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" } [features] default = ["std"] @@ -42,6 +45,8 @@ std = [ "frame-system/std", "scale-info/std", "sp-std/std", + "sp-runtime/std", + "enumflags2/std" ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", @@ -49,4 +54,8 @@ runtime-benchmarks = [ "frame-system/runtime-benchmarks", "sp-runtime/runtime-benchmarks", ] -try-runtime = ["frame-support/try-runtime"] +try-runtime = [ + "frame-support/try-runtime", + "frame-system/try-runtime", + "sp-runtime/try-runtime" +] diff --git a/pallets/registry/src/benchmarking.rs b/pallets/registry/src/benchmarking.rs index 3cbbdb4573..fe3866ddac 100644 --- a/pallets/registry/src/benchmarking.rs +++ b/pallets/registry/src/benchmarking.rs @@ -8,9 +8,7 @@ use frame_benchmarking::v1::account; use frame_benchmarking::v2::*; use frame_system::RawOrigin; -use frame_support::traits::Get; -use sp_runtime::traits::{Bounded, StaticLookup}; -use sp_std::mem::size_of; +use sp_runtime::traits::Bounded; fn assert_last_event(generic_event: ::RuntimeEvent) { frame_system::Pallet::::assert_last_event(generic_event.into()); @@ -18,7 +16,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 { @@ -66,7 +64,8 @@ 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 cc1fe0123c..b23dceb424 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(().into()) + Ok(()) } #[pallet::call_index(1)] diff --git a/pallets/registry/src/tests.rs b/pallets/registry/src/tests.rs index 36161f82e6..d233fe0783 100644 --- a/pallets/registry/src/tests.rs +++ b/pallets/registry/src/tests.rs @@ -1,4 +1 @@ -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 7def075294..9e23b56290 100644 --- a/pallets/registry/src/types.rs +++ b/pallets/registry/src/types.rs @@ -15,7 +15,6 @@ // 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::{ @@ -90,7 +89,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 as usize]); + r[1..].copy_from_slice(&x[..l]); r } Data::BlakeTwo256(ref h) => once(66u8).chain(h.iter().cloned()).collect(), @@ -257,7 +256,7 @@ impl Decode for IdentityFields { fn decode(input: &mut I) -> sp_std::result::Result { let field = u64::decode(input)?; Ok(Self( - >::from_bits(field as u64).map_err(|_| "invalid value")?, + >::from_bits(field).map_err(|_| "invalid value")?, )) } } @@ -332,7 +331,7 @@ pub struct IdentityInfo> { } impl> IdentityInfo { - pub(crate) fn fields(&self) -> IdentityFields { + pub fn fields(&self) -> IdentityFields { let mut res = >::empty(); if !self.display.is_none() { res.insert(IdentityField::Display); @@ -412,7 +411,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 { @@ -423,20 +422,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) - .expect(&format!("Expected to find variant {}", variant_name)); + .unwrap_or_else(|| panic!("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 536db9ed5e..a66324744a 100644 --- a/pallets/subtensor/Cargo.toml +++ b/pallets/subtensor/Cargo.toml @@ -9,6 +9,9 @@ license = "Unlicense" publish = false repository = "https://github.com/opentensor/subtensor" +[lints] +workspace = true + [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -16,15 +19,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-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" } +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" } 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-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" } +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" } 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 = [ @@ -33,30 +36,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 = "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" } +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" } 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-v0.9.39" } -pallet-utility = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } +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" } 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-v0.9.39" } +pallet-membership = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } hex-literal = "0.4.1" [dev-dependencies] -pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39", features = [ +pallet-balances = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0", features = [ "std", ] } -sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } +sp-version = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } # Substrate -sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } +sp-tracing = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } 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-v0.9.39" } +sp-core = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v1.0.0" } [features] default = ["std"] @@ -68,7 +71,41 @@ 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 f56d3a769c..362e28280a 100644 --- a/pallets/subtensor/rpc/Cargo.toml +++ b/pallets/subtensor/rpc/Cargo.toml @@ -8,6 +8,9 @@ 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", @@ -20,10 +23,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-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 } +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 } # local packages @@ -32,5 +35,12 @@ 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"] +std = [ + "sp-api/std", + "sp-runtime/std", + "subtensor-custom-rpc-runtime-api/std", + "pallet-subtensor/std", + "codec/std", + "serde/std" +] pow-faucet = [] diff --git a/pallets/subtensor/runtime-api/Cargo.toml b/pallets/subtensor/runtime-api/Cargo.toml index 6cb297a42a..4648f8e67b 100644 --- a/pallets/subtensor/runtime-api/Cargo.toml +++ b/pallets/subtensor/runtime-api/Cargo.toml @@ -8,15 +8,23 @@ 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-v0.9.39", default-features = false } -frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "polkadot-v0.9.39" } +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" } 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"] +std = [ + "sp-api/std", + "frame-support/std", + "pallet-subtensor/std", + "serde/std" +] pow-faucet = [] diff --git a/pallets/subtensor/src/benchmarks.rs b/pallets/subtensor/src/benchmarks.rs index 95ccfe4997..514e989449 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).into(); + let start_nonce: u64 = 39420842u64 + 100u64*netuid as u64; 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.try_into().unwrap(), true.into()); + Subtensor::::set_network_registration_allowed( netuid, true); 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.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 ); + Subtensor::::set_network_registration_allowed( netuid, true ); + Subtensor::::set_max_registrations_per_block( netuid, 4096 ); + Subtensor::::set_target_registrations_per_interval( netuid, 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 as u16 { + for id in 0..4096_u16 { let hotkey: T::AccountId = account("Alice", 0, seed); let coldkey: T::AccountId = account("Test", 0, seed); - seed = seed +1; + seed += 1; Subtensor::::set_burn(netuid, 1); - let amoun_to_be_staked = Subtensor::::u64_to_balance( 1000000 ); - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amoun_to_be_staked.unwrap()); + let amount_to_be_staked = 1000000u32.into(); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); 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.clone(), true); - dests.push(id.clone()); - weights.push(id.clone()); + Subtensor::::set_validator_permit_for_uid(netuid, uid, true); + dests.push(id); + weights.push(id); } }: 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.try_into().unwrap(), true.into()); + Subtensor::::set_network_registration_allowed( netuid, true); 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 amoun_to_be_staked = Subtensor::::u64_to_balance( 1000000000); - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amoun_to_be_staked.unwrap()); + let amount_to_be_staked = 1000000000u32.into(); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); 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.try_into().unwrap(), true.into() ); + Subtensor::::set_network_registration_allowed( netuid, true ); 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 amoun_to_be_staked = Subtensor::::u64_to_balance( 1000000000); - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amoun_to_be_staked.unwrap()); + let amount_to_be_staked = 1000000000u64; + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); 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.try_into().unwrap(), true.into() ); + Subtensor::::set_network_registration_allowed( netuid, true ); Subtensor::::set_max_allowed_uids( netuid, 4096 ); assert_eq!(Subtensor::::get_max_allowed_uids(netuid), 4096); @@ -150,16 +150,15 @@ benchmarks! { let hotkey: T::AccountId = account("Alice", 0, seed); Subtensor::::set_burn(netuid, 1); - let wallet_bal = Subtensor::::u64_to_balance(1000000); - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), wallet_bal.unwrap()); + let wallet_bal = 1000000u32.into(); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), wallet_bal); 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; - 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()); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), u64_staked_amt); assert_ok!( Subtensor::::add_stake(RawOrigin::Signed( coldkey.clone() ).into() , hotkey.clone(), u64_staked_amt)); @@ -186,8 +185,8 @@ benchmarks! { assert_eq!(Subtensor::::get_max_allowed_uids(netuid), 4096); Subtensor::::set_burn(netuid, 1); - let amoun_to_be_staked = Subtensor::::u64_to_balance( 1000000 ); - Subtensor::::add_balance_to_coldkey_account(&caller.clone(), amoun_to_be_staked.unwrap()); + let amount_to_be_staked = 1000000u32.into(); + Subtensor::::add_balance_to_coldkey_account(&caller.clone(), amount_to_be_staked); assert_ok!(Subtensor::::do_burned_registration(caller_origin.clone(), netuid, caller.clone())); @@ -212,8 +211,8 @@ benchmarks! { assert_eq!(Subtensor::::get_max_allowed_uids(netuid), 4096); Subtensor::::set_burn(netuid, 1); - let amoun_to_be_staked = Subtensor::::u64_to_balance( 1000000 ); - Subtensor::::add_balance_to_coldkey_account(&caller.clone(), amoun_to_be_staked.unwrap()); + let amount_to_be_staked = 1000000u32.into(); + Subtensor::::add_balance_to_coldkey_account(&caller.clone(), amount_to_be_staked); assert_ok!(Subtensor::::do_burned_registration(caller_origin.clone(), netuid, caller.clone())); Subtensor::::set_serving_rate_limit(netuid, 0); @@ -239,8 +238,8 @@ benchmarks! { let hotkey: T::AccountId = account("Alice", 0, seed); let coldkey: T::AccountId = account("Test", 0, seed); - let amoun_to_be_staked = Subtensor::::u64_to_balance( balance ); - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amoun_to_be_staked.unwrap()); + let amount_to_be_staked = balance.into(); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); }: sudo_register(RawOrigin::>::Root, netuid, hotkey, coldkey, stake, balance) */ @@ -255,8 +254,8 @@ benchmarks! { Subtensor::::init_new_network(netuid, tempo); Subtensor::::set_burn(netuid, 1); - let amoun_to_be_staked = Subtensor::::u64_to_balance( 1000000); - Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amoun_to_be_staked.unwrap()); + let amount_to_be_staked = 1000000u32.into(); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); }: burned_register(RawOrigin::Signed( coldkey.clone() ), netuid, hotkey) @@ -270,7 +269,7 @@ benchmarks! { Subtensor::::init_new_network(netuid, tempo); Subtensor::::set_burn(netuid, 1); - Subtensor::::set_network_registration_allowed( netuid.try_into().unwrap(), true.into()); + Subtensor::::set_network_registration_allowed( netuid, true); Subtensor::::set_max_allowed_uids( netuid, 4096 ); assert_eq!(Subtensor::::get_max_allowed_uids(netuid), 4096); @@ -279,8 +278,8 @@ benchmarks! { let hotkey: T::AccountId = account("Alice", 0, seed); let amount: u64 = 1; - 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()); + let amount_to_be_staked = 100_000_000_000_000u64; + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); assert_ok!(Subtensor::::do_burned_registration(RawOrigin::Signed(coldkey.clone()).into(), netuid, hotkey.clone())); }: root_register(RawOrigin::Signed(coldkey), hotkey) @@ -293,8 +292,8 @@ benchmarks! { Subtensor::::set_network_rate_limit(1); let amount: u64 = 1; - 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()); + let amount_to_be_staked = 100_000_000_000_000u64; + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); }: register_network(RawOrigin::Signed(coldkey)) benchmark_dissolve_network { @@ -305,8 +304,8 @@ benchmarks! { Subtensor::::set_network_rate_limit(0); let amount: u64 = 1; - 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()); + let amount_to_be_staked = 100_000_000_000_000u64; + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), amount_to_be_staked); assert_ok!(Subtensor::::register_network(RawOrigin::Signed(coldkey.clone()).into())); }: dissolve_network(RawOrigin::Signed(coldkey), 1) @@ -323,7 +322,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(), Subtensor::::u64_to_balance(10_000_000_000).unwrap()); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), 10_000_000_000u64); 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())); @@ -332,7 +331,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(), Subtensor::::u64_to_balance(10_000_000_000).unwrap()); + Subtensor::::add_balance_to_coldkey_account(&coldkey.clone(), 10_000_000_000u64); 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 6e9d7268e1..50c4fc740a 100644 --- a/pallets/subtensor/src/block_step.rs +++ b/pallets/subtensor/src/block_step.rs @@ -1,5 +1,4 @@ use super::*; -use frame_support::inherent::Vec; use frame_support::storage::IterableStorageDoubleMap; use frame_support::storage::IterableStorageMap; use substrate_fixed::types::I110F18; @@ -43,7 +42,7 @@ impl Pallet { if tempo == 0 { return 1000; } - return tempo as u64 - (block_number + netuid as u64 + 1) % (tempo as u64 + 1); + 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 @@ -69,9 +68,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 { - return to_sink_via_tempo; + to_sink_via_tempo } else { - return to_sink_via_blocks_until_epoch; + to_sink_via_blocks_until_epoch } } @@ -96,7 +95,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, ); @@ -140,11 +139,11 @@ impl Pallet { Self::add_balance_to_coldkey_account( &Self::get_subnet_owner(netuid), - Self::u64_to_balance(cut.to_num::()).unwrap(), + cut.to_num::(), ); // 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::()); @@ -215,7 +214,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. @@ -242,7 +241,7 @@ impl Pallet { ); Self::increase_stake_on_coldkey_hotkey_account( &owning_coldkey_i, - &hotkey, + hotkey, stake_proportion, ); log::debug!( @@ -257,14 +256,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. @@ -320,7 +319,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; - return proportional_emission.to_num::(); + proportional_emission.to_num::() } // Returns the delegated stake 'take' assigned to this key. (If exists, otherwise 0) @@ -330,9 +329,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); - return take_emission.to_num::(); + take_emission.to_num::() } else { - return 0; + 0 } } @@ -347,7 +346,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, @@ -373,13 +372,14 @@ 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::adjust_difficulty( + Self::upgraded_difficulty( netuid, current_difficulty, registrations_this_interval, @@ -392,7 +392,7 @@ impl Pallet { // burn_cost ++ Self::set_burn( netuid, - Self::adjust_burn( + Self::upgraded_burn( netuid, current_burn, registrations_this_interval, @@ -405,7 +405,7 @@ impl Pallet { // burn_cost ++ Self::set_burn( netuid, - Self::adjust_burn( + Self::upgraded_burn( netuid, current_burn, registrations_this_interval, @@ -415,7 +415,7 @@ impl Pallet { // pow_difficulty ++ Self::set_difficulty( netuid, - Self::adjust_difficulty( + Self::upgraded_difficulty( netuid, current_difficulty, registrations_this_interval, @@ -425,13 +425,14 @@ 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::adjust_burn( + Self::upgraded_burn( netuid, current_burn, registrations_this_interval, @@ -444,7 +445,7 @@ impl Pallet { // pow_difficulty -- Self::set_difficulty( netuid, - Self::adjust_difficulty( + Self::upgraded_difficulty( netuid, current_difficulty, registrations_this_interval, @@ -457,7 +458,7 @@ impl Pallet { // burn_cost -- Self::set_burn( netuid, - Self::adjust_burn( + Self::upgraded_burn( netuid, current_burn, registrations_this_interval, @@ -467,7 +468,7 @@ impl Pallet { // pow_difficulty -- Self::set_difficulty( netuid, - Self::adjust_difficulty( + Self::upgraded_difficulty( netuid, current_difficulty, registrations_this_interval, @@ -491,10 +492,10 @@ impl Pallet { } } - // Performs the difficulty adjustment by multiplying the current difficulty by the ratio ( reg_actual + reg_target / reg_target * reg_target ) + // Calculates the upgraded difficulty 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 adjust_difficulty( + pub fn upgraded_difficulty( netuid: u16, current_difficulty: u64, registrations_this_interval: u16, @@ -510,7 +511,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)) { - return Self::get_max_difficulty(netuid); + Self::get_max_difficulty(netuid) } else if next_value <= I110F18::from_num(Self::get_min_difficulty(netuid)) { return Self::get_min_difficulty(netuid); } else { @@ -518,10 +519,10 @@ impl Pallet { } } - // Performs the burn adjustment by multiplying the current difficulty by the ratio ( reg_actual + reg_target / reg_target * reg_target ) + // Calculates the upgraded burn by multiplying the current burn 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 adjust_burn( + pub fn upgraded_burn( netuid: u16, current_burn: u64, registrations_this_interval: u16, @@ -537,7 +538,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)) { - return Self::get_max_burn_as_u64(netuid); + 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 71af0a8789..2d5f38bf37 100644 --- a/pallets/subtensor/src/delegate_info.rs +++ b/pallets/subtensor/src/delegate_info.rs @@ -4,7 +4,6 @@ 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; @@ -42,7 +41,7 @@ impl Pallet { for netuid in registrations.iter() { let _uid = Self::get_uid_for_net_and_hotkey(*netuid, &delegate.clone()); - if !_uid.is_ok() { + if _uid.is_err() { continue; // this should never happen } else { let uid = _uid.expect("Delegate's UID should be ok"); @@ -95,19 +94,17 @@ impl Pallet { } let delegate_info = Self::get_delegate_by_existing_account(delegate.clone()); - return Some(delegate_info); + Some(delegate_info) } pub fn get_delegates() -> Vec> { let mut delegates = Vec::>::new(); - for delegate in - as IterableStorageMap>::iter_keys().into_iter() - { + for delegate in as IterableStorageMap>::iter_keys() { let delegate_info = Self::get_delegate_by_existing_account(delegate.clone()); delegates.push(delegate_info); } - return delegates; + delegates } pub fn get_delegated(delegatee_account_vec: Vec) -> Vec<(DelegateInfo, Compact)> { @@ -119,9 +116,7 @@ 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().into_iter() - { + for delegate in as IterableStorageMap>::iter_keys() { let staked_to_this_delegatee = Self::get_stake_for_coldkey_and_hotkey(&delegatee.clone(), &delegate.clone()); if staked_to_this_delegatee == 0 { @@ -132,6 +127,6 @@ impl Pallet { delegates.push((delegate_info, staked_to_this_delegatee.into())); } - return delegates; + delegates } } diff --git a/pallets/subtensor/src/epoch.rs b/pallets/subtensor/src/epoch.rs index 16398395ce..6be44cf99d 100644 --- a/pallets/subtensor/src/epoch.rs +++ b/pallets/subtensor/src/epoch.rs @@ -1,6 +1,5 @@ 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}; @@ -703,8 +702,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 in 0..n { - stake_64[neuron_uid] = I64F64::from_num(Self::get_stake_for_uid_and_subnetwork( + 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( netuid, neuron_uid as u16, )); @@ -717,10 +716,9 @@ 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 in 0..n { + for (neuron_uid, block) in block_at_registration.iter_mut().enumerate().take(n) { if Keys::::contains_key(netuid, neuron_uid as u16) { - block_at_registration[neuron_uid] = - Self::get_neuron_block_at_registration(netuid, neuron_uid as u16); + *block = 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 e9b55237ff..8beba51c1f 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -1,5 +1,6 @@ #![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: // @@ -11,7 +12,7 @@ use frame_support::{ dispatch, dispatch::{DispatchError, DispatchInfo, DispatchResult, PostDispatchInfo}, ensure, - traits::{tokens::WithdrawReasons, Currency, ExistenceRequirement, IsSubType}, + traits::{tokens::fungible, IsSubType}, }; use codec::{Decode, Encode}; @@ -59,10 +60,10 @@ pub mod pallet { use frame_support::{ dispatch::GetDispatchInfo, - inherent::Vec, pallet_prelude::{DispatchResult, StorageMap, ValueQuery, *}, sp_std::vec, - traits::{Currency, UnfilteredDispatchable}, + sp_std::vec::Vec, + traits::{tokens::fungible, UnfilteredDispatchable}, }; use frame_system::pallet_prelude::*; use sp_runtime::traits::TrailingZeroInput; @@ -74,10 +75,9 @@ 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(1); + const STORAGE_VERSION: StorageVersion = StorageVersion::new(6); #[pallet::pallet] - #[pallet::generate_store(pub(super) trait Store)] #[pallet::without_storage_info] #[pallet::storage_version(STORAGE_VERSION)] pub struct Pallet(_); @@ -97,7 +97,8 @@ pub mod pallet { type CouncilOrigin: EnsureOrigin; // --- Currency type that will be used to place deposits on neurons - type Currency: Currency + Send + Sync; + type Currency: fungible::Balanced + + fungible::Mutate; type SenateMembers: crate::MemberManagement; @@ -194,7 +195,7 @@ pub mod pallet { T::InitialSenateRequiredStakePercentage::get() } - #[pallet::storage] // --- ITEM ( tx_rate_limit ) + #[pallet::storage] pub(super) type SenateRequiredStakePercentage = StorageValue<_, u64, ValueQuery, DefaultSenateRequiredStakePercentage>; @@ -436,7 +437,7 @@ pub mod pallet { T::InitialNetworkRateLimit::get() } - #[pallet::storage] // --- ITEM( total_number_of_existing_networks ) + #[pallet::storage] // --- ITEM( maximum_number_of_networks ) pub type SubnetLimit = StorageValue<_, u16, ValueQuery, DefaultSubnetLimit>; #[pallet::storage] // --- ITEM( total_number_of_existing_networks ) pub type TotalNetworks = StorageValue<_, u16, ValueQuery>; @@ -508,7 +509,7 @@ pub mod pallet { 0 } #[pallet::type_value] - pub fn DefaultLastMechansimStepBlock() -> u64 { + pub fn DefaultLastMechanismStepBlock() -> u64 { 0 } #[pallet::type_value] @@ -532,16 +533,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, DefaultLastMechansimStepBlock>; - #[pallet::storage] + StorageMap<_, Identity, u16, u64, ValueQuery, DefaultLastMechanismStepBlock>; + #[pallet::storage] // --- MAP ( netuid ) --> subnet_owner pub type SubnetOwner = StorageMap<_, Identity, u16, T::AccountId, ValueQuery, DefaultSubnetOwner>; - #[pallet::storage] + #[pallet::storage] // --- MAP ( netuid ) --> subnet_locked pub type SubnetLocked = StorageMap<_, Identity, u16, u64, ValueQuery, DefaultSubnetLocked>; @@ -561,7 +562,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 1. + pub placeholder2: u8, // --- Axon proto placeholder 2. } // --- Struct for Prometheus. @@ -863,7 +864,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 transfered from the a coldkey account onto the hotkey staking account. + StakeAdded(T::AccountId, u64), // --- Event created when stake has been transferred 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. @@ -873,12 +874,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 registeration per interval is set for a subnet. + RegistrationPerIntervalSet(u16, u16), // --- Event created when registration 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 minimun allowed weight is set for a subnet. + MinAllowedWeightSet(u16, u16), // --- Event created when minimum 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. @@ -891,8 +892,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 difficutly on a network. - MaxDifficultySet(u16, u64), // --- Event created when setting max difficutly on 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. 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. @@ -906,7 +907,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 facuet it called on the test net. + Faucet(T::AccountId, u64), // Event created when the faucet 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. @@ -945,14 +946,15 @@ 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 vaule is invalid for MaxAllowedUids. + MaxAllowedUIdsNotAllowed, // --- Thrown if the value 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 recieved emission rates does not match number of networks. + EmissionValuesDoesNotMatchNetworks, // --- Thrown when number or received 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. @@ -977,10 +979,11 @@ 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, } @@ -990,13 +993,11 @@ 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 { @@ -1007,7 +1008,7 @@ pub mod pallet { } #[pallet::genesis_build] - impl GenesisBuild for GenesisConfig { + impl BuildGenesisConfig for GenesisConfig { fn build(&self) { // Set initial total issuance from balances TotalIssuance::::put(self.balances_issuance); @@ -1171,7 +1172,7 @@ pub mod pallet { // ---- Called on the initialization of this pallet. (the order of on_finalize calls is determined in the runtime) // // # Args: - // * 'n': (T::BlockNumber): + // * 'n': (BlockNumberFor): // - The number of the block we are initializing. fn on_initialize(_block_number: BlockNumberFor) -> Weight { let block_step_result = Self::block_step(); @@ -1179,16 +1180,16 @@ pub mod pallet { Ok(_) => { // --- If the block step was successful, return the weight. log::info!("Successfully ran block step."); - 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)); + 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)) } Err(e) => { // --- If the block step was unsuccessful, return the weight anyway. log::error!("Error while stepping block: {:?}", e); - 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)); + 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)) } } } @@ -1196,7 +1197,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_ref_time(0); + let mut weight = frame_support::weights::Weight::from_parts(0, 0); // Hex encoded foundation coldkey let hex = hex_literal::hex![ @@ -1213,7 +1214,7 @@ pub mod pallet { .saturating_add(migration::migrate_delete_subnet_21::()) .saturating_add(migration::migration5_total_issuance::(false)); - return weight; + weight } } @@ -1281,7 +1282,7 @@ pub mod pallet { // * 'MaxWeightExceeded': // - Attempting to set weights with max value exceeding limit. #[pallet::call_index(0)] - #[pallet::weight((Weight::from_ref_time(10_151_000_000) + #[pallet::weight((Weight::from_parts(10_151_000_000, 0) .saturating_add(T::DbWeight::get().reads(4104)) .saturating_add(T::DbWeight::get().writes(2)), DispatchClass::Normal, Pays::No))] pub fn set_weights( @@ -1359,7 +1360,7 @@ pub mod pallet { // // #[pallet::call_index(2)] - #[pallet::weight((Weight::from_ref_time(65_000_000) + #[pallet::weight((Weight::from_parts(65_000_000, 0) .saturating_add(T::DbWeight::get().reads(8)) .saturating_add(T::DbWeight::get().writes(6)), DispatchClass::Normal, Pays::No))] pub fn add_stake( @@ -1403,8 +1404,8 @@ pub mod pallet { // // #[pallet::call_index(3)] - #[pallet::weight((Weight::from_ref_time(63_000_000) - .saturating_add(Weight::from_proof_size(43991)) + #[pallet::weight((Weight::from_parts(63_000_000, 0) + .saturating_add(Weight::from_parts(0, 43991)) .saturating_add(T::DbWeight::get().reads(14)) .saturating_add(T::DbWeight::get().writes(9)), DispatchClass::Normal, Pays::No))] pub fn remove_stake( @@ -1467,7 +1468,7 @@ pub mod pallet { // - Attempting to set prometheus information withing the rate limit min. // #[pallet::call_index(4)] - #[pallet::weight((Weight::from_ref_time(19_000_000) + #[pallet::weight((Weight::from_parts(19_000_000, 0) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)), DispatchClass::Normal, Pays::No))] pub fn serve_axon( @@ -1495,7 +1496,7 @@ pub mod pallet { } #[pallet::call_index(5)] - #[pallet::weight((Weight::from_ref_time(17_000_000) + #[pallet::weight((Weight::from_parts(17_000_000, 0) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)), DispatchClass::Normal, Pays::No))] pub fn serve_prometheus( @@ -1557,7 +1558,7 @@ pub mod pallet { // - The seal is incorrect. // #[pallet::call_index(6)] - #[pallet::weight((Weight::from_ref_time(91_000_000) + #[pallet::weight((Weight::from_parts(91_000_000, 0) .saturating_add(T::DbWeight::get().reads(27)) .saturating_add(T::DbWeight::get().writes(22)), DispatchClass::Normal, Pays::No))] pub fn register( @@ -1573,7 +1574,7 @@ pub mod pallet { } #[pallet::call_index(62)] - #[pallet::weight((Weight::from_ref_time(120_000_000) + #[pallet::weight((Weight::from_parts(120_000_000, 0) .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 { @@ -1581,7 +1582,7 @@ pub mod pallet { } #[pallet::call_index(7)] - #[pallet::weight((Weight::from_ref_time(89_000_000) + #[pallet::weight((Weight::from_parts(89_000_000, 0) .saturating_add(T::DbWeight::get().reads(27)) .saturating_add(T::DbWeight::get().writes(22)), DispatchClass::Normal, Pays::No))] pub fn burned_register( @@ -1626,7 +1627,7 @@ pub mod pallet { /// ## Complexity /// - O(1). #[pallet::call_index(51)] - #[pallet::weight((Weight::from_ref_time(0), DispatchClass::Operational, Pays::No))] + #[pallet::weight((Weight::from_parts(0, 0), DispatchClass::Operational, Pays::No))] pub fn sudo( origin: OriginFor, call: Box, @@ -1667,8 +1668,8 @@ pub mod pallet { } #[pallet::call_index(55)] - #[pallet::weight((Weight::from_ref_time(0) - .saturating_add(Weight::from_proof_size(0)) + #[pallet::weight((Weight::from_parts(0, 0) + .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().reads(0)) .saturating_add(T::DbWeight::get().writes(0)), DispatchClass::Operational))] pub fn vote( @@ -1682,7 +1683,7 @@ pub mod pallet { } #[pallet::call_index(59)] - #[pallet::weight((Weight::from_ref_time(85_000_000) + #[pallet::weight((Weight::from_parts(85_000_000, 0) .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 { @@ -1690,7 +1691,7 @@ pub mod pallet { } #[pallet::call_index(60)] - #[pallet::weight((Weight::from_ref_time(91_000_000) + #[pallet::weight((Weight::from_parts(91_000_000, 0) .saturating_add(T::DbWeight::get().reads(27)) .saturating_add(T::DbWeight::get().writes(22)), DispatchClass::Normal, Pays::No))] pub fn faucet( @@ -1707,7 +1708,7 @@ pub mod pallet { } #[pallet::call_index(61)] - #[pallet::weight((Weight::from_ref_time(70_000_000) + #[pallet::weight((Weight::from_parts(70_000_000, 0) .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 { @@ -1719,25 +1720,21 @@ 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 as u16); + current_block_number - Self::get_last_update_for_uid(netuid, uid); return default_priority + u32::max_value() as u64; } - return 0; + 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. - if Self::get_total_stake_for_hotkey(&hotkey) >= Self::get_weights_min_stake() { - return true; - } else { - return false; - } + Self::get_total_stake_for_hotkey(hotkey) >= Self::get_weights_min_stake() } pub fn checked_allowed_register(netuid: u16) -> bool { @@ -1768,7 +1765,7 @@ pub mod pallet { /************************************************************ CallType definition ************************************************************/ -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Default)] pub enum CallType { SetWeights, AddStake, @@ -1777,17 +1774,23 @@ pub enum CallType { Register, Serve, RegisterNetwork, + #[default] Other, } -impl Default for CallType { - fn default() -> Self { - CallType::Other - } -} #[derive(Encode, Decode, Clone, Eq, PartialEq, TypeInfo)] pub struct SubtensorSignedExtension(pub PhantomData); +impl Default for SubtensorSignedExtension +where + T::RuntimeCall: Dispatchable, + ::RuntimeCall: IsSubType>, +{ + fn default() -> Self { + Self::new() + } +} + impl SubtensorSignedExtension where T::RuntimeCall: Dispatchable, @@ -1800,24 +1803,16 @@ 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 - return u64::max_value(); + u64::max_value() } pub fn get_priority_set_weights(who: &T::AccountId, netuid: u16) -> u64 { - return Pallet::::get_priority_set_weights(who, netuid); + 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 { @@ -1854,12 +1849,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 { - return Err(InvalidTransaction::Call.into()); + Err(InvalidTransaction::Call.into()) } } Some(Call::add_stake { .. }) => Ok(ValidTransaction { @@ -1874,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(); @@ -1965,7 +1960,12 @@ where } } -use frame_support::{inherent::Vec, sp_std::vec}; +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; /// 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 66e0d91d56..2b69f38cca 100644 --- a/pallets/subtensor/src/math.rs +++ b/pallets/subtensor/src/math.rs @@ -1,9 +1,12 @@ -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) @@ -51,41 +54,37 @@ 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(|e| fixed_to_u64(e)).collect() + vec.into_iter().map(fixed_to_u64).collect() } #[allow(dead_code)] pub fn vec_fixed64_to_fixed32(vec: Vec) -> Vec { - vec.into_iter().map(|e| fixed64_to_fixed32(e)).collect() + vec.into_iter().map(fixed64_to_fixed32).collect() } #[allow(dead_code)] pub fn vec_fixed32_to_fixed64(vec: Vec) -> Vec { - vec.into_iter().map(|e| fixed32_to_fixed64(e)).collect() + vec.into_iter().map(fixed32_to_fixed64).collect() } #[allow(dead_code)] pub fn vec_fixed64_to_u64(vec: Vec) -> Vec { - vec.into_iter().map(|e| fixed64_to_u64(e)).collect() + vec.into_iter().map(fixed64_to_u64).collect() } #[allow(dead_code)] pub fn vec_u16_proportions_to_fixed(vec: Vec) -> Vec { - vec.into_iter() - .map(|e| u16_proportion_to_fixed(e)) - .collect() + vec.into_iter().map(u16_proportion_to_fixed).collect() } #[allow(dead_code)] pub fn vec_fixed_proportions_to_u16(vec: Vec) -> Vec { - vec.into_iter() - .map(|e| fixed_proportion_to_u16(e)) - .collect() + vec.into_iter().map(fixed_proportion_to_u16).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: &Vec) -> Vec { +pub fn vec_max_upscale_to_u16(vec: &[I32F32]) -> 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(); @@ -120,30 +119,26 @@ pub fn vec_max_upscale_to_u16(vec: &Vec) -> 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: &Vec) -> Vec { +pub fn vec_u16_max_upscale_to_u16(vec: &[u16]) -> 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: &Vec, max_limit: u16) -> bool { +pub fn check_vec_max_limited(vec: &[u16], 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) => { - return *val <= max_limit_fixed; - } - None => { - return true; - } + Some(val) => *val <= max_limit_fixed, + None => true, } } #[allow(dead_code)] -pub fn sum(x: &Vec) -> I32F32 { +pub fn sum(x: &[I32F32]) -> I32F32 { x.iter().sum() } @@ -151,11 +146,11 @@ pub fn sum(x: &Vec) -> 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: &Vec) -> Option +pub fn checked_sum(x: &[T]) -> Option where T: Copy + Default + CheckedAdd, { - if x.len() == 0 { + if x.is_empty() { return Some(T::default()); } @@ -171,8 +166,8 @@ where // Return true when vector sum is zero. #[allow(dead_code)] -pub fn is_zero(vector: &Vec) -> bool { - let vector_sum: I32F32 = sum(&vector); +pub fn is_zero(vector: &[I32F32]) -> bool { + let vector_sum: I32F32 = sum(vector); vector_sum == I32F32::from_num(0) } @@ -218,7 +213,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: &Vec, k: usize) -> Vec { +pub fn is_topk(vector: &[I32F32], k: usize) -> Vec { let n: usize = vector.len(); let mut result: Vec = vec![true; n]; if n < k { @@ -234,53 +229,56 @@ pub fn is_topk(vector: &Vec, k: usize) -> Vec { // Returns a normalized (sum to 1 except 0) copy of the input vector. #[allow(dead_code)] -pub fn normalize(x: &Vec) -> Vec { +pub fn normalize(x: &[I32F32]) -> Vec { let x_sum: I32F32 = sum(x); - if x_sum != I32F32::from_num(0.0 as f32) { + if x_sum != I32F32::from_num(0.0_f32) { return x.iter().map(|xi| xi / x_sum).collect(); } else { - return x.clone(); + x.to_vec() } } // Normalizes (sum to 1 except 0) the input vector directly in-place. #[allow(dead_code)] -pub fn inplace_normalize(x: &mut Vec) { +pub fn inplace_normalize(x: &mut [I32F32]) { let x_sum: I32F32 = x.iter().sum(); - if x_sum == I32F32::from_num(0.0 as f32) { + if x_sum == I32F32::from_num(0.0_f32) { return; } + #[allow(clippy::needless_range_loop)] for i in 0..x.len() { - x[i] = x[i] / x_sum; + 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 Vec, x_sum: I32F32) { - if x_sum == I32F32::from_num(0.0 as f32) { +pub fn inplace_normalize_using_sum(x: &mut [I32F32], x_sum: I32F32) { + if x_sum == I32F32::from_num(0.0_f32) { return; } + #[allow(clippy::needless_range_loop)] for i in 0..x.len() { - x[i] = x[i] / x_sum; + 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 Vec) { +pub fn inplace_normalize_64(x: &mut [I64F64]) { 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[i] / x_sum; + 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: &Vec, y: &Vec) -> Vec { +pub fn vecdiv(x: &[I32F32], y: &[I32F32]) -> Vec { assert_eq!(x.len(), y.len()); let n = x.len(); let mut result: Vec = vec![I32F32::from_num(0); n]; @@ -294,10 +292,11 @@ pub fn vecdiv(x: &Vec, y: &Vec) -> 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>) { +pub fn inplace_row_normalize(x: &mut [Vec]) { + #[allow(clippy::needless_range_loop)] for i in 0..x.len() { let row_sum: I32F32 = x[i].iter().sum(); - if row_sum > I32F32::from_num(0.0 as f32) { + if row_sum > I32F32::from_num(0.0_f32) { x[i].iter_mut() .for_each(|x_ij: &mut I32F32| *x_ij /= row_sum); } @@ -306,7 +305,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>) { +pub fn inplace_row_normalize_sparse(sparse_matrix: &mut [Vec<(u16, I32F32)>]) { 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) { @@ -319,11 +318,11 @@ pub fn inplace_row_normalize_sparse(sparse_matrix: &mut Vec>) // Sum across each row (dim=0) of a matrix. #[allow(dead_code)] -pub fn row_sum(x: &Vec>) -> Vec { - if x.len() == 0 { +pub fn row_sum(x: &[Vec]) -> Vec { + if x.is_empty() { return vec![]; } - if x[0].len() == 0 { + if x[0].is_empty() { return vec![]; } let rows = x.len(); @@ -338,7 +337,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>) -> Vec { +pub fn row_sum_sparse(sparse_matrix: &[Vec<(u16, I32F32)>]) -> 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() { @@ -351,17 +350,19 @@ pub fn row_sum_sparse(sparse_matrix: &Vec>) -> Vec { // Sum across each column (dim=1) of a matrix. #[allow(dead_code)] -pub fn col_sum(x: &Vec>) -> Vec { - if x.len() == 0 { +pub fn col_sum(x: &[Vec]) -> Vec { + if x.is_empty() { return vec![]; } - if x[0].len() == 0 { + if x[0].is_empty() { 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]; } @@ -371,7 +372,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>, columns: u16) -> Vec { +pub fn col_sum_sparse(sparse_matrix: &[Vec<(u16, I32F32)>], 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() { @@ -383,7 +384,7 @@ pub fn col_sum_sparse(sparse_matrix: &Vec>, columns: u16) -> // 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>, columns: u16) { +pub fn inplace_col_normalize_sparse(sparse_matrix: &mut [Vec<(u16, I32F32)>], 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() { @@ -392,7 +393,7 @@ pub fn inplace_col_normalize_sparse(sparse_matrix: &mut Vec>, } 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 as f32) { + if col_sum[*j as usize] == I32F32::from_num(0.0_f32) { continue; } *value /= col_sum[*j as usize]; @@ -402,25 +403,29 @@ pub fn inplace_col_normalize_sparse(sparse_matrix: &mut Vec>, // 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.len() == 0 { +pub fn inplace_col_normalize(x: &mut [Vec]) { + if x.is_empty() { return; } - if x[0].len() == 0 { + if x[0].is_empty() { 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 as f32) { + if col_sum[j] == I32F32::from_num(0.0_f32) { continue; } + #[allow(clippy::needless_range_loop)] for i in 0..x.len() { x[i][j] /= col_sum[j]; } @@ -429,7 +434,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>, columns: u16) { +pub fn inplace_col_max_upscale_sparse(sparse_matrix: &mut [Vec<(u16, I32F32)>], 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() { @@ -440,7 +445,7 @@ pub fn inplace_col_max_upscale_sparse(sparse_matrix: &mut Vec } 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 as f32) { + if col_max[*j as usize] == I32F32::from_num(0.0_f32) { continue; } *value /= col_max[*j as usize]; @@ -450,15 +455,17 @@ pub fn inplace_col_max_upscale_sparse(sparse_matrix: &mut Vec // 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.len() == 0 { +pub fn inplace_col_max_upscale(x: &mut [Vec]) { + if x.is_empty() { return; } - if x[0].len() == 0 { + if x[0].is_empty() { 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 { @@ -467,10 +474,14 @@ 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 as f32) { + if col_max[j] == I32F32::from_num(0.0_f32) { continue; } + + #[allow(clippy::needless_range_loop)] for i in 0..x.len() { x[i][j] /= col_max[j]; } @@ -479,8 +490,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: &Vec, vector: &mut Vec) { - if mask.len() == 0 { +pub fn inplace_mask_vector(mask: &[bool], vector: &mut [I32F32]) { + if mask.is_empty() { return; } assert_eq!(mask.len(), vector.len()); @@ -494,11 +505,11 @@ pub fn inplace_mask_vector(mask: &Vec, vector: &mut Vec) { // 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.len() == 0 { +pub fn inplace_mask_matrix(mask: &[Vec], matrix: &mut [Vec]) { + if mask.is_empty() { return; } - if mask[0].len() == 0 { + if mask[0].is_empty() { return; } assert_eq!(mask.len(), matrix.len()); @@ -514,7 +525,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: &Vec, matrix: &mut Vec>) { +pub fn inplace_mask_rows(mask: &[bool], matrix: &mut [Vec]) { let rows = matrix.len(); if rows == 0 { return; @@ -531,15 +542,16 @@ pub fn inplace_mask_rows(mask: &Vec, 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.len() == 0 { +pub fn inplace_mask_diag(matrix: &mut [Vec]) { + if matrix.is_empty() { return; } - if matrix[0].len() == 0 { + if matrix[0].is_empty() { 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; } @@ -548,8 +560,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: &Vec, - sparse_matrix: &Vec>, + mask: &[bool], + sparse_matrix: &[Vec<(u16, I32F32)>], ) -> Vec> { let n: usize = sparse_matrix.len(); assert_eq!(n, mask.len()); @@ -564,7 +576,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>) -> Vec> { +pub fn mask_diag_sparse(sparse_matrix: &[Vec<(u16, I32F32)>]) -> Vec> { let n: usize = sparse_matrix.len(); let mut result: Vec> = vec![vec![]; n]; for (i, sparse_row) in sparse_matrix.iter().enumerate() { @@ -580,9 +592,9 @@ pub fn mask_diag_sparse(sparse_matrix: &Vec>) -> Vec>, - first_vector: &Vec, - second_vector: &Vec, + sparse_matrix: &[Vec<(u16, I32F32)>], + first_vector: &[u64], + second_vector: &[u64], mask_fn: &dyn Fn(u64, u64) -> bool, ) -> Vec> { let n: usize = sparse_matrix.len(); @@ -599,11 +611,11 @@ pub fn vec_mask_sparse_matrix( // Row-wise matrix-vector hadamard product. #[allow(dead_code)] -pub fn row_hadamard(matrix: &Vec>, vector: &Vec) -> Vec> { - if matrix.len() == 0 { +pub fn row_hadamard(matrix: &[Vec], vector: &[I32F32]) -> Vec> { + if matrix.is_empty() { return vec![vec![]]; } - if matrix[0].len() == 0 { + if matrix[0].is_empty() { return vec![vec![]]; } let mut result: Vec> = @@ -619,10 +631,10 @@ pub fn row_hadamard(matrix: &Vec>, vector: &Vec) -> Vec>, - vector: &Vec, + sparse_matrix: &[Vec<(u16, I32F32)>], + vector: &[I32F32], ) -> Vec> { - let mut result: Vec> = sparse_matrix.clone(); + let mut result: Vec> = sparse_matrix.to_vec(); for (i, sparse_row) in result.iter_mut().enumerate() { for (_j, value) in sparse_row.iter_mut() { *value *= vector[i]; @@ -633,16 +645,18 @@ 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: &Vec) -> Vec { - if matrix.len() == 0 { +pub fn matmul(matrix: &[Vec], vector: &[I32F32]) -> Vec { + if matrix.is_empty() { return vec![]; } - if matrix[0].len() == 0 { + if matrix[0].is_empty() { 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 @@ -655,16 +669,18 @@ pub fn matmul(matrix: &Vec>, vector: &Vec) -> 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: &Vec) -> Vec { - if matrix.len() == 0 { +pub fn matmul_64(matrix: &[Vec], vector: &[I64F64]) -> Vec { + if matrix.is_empty() { return vec![]; } - if matrix[0].len() == 0 { + if matrix[0].is_empty() { 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 @@ -677,16 +693,18 @@ pub fn matmul_64(matrix: &Vec>, vector: &Vec) -> 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: &Vec) -> Vec { - if matrix.len() == 0 { +pub fn matmul_transpose(matrix: &[Vec], vector: &[I32F32]) -> Vec { + if matrix.is_empty() { return vec![]; } - if matrix[0].len() == 0 { + if matrix[0].is_empty() { 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 @@ -700,8 +718,8 @@ pub fn matmul_transpose(matrix: &Vec>, vector: &Vec) -> Vec< // Row-wise sparse_matrix-vector product, column-wise sum: result_j = SUM(i) vector_i * matrix_ij. #[allow(dead_code)] pub fn matmul_sparse( - sparse_matrix: &Vec>, - vector: &Vec, + sparse_matrix: &[Vec<(u16, I32F32)>], + vector: &[I32F32], columns: u16, ) -> Vec { let mut result: Vec = vec![I32F32::from_num(0.0); columns as usize]; @@ -719,8 +737,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>, - vector: &Vec, + sparse_matrix: &[Vec<(u16, I32F32)>], + vector: &[I32F32], ) -> Vec { let mut result: Vec = vec![I32F32::from_num(0.0); sparse_matrix.len()]; for (i, sparse_row) in sparse_matrix.iter().enumerate() { @@ -736,7 +754,8 @@ 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: &Vec) { +pub fn inplace_col_clip(x: &mut [Vec], col_threshold: &[I32F32]) { + #[allow(clippy::needless_range_loop)] for i in 0..x.len() { for j in 0..x[i].len() { if x[i][j] > col_threshold[j] { @@ -749,8 +768,8 @@ pub fn inplace_col_clip(x: &mut Vec>, col_threshold: &Vec) { // Return sparse matrix with values above column threshold set to threshold value. #[allow(dead_code)] pub fn col_clip_sparse( - sparse_matrix: &Vec>, - col_threshold: &Vec, + sparse_matrix: &[Vec<(u16, I32F32)>], + col_threshold: &[I32F32], ) -> Vec> { let mut result: Vec> = vec![vec![]; sparse_matrix.len()]; for (i, sparse_row) in sparse_matrix.iter().enumerate() { @@ -770,13 +789,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.len() == 0 { + if x.is_empty() { return vec![vec![]]; } let mut result: Vec> = vec![vec![lower; x[0].len()]; x.len()]; @@ -792,7 +811,8 @@ 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) { +pub fn inplace_clip(x: &mut [Vec], threshold: I32F32, upper: I32F32, lower: I32F32) { + #[allow(clippy::needless_range_loop)] for i in 0..x.len() { for j in 0..x[i].len() { if x[i][j] >= threshold { @@ -808,7 +828,7 @@ pub fn inplace_clip(x: &mut Vec>, threshold: I32F32, upper: I32F32, // Does not add missing elements (0 value assumed) when lower!=0. #[allow(dead_code)] pub fn clip_sparse( - sparse_matrix: &Vec>, + sparse_matrix: &[Vec<(u16, I32F32)>], threshold: I32F32, upper: I32F32, lower: I32F32, @@ -831,13 +851,13 @@ pub fn clip_sparse( // Assumes relatively random score order for efficiency, typically less than O(nlogn) complexity. // // # Args: -// * 'stake': ( &Vec ): +// * 'stake': ( &[I32F32] ): // - stake, assumed to be normalized. // -// * 'score': ( &Vec ): +// * 'score': ( &[I32F32] ): // - score for which median is sought, 0 <= score <= 1 // -// * 'partition_idx' ( &Vec ): +// * 'partition_idx' ( &[usize] ): // - indices as input partition // // * 'minority' ( I32F32 ): @@ -855,9 +875,9 @@ pub fn clip_sparse( // #[allow(dead_code)] pub fn weighted_median( - stake: &Vec, - score: &Vec, - partition_idx: &Vec, + stake: &[I32F32], + score: &[I32F32], + partition_idx: &[usize], minority: I32F32, partition_lo: I32F32, partition_hi: I32F32, @@ -890,7 +910,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.len() > 0) { + } else if (minority < partition_lo + lo_stake) && (!lower.is_empty()) { return weighted_median( stake, score, @@ -899,7 +919,7 @@ pub fn weighted_median( partition_lo, partition_lo + lo_stake, ); - } else if (partition_hi - hi_stake <= minority) && (upper.len() > 0) { + } else if (partition_hi - hi_stake <= minority) && (!upper.is_empty()) { return weighted_median( stake, score, @@ -915,14 +935,16 @@ 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: &Vec, - score: &Vec>, + stake: &[I32F32], + 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![]; @@ -933,14 +955,14 @@ pub fn weighted_median_col( use_score.push(score[r][c]); } } - if use_stake.len() > 0 { + if !use_stake.is_empty() { 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(), + (0..use_stake.len()).collect::>().as_slice(), minority, zero, stake_sum, @@ -953,8 +975,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: &Vec, - score: &Vec>, + stake: &[I32F32], + score: &[Vec<(u16, I32F32)>], columns: u16, majority: I32F32, ) -> Vec { @@ -992,12 +1014,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.len() == 0 { + if mat1.is_empty() { return vec![vec![]; 1]; } - if mat1[0].len() == 0 { + if mat1[0].is_empty() { return vec![vec![]; 1]; } let mut result: Vec> = vec![vec![I32F32::from_num(0); mat1[0].len()]; mat1.len()]; @@ -1013,8 +1035,8 @@ pub fn hadamard(mat1: &Vec>, mat2: &Vec>) -> Vec>, - mat2: &Vec>, + mat1: &[Vec<(u16, I32F32)>], + mat2: &[Vec<(u16, I32F32)>], columns: u16, ) -> Vec> { assert!(mat1.len() == mat2.len()); @@ -1044,11 +1066,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.len() == 0 { +pub fn mat_ema(new: &[Vec], old: &[Vec], alpha: I32F32) -> Vec> { + if new.is_empty() { return vec![vec![]; 1]; } - if new[0].len() == 0 { + if new[0].is_empty() { return vec![vec![]; 1]; } let one_minus_alpha: I32F32 = I32F32::from_num(1.0) - alpha; @@ -1068,8 +1090,8 @@ pub fn mat_ema(new: &Vec>, old: &Vec>, alpha: I32F32) -> // higher alpha discounts older observations faster. #[allow(dead_code)] pub fn mat_ema_sparse( - new: &Vec>, - old: &Vec>, + new: &[Vec<(u16, I32F32)>], + old: &[Vec<(u16, I32F32)>], alpha: I32F32, ) -> Vec> { assert!(new.len() == old.len()); @@ -1096,12 +1118,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>, threshold: I32F32) -> Vec> { +pub fn sparse_threshold(w: &[Vec<(u16, I32F32)>], 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 as usize].push((*uid_j, *weight_ij)); + sparse_threshold_result[uid_i].push((*uid_j, *weight_ij)); } } } @@ -1112,8 +1134,7 @@ pub fn sparse_threshold(w: &Vec>, threshold: I32F32) -> Vec, vb: &Vec, epsilon: I32F32) { + fn assert_vec_compare(va: &[I32F32], vb: &[I32F32], 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: &Vec, vb: &Vec, epsilon: I64F64) { + fn assert_vec_compare_64(va: &[I64F64], vb: &[I64F64], 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: &Vec, vb: &Vec) { + fn assert_vec_compare_u16(va: &[u16], vb: &[u16]) { 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()); @@ -1155,8 +1176,8 @@ mod tests { } fn assert_sparse_mat_compare( - ma: &Vec>, - mb: &Vec>, + ma: &[Vec<(u16, I32F32)>], + mb: &[Vec<(u16, I32F32)>], epsilon: I32F32, ) { assert!(ma.len() == mb.len()); @@ -1169,41 +1190,41 @@ mod tests { } } - fn vec_to_fixed(vector: &Vec) -> Vec { + fn vec_to_fixed(vector: &[f32]) -> Vec { vector.iter().map(|x| I32F32::from_num(*x)).collect() } #[test] fn test_vec_max_upscale_to_u16() { - let vector: Vec = vec_to_fixed(&vec![]); + let vector: Vec = vec_to_fixed(&[]); 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(&vec![0.]); + let vector: Vec = vec_to_fixed(&[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(&vec![0., 0.]); + let vector: Vec = vec_to_fixed(&[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(&vec![0., 1.]); + let vector: Vec = vec_to_fixed(&[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(&vec![0., 0.000000001]); + let vector: Vec = vec_to_fixed(&[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(&vec![0., 0.000016, 1.]); + let vector: Vec = vec_to_fixed(&[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(&vec![0.000000001, 0.000000001]); + let vector: Vec = vec_to_fixed(&[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(&vec![ + let vector: Vec = vec_to_fixed(&[ 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]; @@ -1229,15 +1250,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(&vec![0., 1., 65535.]); + let vector: Vec = vec_to_fixed(&[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(&vec![0., 0.5, 1., 1.5, 2., 32768.]); + let vector: Vec = vec_to_fixed(&[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(&vec![0., 0.5, 1., 1.5, 2., 32768., 32769.]); + let vector: Vec = vec_to_fixed(&[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); @@ -1339,7 +1360,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 as u64; + let bonds_moving_average_val: u64 = 900_000_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); @@ -1443,7 +1464,7 @@ mod tests { } // Reshape vector to matrix with specified number of rows, cast to I32F32. - fn vec_to_mat_fixed(vector: &Vec, rows: usize, transpose: bool) -> Vec> { + fn vec_to_mat_fixed(vector: &[f32], rows: usize, transpose: bool) -> Vec> { assert!( vector.len() % rows == 0, "Vector of len {:?} cannot reshape to {rows} rows.", @@ -1452,15 +1473,15 @@ mod tests { let cols: usize = vector.len() / rows; let mut mat: Vec> = vec![]; if transpose { - for col in 0..cols as usize { + for col in 0..cols { let mut vals: Vec = vec![]; - for row in 0..rows as usize { + for row in 0..rows { vals.push(I32F32::from_num(vector[row * cols + col])); } mat.push(vals); } } else { - for row in 0..rows as usize { + for row in 0..rows { mat.push( vector[row * cols..(row + 1) * cols] .iter() @@ -1493,7 +1514,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: &Vec, + vector: &[f32], rows: usize, transpose: bool, ) -> Vec> { @@ -1505,9 +1526,9 @@ mod tests { let cols: usize = vector.len() / rows; let mut mat: Vec> = vec![]; if transpose { - for col in 0..cols as usize { + for col in 0..cols { let mut row_vec: Vec<(u16, I32F32)> = vec![]; - for row in 0..rows as usize { + for row in 0..rows { if vector[row * cols + col] > 0. { row_vec.push((row as u16, I32F32::from_num(vector[row * cols + col]))); } @@ -1515,9 +1536,9 @@ mod tests { mat.push(row_vec); } } else { - for row in 0..rows as usize { + for row in 0..rows { let mut row_vec: Vec<(u16, I32F32)> = vec![]; - for col in 0..cols as usize { + for col in 0..cols { if vector[row * cols + col] > 0. { row_vec.push((col as u16, I32F32::from_num(vector[row * cols + col]))); } @@ -1532,13 +1553,10 @@ 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 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.)), + (1_u16, I32F32::from_num(10.)), + (2_u16, I32F32::from_num(100.)), ], ]; let mat = vec_to_sparse_mat_fixed(&vector, 2, false); @@ -1551,12 +1569,12 @@ mod tests { let target: Vec> = vec![ vec![], vec![ - (0 as u16, I32F32::from_num(1.)), - (1 as u16, I32F32::from_num(10.)), + (0_u16, I32F32::from_num(1.)), + (1_u16, I32F32::from_num(10.)), ], vec![ - (0 as u16, I32F32::from_num(2.)), - (1 as u16, I32F32::from_num(100.)), + (0_u16, I32F32::from_num(2.)), + (1_u16, I32F32::from_num(100.)), ], ]; let mat = vec_to_sparse_mat_fixed(&vector, 2, true); @@ -1602,7 +1620,7 @@ mod tests { .iter() .map(|t: &I32F32| sigmoid_safe(*t, I32F32::max_value(), I32F32::max_value())) .collect(); - let target: Vec = vec_to_fixed(&vec![ + let target: Vec = vec_to_fixed(&[ 0.0000000019, 0.0000000019, 0.0000000019, @@ -1616,7 +1634,7 @@ mod tests { .iter() .map(|t: &I32F32| sigmoid_safe(*t, I32F32::min_value(), I32F32::min_value())) .collect(); - let target: Vec = vec_to_fixed(&vec![ + let target: Vec = vec_to_fixed(&[ 0.5, 0.0000000019, 0.0000000019, @@ -1642,7 +1660,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(&vec![0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.]); + vec_to_fixed(&[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))) @@ -1666,11 +1684,11 @@ mod tests { #[test] fn test_math_is_topk() { - let vector: Vec = vec_to_fixed(&vec![]); + let vector: Vec = vec_to_fixed(&[]); let result = is_topk(&vector, 5); let target: Vec = vec![]; assert_eq!(&result, &target); - let vector: Vec = vec_to_fixed(&vec![0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]); + let vector: Vec = vec_to_fixed(&[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, @@ -1686,26 +1704,25 @@ mod tests { assert_eq!(&result, &target); let result = is_topk(&vector, 100); assert_eq!(&result, &target); - let vector: Vec = vec_to_fixed(&vec![9., 8., 7., 6., 5., 4., 3., 2., 1., 0.]); + let vector: Vec = vec_to_fixed(&[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(&vec![9., 0., 8., 1., 7., 2., 6., 3., 5., 4.]); + let vector: Vec = vec_to_fixed(&[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(&vec![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(&[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(&vec![0., 1., 2., 3., 4., 5., 5., 5., 5., 6.]); + let vector: Vec = vec_to_fixed(&[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, @@ -1715,16 +1732,16 @@ mod tests { #[test] fn test_math_sum() { - assert!(sum(&vec![]) == I32F32::from_num(0)); + assert!(sum(&[]) == I32F32::from_num(0)); assert!( - sum(&vec![ + sum(&[ I32F32::from_num(1.0), I32F32::from_num(10.0), I32F32::from_num(30.0) ]) == I32F32::from_num(41) ); assert!( - sum(&vec![ + sum(&[ I32F32::from_num(-1.0), I32F32::from_num(10.0), I32F32::from_num(30.0) @@ -1746,7 +1763,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), @@ -1762,7 +1779,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), @@ -1783,7 +1800,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), @@ -1798,7 +1815,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), @@ -1818,7 +1835,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), @@ -1833,7 +1850,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), @@ -1844,18 +1861,18 @@ mod tests { #[test] fn test_math_vecdiv() { - let x: Vec = vec_to_fixed(&vec![]); - let y: Vec = vec_to_fixed(&vec![]); - let result: Vec = vec_to_fixed(&vec![]); + let x: Vec = vec_to_fixed(&[]); + let y: Vec = vec_to_fixed(&[]); + let result: Vec = vec_to_fixed(&[]); assert_eq!(result, vecdiv(&x, &y)); - 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.]); + 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.]); assert_eq!(result, vecdiv(&x, &y)); - let x: Vec = vec_to_fixed(&vec![1., 1., 10.]); - let y: Vec = vec_to_fixed(&vec![2., 3., 2.]); + let x: Vec = vec_to_fixed(&[1., 1., 10.]); + let y: Vec = vec_to_fixed(&[2., 3., 2.]); let result: Vec = vec![fixed(1.) / fixed(2.), fixed(1.) / fixed(3.), fixed(5.)]; assert_eq!(result, vecdiv(&x, &y)); } @@ -2016,18 +2033,18 @@ mod tests { #[test] fn test_math_inplace_mask_vector() { let mask: Vec = vec![false, false, false]; - let mut vector: Vec = vec_to_fixed(&vec![0., 1., 2.]); - let target: Vec = vec_to_fixed(&vec![0., 1., 2.]); + let mut vector: Vec = vec_to_fixed(&[0., 1., 2.]); + let target: Vec = vec_to_fixed(&[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(&vec![0., 1., 2.]); - let target: Vec = vec_to_fixed(&vec![0., 0., 2.]); + let mut vector: Vec = vec_to_fixed(&[0., 1., 2.]); + let target: Vec = vec_to_fixed(&[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(&vec![0., 1., 2.]); - let target: Vec = vec_to_fixed(&vec![0., 0., 0.]); + let mut vector: Vec = vec_to_fixed(&[0., 1., 2.]); + let target: Vec = vec_to_fixed(&[0., 0., 0.]); inplace_mask_vector(&mask, &mut vector); assert_vec_compare(&vector, &target, I32F32::from_num(0)); } @@ -2239,7 +2256,7 @@ mod tests { #[test] fn test_math_row_hadamard() { - let vector: Vec = vec_to_fixed(&vec![1., 2., 3., 4.]); + let vector: Vec = vec_to_fixed(&[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); @@ -2250,7 +2267,7 @@ mod tests { #[test] fn test_math_row_hadamard_sparse() { - let vector: Vec = vec_to_fixed(&vec![1., 2., 3., 4.]); + let vector: Vec = vec_to_fixed(&[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); @@ -2276,7 +2293,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(&vec![6., 15., 24., 33.]); + let target: Vec = vec_to_fixed(&[6., 15., 24., 33.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); } @@ -2285,22 +2302,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(&vec![6., 15., 24., 33.]); + let target: Vec = vec_to_fixed(&[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(&vec![5., 10., 15., 33.]); + let target: Vec = vec_to_fixed(&[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(&vec![6., 0., 24., 33.]); + let target: Vec = vec_to_fixed(&[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(&vec![0., 0., 0., 0.]); + let target: Vec = vec_to_fixed(&[0., 0., 0., 0.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); } @@ -2309,7 +2326,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(&vec![22., 26., 30.]); + let target: Vec = vec_to_fixed(&[22., 26., 30.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); } @@ -2318,88 +2335,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(&vec![22., 26., 30.]); + let target: Vec = vec_to_fixed(&[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(&vec![21., 21., 21.]); + let target: Vec = vec_to_fixed(&[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(&vec![22., 0., 30.]); + let target: Vec = vec_to_fixed(&[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(&vec![0., 0., 0.]); + let target: Vec = vec_to_fixed(&[0., 0., 0.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); } #[test] fn test_math_matmul() { - let vector: Vec = vec_to_fixed(&vec![1., 2., 3., 4.]); + let vector: Vec = vec_to_fixed(&[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(&vec![70., 80., 90.]); + let target: Vec = vec_to_fixed(&[70., 80., 90.]); assert_vec_compare(&result, &target, I32F32::from_num(0)); } #[test] fn test_math_matmul_transpose() { - let vector: Vec = vec_to_fixed(&vec![1., 2., 3.]); + let vector: Vec = vec_to_fixed(&[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(&vec![14., 32., 50., 68.]); + let target: Vec = vec_to_fixed(&[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(&vec![1., 2., 3., 4.]); + let vector: Vec = vec_to_fixed(&[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(&vec![70., 80., 90.]); + let target: Vec = vec_to_fixed(&[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(&vec![69., 70., 63.]); + let target: Vec = vec_to_fixed(&[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(&vec![0., 0., 0.]); + let target: Vec = vec_to_fixed(&[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(&vec![1., 2., 3.]); + let vector: Vec = vec_to_fixed(&[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(&vec![14., 32., 50., 68.]); + let target: Vec = vec_to_fixed(&[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(&vec![13., 22., 23., 68.]); + let target: Vec = vec_to_fixed(&[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(&vec![0., 0., 0., 0.]); + let target: Vec = vec_to_fixed(&[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(&vec![0., 5., 12.]); + let vector: Vec = vec_to_fixed(&[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.]; @@ -2410,7 +2427,7 @@ mod tests { #[test] fn test_math_col_clip_sparse() { - let vector: Vec = vec_to_fixed(&vec![0., 5., 12.]); + let vector: Vec = vec_to_fixed(&[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.]; @@ -2482,165 +2499,165 @@ mod tests { let zero: I32F32 = fixed(0.); let one: I32F32 = fixed(1.); for _ in 0..100 { - let stake: Vec = vec_to_fixed(&vec![]); - let score: Vec = vec_to_fixed(&vec![]); + let stake: Vec = vec_to_fixed(&[]); + let score: Vec = vec_to_fixed(&[]); let majority: I32F32 = fixed(0.51); assert_eq!( zero, weighted_median( &stake, &score, - &(0..stake.len()).collect(), + (0..stake.len()).collect::>().as_slice(), one - majority, zero, stake.iter().sum() ) ); - let stake: Vec = normalize(&vec_to_fixed(&vec![0.51])); - let score: Vec = vec_to_fixed(&vec![1.]); + let stake: Vec = normalize(&vec_to_fixed(&[0.51])); + let score: Vec = vec_to_fixed(&[1.]); let majority: I32F32 = fixed(0.51); assert_eq!( one, weighted_median( &stake, &score, - &(0..stake.len()).collect(), + (0..stake.len()).collect::>().as_slice(), one - majority, zero, stake.iter().sum() ) ); - let stake: Vec = vec_to_fixed(&vec![0.49, 0.51]); - let score: Vec = vec_to_fixed(&vec![0.5, 1.]); + let stake: Vec = vec_to_fixed(&[0.49, 0.51]); + let score: Vec = vec_to_fixed(&[0.5, 1.]); let majority: I32F32 = fixed(0.51); assert_eq!( one, weighted_median( &stake, &score, - &(0..stake.len()).collect(), + (0..stake.len()).collect::>().as_slice(), one - majority, zero, stake.iter().sum() ) ); - let stake: Vec = vec_to_fixed(&vec![0.51, 0.49]); - let score: Vec = vec_to_fixed(&vec![0.5, 1.]); + let stake: Vec = vec_to_fixed(&[0.51, 0.49]); + let score: Vec = vec_to_fixed(&[0.5, 1.]); let majority: I32F32 = fixed(0.51); assert_eq!( fixed(0.5), weighted_median( &stake, &score, - &(0..stake.len()).collect(), + (0..stake.len()).collect::>().as_slice(), one - majority, zero, stake.iter().sum() ) ); - 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 stake: Vec = vec_to_fixed(&[0.49, 0., 0.51]); + let score: Vec = vec_to_fixed(&[0.5, 0.7, 1.]); let majority: I32F32 = fixed(0.51); assert_eq!( one, weighted_median( &stake, &score, - &(0..stake.len()).collect(), + (0..stake.len()).collect::>().as_slice(), one - majority, zero, stake.iter().sum() ) ); - 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 stake: Vec = vec_to_fixed(&[0.49, 0.01, 0.5]); + let score: Vec = vec_to_fixed(&[0.5, 0.7, 1.]); let majority: I32F32 = fixed(0.51); assert_eq!( fixed(0.7), weighted_median( &stake, &score, - &(0..stake.len()).collect(), + (0..stake.len()).collect::>().as_slice(), one - majority, zero, stake.iter().sum() ) ); - 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 stake: Vec = vec_to_fixed(&[0.49, 0.51, 0.0]); + let score: Vec = vec_to_fixed(&[0.5, 0.7, 1.]); let majority: I32F32 = fixed(0.51); assert_eq!( fixed(0.7), weighted_median( &stake, &score, - &(0..stake.len()).collect(), + (0..stake.len()).collect::>().as_slice(), one - majority, zero, stake.iter().sum() ) ); - 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 stake: Vec = vec_to_fixed(&[0.0, 0.49, 0.51]); + let score: Vec = vec_to_fixed(&[0.5, 0.7, 1.]); let majority: I32F32 = fixed(0.51); assert_eq!( one, weighted_median( &stake, &score, - &(0..stake.len()).collect(), + (0..stake.len()).collect::>().as_slice(), one - majority, zero, stake.iter().sum() ) ); - 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 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 majority: I32F32 = fixed(0.51); assert_eq!( one, weighted_median( &stake, &score, - &(0..stake.len()).collect(), + (0..stake.len()).collect::>().as_slice(), one - majority, zero, stake.iter().sum() ) ); - 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 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 majority: I32F32 = fixed(0.51); assert_eq!( one, weighted_median( &stake, &score, - &(0..stake.len()).collect(), + (0..stake.len()).collect::>().as_slice(), one - majority, zero, stake.iter().sum() ) ); - 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 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 majority: I32F32 = fixed(0.51); assert_eq!( fixed(0.6), weighted_median( &stake, &score, - &(0..stake.len()).collect(), + (0..stake.len()).collect::>().as_slice(), one - majority, zero, stake.iter().sum() @@ -2648,16 +2665,16 @@ mod tests { ); let stake: Vec = - vec_to_fixed(&vec![0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]); + vec_to_fixed(&[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(&vec![0.8, 0.8, 0.2, 0.2, 1.0, 1.0, 0.6, 0.6, 0.4, 0.4]); + vec_to_fixed(&[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(), + (0..stake.len()).collect::>().as_slice(), one - majority, zero, stake.iter().sum() @@ -2665,21 +2682,10 @@ mod tests { ); let n: usize = 100; - 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 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 allow_equal in vec![false, true] { + for allow_equal in [false, true] { let mut stake: Vec = vec![]; let mut score: Vec = vec![]; let mut last_score: I32F32 = zero; @@ -2689,9 +2695,8 @@ mod tests { 1 => stake.push(one), _ => stake.push(zero), } - match rng.gen_range(0..2) { - 1 => last_score += one, - _ => (), + if rng.gen_range(0..2) == 1 { + last_score += one } score.push(last_score); } else { @@ -2727,7 +2732,7 @@ mod tests { } } } - if medians.len() == 0 { + if medians.is_empty() { medians.push(zero); } let stake_idx: Vec = (0..stake.len()).collect(); @@ -2756,76 +2761,76 @@ mod tests { #[test] fn test_math_weighted_median_col() { - let stake: Vec = vec_to_fixed(&vec![]); + let stake: Vec = vec_to_fixed(&[]); let weights: Vec> = vec![vec![]]; - let median: Vec = vec_to_fixed(&vec![]); + let median: Vec = vec_to_fixed(&[]); assert_eq!(median, weighted_median_col(&stake, &weights, fixed(0.5))); - let stake: Vec = vec_to_fixed(&vec![0., 0.]); + let stake: Vec = vec_to_fixed(&[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(&vec![0., 0.]); + let median: Vec = vec_to_fixed(&[0., 0.]); assert_eq!(median, weighted_median_col(&stake, &weights, fixed(0.5))); - let stake: Vec = vec_to_fixed(&vec![0., 0.75, 0.25, 0.]); + let stake: Vec = vec_to_fixed(&[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(&vec![0., 0.3, 0.4]); + let median: Vec = vec_to_fixed(&[0., 0.3, 0.4]); assert_eq!(median, weighted_median_col(&stake, &weights, fixed(0.24))); - let median: Vec = vec_to_fixed(&vec![0., 0.2, 0.4]); + let median: Vec = vec_to_fixed(&[0., 0.2, 0.4]); assert_eq!(median, weighted_median_col(&stake, &weights, fixed(0.26))); - let median: Vec = vec_to_fixed(&vec![0., 0.2, 0.1]); + let median: Vec = vec_to_fixed(&[0., 0.2, 0.1]); assert_eq!(median, weighted_median_col(&stake, &weights, fixed(0.76))); - let stake: Vec = vec_to_fixed(&vec![0., 0.3, 0.2, 0.5]); + let stake: Vec = vec_to_fixed(&[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(&vec![0., 0., 0.4]); + let median: Vec = vec_to_fixed(&[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(&vec![]); + let stake: Vec = vec_to_fixed(&[]); let weights: Vec> = vec![vec![]]; - let median: Vec = vec_to_fixed(&vec![]); + let median: Vec = vec_to_fixed(&[]); assert_eq!( median, weighted_median_col_sparse(&stake, &weights, 0, fixed(0.5)) ); - let stake: Vec = vec_to_fixed(&vec![0., 0.]); + let stake: Vec = vec_to_fixed(&[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(&vec![0., 0.]); + let median: Vec = vec_to_fixed(&[0., 0.]); assert_eq!( median, weighted_median_col_sparse(&stake, &weights, 2, fixed(0.5)) ); - let stake: Vec = vec_to_fixed(&vec![0., 0.75, 0.25, 0.]); + let stake: Vec = vec_to_fixed(&[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(&vec![0., 0.3, 0.4]); + let median: Vec = vec_to_fixed(&[0., 0.3, 0.4]); assert_eq!( median, weighted_median_col_sparse(&stake, &weights, 3, fixed(0.24)) ); - let median: Vec = vec_to_fixed(&vec![0., 0.2, 0.4]); + let median: Vec = vec_to_fixed(&[0., 0.2, 0.4]); assert_eq!( median, weighted_median_col_sparse(&stake, &weights, 3, fixed(0.26)) ); - let median: Vec = vec_to_fixed(&vec![0., 0.2, 0.1]); + let median: Vec = vec_to_fixed(&[0., 0.2, 0.1]); assert_eq!( median, weighted_median_col_sparse(&stake, &weights, 3, fixed(0.76)) ); - let stake: Vec = vec_to_fixed(&vec![0., 0.3, 0.2, 0.5]); + let stake: Vec = vec_to_fixed(&[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(&vec![0., 0., 0.4]); + let median: Vec = vec_to_fixed(&[0., 0., 0.4]); assert_eq!( median, weighted_median_col_sparse(&stake, &weights, 3, fixed(0.51)) @@ -2987,8 +2992,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, &vec![I32F32::from_num(1.0); 3]), - &vec![ + &matmul(&w, &[I32F32::from_num(1.0); 3]), + &[ I32F32::from_num(3), I32F32::from_num(3), I32F32::from_num(3), @@ -2996,8 +3001,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &vec![I32F32::from_num(2.0); 3]), - &vec![ + &matmul(&w, &[I32F32::from_num(2.0); 3]), + &[ I32F32::from_num(6), I32F32::from_num(6), I32F32::from_num(6), @@ -3005,8 +3010,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &vec![I32F32::from_num(3.0); 3]), - &vec![ + &matmul(&w, &[I32F32::from_num(3.0); 3]), + &[ I32F32::from_num(9), I32F32::from_num(9), I32F32::from_num(9), @@ -3014,8 +3019,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &vec![I32F32::from_num(-1.0); 3]), - &vec![ + &matmul(&w, &[I32F32::from_num(-1.0); 3]), + &[ I32F32::from_num(-3), I32F32::from_num(-3), I32F32::from_num(-3), @@ -3024,8 +3029,8 @@ mod tests { ); let w: Vec> = vec![vec![I32F32::from_num(-1.0); 3]; 3]; assert_vec_compare( - &matmul(&w, &vec![I32F32::from_num(1.0); 3]), - &vec![ + &matmul(&w, &[I32F32::from_num(1.0); 3]), + &[ I32F32::from_num(-3), I32F32::from_num(-3), I32F32::from_num(-3), @@ -3033,8 +3038,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &vec![I32F32::from_num(2.0); 3]), - &vec![ + &matmul(&w, &[I32F32::from_num(2.0); 3]), + &[ I32F32::from_num(-6), I32F32::from_num(-6), I32F32::from_num(-6), @@ -3042,8 +3047,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &vec![I32F32::from_num(3.0); 3]), - &vec![ + &matmul(&w, &[I32F32::from_num(3.0); 3]), + &[ I32F32::from_num(-9), I32F32::from_num(-9), I32F32::from_num(-9), @@ -3051,8 +3056,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &vec![I32F32::from_num(-1.0); 3]), - &vec![ + &matmul(&w, &[I32F32::from_num(-1.0); 3]), + &[ I32F32::from_num(3), I32F32::from_num(3), I32F32::from_num(3), @@ -3065,8 +3070,8 @@ mod tests { vec![I32F32::from_num(3.0); 3], ]; assert_vec_compare( - &matmul(&w, &vec![I32F32::from_num(0.0); 3]), - &vec![ + &matmul(&w, &[I32F32::from_num(0.0); 3]), + &[ I32F32::from_num(0.0), I32F32::from_num(0.0), I32F32::from_num(0.0), @@ -3074,8 +3079,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &vec![I32F32::from_num(2.0); 3]), - &vec![ + &matmul(&w, &[I32F32::from_num(2.0); 3]), + &[ I32F32::from_num(12), I32F32::from_num(12), I32F32::from_num(12), @@ -3091,8 +3096,8 @@ mod tests { 3 ]; assert_vec_compare( - &matmul(&w, &vec![I32F32::from_num(0.0); 3]), - &vec![ + &matmul(&w, &[I32F32::from_num(0.0); 3]), + &[ I32F32::from_num(0.0), I32F32::from_num(0.0), I32F32::from_num(0.0), @@ -3100,8 +3105,8 @@ mod tests { epsilon, ); assert_vec_compare( - &matmul(&w, &vec![I32F32::from_num(2.0); 3]), - &vec![ + &matmul(&w, &[I32F32::from_num(2.0); 3]), + &[ I32F32::from_num(6), I32F32::from_num(12), I32F32::from_num(18), @@ -3181,7 +3186,7 @@ mod tests { assert_eq!(fixed64_to_fixed32(I64F64::from_num(expected)), expected); let expected = u32::MAX / 2; - let input = u64::try_from(expected).unwrap(); + let input = u64::from(expected); 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 41a351bac9..700df47237 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::{Get, GetStorageVersion, StorageVersion}, + traits::{fungible::Inspect as _, 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 let Err(_) = old::LoadedEmission::::try_get(netuid) { + if old::LoadedEmission::::try_get(netuid).is_err() { 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 as u64, validator_emission)); + new_netuid_emissions.push((server, 0_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 e40c17fe0d..e3b84ab207 100644 --- a/pallets/subtensor/src/neuron_info.rs +++ b/pallets/subtensor/src/neuron_info.rs @@ -2,7 +2,6 @@ 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)] @@ -61,17 +60,10 @@ impl Pallet { let mut neurons = Vec::new(); let n = Self::get_subnetwork_n(netuid); for uid in 0..n { - 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"); - } + let neuron = match Self::get_neuron_subnet_exists(netuid, uid) { + Some(n) => n, + None => break, // No more neurons + }; neurons.push(neuron); } @@ -79,14 +71,10 @@ impl Pallet { } fn get_neuron_subnet_exists(netuid: u16, uid: u16) -> Option> { - 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 hotkey = match Self::get_hotkey_for_net_and_uid(netuid, uid) { + Ok(h) => h, + Err(_) => return None, + }; let axon_info = Self::get_axon_info(netuid, &hotkey.clone()); @@ -94,17 +82,17 @@ impl Pallet { let coldkey = Owner::::get(hotkey.clone()).clone(); - 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 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 weights = >::get(netuid, uid) .iter() @@ -158,7 +146,7 @@ impl Pallet { pruning_score: pruning_score.into(), }; - return Some(neuron); + Some(neuron) } pub fn get_neuron(netuid: u16, uid: u16) -> Option> { @@ -166,19 +154,14 @@ impl Pallet { return None; } - let neuron = Self::get_neuron_subnet_exists(netuid, uid); - neuron + Self::get_neuron_subnet_exists(netuid, uid) } fn get_neuron_lite_subnet_exists(netuid: u16, uid: u16) -> Option> { - 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 hotkey = match Self::get_hotkey_for_net_and_uid(netuid, uid) { + Ok(h) => h, + Err(_) => return None, + }; let axon_info = Self::get_axon_info(netuid, &hotkey.clone()); @@ -186,17 +169,17 @@ impl Pallet { let coldkey = Owner::::get(hotkey.clone()).clone(); - 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 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 stake: Vec<(T::AccountId, Compact)> = as IterableStorageDoubleMap>::iter_prefix( @@ -226,7 +209,7 @@ impl Pallet { pruning_score: pruning_score.into(), }; - return Some(neuron); + Some(neuron) } pub fn get_neurons_lite(netuid: u16) -> Vec> { @@ -237,16 +220,10 @@ impl Pallet { let mut neurons: Vec> = Vec::new(); let n = Self::get_subnetwork_n(netuid); for uid in 0..n { - 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"); - } + let neuron = match Self::get_neuron_lite_subnet_exists(netuid, uid) { + Some(n) => n, + None => break, // No more neurons + }; neurons.push(neuron); } @@ -258,7 +235,6 @@ impl Pallet { return None; } - let neuron = Self::get_neuron_lite_subnet_exists(netuid, uid); - neuron + Self::get_neuron_lite_subnet_exists(netuid, uid) } } diff --git a/pallets/subtensor/src/registration.rs b/pallets/subtensor/src/registration.rs index b653e66a07..4d43a3683d 100644 --- a/pallets/subtensor/src/registration.rs +++ b/pallets/subtensor/src/registration.rs @@ -1,14 +1,12 @@ 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 sp_std::convert::TryInto; -use sp_std::vec::Vec; +use system::pallet_prelude::BlockNumberFor; -const LOG_TARGET: &'static str = "runtime::subtensor::registration"; +const LOG_TARGET: &str = "runtime::subtensor::registration"; impl Pallet { // ---- The implementation for the extrinsic do_burned_registration: registering by burning TAO. @@ -55,7 +53,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), @@ -96,22 +94,18 @@ 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_as_u64 = Self::get_burn_as_u64(netuid); - let registration_cost_as_balance = Self::u64_to_balance(registration_cost_as_u64).unwrap(); + let registration_cost = Self::get_burn_as_u64(netuid); ensure!( - Self::can_remove_balance_from_coldkey_account(&coldkey, registration_cost_as_balance), + Self::can_remove_balance_from_coldkey_account(&coldkey, registration_cost), Error::::NotEnoughBalanceToStake ); // --- 8. Ensure the remove operation from the coldkey is a success. - ensure!( - Self::remove_balance_from_coldkey_account(&coldkey, registration_cost_as_balance) - == true, - Error::::BalanceWithdrawalError - ); + let actual_burn_amount = + Self::remove_balance_from_coldkey_account(&coldkey, registration_cost)?; // The burn occurs here. - Self::burn_tokens(Self::get_burn_as_u64(netuid)); + Self::burn_tokens(actual_burn_amount); // --- 9. If the network account does not exist we will create it here. Self::create_account_if_non_existent(&coldkey, &hotkey); @@ -129,7 +123,7 @@ impl Pallet { // Possibly there is no neuron slots at all. ensure!( Self::get_max_allowed_uids(netuid) != 0, - Error::::NetworkDoesNotExist + Error::::NoNeuronIdAvailable ); if current_subnetwork_n < Self::get_max_allowed_uids(netuid) { @@ -241,7 +235,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), @@ -297,7 +291,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!( @@ -321,7 +315,7 @@ impl Pallet { // Possibly there is no neuron slots at all. ensure!( Self::get_max_allowed_uids(netuid) != 0, - Error::::NetworkDoesNotExist + Error::::NoNeuronIdAvailable ); if current_subnetwork_n < Self::get_max_allowed_uids(netuid) { @@ -396,14 +390,13 @@ 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. - 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()); + Self::add_balance_to_coldkey_account(&coldkey, balance_to_add); // --- 6. Deposit successful event. log::info!( @@ -419,9 +412,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); - return real_hash; + real_hash } // Determine which peer to prune from the network by finding the element with the lowest pruning score out of @@ -432,15 +425,19 @@ 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; - 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 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 { 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); - let current_block: u64 = Self::get_current_block_as_u64(); - let immunity_period: u64 = Self::get_immunity_period(netuid) as u64; + #[allow(clippy::comparison_chain)] if min_score == pruning_score { if current_block - block_at_registration < immunity_period { //neuron is in immunity period @@ -449,7 +446,6 @@ impl Pallet { uid_with_min_score_in_immunity_period = neuron_uid_i; } } else { - min_score = pruning_score; uid_with_min_score = neuron_uid_i; } } @@ -474,13 +470,13 @@ impl Pallet { uid_with_min_score_in_immunity_period, u16::MAX, ); - return uid_with_min_score_in_immunity_period; + 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); - return uid_with_min_score; + uid_with_min_score } } @@ -489,7 +485,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); @@ -507,12 +503,12 @@ impl Pallet { } pub fn get_block_hash_from_u64(block_number: u64) -> H256 { - let block_number: T::BlockNumber = TryInto::::try_into(block_number) + let block_number: BlockNumberFor = 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().into_iter().cloned().collect(); + let vec_hash: Vec = block_hash_at_number.as_ref().to_vec(); let deref_vec_hash: &[u8] = &vec_hash; // c: &[u8] let real_hash: H256 = H256::from_slice(deref_vec_hash); @@ -524,13 +520,13 @@ impl Pallet { real_hash ); - return real_hash; + 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.iter().cloned().collect(); - return hash_as_vec; + let hash_as_vec: Vec = hash_as_bytes.to_vec(); + hash_as_vec } pub fn hash_block_and_hotkey(block_hash_bytes: &[u8], hotkey: &T::AccountId) -> H256 { @@ -608,7 +604,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); - return seal_hash; + seal_hash } pub fn create_seal_hash(block_number_u64: u64, nonce_u64: u64, hotkey: &T::AccountId) -> H256 { @@ -676,7 +672,7 @@ impl Pallet { seal_hash ); - return seal_hash; + seal_hash } // Helper function for creating nonce and work. @@ -688,13 +684,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 = nonce + 1; - work = Self::create_seal_hash(block_number, nonce, &hotkey); + nonce += 1; + work = Self::create_seal_hash(block_number, nonce, hotkey); } let vec_work: Vec = Self::hash_to_vec(work); - return (nonce, vec_work); + (nonce, vec_work) } pub fn do_swap_hotkey( @@ -728,16 +724,12 @@ 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_as_balance), + Self::can_remove_balance_from_coldkey_account(&coldkey, swap_cost), Error::::NotEnoughBalance ); - ensure!( - Self::remove_balance_from_coldkey_account(&coldkey, swap_cost_as_balance) == true, - Error::::BalanceWithdrawalError - ); - Self::burn_tokens(swap_cost); + let actual_burn_amount = Self::remove_balance_from_coldkey_account(&coldkey, swap_cost)?; + Self::burn_tokens(actual_burn_amount); 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 28d5a7e8c4..b4e9ae8b21 100644 --- a/pallets/subtensor/src/root.rs +++ b/pallets/subtensor/src/root.rs @@ -18,7 +18,6 @@ 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; @@ -109,7 +108,7 @@ impl Pallet { // * 'bool': Whether the subnet exists. // pub fn if_subnet_exist(netuid: u16) -> bool { - return NetworksAdded::::get(netuid); + NetworksAdded::::get(netuid) } // Returns a list of subnet netuid equal to total networks. @@ -121,9 +120,9 @@ impl Pallet { // * 'Vec': Netuids of added subnets. // pub fn get_all_subnet_netuids() -> Vec { - return as IterableStorageMap>::iter() + as IterableStorageMap>::iter() .map(|(netuid, _)| netuid) - .collect(); + .collect() } /// Calculates the block emission based on the total issuance. /// @@ -138,14 +137,13 @@ 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()) { @@ -191,7 +189,7 @@ impl Pallet { // # Returns: // * 'bool': 'true' if any of the UIDs are invalid, 'false' otherwise. // - pub fn contains_invalid_root_uids(netuids: &Vec) -> bool { + pub fn contains_invalid_root_uids(netuids: &[u16]) -> bool { for netuid in netuids { if !Self::if_subnet_exist(*netuid) { log::debug!( @@ -207,7 +205,7 @@ impl Pallet { // Sets the emission values for each netuid // // - pub fn set_emission_values(netuids: &Vec, emission: Vec) -> Result<(), &'static str> { + pub fn set_emission_values(netuids: &[u16], emission: Vec) -> Result<(), &'static str> { log::debug!( "set_emission_values: netuids: {:?} emission:{:?}", netuids, @@ -377,11 +375,8 @@ impl Pallet { } for trust_score in trust.iter_mut() { - match trust_score.checked_div(total_stake) { - Some(quotient) => { - *trust_score = quotient; - } - None => {} + if let Some(quotient) = trust_score.checked_div(total_stake) { + *trust_score = quotient; } } @@ -422,7 +417,7 @@ impl Pallet { let netuids: Vec = Self::get_all_subnet_netuids(); log::debug!("netuids: {:?} values: {:?}", netuids, emission_u64); - return Self::set_emission_values(&netuids, emission_u64); + Self::set_emission_values(&netuids, emission_u64) } // Registers a user's hotkey to the root network. @@ -549,7 +544,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 { @@ -590,13 +585,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 ); @@ -608,10 +603,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_ref_time(48_856).saturating_mul(member_count.into())) + .saturating_add(Weight::from_parts(48_856, 0).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_proof_size(128).saturating_mul(member_count.into())); + .saturating_add(Weight::from_parts(0, 128).saturating_mul(member_count.into())); Ok(( Some(vote_weight), @@ -651,14 +646,9 @@ impl Pallet { // --- 2. Calculate and lock the required tokens. let lock_amount: u64 = Self::get_network_lock_cost(); - 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 - ); + log::debug!("network lock_amount: {:?}", lock_amount); ensure!( - Self::can_remove_balance_from_coldkey_account(&coldkey, lock_as_balance.unwrap()), + Self::can_remove_balance_from_coldkey_account(&coldkey, lock_amount), Error::::NotEnoughBalanceToStake ); @@ -691,12 +681,9 @@ impl Pallet { }; // --- 5. Perform the lock operation. - 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); + 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); // --- 6. Set initial and custom parameters for the network. Self::init_new_network(netuid_to_register, 360); @@ -857,12 +844,6 @@ 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); @@ -932,7 +913,7 @@ impl Pallet { BurnRegistrationsThisInterval::::remove(netuid); // --- 12. Add the balance back to the owner. - Self::add_balance_to_coldkey_account(&owner_coldkey, reserved_amount_as_bal.unwrap()); + Self::add_balance_to_coldkey_account(&owner_coldkey, reserved_amount); 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 c18ab2e54e..a926132e51 100644 --- a/pallets/subtensor/src/serving.rs +++ b/pallets/subtensor/src/serving.rs @@ -1,5 +1,4 @@ use super::*; -use frame_support::inherent::Vec; use frame_support::sp_std::vec; impl Pallet { @@ -224,7 +223,7 @@ impl Pallet { ) -> bool { let rate_limit: u64 = Self::get_serving_rate_limit(netuid); let last_serve = prev_axon_info.block; - return rate_limit == 0 || last_serve == 0 || current_block - last_serve >= rate_limit; + rate_limit == 0 || last_serve == 0 || current_block - last_serve >= rate_limit } pub fn prometheus_passes_rate_limit( @@ -234,22 +233,22 @@ impl Pallet { ) -> bool { let rate_limit: u64 = Self::get_serving_rate_limit(netuid); let last_serve = prev_prometheus_info.block; - return rate_limit == 0 || last_serve == 0 || current_block - last_serve >= rate_limit; + rate_limit == 0 || last_serve == 0 || current_block - last_serve >= rate_limit } pub fn has_axon_info(netuid: u16, hotkey: &T::AccountId) -> bool { - return Axons::::contains_key(netuid, hotkey); + Axons::::contains_key(netuid, hotkey) } pub fn has_prometheus_info(netuid: u16, hotkey: &T::AccountId) -> bool { - return Prometheus::::contains_key(netuid, hotkey); + Prometheus::::contains_key(netuid, hotkey) } pub fn get_axon_info(netuid: u16, hotkey: &T::AccountId) -> AxonInfoOf { if Self::has_axon_info(netuid, hotkey) { - return Axons::::get(netuid, hotkey).unwrap(); + Axons::::get(netuid, hotkey).unwrap() } else { - return AxonInfo { + AxonInfo { block: 0, version: 0, ip: 0, @@ -258,27 +257,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) { - return Prometheus::::get(netuid, hotkey).unwrap(); + Prometheus::::get(netuid, hotkey).unwrap() } else { - return PrometheusInfo { + 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]; - return allowed_values.contains(&ip_type); + allowed_values.contains(&ip_type) } // @todo (Parallax 2-1-2021) : Implement exclusion of private IP ranges @@ -311,11 +310,11 @@ impl Pallet { return false; } // IPv6 localhost } - return true; + 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); } @@ -325,7 +324,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 796baf0183..b6f0fd38ee 100644 --- a/pallets/subtensor/src/stake_info.rs +++ b/pallets/subtensor/src/stake_info.rs @@ -1,7 +1,6 @@ use super::*; use frame_support::pallet_prelude::{Decode, Encode}; extern crate alloc; -use alloc::vec::Vec; use codec::Compact; use sp_core::hexdisplay::AsBytesRef; @@ -16,7 +15,7 @@ impl Pallet { fn _get_stake_info_for_coldkeys( coldkeys: Vec, ) -> Vec<(T::AccountId, Vec>)> { - if coldkeys.len() == 0 { + if coldkeys.is_empty() { return Vec::new(); // No coldkeys to check } @@ -37,7 +36,7 @@ impl Pallet { stake_info.push((coldkey_, stake_info_for_coldkey)); } - return stake_info; + stake_info } pub fn get_stake_info_for_coldkeys( @@ -53,13 +52,11 @@ impl Pallet { coldkeys.push(coldkey); } - if coldkeys.len() == 0 { + if coldkeys.is_empty() { return Vec::new(); // Invalid coldkey } - let stake_info = Self::_get_stake_info_for_coldkeys(coldkeys); - - return stake_info; + Self::_get_stake_info_for_coldkeys(coldkeys) } pub fn get_stake_info_for_coldkey(coldkey_account_vec: Vec) -> Vec> { @@ -71,10 +68,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.len() == 0 { - return Vec::new(); // Invalid coldkey + if stake_info.is_empty() { + Vec::new() // Invalid coldkey } else { - return stake_info.get(0).unwrap().1.clone(); + return stake_info.first().unwrap().1.clone(); } } } diff --git a/pallets/subtensor/src/staking.rs b/pallets/subtensor/src/staking.rs index ce3d3a1c0d..15caa2467e 100644 --- a/pallets/subtensor/src/staking.rs +++ b/pallets/subtensor/src/staking.rs @@ -1,5 +1,14 @@ use super::*; -use frame_support::storage::IterableStorageDoubleMap; +use frame_support::{ + storage::IterableStorageDoubleMap, + traits::{ + tokens::{ + fungible::{Balanced as _, Inspect as _, Mutate as _}, + Fortitude, Precision, Preservation, + }, + Imbalance, + }, +}; impl Pallet { // ---- The implementation for the extrinsic become_delegate: signals that this hotkey allows delegated stake. @@ -123,7 +132,7 @@ impl Pallet { hotkey: T::AccountId, stake_to_be_added: u64, ) -> dispatch::DispatchResult { - // --- 1. We check that the transaction is signed by the caller and retrieve the T::AccountId coldkey information. + // 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:{:?} )", @@ -132,32 +141,25 @@ impl Pallet { stake_to_be_added ); - // --- 2. We convert the stake u64 into a balancer. - let stake_as_balance = Self::u64_to_balance(stake_to_be_added); + // Ensure the callers coldkey has enough stake to perform the transaction. ensure!( - 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()), + Self::can_remove_balance_from_coldkey_account(&coldkey, stake_to_be_added), Error::::NotEnoughBalanceToStake ); - // --- 4. Ensure that the hotkey account exists this is only possible through registration. + // Ensure that the hotkey account exists this is only possible through registration. ensure!( Self::hotkey_account_exists(&hotkey), Error::::NotRegistered ); - // --- 5. Ensure that the hotkey allows delegation or that the hotkey is owned by the calling coldkey. + // 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 ); - // --- 6. Ensure we don't exceed stake rate limit + // Ensure we don't exceed stake rate limit let stakes_this_interval = Self::get_stakes_this_interval_for_coldkey_hotkey(&coldkey, &hotkey); ensure!( @@ -165,7 +167,7 @@ impl Pallet { Error::::StakeRateLimitExceeded ); - // --- 7. If this is a nomination stake, check if total stake after adding will be above + // 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. @@ -179,20 +181,18 @@ impl Pallet { ); } - // --- 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 - ); + // 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)?; - // --- 9. If we reach here, add the balance to the hotkey. - Self::increase_stake_on_coldkey_hotkey_account(&coldkey, &hotkey, stake_to_be_added); + // If we reach here, add the balance to the hotkey. + Self::increase_stake_on_coldkey_hotkey_account(&coldkey, &hotkey, actual_amount_to_stake); // Set last block for rate limiting let block: u64 = Self::get_current_block_as_u64(); Self::set_last_tx_block(&coldkey, block); - // --- 9. Emit the staking event. + // 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, - stake_to_be_added + actual_amount_to_stake ); - Self::deposit_event(Event::StakeAdded(hotkey, stake_to_be_added)); + Self::deposit_event(Event::StakeAdded(hotkey, actual_amount_to_stake)); - // --- 10. Ok and return. + // Ok and return. Ok(()) } @@ -248,7 +248,7 @@ impl Pallet { hotkey: T::AccountId, stake_to_be_removed: u64, ) -> dispatch::DispatchResult { - // --- 1. We check the transaction is signed by the caller and retrieve the T::AccountId coldkey information. + // 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,38 +257,31 @@ impl Pallet { stake_to_be_removed ); - // --- 2. Ensure that the hotkey account exists this is only possible through registration. + // Ensure that the hotkey account exists this is only possible through registration. ensure!( Self::hotkey_account_exists(&hotkey), Error::::NotRegistered ); - // --- 3. Ensure that the hotkey allows delegation or that the hotkey is owned by the calling coldkey. + // 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 ); - // --- 4. Ensure that the hotkey has enough stake to withdraw. + // Ensure that the hotkey has enough stake to withdraw. ensure!( Self::has_enough_stake(&coldkey, &hotkey, stake_to_be_removed), Error::::NotEnoughStaketoWithdraw ); - // --- 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 + // Ensure we don't exceed stake rate limit let unstakes_this_interval = Self::get_stakes_this_interval_for_coldkey_hotkey(&coldkey, &hotkey); ensure!( @@ -296,7 +289,7 @@ impl Pallet { Error::::UnstakeRateLimitExceeded ); - // --- 7. If this is a nomination stake, check if total stake after removing will be above + // 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. @@ -310,17 +303,17 @@ impl Pallet { ); } - // --- 8. We remove the balance from the hotkey. + // 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. - Self::add_balance_to_coldkey_account(&coldkey, stake_to_be_added_as_currency.unwrap()); + // 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); // 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. + // Emit the unstaking event. Self::set_stakes_this_interval_for_coldkey_hotkey( &coldkey, &hotkey, @@ -334,14 +327,14 @@ impl Pallet { ); Self::deposit_event(Event::StakeRemoved(hotkey, stake_to_be_removed)); - // --- 11. Done and ok. + // Done and ok. Ok(()) } // Returns true if the passed hotkey allow delegative staking. // pub fn hotkey_is_delegate(hotkey: &T::AccountId) -> bool { - return Delegates::::contains_key(hotkey); + Delegates::::contains_key(hotkey) } // Sets the hotkey as a delegate with take. @@ -353,7 +346,7 @@ impl Pallet { // Returns the total amount of stake in the staking table. // pub fn get_total_stake() -> u64 { - return TotalStake::::get(); + TotalStake::::get() } // Increases the total amount of stake by the passed amount. @@ -371,19 +364,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 { - return TotalHotkeyStake::::get(hotkey); + 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 { - return TotalColdkeyStake::::get(coldkey); + 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 { - return Stake::::get(hotkey, coldkey); + Stake::::get(hotkey, coldkey) } // Retrieves the total stakes for a given hotkey (account ID) for the current staking interval. @@ -423,7 +416,7 @@ impl Pallet { } pub fn get_target_stakes_per_interval() -> u64 { - return TargetStakesPerInterval::::get(); + TargetStakesPerInterval::::get() } // Creates a cold - hot pairing account if the hotkey is not already an active account. @@ -438,29 +431,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 { - return Owner::::get(hotkey); + Owner::::get(hotkey) } // Returns true if the hotkey account has been created. // pub fn hotkey_account_exists(hotkey: &T::AccountId) -> bool { - return Owner::::contains_key(hotkey); + 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) { - return Owner::::get(hotkey) == *coldkey; + Owner::::get(hotkey) == *coldkey } else { - return false; + 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 { - return Self::get_stake_for_coldkey_and_hotkey(coldkey, hotkey) >= decrement; + Self::get_stake_for_coldkey_and_hotkey(coldkey, hotkey) >= decrement } // Increases the stake on the hotkey account under its owning coldkey. @@ -553,15 +546,14 @@ 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. - let stake_as_balance = Self::u64_to_balance(stake); - Self::add_balance_to_coldkey_account(&coldkey, stake_as_balance.unwrap()); + Self::add_balance_to_coldkey_account(coldkey, stake); } } } @@ -577,31 +569,24 @@ 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 Currency<::AccountId>>::Balance, + amount: <::Currency as fungible::Inspect<::AccountId>>::Balance, ) { - T::Currency::deposit_creating(&coldkey, amount); // Infallibe + // infallible + let _ = T::Currency::deposit(coldkey, amount, Precision::BestEffort); } pub fn set_balance_on_coldkey_account( coldkey: &T::AccountId, - amount: <::Currency as Currency<::AccountId>>::Balance, + amount: <::Currency as fungible::Inspect<::AccountId>>::Balance, ) { - T::Currency::make_free_balance_be(&coldkey, amount); + T::Currency::set_balance(coldkey, amount); } pub fn can_remove_balance_from_coldkey_account( coldkey: &T::AccountId, - amount: <::Currency as Currency<::AccountId>>::Balance, + amount: <::Currency as fungible::Inspect<::AccountId>>::Balance, ) -> bool { let current_balance = Self::get_coldkey_balance(coldkey); if amount > current_balance { @@ -609,36 +594,43 @@ impl Pallet { } // This bit is currently untested. @todo - 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 + + T::Currency::can_withdraw(coldkey, amount) + .into_result(false) + .is_ok() } pub fn get_coldkey_balance( coldkey: &T::AccountId, - ) -> <::Currency as Currency<::AccountId>>::Balance { - return T::Currency::free_balance(&coldkey); + ) -> <::Currency as fungible::Inspect<::AccountId>>::Balance + { + T::Currency::reducible_balance(coldkey, Preservation::Expendable, Fortitude::Polite) } + #[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 Currency<::AccountId>>::Balance, - ) -> bool { - return match T::Currency::withdraw( - &coldkey, + amount: <::Currency as fungible::Inspect<::AccountId>>::Balance, + ) -> Result { + if amount == 0 { + return Ok(0); + } + + let credit = T::Currency::withdraw( + coldkey, amount, - WithdrawReasons::except(WithdrawReasons::TIP), - ExistenceRequirement::KeepAlive, - ) { - Ok(_result) => true, - Err(_error) => false, - }; + Precision::BestEffort, + Preservation::Preserve, + Fortitude::Polite, + ) + .map_err(|_| Error::::BalanceWithdrawalError)? + .peek(); + + if credit == 0 { + return Err(Error::::BalanceWithdrawalError.into()); + } + + Ok(credit) } pub fn unstake_all_coldkeys_from_hotkey_account(hotkey: &T::AccountId) { @@ -648,26 +640,13 @@ impl Pallet { hotkey, ) { - // 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(), - ); - } + // 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); } } } diff --git a/pallets/subtensor/src/subnet_info.rs b/pallets/subtensor/src/subnet_info.rs index f2346fafb3..b9203da0e1 100644 --- a/pallets/subtensor/src/subnet_info.rs +++ b/pallets/subtensor/src/subnet_info.rs @@ -2,7 +2,6 @@ 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)] @@ -81,10 +80,10 @@ impl Pallet { // network_connect.push([_netuid_, con_req]); // } - return Some(SubnetInfo { + Some(SubnetInfo { rho: rho.into(), kappa: kappa.into(), - difficulty: difficulty.into(), + difficulty, immunity_period: immunity_period.into(), netuid: netuid.into(), max_allowed_validators: max_allowed_validators.into(), @@ -99,8 +98,8 @@ impl Pallet { network_connect, emission_values: emission_values.into(), burn, - owner: Self::get_subnet_owner(netuid).into(), - }); + owner: Self::get_subnet_owner(netuid), + }) } pub fn get_subnets_info() -> Vec>> { @@ -122,7 +121,7 @@ impl Pallet { } } - return subnets_info; + subnets_info } pub fn get_subnet_hyperparams(netuid: u16) -> Option { @@ -153,8 +152,7 @@ impl Pallet { let adjustment_alpha = Self::get_adjustment_alpha(netuid); let difficulty = Self::get_difficulty_as_u64(netuid); - - return Some(SubnetHyperparams { + Some(SubnetHyperparams { rho: rho.into(), kappa: kappa.into(), immunity_period: immunity_period.into(), @@ -176,7 +174,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 306d4f9b5c..88c5b0e09c 100644 --- a/pallets/subtensor/src/uids.rs +++ b/pallets/subtensor/src/uids.rs @@ -1,15 +1,13 @@ 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 { - return SubnetworkN::::get(netuid); + SubnetworkN::::get(netuid) } // Replace the neuron under this uid. @@ -87,13 +85,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 { - return Keys::::contains_key(netuid, uid); + 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 { - return Uids::::contains_key(netuid, hotkey); + Uids::::contains_key(netuid, hotkey) } // Returs the hotkey under the network uid as a Result. Ok if the uid is taken. @@ -111,19 +109,18 @@ impl Pallet { netuid: u16, hotkey: &T::AccountId, ) -> Result { - return Uids::::try_get(netuid, &hotkey) - .map_err(|_err| Error::::NotRegistered.into()); + 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) { - return Self::get_total_stake_for_hotkey( + Self::get_total_stake_for_hotkey( &Self::get_hotkey_for_net_and_uid(netuid, neuron_uid).unwrap(), - ); + ) } else { - return 0; + 0 } } @@ -132,9 +129,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 = number_of_subnets + 1; + number_of_subnets += 1; } - return number_of_subnets; + 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 258d5e3064..91b2d0b260 100644 --- a/pallets/subtensor/src/utils.rs +++ b/pallets/subtensor/src/utils.rs @@ -1,7 +1,5 @@ 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 { @@ -12,7 +10,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.into()), + Ok(Some(_)) => Err(DispatchError::BadOrigin), Ok(None) => Ok(()), Err(x) => Err(x.into()), } @@ -140,8 +138,17 @@ 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); @@ -149,89 +156,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() { - return vec[uid as usize]; + vec[uid as usize] } else { - return 0; + 0 } } pub fn get_trust_for_uid(netuid: u16, uid: u16) -> u16 { let vec = Trust::::get(netuid); if (uid as usize) < vec.len() { - return vec[uid as usize]; + vec[uid as usize] } else { - return 0; + 0 } } pub fn get_emission_for_uid(netuid: u16, uid: u16) -> u64 { let vec = Emission::::get(netuid); if (uid as usize) < vec.len() { - return vec[uid as usize]; + vec[uid as usize] } else { - return 0; + 0 } } pub fn get_active_for_uid(netuid: u16, uid: u16) -> bool { let vec = Active::::get(netuid); if (uid as usize) < vec.len() { - return vec[uid as usize]; + vec[uid as usize] } else { - return false; + false } } pub fn get_consensus_for_uid(netuid: u16, uid: u16) -> u16 { let vec = Consensus::::get(netuid); if (uid as usize) < vec.len() { - return vec[uid as usize]; + vec[uid as usize] } else { - return 0; + 0 } } pub fn get_incentive_for_uid(netuid: u16, uid: u16) -> u16 { let vec = Incentive::::get(netuid); if (uid as usize) < vec.len() { - return vec[uid as usize]; + vec[uid as usize] } else { - return 0; + 0 } } pub fn get_dividends_for_uid(netuid: u16, uid: u16) -> u16 { let vec = Dividends::::get(netuid); if (uid as usize) < vec.len() { - return vec[uid as usize]; + vec[uid as usize] } else { - return 0; + 0 } } pub fn get_last_update_for_uid(netuid: u16, uid: u16) -> u64 { let vec = LastUpdate::::get(netuid); if (uid as usize) < vec.len() { - return vec[uid as usize]; + vec[uid as usize] } else { - return 0; + 0 } } pub fn get_pruning_score_for_uid(netuid: u16, uid: u16) -> u16 { let vec = PruningScores::::get(netuid); if (uid as usize) < vec.len() { - return vec[uid as usize]; + vec[uid as usize] } else { - return u16::MAX; + 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() { - return vec[uid as usize]; + vec[uid as usize] } else { - return 0; + 0 } } pub fn get_validator_permit_for_uid(netuid: u16, uid: u16) -> bool { let vec = ValidatorPermit::::get(netuid); if (uid as usize) < vec.len() { - return vec[uid as usize]; + vec[uid as usize] } else { - return false; + false } } pub fn get_weights_min_stake() -> u64 { @@ -293,7 +300,7 @@ impl Pallet { return false; } - return current_block - prev_tx_block <= rate_limit; + current_block - prev_tx_block <= rate_limit } // ======================== @@ -302,7 +309,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 4584dfb621..6969a3a674 100644 --- a/pallets/subtensor/src/weights.rs +++ b/pallets/subtensor/src/weights.rs @@ -1,7 +1,6 @@ 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. @@ -122,8 +121,8 @@ impl Pallet { Error::::IncorrectNetworkVersionKey ); - // --- 8. Get the neuron uid of associated hotkey on network netuid. - let neuron_uid; + // --- 9. Get the neuron uid of associated hotkey on network netuid. + let net_neuron_uid = Self::get_uid_for_net_and_hotkey(netuid, &hotkey); ensure!( net_neuron_uid.is_ok(), @@ -132,7 +131,7 @@ impl Pallet { .unwrap_or(Error::::NotRegistered.into()) ); - neuron_uid = net_neuron_uid.unwrap(); + let 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(); @@ -212,7 +211,7 @@ impl Pallet { network_version_key, version_key ); - return network_version_key == 0 || version_key >= network_version_key; + network_version_key == 0 || version_key >= network_version_key } // Checks if the neuron has set weights within the weights_set_rate_limit. @@ -227,11 +226,11 @@ impl Pallet { return current_block - last_set_weights >= Self::get_weights_set_rate_limit(netuid); } // --- 3. Non registered peers cant pass. - return false; + false } // Checks for any invalid uids on this network. - pub fn contains_invalid_uids(netuid: u16, uids: &Vec) -> bool { + pub fn contains_invalid_uids(netuid: u16, uids: &[u16]) -> bool { for uid in uids { if !Self::is_uid_exist_on_network(netuid, *uid) { log::debug!( @@ -242,33 +241,28 @@ impl Pallet { return true; } } - return false; + false } // Returns true if the passed uids have the same length of the passed values. - pub fn uids_match_values(uids: &Vec, values: &Vec) -> bool { - return uids.len() == values.len(); + pub fn uids_match_values(uids: &[u16], values: &[u16]) -> bool { + uids.len() == values.len() } // Returns true if the items contain duplicates. - pub fn has_duplicate_uids(items: &Vec) -> bool { + pub fn has_duplicate_uids(items: &[u16]) -> bool { let mut parsed: Vec = Vec::new(); for item in items { - if parsed.contains(&item) { + if parsed.contains(item) { return true; } - parsed.push(item.clone()); + parsed.push(*item); } - return false; + false } // Returns True if setting self-weight or has validator permit. - pub fn check_validator_permit( - netuid: u16, - uid: u16, - uids: &Vec, - weights: &Vec, - ) -> bool { + pub fn check_validator_permit(netuid: u16, uid: u16, uids: &[u16], weights: &[u16]) -> bool { // Check self weight. Allowed to set single value for self weight. if Self::is_self_weight(uid, uids, weights) { return true; @@ -278,7 +272,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: &Vec, weights: &Vec) -> bool { + pub fn check_length(netuid: u16, uid: u16, uids: &[u16], weights: &[u16]) -> 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 = { @@ -299,7 +293,7 @@ impl Pallet { return true; } // To few weights. - return false; + false } // Implace normalizes the passed positive integer weights so that they sum to u16 max value. @@ -311,11 +305,11 @@ impl Pallet { weights.iter_mut().for_each(|x| { *x = (*x as u64 * u16::max_value() as u64 / sum) as u16; }); - return weights; + weights } // Returns False if the weights exceed the max_weight_limit for this network. - pub fn max_weight_limited(netuid: u16, uid: u16, uids: &Vec, weights: &Vec) -> bool { + pub fn max_weight_limited(netuid: u16, uid: u16, uids: &[u16], weights: &[u16]) -> bool { // Allow self weights to exceed max weight limit. if Self::is_self_weight(uid, uids, weights) { return true; @@ -332,20 +326,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: &Vec, weights: &Vec) -> bool { + pub fn is_self_weight(uid: u16, uids: &[u16], weights: &[u16]) -> bool { if weights.len() != 1 { return false; } if uid != uids[0] { return false; } - return true; + 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: &Vec) -> bool { + pub fn check_len_uids_within_allowed(netuid: u16, uids: &[u16]) -> bool { let subnetwork_n: u16 = Self::get_subnetwork_n(netuid); // we should expect at most subnetwork_n uids. - return uids.len() <= subnetwork_n as usize; + uids.len() <= subnetwork_n as usize } } diff --git a/pallets/subtensor/tests/block_step.rs b/pallets/subtensor/tests/block_step.rs index c3fad4cf7c..ce32ad0e47 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().execute_with(|| { + new_test_ext(1).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); + SubtensorModule::set_emission_values(&netuids, emission).unwrap(); 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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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 as u16 { - for block in 0..30 as u64 { - for tempo in 1..30 as u16 { + for netuid in 0..30_u16 { + for block in 0..30_u64 { + for tempo in 1..30_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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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 6c561b84ae..24552261d3 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().execute_with(|| { + new_test_ext(1).execute_with(|| { // Create Net 1 let netuid: u16 = 1; let tempo: u16 = 1; @@ -18,10 +18,7 @@ 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_eq!( - SubtensorModule::get_network_registration_allowed(netuid), - true - ); // Default registration allowed. + assert!(SubtensorModule::get_network_registration_allowed(netuid)); // Default registration allowed. // Set values and check. SubtensorModule::set_difficulty(netuid, 20000); @@ -38,10 +35,7 @@ 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_eq!( - SubtensorModule::get_network_registration_allowed(netuid), - true - ); // Check set registration allowed + assert!(SubtensorModule::get_network_registration_allowed(netuid)); // Check set registration allowed // Lets register 3 neurons... let hotkey0 = U256::from(0); @@ -74,7 +68,10 @@ 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. - assert_eq!(SubtensorModule::get_last_adjustment_block(netuid), 1); // We just adjusted on the first block. + + // 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_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. @@ -108,7 +105,10 @@ fn test_registration_difficulty_adjustment() { assert_eq!(SubtensorModule::get_registrations_this_interval(netuid), 3); // Registrations this interval = 3 step_block(1); // Step - assert_eq!(SubtensorModule::get_last_adjustment_block(netuid), 1); // Still previous adjustment block. + + // TODO: are we OK with this change? + assert_eq!(SubtensorModule::get_last_adjustment_block(netuid), 2); // 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 cfa25757f9..0bfd11ba47 100644 --- a/pallets/subtensor/tests/epoch.rs +++ b/pallets/subtensor/tests/epoch.rs @@ -4,8 +4,7 @@ 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::transcendental::{cos, ln, sqrt, PI}; -use substrate_fixed::types::{I32F32, I64F64}; +use substrate_fixed::types::I32F32; mod mock; pub fn fixed(val: f32) -> I32F32 { @@ -22,13 +21,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 Vec) { +pub fn inplace_normalize(x: &mut [I32F32]) { let x_sum: I32F32 = x.iter().sum(); - if x_sum == I32F32::from_num(0.0 as f32) { + if x_sum == I32F32::from_num(0.0_f32) { return; } - for i in 0..x.len() { - x[i] = x[i] / x_sum; + for i in x.iter_mut() { + *i /= x_sum; } } @@ -41,45 +40,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; }); - return weights; + 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( @@ -104,11 +103,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 as usize].into(); - servers = permuted_uids[validators_n as usize..network_n as usize].into(); + validators = permuted_uids[0..validators_n].into(); + servers = permuted_uids[validators_n..network_n].into(); } - return (validators, servers); + (validators, servers) } #[allow(dead_code)] @@ -140,17 +139,18 @@ fn uid_stats(netuid: u16, uid: u16) { ); } +#[allow(clippy::too_many_arguments)] fn init_run_epochs( netuid: u16, n: u16, - validators: &Vec, - servers: &Vec, + validators: &[u16], + servers: &[u16], epochs: u16, stake_per_validator: u64, server_self: bool, - input_stake: &Vec, + input_stake: &[u64], use_input_stake: bool, - input_weights: &Vec>, + input_weights: &[Vec<(u16, u16)>], use_input_weights: bool, random_weights: bool, random_seed: u64, @@ -162,23 +162,22 @@ fn init_run_epochs( // === Register uids SubtensorModule::set_max_allowed_uids(netuid, n); for key in 0..n { - let stake: u64; - if use_input_stake { - stake = input_stake[key as usize]; + let stake = if use_input_stake { + input_stake[key as usize] + } else if validators.contains(&key) { + stake_per_validator } else { - stake = if validators.contains(&key) { - stake_per_validator - } else { - 0 - }; // only validators receive stake - } + // only validators receive stake + 0 + }; + // 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 as u64, + stake, ); } assert_eq!(SubtensorModule::get_subnetwork_n(netuid), n); @@ -195,10 +194,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() as usize]; + let mut weights: Vec = vec![u16::MAX / n; servers.len()]; 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 } @@ -217,7 +216,7 @@ fn init_run_epochs( assert_ok!(SubtensorModule::set_weights( RuntimeOrigin::signed(U256::from(*uid as u64)), netuid, - servers.clone(), + servers.to_vec(), weights.clone(), 0 )); @@ -228,7 +227,7 @@ fn init_run_epochs( assert_ok!(SubtensorModule::set_weights( RuntimeOrigin::signed(U256::from(*uid as u64)), netuid, - vec![*uid as u16], + vec![*uid], vec![u16::MAX], 0 )); // server self-weight @@ -259,141 +258,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] @@ -440,7 +439,7 @@ fn split_graph( // interleave as usize, // ); -// new_test_ext().execute_with(|| { +// new_test_ext(1).execute_with(|| { // init_run_epochs( // netuid, // network_n, @@ -482,7 +481,7 @@ fn split_graph( // Test an epoch on an empty graph. // #[test] // fn test_overflow() { -// new_test_ext().execute_with(|| { +// new_test_ext(1).execute_with(|| { // log::info!("test_overflow:"); // let netuid: u16 = 1; // add_network(netuid, 0, 0); @@ -536,7 +535,7 @@ fn split_graph( // Test an epoch on an empty graph. // #[test] // fn test_nill_epoch_subtensor() { -// new_test_ext().execute_with(|| { +// new_test_ext(1).execute_with(|| { // log::info!("test_nill_epoch:"); // SubtensorModule::epoch(0, 0); // }); @@ -545,7 +544,7 @@ fn split_graph( // Test an epoch on a graph with a single item. #[test] fn test_1_graph() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { log::info!("test_1_graph:"); let netuid: u16 = 1; let coldkey = U256::from(0); @@ -562,13 +561,13 @@ fn test_1_graph() { assert_ok!(SubtensorModule::set_weights( RuntimeOrigin::signed(U256::from(uid)), netuid, - vec![uid as u16], + vec![uid], 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(&vec![netuid], vec![1_000_000_000]); + SubtensorModule::set_emission_values(&[netuid], vec![1_000_000_000]).unwrap(); assert_eq!( SubtensorModule::get_subnet_emission_value(netuid), 1_000_000_000 @@ -593,7 +592,7 @@ fn test_1_graph() { // Test an epoch on a graph with two items. #[test] fn test_10_graph() { - new_test_ext().execute_with(|| { + new_test_ext(1).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) { @@ -665,7 +664,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 vec![false, true] { + for server_self in [false, true] { // server-self weight off/on let (validators, servers) = distribute_nodes( validators_n as usize, @@ -674,7 +673,7 @@ fn test_512_graph() { ); let server: usize = servers[0] as usize; let validator: usize = validators[0] as usize; - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { init_run_epochs( netuid, network_n, @@ -683,9 +682,9 @@ fn test_512_graph() { epochs, max_stake_per_validator, server_self, - &vec![], + &[], false, - &vec![], + &[], false, false, 0, @@ -735,7 +734,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 vec![false, true] { + for server_self in [false, true] { // server-self weight off/on let (validators, servers) = distribute_nodes( validators_n as usize, @@ -744,6 +743,7 @@ 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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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 vec![false, true] { + for server_self in [false, true] { // server-self weight off/on - new_test_ext().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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 - run_to_block( 1 ); // run to next block to ensure weights are set on nodes after their registration block + next_block(); // 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)); - run_to_block(2); + next_block(); 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)); - run_to_block(3); + next_block(); 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)); - run_to_block(4); + next_block(); 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)); - run_to_block(5); + next_block(); 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); - run_to_block(6); + next_block(); 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); - run_to_block(7); + next_block(); 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); - run_to_block(8); + next_block(); if sparse { SubtensorModule::epoch( netuid, 1_000_000_000 ); } else { SubtensorModule::epoch_dense( netuid, 1_000_000_000 ); } /* current_block: 8 @@ -1265,12 +1265,13 @@ 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().execute_with(|| { + new_test_ext(1).execute_with(|| { + System::set_block_number(0); 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 = 0; + let block_number: u64 = System::block_number(); let stake: u64 = 1; add_network(netuid, tempo, 0); SubtensorModule::set_max_allowed_uids(netuid, n); @@ -1311,7 +1312,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 - run_to_block(1); // run to next block to ensure weights are set on nodes after their registration block + next_block(); // 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 { @@ -1329,7 +1330,7 @@ fn test_active_stake() { SubtensorModule::epoch_dense(netuid, 1_000_000_000); } let bonds = SubtensorModule::get_bonds(netuid); - for uid in 0..n as u16 { + for uid in 0..n { // log::info!("\n{uid}" ); // uid_stats(netuid, uid); // log::info!("bonds: {:?}", bonds[uid as usize]); @@ -1342,12 +1343,13 @@ fn test_active_stake() { 250000000 ); // Note E = 0.5 / (n/2) * 1_000_000_000 = 250_000_000 } - 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 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 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 + 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 } } let activity_cutoff: u64 = SubtensorModule::get_activity_cutoff(netuid) as u64; @@ -1398,7 +1400,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) as u16 { + for validator in 1..(n / 2) { assert_eq!( SubtensorModule::get_dividends_for_uid(netuid, validator), 29490 @@ -1470,12 +1472,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().execute_with(|| { + new_test_ext(1).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 = 0; + let mut block_number: u64 = System::block_number(); let stake: u64 = 1; add_network(netuid, tempo, 0); SubtensorModule::set_max_allowed_uids(netuid, n); @@ -1484,6 +1486,7 @@ 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 { @@ -1510,13 +1513,15 @@ 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 - run_to_block(1); - block_number += 1; // run to next block to ensure weights are set on nodes after their registration block + 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); // === 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 { @@ -1578,6 +1583,9 @@ 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, @@ -1593,7 +1601,7 @@ fn test_outdated_weights() { SubtensorModule::get_hotkey_for_net_and_uid(netuid, deregistered_uid) .expect("Not registered") ); - run_to_block(2); // run to next block to outdate weights and bonds set on deregistered uid + next_block(); // run to next block to outdate weights and bonds set on deregistered uid // === Update weights from only uid=0 assert_ok!(SubtensorModule::set_weights( @@ -1649,7 +1657,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().execute_with(|| { + new_test_ext(1).execute_with(|| { let sparse: bool = true; let n: u16 = 2; let netuid: u16 = 1; @@ -1705,13 +1713,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) as u16 { + for validator in 0..(n / 2) { assert_eq!( SubtensorModule::get_emission_for_uid(netuid, validator), 1000000000 ); // Note E = 1 * 1_000_000_000 } - for server in (n / 2)..n as u16 { + for server in (n / 2)..n { assert_eq!(SubtensorModule::get_emission_for_uid(netuid, server), 0); // no stake } @@ -1741,13 +1749,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) as u16 { + for validator in 0..(n / 2) { assert_eq!( SubtensorModule::get_emission_for_uid(netuid, validator), 1000000000 ); // Note E = 1 * 1_000_000_000 } - for server in (n / 2)..n as u16 { + for server in (n / 2)..n { assert_eq!(SubtensorModule::get_emission_for_uid(netuid, server), 0); // no stake } @@ -1796,13 +1804,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) as u16 { + for validator in 0..(n / 2) { assert_eq!( SubtensorModule::get_emission_for_uid(netuid, validator), 1000000000 ); // Note E = 1 * 1_000_000_000 } - for server in (n / 2)..n as u16 { + for server in (n / 2)..n { assert_eq!(SubtensorModule::get_emission_for_uid(netuid, server), 0); // no stake } @@ -1830,7 +1838,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 as u16 { + for validator in 0..n { assert_eq!( SubtensorModule::get_emission_for_uid(netuid, validator), 1000000000 / (n as u64) @@ -1846,13 +1854,10 @@ 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 vec![(2, 1), (4, 2), (8, 4)] { + for (network_n, validators_n) in [(2, 1), (4, 2), (8, 4)] { for assignment in 0..=1 { - let (validators, servers) = distribute_nodes( - validators_n as usize, - network_n as usize, - interleave as usize, - ); + let (validators, servers) = + distribute_nodes(validators_n as usize, network_n, interleave as usize); let correct: bool = true; let mut stake: Vec = vec![0; network_n]; for validator in &validators { @@ -1867,7 +1872,7 @@ fn test_validator_permits() { _ => 0, }; } - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let block_number: u64 = 0; add_network(netuid, tempo, 0); SubtensorModule::set_max_allowed_uids(netuid, network_n as u16); @@ -2042,7 +2047,7 @@ fn test_validator_permits() { // interleave as usize, // ); -// new_test_ext().execute_with(|| { +// new_test_ext(1).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 4b681e6213..2f634d7c04 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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(0).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(&vec![netuid], vec![emission]); // Set the emission value for the network to 1_000_000_000. + SubtensorModule::set_emission_values(&[netuid], vec![emission]).unwrap(); // 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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).execute_with(|| { // Create subnet 3 add_network(3, 1, 0); - assert_eq!(SubtensorModule::if_subnet_exist(3), true); + assert!(SubtensorModule::if_subnet_exist(3)); // Run the migration to transfer ownership pallet_subtensor::migration::migrate_delete_subnet_3::(); - assert_eq!(SubtensorModule::if_subnet_exist(3), false); + assert!(!SubtensorModule::if_subnet_exist(3)); }) } #[test] fn test_migration_delete_subnet_21() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { // Create subnet 21 add_network(21, 1, 0); - assert_eq!(SubtensorModule::if_subnet_exist(21), true); + assert!(SubtensorModule::if_subnet_exist(21)); // Run the migration to transfer ownership pallet_subtensor::migration::migrate_delete_subnet_21::(); - assert_eq!(SubtensorModule::if_subnet_exist(21), false); + assert!(!SubtensorModule::if_subnet_exist(21)); }) } diff --git a/pallets/subtensor/tests/mock.rs b/pallets/subtensor/tests/mock.rs index 2a4424d408..3075bd1023 100644 --- a/pallets/subtensor/tests/mock.rs +++ b/pallets/subtensor/tests/mock.rs @@ -1,4 +1,4 @@ -use frame_support::traits::{Hash, StorageMapShim}; +use frame_support::traits::Hash; use frame_support::{ assert_ok, parameter_types, traits::{Everything, Hooks}, @@ -8,24 +8,19 @@ 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}, - DispatchResult, + BuildStorage, 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 where - Block = Block, - NodeBlock = Block, - UncheckedExtrinsic = UncheckedExtrinsic, + pub enum Test { - 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}, @@ -72,17 +67,17 @@ impl pallet_balances::Config for Test { type Balance = Balance; type RuntimeEvent = RuntimeEvent; type DustRemoval = (); - type ExistentialDeposit = (); - type AccountStore = StorageMapShim< - pallet_balances::Account, - frame_system::Provider, - AccountId, - pallet_balances::AccountData, - >; + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; type MaxLocks = (); type WeightInfo = (); type MaxReserves = (); type ReserveIdentifier = (); + + type RuntimeHoldReason = (); + type FreezeIdentifier = (); + type MaxHolds = (); + type MaxFreezes = (); } impl system::Config for Test { @@ -92,31 +87,30 @@ 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 = (); + type AccountData = pallet_balances::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_ref_time(1024)); + pub BlockWeights: limits::BlockWeights = limits::BlockWeights::simple_max(weights::Weight::from_parts(1024, 0)); pub const ExistentialDeposit: Balance = 1; pub const TransactionByteFee: Balance = 100; pub const SDebug:u64 = 1; @@ -242,7 +236,7 @@ impl CollectiveInterface for TriumvirateVotes { index: u32, approve: bool, ) -> Result { - Triumvirate::do_vote(hotkey.clone(), proposal, index, approve) + Triumvirate::do_vote(*hotkey, proposal, index, approve) } } @@ -367,26 +361,23 @@ impl pallet_utility::Config for Test { type WeightInfo = pallet_utility::weights::SubstrateWeight; } -// Build genesis storage according to the mock runtime. -//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 { +// Build genesis storage according to the mock runtime. +pub fn new_test_ext(block_number: BlockNumber) -> sp_io::TestExternalities { sp_tracing::try_init_simple(); - frame_system::GenesisConfig::default() - .build_storage::() - .unwrap() - .into() + 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 } #[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:: { @@ -423,6 +414,20 @@ 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 2ecf88d3a1..2680d9321c 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_ref_time(50000000), +// weight: frame_support::weights::Weight::from_parts(50000000, 0), // class: DispatchClass::Operational, // pays_fee: Pays::No // } @@ -176,7 +176,7 @@ // assert_eq!( // call.get_dispatch_info(), // DispatchInfo { -// weight: frame_support::weights::Weight::from_ref_time(28000000), +// weight: frame_support::weights::Weight::from_parts(28000000, 0), // class: DispatchClass::Operational, // pays_fee: Pays::No // } diff --git a/pallets/subtensor/tests/neuron_info.rs b/pallets/subtensor/tests/neuron_info.rs index 3eef0ce6ba..10df1c07da 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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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(0 + index); - let coldkey = U256::from(0 + index); + let hotkey = U256::from(index); + let coldkey = U256::from(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().execute_with(|| { + new_test_ext(1).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 89bea43552..6787291b99 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_ok}; +use frame_support::{assert_err, assert_noop, 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().execute_with(|| { + new_test_ext(1).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_ref_time(91000000), + weight: frame_support::weights::Weight::from_parts(91000000, 0), 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().execute_with(|| { + new_test_ext(1).execute_with(|| { assert_eq!(SubtensorModule::get_difficulty(1).as_u64(), 10000); }); } #[test] fn test_registration_invalid_seal_hotkey() { - new_test_ext().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -154,17 +154,52 @@ 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().execute_with(|| { + 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 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, @@ -201,23 +236,25 @@ 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 }); } #[test] fn test_registration_rate_limit_exceeded() { - new_test_ext().execute_with(|| { + 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 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, @@ -246,28 +283,83 @@ fn test_registration_rate_limit_exceeded() { }); } -/******************************************** - registration::do_burned_registration tests -*********************************************/ - #[test] -fn test_burned_registration_under_limit() { - new_test_ext().execute_with(|| { +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 max_registrants = 2; - SubtensorModule::set_target_registrations_per_interval(netuid, max_registrants); + 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 call_burned_register: pallet_subtensor::Call = pallet_subtensor::Call::burned_register { @@ -283,34 +375,32 @@ 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); }); } #[test] fn test_burned_registration_rate_limit_exceeded() { - new_test_ext().execute_with(|| { + 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 { @@ -335,9 +425,58 @@ 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().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let hotkey_account_id = U256::from(1); @@ -356,7 +495,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) as u64, + SubtensorModule::get_coldkey_balance(&coldkey_account_id), 10000 - burn_cost ); // funds drained on reg. // Check if neuron has added to the specified network(netuid) @@ -382,9 +521,35 @@ 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().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let burn_cost: u64 = 1000; @@ -431,7 +596,7 @@ fn test_burn_adjustment() { #[test] #[cfg(not(tarpaulin))] fn test_registration_too_many_registrations_per_block() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; add_network(netuid, tempo, 0); @@ -627,7 +792,7 @@ fn test_registration_too_many_registrations_per_block() { #[test] fn test_registration_too_many_registrations_per_interval() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; add_network(netuid, tempo, 0); @@ -818,7 +983,7 @@ fn test_registration_immunity_period() { //impl this test when epoch impl and ca #[test] fn test_registration_already_active_hotkey() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -868,7 +1033,7 @@ fn test_registration_already_active_hotkey() { #[test] fn test_registration_invalid_seal() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -895,7 +1060,8 @@ fn test_registration_invalid_seal() { #[test] fn test_registration_invalid_block_number() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { + System::set_block_number(0); let block_number: u64 = 1; let netuid: u16 = 1; let tempo: u16 = 13; @@ -926,7 +1092,7 @@ fn test_registration_invalid_block_number() { #[test] fn test_registration_invalid_difficulty() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -959,7 +1125,7 @@ fn test_registration_invalid_difficulty() { #[test] fn test_registration_failed_no_signature() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let block_number: u64 = 1; let netuid: u16 = 1; let hotkey_account_id = U256::from(1); @@ -981,16 +1147,17 @@ fn test_registration_failed_no_signature() { hotkey_account_id, coldkey_account_id, ); - assert_eq!(result, Err(DispatchError::BadOrigin.into())); + assert_eq!(result, Err(DispatchError::BadOrigin)); }); } #[test] fn test_registration_get_uid_to_prune_all_in_immunity_period() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { + System::set_block_number(0); let netuid: u16 = 1; add_network(netuid, 0, 0); - log::info!("add netweork"); + log::info!("add network"); 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); @@ -1010,10 +1177,11 @@ 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().execute_with(|| { + new_test_ext(1).execute_with(|| { + System::set_block_number(0); let netuid: u16 = 1; add_network(netuid, 0, 0); - log::info!("add netweork"); + log::info!("add network"); 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); @@ -1035,7 +1203,7 @@ fn test_registration_get_uid_to_prune_none_in_immunity_period() { #[test] fn test_registration_pruning() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let block_number: u64 = 0; let tempo: u16 = 13; @@ -1111,7 +1279,7 @@ fn test_registration_pruning() { #[test] fn test_registration_get_neuron_metadata() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let block_number: u64 = 0; let tempo: u16 = 13; @@ -1147,7 +1315,7 @@ fn test_registration_get_neuron_metadata() { #[test] fn test_registration_add_network_size() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let netuid2: u16 = 2; let block_number: u64 = 0; @@ -1217,7 +1385,7 @@ fn test_registration_add_network_size() { #[test] fn test_burn_registration_increase_recycled_rao() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let netuid2: u16 = 2; @@ -1225,10 +1393,8 @@ 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 as u64), - ); + let _ = + Balances::deposit_creating(&coldkey_account_id, Balance::from(1_000_000_000_000_u64)); add_network(netuid, 13, 0); assert_eq!(SubtensorModule::get_subnetwork_n(netuid), 0); @@ -1267,7 +1433,7 @@ fn test_burn_registration_increase_recycled_rao() { #[test] fn test_full_pass_through() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { // Create 3 networks. let netuid0: u16 = 1; let netuid1: u16 = 2; @@ -1501,7 +1667,7 @@ fn test_full_pass_through() { // DEPRECATED #[test] // fn test_network_connection_requirement() { -// new_test_ext().execute_with(|| { +// new_test_ext(1).execute_with(|| { // // Add a networks and connection requirements. // let netuid_a: u16 = 0; // let netuid_b: u16 = 1; @@ -1685,7 +1851,7 @@ fn test_full_pass_through() { #[test] fn test_registration_origin_hotkey_mismatch() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -1717,7 +1883,7 @@ fn test_registration_origin_hotkey_mismatch() { #[test] fn test_registration_disabled() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let block_number: u64 = 0; let netuid: u16 = 1; let tempo: u16 = 13; @@ -1751,7 +1917,7 @@ fn test_registration_disabled() { #[ignore] #[test] fn test_hotkey_swap_ok() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let hotkey_account_id = U256::from(1); @@ -1791,7 +1957,7 @@ fn test_hotkey_swap_ok() { #[ignore] #[test] fn test_hotkey_swap_not_owner() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let hotkey_account_id = U256::from(1); @@ -1827,7 +1993,7 @@ fn test_hotkey_swap_not_owner() { #[ignore] #[test] fn test_hotkey_swap_same_key() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let hotkey_account_id = U256::from(1); @@ -1861,7 +2027,7 @@ fn test_hotkey_swap_same_key() { #[ignore] #[test] fn test_hotkey_swap_registered_key() { - new_test_ext().execute_with(|| { + new_test_ext(1).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 58bc892de6..27a652851c 100644 --- a/pallets/subtensor/tests/root.rs +++ b/pallets/subtensor/tests/root.rs @@ -2,7 +2,6 @@ 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}; @@ -20,9 +19,8 @@ fn record(event: RuntimeEvent) -> EventRecord { #[test] fn test_root_register_network_exist() { - new_test_ext().execute_with(|| { + new_test_ext(1).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( @@ -34,7 +32,7 @@ fn test_root_register_network_exist() { #[test] fn test_root_register_normal_on_root_fails() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { migration::migrate_create_root_network::(); // Test fails because normal registrations are not allowed // on the root network. @@ -51,7 +49,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(); @@ -71,14 +69,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().execute_with(|| { + new_test_ext(1).execute_with(|| { migration::migrate_create_root_network::(); // Add two networks. let root_netuid: u16 = 0; @@ -111,7 +109,7 @@ fn test_root_register_stake_based_pruning_works() { hot, 1000 + (i as u64) )); - // Check succesfull registration. + // Check successful 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)); @@ -125,7 +123,7 @@ fn test_root_register_stake_based_pruning_works() { <::RuntimeOrigin>::signed(cold), hot, )); - // Check succesfull registration. + // Check successful 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)); @@ -140,12 +138,12 @@ fn test_root_register_stake_based_pruning_works() { <::RuntimeOrigin>::signed(cold), hot, )); - // Check succesfull registration. + // Check successful 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 - // dont have enough stake. + // don't have enough stake. for i in 0..64 { let hot: U256 = U256::from(i); let cold: U256 = U256::from(i); @@ -156,8 +154,8 @@ fn test_root_register_stake_based_pruning_works() { ), Err(Error::::StakeTooLowForRoot.into()) ); - // Check for unsuccesfull registration. - assert!(!SubtensorModule::get_uid_for_net_and_hotkey(root_netuid, &hot).is_ok()); + // Check for unsuccessful registration. + assert!(SubtensorModule::get_uid_for_net_and_hotkey(root_netuid, &hot).is_err()); // Check that they are NOT senate members assert!(!SubtensorModule::is_senate_member(&hot)); } @@ -166,7 +164,8 @@ fn test_root_register_stake_based_pruning_works() { #[test] fn test_root_set_weights() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { + System::set_block_number(0); migration::migrate_create_root_network::(); let n: usize = 10; @@ -267,7 +266,8 @@ fn test_root_set_weights() { #[test] fn test_root_set_weights_out_of_order_netuids() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { + System::set_block_number(0); migration::migrate_create_root_network::(); let n: usize = 10; @@ -383,7 +383,8 @@ fn test_root_set_weights_out_of_order_netuids() { #[test] fn test_root_subnet_creation_deletion() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { + System::set_block_number(0); migration::migrate_create_root_network::(); // Owner of subnets. let owner: U256 = U256::from(0); @@ -462,7 +463,8 @@ fn test_root_subnet_creation_deletion() { #[test] fn test_network_pruning() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { + System::set_block_number(0); migration::migrate_create_root_network::(); assert_eq!(SubtensorModule::get_total_issuance(), 0); @@ -541,7 +543,7 @@ fn test_network_pruning() { #[test] fn test_network_prune_results() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { migration::migrate_create_root_network::(); SubtensorModule::set_network_immunity_period(3); @@ -567,22 +569,22 @@ fn test_network_prune_results() { step_block(3); // lowest emission - SubtensorModule::set_emission_values(&vec![1u16, 2u16, 3u16], vec![5u64, 4u64, 4u64]); + SubtensorModule::set_emission_values(&[1u16, 2u16, 3u16], vec![5u64, 4u64, 4u64]).unwrap(); assert_eq!(SubtensorModule::get_subnet_to_prune(), 2u16); // equal emission, creation date - SubtensorModule::set_emission_values(&vec![1u16, 2u16, 3u16], vec![5u64, 5u64, 4u64]); + SubtensorModule::set_emission_values(&[1u16, 2u16, 3u16], vec![5u64, 5u64, 4u64]).unwrap(); assert_eq!(SubtensorModule::get_subnet_to_prune(), 3u16); // equal emission, creation date - SubtensorModule::set_emission_values(&vec![1u16, 2u16, 3u16], vec![4u64, 5u64, 5u64]); + SubtensorModule::set_emission_values(&[1u16, 2u16, 3u16], vec![4u64, 5u64, 5u64]).unwrap(); assert_eq!(SubtensorModule::get_subnet_to_prune(), 1u16); }); } #[test] fn test_weights_after_network_pruning() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { migration::migrate_create_root_network::(); assert_eq!(SubtensorModule::get_total_issuance(), 0); @@ -593,14 +595,13 @@ 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 as u64); + SubtensorModule::set_weights_set_rate_limit(root_netuid, 0_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); @@ -649,7 +650,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); @@ -670,7 +671,7 @@ fn test_weights_after_network_pruning() { )); // Subnet should not exist, as it would replace a previous subnet. - assert!(!SubtensorModule::if_subnet_exist((i as u16) + 1)); + assert!(!SubtensorModule::if_subnet_exist(i + 1)); log::info!( "Root network weights: {:?}", @@ -693,12 +694,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().execute_with(|| { + new_test_ext(1).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 i in 0..n_halvings { + for _ in 0..n_halvings { let block_emission_10_500_000x: u64 = SubtensorModule::get_block_emission_for_issuance(total_issuance).unwrap() * 10_500_000; @@ -713,7 +714,7 @@ fn test_issance_bounds() { /// `cargo test --package pallet-subtensor --test root test_halving` #[test] fn test_halving() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let expected_emissions: [(u64, u64); 43] = [ (0, 1_000_000_000), // Testing at zero issuance. (1_776_000, 1_000_000_000), @@ -776,13 +777,15 @@ fn test_halving() { #[test] fn test_get_emission_across_entire_issuance_range() { - new_test_ext().execute_with(|| { + new_test_ext(1).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; - for issuance in (0..=total_supply).step_by(step) { + let mut issuance = 0; + + // Issuance won't reach total supply. + while issuance <= 20_900_000_000_000_000 { SubtensorModule::set_total_issuance(issuance); let issuance_f64 = issuance as f64; @@ -801,7 +804,8 @@ fn test_get_emission_across_entire_issuance_range() { "Issuance: {}", issuance_f64 ); - step = expected_emission as usize; + + issuance += expected_emission; } }); } diff --git a/pallets/subtensor/tests/senate.rs b/pallets/subtensor/tests/senate.rs index ca252c39c7..a1bdae56db 100644 --- a/pallets/subtensor/tests/senate.rs +++ b/pallets/subtensor/tests/senate.rs @@ -9,6 +9,7 @@ use sp_runtime::{ BuildStorage, }; +use frame_system::pallet_prelude::*; use frame_system::Config; use pallet_collective::Event as CollectiveEvent; use pallet_subtensor::migration; @@ -17,7 +18,7 @@ use pallet_subtensor::Error; pub fn new_test_ext() -> sp_io::TestExternalities { sp_tracing::try_init_simple(); - let mut ext: sp_io::TestExternalities = GenesisConfig { + let mut ext: sp_io::TestExternalities = RuntimeGenesisConfig { senate_members: pallet_membership::GenesisConfig:: { members: bounded_vec![1.into(), 2.into(), 3.into(), 4.into(), 5.into()], phantom: Default::default(), @@ -75,8 +76,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) as u64, - 10000 - burn_cost + SubtensorModule::get_coldkey_balance(&coldkey_account_id), + (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); @@ -103,18 +104,18 @@ fn test_senate_join_works() { )); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&staker_coldkey, &hotkey_account_id), - 100_000 + 99_999 ); assert_eq!( SubtensorModule::get_total_stake_for_hotkey(&hotkey_account_id), - 100_000 + 99_999 ); assert_ok!(SubtensorModule::root_register( <::RuntimeOrigin>::signed(coldkey_account_id), hotkey_account_id )); - assert_eq!(Senate::is_member(&hotkey_account_id), true); + assert!(Senate::is_member(&hotkey_account_id)); }); } @@ -144,8 +145,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) as u64, - 10000 - burn_cost + SubtensorModule::get_coldkey_balance(&coldkey_account_id), + (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); @@ -172,18 +173,18 @@ fn test_senate_vote_works() { )); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&staker_coldkey, &hotkey_account_id), - 100_000 + 99_999 ); assert_eq!( SubtensorModule::get_total_stake_for_hotkey(&hotkey_account_id), - 100_000 + 99_999 ); assert_ok!(SubtensorModule::root_register( <::RuntimeOrigin>::signed(coldkey_account_id), hotkey_account_id )); - assert_eq!(Senate::is_member(&hotkey_account_id), true); + assert!(Senate::is_member(&hotkey_account_id)); System::reset_events(); @@ -194,8 +195,7 @@ fn test_senate_vote_works() { RuntimeOrigin::signed(senate_hotkey), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(100u64) - .ok() + TryInto::>::try_into(100u64) .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) as u64, - 10000 - burn_cost + SubtensorModule::get_coldkey_balance(&coldkey_account_id), + (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,8 +271,7 @@ fn test_senate_vote_not_member() { RuntimeOrigin::signed(senate_hotkey), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(100u64) - .ok() + TryInto::>::try_into(100u64) .expect("convert u64 to block number.") )); @@ -314,8 +313,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) as u64, - 10000 - burn_cost + SubtensorModule::get_coldkey_balance(&coldkey_account_id), + (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); @@ -342,18 +341,18 @@ fn test_senate_leave_works() { )); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&staker_coldkey, &hotkey_account_id), - 100_000 + 99_999 ); assert_eq!( SubtensorModule::get_total_stake_for_hotkey(&hotkey_account_id), - 100_000 + 99_999 ); assert_ok!(SubtensorModule::root_register( <::RuntimeOrigin>::signed(coldkey_account_id), hotkey_account_id )); - assert_eq!(Senate::is_member(&hotkey_account_id), true); + assert!(Senate::is_member(&hotkey_account_id)); }); } @@ -384,8 +383,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) as u64, - 10000 - burn_cost + SubtensorModule::get_coldkey_balance(&coldkey_account_id), + (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); @@ -412,18 +411,18 @@ fn test_senate_leave_vote_removal() { )); assert_eq!( SubtensorModule::get_stake_for_coldkey_and_hotkey(&staker_coldkey, &hotkey_account_id), - 100_000 + 99_999 ); assert_eq!( SubtensorModule::get_total_stake_for_hotkey(&hotkey_account_id), - 100_000 + 99_999 ); assert_ok!(SubtensorModule::root_register( coldkey_origin.clone(), hotkey_account_id )); - assert_eq!(Senate::is_member(&hotkey_account_id), true); + assert!(Senate::is_member(&hotkey_account_id)); let proposal = make_proposal(42); let proposal_len: u32 = proposal.using_encoded(|p| p.len() as u32); @@ -432,8 +431,7 @@ fn test_senate_leave_vote_removal() { RuntimeOrigin::signed(senate_hotkey), Box::new(proposal.clone()), proposal_len, - TryInto::<::BlockNumber>::try_into(100u64) - .ok() + TryInto::>::try_into(100u64) .expect("convert u64 to block number.") )); @@ -485,7 +483,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_ok() + SubtensorModule::get_uid_for_net_and_hotkey(root_netuid, &hotkey_account_id).is_err() ); assert_eq!( Triumvirate::has_voted(hash, 0, &hotkey_account_id), @@ -521,8 +519,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) as u64, - 10000 - burn_cost + SubtensorModule::get_coldkey_balance(&coldkey_account_id), + (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); @@ -550,26 +548,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 + stake_amount - 1 // Need to account for ED ); assert_eq!( SubtensorModule::get_total_stake_for_hotkey(&hotkey_account_id), - stake_amount + stake_amount - 1 // Need to account for ED ); assert_ok!(SubtensorModule::root_register( <::RuntimeOrigin>::signed(coldkey_account_id), hotkey_account_id )); - assert_eq!(Senate::is_member(&hotkey_account_id), true); + assert!(Senate::is_member(&hotkey_account_id)); step_block(100); assert_ok!(SubtensorModule::remove_stake( <::RuntimeOrigin>::signed(staker_coldkey), hotkey_account_id, - stake_amount + stake_amount - 1 )); - assert_eq!(Senate::is_member(&hotkey_account_id), true); + assert!(Senate::is_member(&hotkey_account_id)); }); } diff --git a/pallets/subtensor/tests/serving.rs b/pallets/subtensor/tests/serving.rs index 50895fd1ac..c637028c37 100644 --- a/pallets/subtensor/tests/serving.rs +++ b/pallets/subtensor/tests/serving.rs @@ -12,8 +12,9 @@ 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 { - return Ipv6Addr::new(a, b, c, d, e, f, g, h).into(); + 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 @@ -21,13 +22,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(); - return u128::from(integer); + u128::from(integer) } } #[test] fn test_serving_subscribe_ok_dispatch_info_ok() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let version: u32 = 2; let ip: u128 = 1676056785; @@ -49,7 +50,7 @@ fn test_serving_subscribe_ok_dispatch_info_ok() { assert_eq!( call.get_dispatch_info(), DispatchInfo { - weight: frame_support::weights::Weight::from_ref_time(19000000), + weight: frame_support::weights::Weight::from_parts(19000000, 0), class: DispatchClass::Normal, pays_fee: Pays::No } @@ -59,7 +60,7 @@ fn test_serving_subscribe_ok_dispatch_info_ok() { #[test] fn test_serving_ok() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -97,7 +98,7 @@ fn test_serving_ok() { #[test] fn test_serving_set_metadata_update() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -162,7 +163,7 @@ fn test_serving_set_metadata_update() { #[test] #[cfg(not(tarpaulin))] fn test_axon_serving_rate_limit_exceeded() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -244,7 +245,7 @@ fn test_axon_serving_rate_limit_exceeded() { #[test] fn test_axon_invalid_port() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -278,7 +279,7 @@ fn test_axon_invalid_port() { #[test] fn test_prometheus_serving_subscribe_ok_dispatch_info_ok() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let version: u32 = 2; let ip: u128 = 1676056785; @@ -294,7 +295,7 @@ fn test_prometheus_serving_subscribe_ok_dispatch_info_ok() { assert_eq!( call.get_dispatch_info(), DispatchInfo { - weight: frame_support::weights::Weight::from_ref_time(17000000), + weight: frame_support::weights::Weight::from_parts(17000000, 0), class: DispatchClass::Normal, pays_fee: Pays::No } @@ -304,7 +305,7 @@ fn test_prometheus_serving_subscribe_ok_dispatch_info_ok() { #[test] fn test_prometheus_serving_ok() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -333,7 +334,7 @@ fn test_prometheus_serving_ok() { #[test] fn test_prometheus_serving_set_metadata_update() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -380,7 +381,7 @@ fn test_prometheus_serving_set_metadata_update() { #[test] #[cfg(not(tarpaulin))] fn test_prometheus_serving_rate_limit_exceeded() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -443,7 +444,7 @@ fn test_prometheus_serving_rate_limit_exceeded() { #[test] fn test_prometheus_invalid_port() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_account_id = U256::from(1); let netuid: u16 = 1; let tempo: u16 = 13; @@ -471,84 +472,81 @@ fn test_prometheus_invalid_port() { #[test] fn test_serving_is_valid_ip_type_ok_ipv4() { - new_test_ext().execute_with(|| { - assert_eq!(SubtensorModule::is_valid_ip_type(4), true); + new_test_ext(1).execute_with(|| { + assert!(SubtensorModule::is_valid_ip_type(4)); }); } #[test] fn test_serving_is_valid_ip_type_ok_ipv6() { - new_test_ext().execute_with(|| { - assert_eq!(SubtensorModule::is_valid_ip_type(6), true); + new_test_ext(1).execute_with(|| { + assert!(SubtensorModule::is_valid_ip_type(6)); }); } #[test] fn test_serving_is_valid_ip_type_nok() { - new_test_ext().execute_with(|| { - assert_eq!(SubtensorModule::is_valid_ip_type(10), false); + new_test_ext(1).execute_with(|| { + assert!(!SubtensorModule::is_valid_ip_type(10)); }); } #[test] fn test_serving_is_valid_ip_address_ipv4() { - new_test_ext().execute_with(|| { - assert_eq!( - SubtensorModule::is_valid_ip_address(4, test::ipv4(8, 8, 8, 8)), - true - ); + new_test_ext(1).execute_with(|| { + assert!(SubtensorModule::is_valid_ip_address( + 4, + test::ipv4(8, 8, 8, 8) + )); }); } #[test] fn test_serving_is_valid_ip_address_ipv6() { - 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 - ); + 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) + )); }); } #[test] fn test_serving_is_invalid_ipv4_address() { - 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 - ); + 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) + )); }); } #[test] fn test_serving_is_invalid_ipv6_address() { - 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 - ); + 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) + )); }); } diff --git a/pallets/subtensor/tests/staking.rs b/pallets/subtensor/tests/staking.rs index 595ab87370..da157cb5bd 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().execute_with(|| { + new_test_ext(1).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_ref_time(65000000), + weight: frame_support::weights::Weight::from_parts(65000000, 0), 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().execute_with(|| { + new_test_ext(1).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), - 10000 + 9999 ); - // Check if balance has decreased - assert_eq!(SubtensorModule::get_coldkey_balance(&coldkey_account_id), 0); + // Check if balance has decreased + assert_eq!(SubtensorModule::get_coldkey_balance(&coldkey_account_id), 1); // Check if total stake has increased accordingly. - assert_eq!(SubtensorModule::get_total_stake(), 10000); + assert_eq!(SubtensorModule::get_total_stake(), 9999); }); } #[test] fn test_dividends_with_run_to_block() { - new_test_ext().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(0).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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_ref_time(63000000) + weight: frame_support::weights::Weight::from_parts(63000000, 0) .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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_id = U256::from(5445); let coldkey_id = U256::from(5443433); let amount: u64 = 10000; @@ -925,17 +925,18 @@ 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) => neuron_uid = k, + + let neuron_uid = match SubtensorModule::get_uid_for_net_and_hotkey(netuid, &hotkey_id) { + Ok(k) => 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) => neuron_uid_ex = k, + + let neuron_uid_ex = match SubtensorModule::get_uid_for_net_and_hotkey(netuid_ex, &hotkey_id) + { + Ok(k) => k, Err(e) => panic!("Error: {:?}", e), - } + }; //Add some stake that can be removed SubtensorModule::increase_stake_on_hotkey_account(&hotkey_id, amount); @@ -967,7 +968,7 @@ fn test_remove_stake_from_hotkey_account_registered_in_various_networks() { // ************************************************************/ #[test] fn test_increase_total_stake_ok() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let increment = 10000; assert_eq!(SubtensorModule::get_total_stake(), 0); SubtensorModule::increase_total_stake(increment); @@ -980,7 +981,7 @@ fn test_increase_total_stake_ok() { // ************************************************************/ #[test] fn test_decrease_total_stake_ok() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let initial_total_stake = 10000; let decrement = 5000; @@ -1000,7 +1001,7 @@ fn test_decrease_total_stake_ok() { // ************************************************************/ #[test] fn test_add_balance_to_coldkey_account_ok() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let coldkey_id = U256::from(4444322); let amount = 50000; SubtensorModule::add_balance_to_coldkey_account(&coldkey_id, amount); @@ -1013,7 +1014,7 @@ fn test_add_balance_to_coldkey_account_ok() { // ************************************************************/ #[test] fn test_remove_balance_from_coldkey_account_ok() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let coldkey_account_id = U256::from(434324); // Random let ammount = 10000; // Arbitrary // Put some $$ on the bank @@ -1025,13 +1026,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_eq!(result, true); + assert!(result.is_ok()); }); } #[test] fn test_remove_balance_from_coldkey_account_failed() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let coldkey_account_id = U256::from(434324); // Random let ammount = 10000; // Arbitrary @@ -1039,7 +1040,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, false); + assert_eq!(result, Err(Error::::BalanceWithdrawalError.into())); }); } @@ -1048,7 +1049,7 @@ fn test_remove_balance_from_coldkey_account_failed() { // ************************************************************/ #[test] fn test_hotkey_belongs_to_coldkey_ok() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_id = U256::from(4434334); let coldkey_id = U256::from(34333); let netuid: u16 = 1; @@ -1067,29 +1068,29 @@ fn test_hotkey_belongs_to_coldkey_ok() { // ************************************************************/ #[test] fn test_can_remove_balane_from_coldkey_account_ok() { - new_test_ext().execute_with(|| { + new_test_ext(1).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_eq!( - SubtensorModule::can_remove_balance_from_coldkey_account(&coldkey_id, remove_amount), - true - ); + assert!(SubtensorModule::can_remove_balance_from_coldkey_account( + &coldkey_id, + remove_amount + )); }); } #[test] fn test_can_remove_balance_from_coldkey_account_err_insufficient_balance() { - new_test_ext().execute_with(|| { + new_test_ext(1).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_eq!( - SubtensorModule::can_remove_balance_from_coldkey_account(&coldkey_id, remove_amount), - false - ); + assert!(!SubtensorModule::can_remove_balance_from_coldkey_account( + &coldkey_id, + remove_amount + )); }); } /************************************************************ @@ -1097,7 +1098,7 @@ fn test_can_remove_balance_from_coldkey_account_err_insufficient_balance() { ************************************************************/ #[test] fn test_has_enough_stake_yes() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_id = U256::from(4334); let coldkey_id = U256::from(87989); let intial_amount = 10000; @@ -1115,16 +1116,17 @@ fn test_has_enough_stake_yes() { SubtensorModule::get_stake_for_coldkey_and_hotkey(&coldkey_id, &hotkey_id), 10000 ); - assert_eq!( - SubtensorModule::has_enough_stake(&coldkey_id, &hotkey_id, 5000), - true - ); + assert!(SubtensorModule::has_enough_stake( + &coldkey_id, + &hotkey_id, + 5000 + )); }); } #[test] fn test_has_enough_stake_no() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_id = U256::from(4334); let coldkey_id = U256::from(87989); let intial_amount = 0; @@ -1134,16 +1136,17 @@ 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_eq!( - SubtensorModule::has_enough_stake(&coldkey_id, &hotkey_id, 5000), - false - ); + assert!(!SubtensorModule::has_enough_stake( + &coldkey_id, + &hotkey_id, + 5000 + )); }); } #[test] fn test_non_existent_account() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { SubtensorModule::increase_stake_on_coldkey_hotkey_account( &U256::from(0), &(U256::from(0)), @@ -1166,7 +1169,7 @@ fn test_non_existent_account() { #[test] fn test_delegate_stake_division_by_zero_check() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 1; let hotkey = U256::from(1); @@ -1184,7 +1187,7 @@ fn test_delegate_stake_division_by_zero_check() { #[test] #[cfg(not(tarpaulin))] fn test_full_with_delegating() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid = 1; // Make two accounts. let hotkey0 = U256::from(1); @@ -1766,7 +1769,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().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid = 1; // Make two accounts. let hotkey0 = U256::from(1); @@ -2094,7 +2097,7 @@ fn test_full_with_delegating_some_servers() { #[test] fn test_full_block_emission_occurs() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let netuid = 1; // Make two accounts. let hotkey0 = U256::from(1); @@ -2253,7 +2256,7 @@ fn test_full_block_emission_occurs() { #[test] fn test_unstake_all_coldkeys_from_hotkey_account() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_id = U256::from(123570); let coldkey0_id = U256::from(123560); @@ -2341,7 +2344,7 @@ fn test_unstake_all_coldkeys_from_hotkey_account() { #[test] fn test_unstake_all_coldkeys_from_hotkey_account_single_staker() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let hotkey_id = U256::from(123570); let coldkey0_id = U256::from(123560); @@ -2392,7 +2395,7 @@ fn test_unstake_all_coldkeys_from_hotkey_account_single_staker() { #[test] fn test_faucet_ok() { - new_test_ext().execute_with(|| { + new_test_ext(1).execute_with(|| { let coldkey = U256::from(123560); log::info!("Creating work for submission to faucet..."); @@ -2402,7 +2405,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 = nonce + 1; + nonce += 1; work = SubtensorModule::create_seal_hash(block_number, nonce, &coldkey); } let vec_work: Vec = SubtensorModule::hash_to_vec(work); @@ -2412,7 +2415,7 @@ fn test_faucet_ok() { #[cfg(feature = "pow-faucet")] assert_ok!(SubtensorModule::do_faucet( <::RuntimeOrigin>::signed(coldkey), - 0, + block_number, nonce, vec_work )); @@ -2420,7 +2423,7 @@ fn test_faucet_ok() { #[cfg(not(feature = "pow-faucet"))] assert_ok!(SubtensorModule::do_faucet( <::RuntimeOrigin>::signed(coldkey), - 0, + block_number, nonce, vec_work )); @@ -2433,7 +2436,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().execute_with(|| { + new_test_ext(0).execute_with(|| { System::set_block_number(1); // Create accounts. @@ -2542,8 +2545,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); @@ -2579,8 +2582,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 @@ -2589,7 +2592,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); }); } @@ -2597,7 +2600,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let netuid: u16 = 1; let coldkey1 = U256::from(0); let hotkey1 = U256::from(1); @@ -2643,7 +2646,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().execute_with(|| { + new_test_ext(0).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 772fcbc222..b8a9699435 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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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().execute_with(|| { + new_test_ext(1).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 fcce1c1679..c1467abda4 100644 --- a/pallets/subtensor/tests/weights.rs +++ b/pallets/subtensor/tests/weights.rs @@ -3,7 +3,6 @@ use frame_support::{ assert_ok, dispatch::{DispatchClass, GetDispatchInfo, Pays}, }; -use frame_system::Config; use mock::*; use pallet_subtensor::Error; use sp_core::U256; @@ -18,7 +17,7 @@ use substrate_fixed::types::I32F32; #[test] #[cfg(not(tarpaulin))] fn test_set_weights_dispatch_info_ok() { - new_test_ext().execute_with(|| { + new_test_ext(0).execute_with(|| { let dests = vec![1, 1]; let weights = vec![1, 1]; let netuid: u16 = 1; @@ -39,7 +38,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let hotkey_account_id = U256::from(55); let netuid: u16 = 1; let tempo: u16 = 13; @@ -83,7 +82,7 @@ fn test_weights_err_no_validator_permit() { #[test] #[cfg(not(tarpaulin))] fn test_set_weights_min_stake_failed() { - new_test_ext().execute_with(|| { + new_test_ext(0).execute_with(|| { let dests = vec![0]; let weights = vec![1]; let netuid: u16 = 1; @@ -96,11 +95,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_eq!(SubtensorModule::check_weights_min_stake(&hotkey), false); + assert!(!SubtensorModule::check_weights_min_stake(&hotkey)); SubtensorModule::increase_stake_on_hotkey_account(&hotkey, 19_000_000_000_000); - assert_eq!(SubtensorModule::check_weights_min_stake(&hotkey), false); + assert!(!SubtensorModule::check_weights_min_stake(&hotkey)); SubtensorModule::increase_stake_on_hotkey_account(&hotkey, 20_000_000_000_000); - assert_eq!(SubtensorModule::check_weights_min_stake(&hotkey), true); + assert!(SubtensorModule::check_weights_min_stake(&hotkey)); // Check that it fails at the pallet level. SubtensorModule::set_weights_min_stake(100_000_000_000_000); @@ -129,7 +128,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let hotkey = U256::from(55); let coldkey = U256::from(66); let netuid0: u16 = 1; @@ -205,7 +204,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let hotkey_account_id = U256::from(55); let netuid: u16 = 1; let tempo: u16 = 13; @@ -260,7 +259,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let hotkey_account_id = U256::from(55); let netuid: u16 = 1; let tempo: u16 = 13; @@ -286,7 +285,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let hotkey_account_id = U256::from(666); let netuid: u16 = 1; let tempo: u16 = 13; @@ -336,7 +335,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().execute_with(|| { + new_test_ext(0).execute_with(|| { // Add network. let netuid: u16 = 1; let tempo: u16 = 100; @@ -420,18 +419,18 @@ fn test_weights_err_max_weight_limit() { // Tests the call requires a valid origin. #[test] fn test_no_signature() { - new_test_ext().execute_with(|| { + new_test_ext(0).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.into())); + assert_eq!(result, Err(DispatchError::BadOrigin)); }); } // Tests that weights cannot be set BY non-registered hotkeys. #[test] fn test_set_weights_err_not_active() { - new_test_ext().execute_with(|| { + new_test_ext(0).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; add_network(netuid, tempo, 0); @@ -458,7 +457,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let hotkey_account_id = U256::from(55); let netuid: u16 = 1; let tempo: u16 = 13; @@ -481,10 +480,10 @@ fn test_set_weights_err_invalid_uid() { }); } -// Tests that set weights fails if you dont pass enough values. +// Tests that set weights fails if you don't pass enough values. #[test] fn test_set_weight_not_enough_values() { - new_test_ext().execute_with(|| { + new_test_ext(0).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; let account_id = U256::from(1); @@ -539,7 +538,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; add_network(netuid, tempo, 0); @@ -581,7 +580,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; add_network(netuid, tempo, 0); @@ -612,7 +611,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: &Vec = &all_weights[neuron_uid as usize]; + let weights_set: &[I32F32] = &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)); }); @@ -621,7 +620,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let netuid: u16 = 1; let max_allowed: u16 = 1; @@ -630,7 +629,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].clone(); + let uid: u16 = uids[0]; let weights: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); let expected = true; @@ -643,7 +642,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let netuid: u16 = 1; let max_allowed: u16 = 3; @@ -652,7 +651,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].clone(); + let uid: u16 = uids[0]; let weights: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); let expected = true; @@ -665,7 +664,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let netuid: u16 = 1; let min_allowed_weights = 3; @@ -685,7 +684,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].clone(); + let uid: u16 = uids[0]; let expected = false; let result = SubtensorModule::check_length(netuid, uid, &uids, &weights); @@ -697,7 +696,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let max_allowed: u16 = 3; let weights: Vec = Vec::from_iter((0..max_allowed).map(|_| 0)); @@ -715,10 +714,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let max_allowed: u16 = 3; - let weights: Vec = Vec::from_iter((0..max_allowed).map(|weight| weight)); + let weights: Vec = Vec::from_iter(0..max_allowed); let expected = weights.clone(); let result = SubtensorModule::normalize_weights(weights); @@ -730,12 +729,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().execute_with(|| { + new_test_ext(0).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].clone(); + let uid: u16 = uids[0]; let weights: Vec = vec![0]; let expected = true; @@ -751,12 +750,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().execute_with(|| { + new_test_ext(0).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].clone(); + let uid: u16 = uids[0]; let weights: Vec = Vec::from_iter((0..max_allowed).map(|_id| u16::MAX)); let expected = true; @@ -772,13 +771,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().execute_with(|| { + new_test_ext(0).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].clone(); + let uid: u16 = uids[0]; let weights: Vec = Vec::from_iter((0..max_allowed).map(|id| max_weight_limit - id)); SubtensorModule::set_max_weight_limit(netuid, max_weight_limit); @@ -796,13 +795,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().execute_with(|| { + new_test_ext(0).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].clone(); + let uid: u16 = uids[0]; let weights: Vec = Vec::from_iter((0..max_allowed).map(|id| max_weight_limit + id)); SubtensorModule::set_max_weight_limit(netuid, max_weight_limit); @@ -820,11 +819,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().execute_with(|| { + new_test_ext(0).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].clone(); + let uid: u16 = uids[0]; let weights: Vec = Vec::from_iter((0..max_allowed).map(|id| id + 1)); let expected = false; @@ -840,11 +839,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().execute_with(|| { + new_test_ext(0).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].clone(); + let uid: u16 = uids[1]; let weights: Vec = vec![0]; let expected = false; @@ -861,11 +860,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().execute_with(|| { + new_test_ext(0).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].clone(); + let uid: u16 = uids[0]; let weights: Vec = vec![0]; let expected = true; @@ -881,7 +880,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; @@ -900,7 +899,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).map(|uid| uid)); + let uids: Vec = Vec::from_iter(0..max_allowed); let expected = true; let result = SubtensorModule::check_len_uids_within_allowed(netuid, &uids); @@ -914,7 +913,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().execute_with(|| { + new_test_ext(0).execute_with(|| { let netuid: u16 = 1; let tempo: u16 = 13; @@ -933,7 +932,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)).map(|uid| uid)); + let uids: Vec = Vec::from_iter(0..(max_allowed + 1)); let expected = false; let result = SubtensorModule::check_len_uids_within_allowed(netuid, &uids); diff --git a/recipe.json b/recipe.json index 5908dccca3..f9967366a4 100644 --- a/recipe.json +++ b/recipe.json @@ -1 +1,48 @@ -{"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 +{ + "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 diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 919e64fb28..5e4fd19005 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -9,6 +9,9 @@ license = "Unlicense" publish = false repository = "https://github.com/opentensor/subtensor/" +[lints] +workspace = true + [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] @@ -25,52 +28,55 @@ 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-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" } +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" } # Temporary sudo -pallet-sudo = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +pallet-sudo = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } 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-v0.9.39" } +pallet-membership = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v1.0.0" } # Multisig -pallet-multisig = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.39" } +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" } # Scheduler pallet -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" } +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" } # 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-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" } +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" } # 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-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" } +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" } # Identity registry pallet for registering project info pallet-registry = { version = "4.0.0-dev", default-features = false, path = "../pallets/registry" } @@ -78,8 +84,12 @@ 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-v0.9.39" } +substrate-wasm-builder = { version = "5.0.0-dev", git = "https://github.com/paritytech/substrate.git", optional = true, branch = "polkadot-v1.0.0" } [features] default = ["std"] @@ -106,6 +116,7 @@ std = [ "pallet-utility/std", "pallet-sudo/std", "pallet-multisig/std", + "pallet-proxy/std", "pallet-scheduler/std", "pallet-preimage/std", "pallet-commitments/std", @@ -125,6 +136,8 @@ 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", @@ -139,9 +152,14 @@ 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", @@ -159,7 +177,12 @@ 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 51baecea8a..46e39e3c56 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -6,17 +6,24 @@ #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); -use codec::Encode; +mod migrations; +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}; +use frame_support::{ + pallet_prelude::{DispatchError, DispatchResult, Get}, + traits::OnRuntimeUpgrade, +}; 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; @@ -40,8 +47,8 @@ use sp_version::RuntimeVersion; pub use frame_support::{ construct_runtime, parameter_types, traits::{ - ConstU128, ConstU32, ConstU64, ConstU8, KeyOwnerProofSystem, PrivilegeCmp, Randomness, - StorageInfo, + ConstBool, ConstU128, ConstU32, ConstU64, ConstU8, InstanceFilter, KeyOwnerProofSystem, + PrivilegeCmp, Randomness, StorageInfo, }, weights::{ constants::{ @@ -50,7 +57,7 @@ pub use frame_support::{ IdentityFee, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, }, - StorageValue, + RuntimeDebug, StorageValue, }; pub use frame_system::Call as SystemCall; pub use pallet_balances::Call as BalancesCall; @@ -85,6 +92,15 @@ 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 @@ -121,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, @@ -185,16 +201,10 @@ 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. @@ -222,6 +232,8 @@ 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 {} @@ -230,26 +242,19 @@ 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 KeyOwnerProofSystem = (); - - type KeyOwnerProof = - >::Proof; - - type KeyOwnerIdentification = >::IdentificationTuple; - - type HandleEquivocation = (); + type KeyOwnerProof = sp_core::Void; type WeightInfo = (); type MaxAuthorities = ConstU32<32>; type MaxSetIdSessionEntries = ConstU64<0>; + + type EquivocationReportSystem = (); } impl pallet_timestamp::Config for Runtime { @@ -272,7 +277,7 @@ pub const EXISTENTIAL_DEPOSIT: u64 = 500; impl pallet_balances::Config for Runtime { type MaxLocks = ConstU32<50>; - type MaxReserves = (); + type MaxReserves = ConstU32<50>; type ReserveIdentifier = [u8; 8]; // The type for recording an account's balance. type Balance = Balance; @@ -282,6 +287,11 @@ 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); @@ -471,13 +481,18 @@ 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! { - // 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; + // 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); // Additional storage item size of 32 bytes. - pub const DepositFactor: Balance = (0) as Balance * 2_000 * 10_000 + (32 as Balance) * 100 * 10_000; + pub const DepositFactor: Balance = deposit(0, 32); pub const MaxSignatories: u32 = 100; } @@ -491,6 +506,121 @@ 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; @@ -542,8 +672,8 @@ impl pallet_scheduler::Config for Runtime { parameter_types! { pub const PreimageMaxSize: u32 = 4096 * 1024; - 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; + pub const PreimageBaseDeposit: Balance = deposit(2, 64); + pub const PreimageByteDeposit: Balance = deposit(0, 1); } impl pallet_preimage::Config for Runtime { @@ -561,10 +691,10 @@ impl CanRegisterIdentity for AllowIdentityReg { #[cfg(not(feature = "runtime-benchmarks"))] fn can_register(address: &AccountId, identified: &AccountId) -> bool { if address != identified { - return SubtensorModule::coldkey_owns_hotkey(address, identified) - && SubtensorModule::is_hotkey_registered_on_network(0, identified); + SubtensorModule::coldkey_owns_hotkey(address, identified) + && SubtensorModule::is_hotkey_registered_on_network(0, identified) } else { - return SubtensorModule::is_subnet_owner(address); + SubtensorModule::is_subnet_owner(address) } } @@ -664,7 +794,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 = 1 * 7200; + pub const SubtensorInitialNetworkRateLimit: u64 = 7200; pub const SubtensorInitialTargetStakesPerInterval: u16 = 1; } @@ -788,19 +918,19 @@ impl } fn get_root_netuid() -> u16 { - return SubtensorModule::get_root_netuid(); + SubtensorModule::get_root_netuid() } fn if_subnet_exist(netuid: u16) -> bool { - return SubtensorModule::if_subnet_exist(netuid); + SubtensorModule::if_subnet_exist(netuid) } fn create_account_if_non_existent(coldkey: &AccountId, hotkey: &AccountId) { - return SubtensorModule::create_account_if_non_existent(coldkey, hotkey); + SubtensorModule::create_account_if_non_existent(coldkey, hotkey) } fn coldkey_owns_hotkey(coldkey: &AccountId, hotkey: &AccountId) -> bool { - return SubtensorModule::coldkey_owns_hotkey(coldkey, hotkey); + SubtensorModule::coldkey_owns_hotkey(coldkey, hotkey) } fn increase_stake_on_coldkey_hotkey_account( @@ -811,32 +941,28 @@ 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 { - return SubtensorModule::get_current_block_as_u64(); + SubtensorModule::get_current_block_as_u64() } fn get_subnetwork_n(netuid: u16) -> u16 { - return SubtensorModule::get_subnetwork_n(netuid); + SubtensorModule::get_subnetwork_n(netuid) } fn get_max_allowed_uids(netuid: u16) -> u16 { - return SubtensorModule::get_max_allowed_uids(netuid); + SubtensorModule::get_max_allowed_uids(netuid) } fn append_neuron(netuid: u16, new_hotkey: &AccountId, block_number: u64) { - return SubtensorModule::append_neuron(netuid, new_hotkey, block_number); + SubtensorModule::append_neuron(netuid, new_hotkey, block_number) } fn get_neuron_to_prune(netuid: u16) -> u16 { - return SubtensorModule::get_neuron_to_prune(netuid); + SubtensorModule::get_neuron_to_prune(netuid) } fn replace_neuron(netuid: u16, uid_to_replace: u16, new_hotkey: &AccountId, block_number: u64) { @@ -903,7 +1029,7 @@ impl } fn ensure_subnet_owner_or_root(o: RuntimeOrigin, netuid: u16) -> Result<(), DispatchError> { - return SubtensorModule::ensure_subnet_owner_or_root(o, netuid); + SubtensorModule::ensure_subnet_owner_or_root(o, netuid) } fn set_rho(netuid: u16, rho: u16) { @@ -951,7 +1077,7 @@ impl } fn is_hotkey_registered_on_network(netuid: u16, hotkey: &AccountId) -> bool { - return SubtensorModule::is_hotkey_registered_on_network(netuid, hotkey); + SubtensorModule::is_hotkey_registered_on_network(netuid, hotkey) } fn init_new_network(netuid: u16, tempo: u16) { @@ -988,10 +1114,6 @@ 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, @@ -1009,6 +1131,7 @@ construct_runtime!( Multisig: pallet_multisig, Preimage: pallet_preimage, Scheduler: pallet_scheduler, + Proxy: pallet_proxy, Registry: pallet_registry, Commitments: pallet_commitments, AdminUtils: pallet_admin_utils @@ -1035,6 +1158,13 @@ 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; @@ -1047,6 +1177,7 @@ pub type Executive = frame_executive::Executive< frame_system::ChainContext, Runtime, AllPalletsWithSystem, + Migrations, >; #[cfg(feature = "runtime-benchmarks")] @@ -1086,6 +1217,14 @@ 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 { @@ -1390,39 +1529,29 @@ impl_runtime_apis! { } } -#[cfg(test)] -mod tests { - use super::*; +// #[cfg(test)] +// mod tests { + +#[test] +fn check_whitelist() { + use crate::*; use frame_support::traits::WhitelistedStorageKeys; use sp_core::hexdisplay::HexDisplay; use std::collections::HashSet; - - #[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") - ); - } + 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 new file mode 100644 index 0000000000..5db5c32610 --- /dev/null +++ b/runtime/src/migrations/account_data_migration.rs @@ -0,0 +1,205 @@ +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 new file mode 100644 index 0000000000..9ad0f9b2af --- /dev/null +++ b/runtime/src/migrations/init_storage_versions.rs @@ -0,0 +1,26 @@ +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 new file mode 100644 index 0000000000..494f81fa9f --- /dev/null +++ b/runtime/src/migrations/mod.rs @@ -0,0 +1,2 @@ +pub mod account_data_migration; +pub mod init_storage_versions; diff --git a/runtime/tests/pallet_proxy.rs b/runtime/tests/pallet_proxy.rs new file mode 100644 index 0000000000..d9a5cdaf8a --- /dev/null +++ b/runtime/tests/pallet_proxy.rs @@ -0,0 +1,197 @@ +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 47c123a146..f81199a224 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,14 @@ [toolchain] -channel = "nightly-2023-03-01" -components = [ "rustfmt" ] -targets = [ "wasm32-unknown-unknown" ] -profile = "minimal" \ No newline at end of file +channel = "stable" +components = [ + "cargo", + "clippy", + "rust-analyzer", + "rust-src", + "rust-std", + "rustc", + "rustc-dev", + "rustfmt", +] +targets = ["wasm32-unknown-unknown"] +profile = "minimal" diff --git a/scripts/install_rust.sh b/scripts/install_rust.sh new file mode 100755 index 0000000000..f28a5eb878 --- /dev/null +++ b/scripts/install_rust.sh @@ -0,0 +1,42 @@ +#!/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 4187e605a1..35bf125285 100755 --- a/scripts/localnet.sh +++ b/scripts/localnet.sh @@ -34,8 +34,7 @@ alice_start=( --chain="$FULL_PATH" --alice --port 30334 - --ws-port 9946 - --rpc-port 9934 + --rpc-port 9946 --validator --rpc-cors=all --allow-private-ipv4 @@ -48,8 +47,7 @@ bob_start=( --chain="$FULL_PATH" --bob --port 30335 - --ws-port 9947 - --rpc-port 9935 + --rpc-port 9945 --validator --allow-private-ipv4 --discover-local diff --git a/scripts/localnet_setup.sh b/scripts/localnet_setup.sh deleted file mode 100755 index 2ba4f6a39b..0000000000 --- a/scripts/localnet_setup.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/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 42529d2887..c65f850bd5 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/12D3KooWRwbMb85RWnT8DSXSYMWQtuDwh4LJzndoRrTDotTR5gDC' + TESTNET_BOOTNODE='--bootnodes /dns/bootnode.test.finney.opentensor.ai/tcp/30333/ws/p2p/12D3KooWPM4mLcKJGtyVtkggqdG84zWrd7Rij6PGQDoijh1X86Vr' NODE_TYPE_ARCHIVE='--pruning=archive' NODE_TYPE_LITE='--sync warp' diff --git a/zepter.yaml b/zepter.yaml new file mode 100644 index 0000000000..db1f33097a --- /dev/null +++ b/zepter.yaml @@ -0,0 +1,40 @@ +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"