diff --git a/.circleci/config.yml b/.circleci/config.yml index 46dc613e3d..e5356caf2e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,5 +1,25 @@ version: 2.1 commands: + get-solc: + steps: + - run: + name: Get solc + command: | + SOLC_VERSION="0.8.33" + ASSET_URL="https://github.com/argotorg/solidity/releases/download/v${SOLC_VERSION}/solc-static-linux" + echo "Downloading solc version ${SOLC_VERSION} from ${ASSET_URL}" + curl -sSL --output /usr/local/bin/solc ${ASSET_URL} + chmod +x /usr/local/bin/solc + get-resolc: + steps: + - run: + name: Get resolc + command: | + RESOLC_VERSION="0.6.0" + ASSET_URL="https://github.com/paritytech/revive/releases/download/v${RESOLC_VERSION}/resolc-x86_64-unknown-linux-musl" + echo "Downloading resolc version ${RESOLC_VERSION} from ${ASSET_URL}" + curl -sSL --output /usr/local/bin/resolc ${ASSET_URL} + chmod +x /usr/local/bin/resolc setup-sccache: steps: - run: @@ -39,7 +59,7 @@ commands: jobs: lint: docker: - - image: polymeshassociation/rust:debian-nightly-2025-09-01 + - image: polymeshassociation/rust:debian-nightly-2025-12-01 resource_class: small environment: VERBOSE: "1" @@ -53,7 +73,7 @@ jobs: command: ./scripts/check_spec_and_cargo_version.sh check-storage-version: docker: - - image: polymeshassociation/rust:debian-nightly-2025-09-01 + - image: polymeshassociation/rust:debian-nightly-2025-12-01 resource_class: small environment: VERBOSE: "1" @@ -64,7 +84,7 @@ jobs: command: ./scripts/check_storage_versions.sh build: docker: - - image: polymeshassociation/rust:debian-nightly-2025-09-01 + - image: polymeshassociation/rust:debian-nightly-2025-12-01 resource_class: xlarge environment: - VERBOSE: "1" @@ -78,12 +98,19 @@ jobs: name: Build release command: cargo build --locked --release no_output_timeout: 30m + - run: + name: Build eth-rpc + command: cargo build --locked --release -p pallet-revive-eth-rpc --bin eth-rpc + no_output_timeout: 30m - run: name: Create assets directory for releases command: mkdir ./assets - run: name: Copy binary to assets command: cp ./target/release/polymesh ./assets/polymesh + - run: + name: Copy eth-rpc binary to assets + command: cp ./target/release/eth-rpc ./assets/eth-rpc ## This has been commented out due to deterministic wasm build step added # - run: # name: Copy wasm to assets @@ -95,7 +122,7 @@ jobs: - save-sccache-cache build-ci: docker: - - image: polymeshassociation/rust:debian-nightly-2025-09-01 + - image: polymeshassociation/rust:debian-nightly-2025-12-01 resource_class: xlarge environment: - VERBOSE: "1" @@ -124,7 +151,7 @@ jobs: - . build-arm64: docker: - - image: polymeshassociation/rust-arm64:debian-nightly-2025-09-01 + - image: polymeshassociation/rust-arm64:debian-nightly-2025-12-01 resource_class: arm.xlarge environment: - VERBOSE: "1" @@ -138,12 +165,19 @@ jobs: name: Build release command: cargo build --locked --release no_output_timeout: 30m + - run: + name: Build eth-rpc + command: cargo build --locked --release -p pallet-revive-eth-rpc --bin eth-rpc + no_output_timeout: 30m - run: name: Create assets directory for releases command: mkdir ./assets - run: name: Copy arm64 binary to assets command: cp ./target/release/polymesh ./assets/polymesh-arm64 + - run: + name: Copy arm64 eth-rpc binary to assets + command: cp ./target/release/eth-rpc ./assets/eth-rpc-arm64 - persist_to_workspace: root: ./assets paths: @@ -151,7 +185,7 @@ jobs: - save-sccache-cache benchmark-build: docker: - - image: polymeshassociation/rust:debian-nightly-2025-09-01 + - image: polymeshassociation/rust:debian-nightly-2025-12-01 resource_class: xlarge environment: - VERBOSE: "1" @@ -161,6 +195,8 @@ jobs: - checkout - setup-sccache - restore-sccache-cache + - get-solc + - get-resolc - run: name: Build binary with runtime-benchmarks command: cargo build --locked --release --features=runtime-benchmarks,running-ci @@ -277,7 +313,7 @@ jobs: metadata-tools-build: docker: - - image: polymeshassociation/rust:debian-nightly-2025-09-01 + - image: polymeshassociation/rust:debian-nightly-2025-12-01 resource_class: small steps: - checkout @@ -390,7 +426,7 @@ jobs: no_output_timeout: 30m migration-tests: docker: - - image: polymeshassociation/rust:debian-nightly-2025-09-01 + - image: polymeshassociation/rust:debian-nightly-2025-12-01 resource_class: large environment: - VERBOSE: "1" @@ -407,7 +443,7 @@ jobs: - save-sccache-cache test: docker: - - image: polymeshassociation/rust:debian-nightly-2025-09-01 + - image: polymeshassociation/rust:debian-nightly-2025-12-01 resource_class: large environment: - VERBOSE: "1" @@ -435,7 +471,7 @@ jobs: - save-sccache-cache coverage: docker: - - image: polymeshassociation/rust:debian-nightly-2025-09-01 + - image: polymeshassociation/rust:debian-nightly-2025-12-01 resource_class: xlarge environment: - VERBOSE: "1" @@ -450,11 +486,12 @@ jobs: - save-sccache-cache rust-integration-test: docker: - - image: polymeshassociation/rust:debian-nightly-2025-09-01 + - image: polymeshassociation/rust:debian-nightly-2025-12-01 resource_class: xlarge environment: - VERBOSE: "1" - RUSTFLAGS: -D warnings + - RUST_BACKTRACE: "1" steps: - checkout - attach_workspace: @@ -522,7 +559,7 @@ jobs: no_output_timeout: 10m clippy: docker: - - image: polymeshassociation/rust:debian-nightly-2025-09-01 + - image: polymeshassociation/rust:debian-nightly-2025-12-01 resource_class: xlarge environment: - VERBOSE: "1" @@ -650,6 +687,55 @@ jobs: echo $DOCKERHUB_PASS | docker login -u $DOCKERHUB_USERNAME --password-stdin docker manifest push $IMAGE_NAME:latest-$CIRCLE_BRANCH-distroless docker manifest push $IMAGE_NAME:$VERSION-$CIRCLE_BRANCH-distroless + build-docker-eth-rpc-amd64-debian: + environment: + IMAGE_NAME: polymeshassociation/polymesh-eth-rpc-amd64 + docker: + - image: cimg/deploy:2023.08 + resource_class: small + steps: + - checkout + - setup_remote_docker + - attach_workspace: + at: . + - run: | + export VERSION=`./scripts/version.sh "$CIRCLE_BRANCH" "$CIRCLE_SHA1"` + docker build -f ./.docker/eth-rpc/Dockerfile --tag $IMAGE_NAME:latest-$CIRCLE_BRANCH-debian --tag $IMAGE_NAME:$VERSION-$CIRCLE_BRANCH-debian . + echo $DOCKERHUB_PASS | docker login -u $DOCKERHUB_USERNAME --password-stdin + docker push --all-tags $IMAGE_NAME + build-docker-eth-rpc-arm64-debian: + environment: + IMAGE_NAME: polymeshassociation/polymesh-eth-rpc-arm64 + machine: + image: ubuntu-2004:current + resource_class: arm.medium + steps: + - checkout + - attach_workspace: + at: . + - run: | + export VERSION=`./scripts/version.sh "$CIRCLE_BRANCH" "$CIRCLE_SHA1"` + docker build -f ./.docker/eth-rpc/Dockerfile --build-arg ETH_RPC_BIN=eth-rpc-arm64 --tag $IMAGE_NAME:latest-$CIRCLE_BRANCH-debian --tag $IMAGE_NAME:$VERSION-$CIRCLE_BRANCH-debian . + echo $DOCKERHUB_PASS | docker login -u $DOCKERHUB_USERNAME --password-stdin + docker push --all-tags $IMAGE_NAME + build-docker-eth-rpc-debian: + environment: + IMAGE_NAME: polymeshassociation/polymesh-eth-rpc + IMAGE_AMD_NAME: polymeshassociation/polymesh-eth-rpc-amd64 + IMAGE_ARM_NAME: polymeshassociation/polymesh-eth-rpc-arm64 + docker: + - image: cimg/deploy:2023.08 + resource_class: small + steps: + - checkout + - setup_remote_docker + - run: | + export VERSION=`./scripts/version.sh "$CIRCLE_BRANCH" "$CIRCLE_SHA1"` + docker manifest create $IMAGE_NAME:latest-$CIRCLE_BRANCH-debian $IMAGE_AMD_NAME:latest-$CIRCLE_BRANCH-debian $IMAGE_ARM_NAME:latest-$CIRCLE_BRANCH-debian + docker manifest create $IMAGE_NAME:$VERSION-$CIRCLE_BRANCH-debian $IMAGE_AMD_NAME:$VERSION-$CIRCLE_BRANCH-debian $IMAGE_ARM_NAME:$VERSION-$CIRCLE_BRANCH-debian + echo $DOCKERHUB_PASS | docker login -u $DOCKERHUB_USERNAME --password-stdin + docker manifest push $IMAGE_NAME:latest-$CIRCLE_BRANCH-debian + docker manifest push $IMAGE_NAME:$VERSION-$CIRCLE_BRANCH-debian build-docker-rust-debian: environment: RUST_BASE: 1.75.0 @@ -808,7 +894,6 @@ workflows: - testnet - staging - develop - - develop_v8 - build-docker-amd64-distroless: requires: - build @@ -819,7 +904,6 @@ workflows: - testnet - staging - develop - - develop_v8 - build-docker-ci-runtime: requires: - build-ci @@ -827,7 +911,6 @@ workflows: branches: only: - develop - - develop_v8 - build-docker-arm64-debian: requires: - build-arm64 @@ -838,7 +921,6 @@ workflows: - testnet - staging - develop - - develop_v8 - build-docker-arm64-distroless: requires: - build-arm64 @@ -849,7 +931,6 @@ workflows: - testnet - staging - develop - - develop_v8 - build-docker-debian: requires: - build-docker-amd64-debian @@ -861,7 +942,6 @@ workflows: - testnet - staging - develop - - develop_v8 - build-docker-distroless: requires: - build-docker-amd64-distroless @@ -873,7 +953,37 @@ workflows: - testnet - staging - develop - - develop_v8 + - build-docker-eth-rpc-amd64-debian: + requires: + - build + filters: + branches: + only: + - mainnet + - testnet + - staging + - develop + - build-docker-eth-rpc-arm64-debian: + requires: + - build-arm64 + filters: + branches: + only: + - mainnet + - testnet + - staging + - develop + - build-docker-eth-rpc-debian: + requires: + - build-docker-eth-rpc-amd64-debian + - build-docker-eth-rpc-arm64-debian + filters: + branches: + only: + - mainnet + - testnet + - staging + - develop - publish-github-release: requires: - build @@ -894,7 +1004,6 @@ workflows: - mainnet - testnet - staging - - develop_v8 chain: testnet package: polymesh-runtime-testnet runtime_dir: pallets/runtime/testnet @@ -907,7 +1016,6 @@ workflows: - mainnet - testnet - staging - - develop_v8 chain: mainnet package: polymesh-runtime-mainnet runtime_dir: pallets/runtime/mainnet @@ -918,7 +1026,6 @@ workflows: branches: only: - develop - - develop_v8 chain: develop package: polymesh-runtime-develop runtime_dir: pallets/runtime/develop diff --git a/.docker/eth-rpc/.dockerignore b/.docker/eth-rpc/.dockerignore new file mode 100644 index 0000000000..bc32de3eca --- /dev/null +++ b/.docker/eth-rpc/.dockerignore @@ -0,0 +1,4 @@ +**target* +Dockerfile +.dockerignore +.env* diff --git a/.docker/eth-rpc/Dockerfile b/.docker/eth-rpc/Dockerfile new file mode 100644 index 0000000000..9b0cec9065 --- /dev/null +++ b/.docker/eth-rpc/Dockerfile @@ -0,0 +1,38 @@ +FROM debian:trixie-slim +ARG ETH_RPC_BIN=eth-rpc + +RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + libsqlite3-0 && \ + apt-get autoremove -y && \ + apt-get clean && \ + find /var/lib/apt/lists/ -type f -not -name lock -delete + +COPY ./${ETH_RPC_BIN} /usr/local/bin/eth-rpc + +USER root +RUN useradd -m -u 4001 -U -s /bin/sh -d /home/polymesh polymesh && \ + /usr/local/bin/eth-rpc --help + +USER polymesh + +# 8545 is the default port for the JSON-RPC server +# 9616 is the default port for the Prometheus metrics +EXPOSE 8545 9616 + +ENTRYPOINT ["/usr/local/bin/eth-rpc"] + +# We call the help by default +CMD ["--help"] + +HEALTHCHECK \ + --interval=10s \ + --start-period=30s \ + --timeout=5s \ + --retries=6 \ + CMD curl -sf -X POST -H 'Content-Type: application/json' \ + -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ + http://localhost:8545/ diff --git a/.docker/eth-rpc/Dockerfile.local b/.docker/eth-rpc/Dockerfile.local new file mode 100644 index 0000000000..039084d340 --- /dev/null +++ b/.docker/eth-rpc/Dockerfile.local @@ -0,0 +1,46 @@ +ARG BUILDER_IMAGE=polymeshassociation/rust:debian-nightly-2025-12-01 +FROM ${BUILDER_IMAGE} AS builder + +WORKDIR /polymesh +COPY . /polymesh + +RUN cargo fetch +RUN cargo build --workspace --locked --release -p pallet-revive-eth-rpc --bin eth-rpc + +FROM debian:trixie-slim + +RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + libsqlite3-0 && \ + apt-get autoremove -y && \ + apt-get clean && \ + find /var/lib/apt/lists/ -type f -not -name lock -delete + +COPY --from=builder /polymesh/target/release/eth-rpc /usr/local/bin + +USER root +RUN useradd -m -u 4001 -U -s /bin/sh -d /home/polymesh polymesh && \ + /usr/local/bin/eth-rpc --help + +USER polymesh + +# 8545 is the default port for the JSON-RPC server +# 9616 is the default port for the Prometheus metrics +EXPOSE 8545 9616 + +ENTRYPOINT ["/usr/local/bin/eth-rpc"] + +# We call the help by default +CMD ["--help"] + +HEALTHCHECK \ + --interval=10s \ + --start-period=30s \ + --timeout=5s \ + --retries=6 \ + CMD curl -sf -X POST -H 'Content-Type: application/json' \ + -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ + http://localhost:8545/ diff --git a/.dockerignore b/.dockerignore index eb5a316cbd..e6ad2ca020 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,2 @@ target +.env* diff --git a/Cargo.lock b/Cargo.lock index a1dbacb0ff..5d72553c87 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -54,7 +54,7 @@ checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher 0.4.4", - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -77,7 +77,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "once_cell", "version_check", ] @@ -110,6 +110,306 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "alloy-consensus" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f16daaf7e1f95f62c6c3bf8a3fc3d78b08ae9777810c0bb5e94966c7cd57ef0" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "alloy-trie", + "alloy-tx-macros", + "auto_impl", + "borsh", + "c-kzg", + "derive_more 2.1.1", + "either", + "k256", + "once_cell", + "rand 0.8.5", + "secp256k1 0.30.0", + "serde", + "serde_json", + "serde_with", + "thiserror 2.0.18", +] + +[[package]] +name = "alloy-core" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e8604b0c092fabc80d075ede181c9b9e596249c70b99253082d7e689836529" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-primitives", + "alloy-rlp", + "alloy-sol-types", +] + +[[package]] +name = "alloy-dyn-abi" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2db5c583aaef0255aa63a4fe827f826090142528bba48d1bf4119b62780cad" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", + "itoa", + "serde", + "serde_json", + "winnow 0.7.15", +] + +[[package]] +name = "alloy-eip2124" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "crc", + "serde", + "thiserror 2.0.18", +] + +[[package]] +name = "alloy-eip2930" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9441120fa82df73e8959ae0e4ab8ade03de2aaae61be313fbf5746277847ce25" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "borsh", + "serde", +] + +[[package]] +name = "alloy-eip7702" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2919c5a56a1007492da313e7a3b6d45ef5edc5d33416fdec63c0d7a2702a0d20" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "borsh", + "k256", + "serde", + "thiserror 2.0.18", +] + +[[package]] +name = "alloy-eip7928" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8222b1d88f9a6d03be84b0f5e76bb60cd83991b43ad8ab6477f0e4a7809b98d" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "borsh", + "serde", +] + +[[package]] +name = "alloy-eips" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ef28c9fdad22d4eec52d894f5f2673a0895f1e5ef196734568e68c0f6caca8" +dependencies = [ + "alloy-eip2124", + "alloy-eip2930", + "alloy-eip7702", + "alloy-eip7928", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "auto_impl", + "borsh", + "c-kzg", + "derive_more 2.1.1", + "either", + "serde", + "serde_with", + "sha2 0.10.9", +] + +[[package]] +name = "alloy-json-abi" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9dbe713da0c737d9e5e387b0ba790eb98b14dd207fe53eef50e19a5a8ec3dac" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-primitives" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3b431b4e72cd8bd0ec7a50b4be18e73dab74de0dba180eef171055e5d5926e" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more 2.1.1", + "foldhash 0.2.0", + "hashbrown 0.16.1", + "indexmap 2.13.0", + "itoa", + "k256", + "keccak-asm", + "paste", + "proptest", + "rand 0.9.2", + "rapidhash", + "ruint", + "rustc-hash 2.1.2", + "serde", + "sha3", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e93e50f64a77ad9c5470bf2ad0ca02f228da70c792a8f06634801e202579f35e" +dependencies = [ + "alloy-rlp-derive", + "arrayvec 0.7.6", + "bytes", +] + +[[package]] +name = "alloy-rlp-derive" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8849c74c9ca0f5a03da1c865e3eb6f768df816e67dd3721a398a8a7e398011" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "alloy-serde" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ece63b89294b8614ab3f483560c08d016930f842bf36da56bf0b764a15c11e" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-sol-macro" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab81bab693da9bb79f7a95b64b394718259fdd7e41dceeced4cad57cb71c4f6a" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "489f1620bb7e2483fb5819ed01ab6edc1d2f93939dce35a5695085a1afd1d699" +dependencies = [ + "alloy-sol-macro-input", + "const-hex", + "heck 0.5.0", + "indexmap 2.13.0", + "proc-macro-error2", + "proc-macro2", + "quote", + "sha3", + "syn 2.0.117", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56cef806ad22d4392c5fc83cf8f2089f988eb99c7067b4e0c6f1971fc1cca318" +dependencies = [ + "const-hex", + "dunce", + "heck 0.5.0", + "macro-string", + "proc-macro2", + "quote", + "syn 2.0.117", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6df77fea9d6a2a75c0ef8d2acbdfd92286cc599983d3175ccdc170d3433d249" +dependencies = [ + "serde", + "winnow 0.7.15", +] + +[[package]] +name = "alloy-sol-types" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64612d29379782a5dde6f4b6570d9c756d734d760c0c94c254d361e678a6591f" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-macro", + "serde", +] + +[[package]] +name = "alloy-trie" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f14b5d9b2c2173980202c6ff470d96e7c5e202c65a9f67884ad565226df7fbb" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "derive_more 2.1.1", + "nybbles", + "serde", + "smallvec", + "thiserror 2.0.18", + "tracing", +] + +[[package]] +name = "alloy-tx-macros" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d69722eddcdf1ce096c3ab66cf8116999363f734eb36fe94a148f4f71c85da84" +dependencies = [ + "darling 0.23.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "android_system_properties" version = "0.1.5" @@ -121,9 +421,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.21" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", "anstyle-parse", @@ -136,15 +436,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" -version = "0.2.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" dependencies = [ "utf8parse", ] @@ -171,9 +471,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "approx" @@ -195,7 +495,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -239,6 +539,18 @@ dependencies = [ "ark-std 0.5.0", ] +[[package]] +name = "ark-bn254" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-r1cs-std", + "ark-std 0.5.0", +] + [[package]] name = "ark-ec" version = "0.4.2" @@ -289,6 +601,24 @@ dependencies = [ "ark-std 0.5.0", ] +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + [[package]] name = "ark-ff" version = "0.4.2" @@ -305,7 +635,7 @@ dependencies = [ "num-bigint", "num-traits", "paste", - "rustc_version", + "rustc_version 0.4.1", "zeroize", ] @@ -329,6 +659,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-asm" version = "0.4.2" @@ -346,7 +686,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.111", + "syn 2.0.117", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", ] [[package]] @@ -372,7 +724,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -403,6 +755,45 @@ dependencies = [ "hashbrown 0.15.5", ] +[[package]] +name = "ark-r1cs-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-relations", + "ark-std 0.5.0", + "educe", + "num-bigint", + "num-integer", + "num-traits", + "tracing", +] + +[[package]] +name = "ark-relations" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" +dependencies = [ + "ark-ff 0.5.0", + "ark-std 0.5.0", + "tracing", + "tracing-subscriber 0.2.25", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + [[package]] name = "ark-serialize" version = "0.4.2" @@ -447,7 +838,17 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", ] [[package]] @@ -486,9 +887,9 @@ dependencies = [ [[package]] name = "ark-vrf" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9501da18569b2afe0eb934fb7afd5a247d238b94116155af4dd068f319adfe6d" +checksum = "0d63e9780640021b74d02b32895d8cec1b4abe8e5547b560a6bda6b14b78c6da" dependencies = [ "ark-bls12-381 0.5.0", "ark-ec 0.5.0", @@ -516,7 +917,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27d55334c98d756b32dcceb60248647ab34f027690f87f9a362fd292676ee927" dependencies = [ "smallvec", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -568,7 +969,7 @@ dependencies = [ "nom 7.1.3", "num-traits", "rusticata-macros", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", ] @@ -580,7 +981,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", "synstructure 0.13.2", ] @@ -592,7 +993,7 @@ checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", "synstructure 0.13.2", ] @@ -604,7 +1005,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -641,9 +1042,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.3" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" dependencies = [ "async-task", "concurrent-queue", @@ -677,16 +1078,16 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix 1.1.2", + "rustix 1.1.4", "slab", "windows-sys 0.61.2", ] [[package]] name = "async-lock" -version = "3.4.1" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ "event-listener 5.4.1", "event-listener-strategy", @@ -719,7 +1120,7 @@ dependencies = [ "cfg-if", "event-listener 5.4.1", "futures-lite", - "rustix 1.1.2", + "rustix 1.1.4", ] [[package]] @@ -734,7 +1135,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.1.2", + "rustix 1.1.4", "signal-hook-registry", "slab", "windows-sys 0.61.2", @@ -754,7 +1155,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -783,6 +1184,15 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + [[package]] name = "atomic-take" version = "1.1.0" @@ -806,12 +1216,39 @@ dependencies = [ "url", ] +[[package]] +name = "aurora-engine-modexp" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "518bc5745a6264b5fd7b09dffb9667e400ee9e2bbe18555fac75e1fe9afa0df9" +dependencies = [ + "hex", + "num", +] + +[[package]] +name = "auto_impl" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "az" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be5eb007b7cacc6c660343e96f650fedf4b5a77512399eb952ca6642cf8d13f7" + [[package]] name = "backtrace" version = "0.3.76" @@ -863,14 +1300,14 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.1" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "binary-merkle-tree" -version = "16.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "16.1.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "hash-db", "log", @@ -883,16 +1320,16 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cexpr", "clang-sys", "itertools 0.13.0", "proc-macro2", "quote", "regex", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "shlex", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -920,11 +1357,26 @@ checksum = "90dbd31c98227229239363921e60fcf5e558e43ec69094d46fc4996f08d1d5bc" dependencies = [ "bitcoin_hashes", "rand 0.8.5", - "rand_core 0.5.1", + "rand_core 0.6.4", "serde", "unicode-normalization", ] +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bitcoin-io" version = "0.1.4" @@ -949,9 +1401,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +dependencies = [ + "serde_core", +] [[package]] name = "bitvec" @@ -999,26 +1454,27 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +checksum = "b79834656f71332577234b50bfc009996f7449e0c056884e6a02492ded0ca2f3" dependencies = [ "arrayref", "arrayvec 0.7.6", - "constant_time_eq 0.3.1", + "constant_time_eq 0.4.2", ] [[package]] name = "blake3" -version = "1.8.2" +version = "1.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +checksum = "4d2d5991425dfd0785aed03aedcf0b321d61975c9b5b3689c774a2610ae0b51e" dependencies = [ "arrayref", "arrayvec 0.7.6", "cc", "cfg-if", - "constant_time_eq 0.3.1", + "constant_time_eq 0.4.2", + "cpufeatures 0.3.0", ] [[package]] @@ -1052,6 +1508,42 @@ dependencies = [ "piper", ] +[[package]] +name = "blst" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "borsh" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" +dependencies = [ + "borsh-derive", + "bytes", + "cfg_aliases 0.2.1", +] + +[[package]] +name = "borsh-derive" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfcfdc083699101d5a7965e49925975f2f55060f94f9a05e7187be95d530ca59" +dependencies = [ + "once_cell", + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "bounded-collections" version = "0.3.2" @@ -1095,9 +1587,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" dependencies = [ "allocator-api2", ] @@ -1116,9 +1608,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.24.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" [[package]] name = "byteorder" @@ -1128,9 +1620,12 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +dependencies = [ + "serde", +] [[package]] name = "bzip2-sys" @@ -1142,6 +1637,21 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "c-kzg" +version = "2.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6648ed1e4ea8e8a1a4a2c78e1cda29a3fd500bc622899c340d8525ea9a76b24a" +dependencies = [ + "blst", + "cc", + "glob", + "hex", + "libc", + "once_cell", + "serde", +] + [[package]] name = "c2-chacha" version = "0.3.3" @@ -1154,9 +1664,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" dependencies = [ "serde_core", ] @@ -1186,9 +1696,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.49" +version = "1.2.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" +checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1" dependencies = [ "find-msvc-tools", "jobserver", @@ -1256,7 +1766,7 @@ checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ "cfg-if", "cipher 0.4.4", - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -1274,9 +1784,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.42" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ "iana-time-zone", "js-sys", @@ -1330,9 +1840,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.53" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" +checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" dependencies = [ "clap_builder", "clap_derive", @@ -1340,9 +1850,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.53" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" dependencies = [ "anstream", "anstyle", @@ -1353,27 +1863,27 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.49" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "clap_lex" -version = "0.7.6" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "coarsetime" -version = "0.1.36" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" +checksum = "e58eb270476aa4fc7843849f8a35063e8743b4dbcdf6dd0f8ea0886980c204c2" dependencies = [ "libc", "wasix", @@ -1386,7 +1896,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -1402,9 +1912,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "combine" @@ -1418,9 +1928,9 @@ dependencies = [ [[package]] name = "comfy-table" -version = "7.2.1" +version = "7.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" +checksum = "958c5d6ecf1f214b4c2bbbbf6ab9523a864bd136dcf71a7e8904799acfe1ad47" dependencies = [ "unicode-segmentation", "unicode-width", @@ -1454,14 +1964,24 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "const-crypto" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c06f1eb05f06cf2e380fdded278fbf056a38974299d77960555a311dcf91a52" +dependencies = [ + "keccak-const", + "sha2-const-stable", +] + [[package]] name = "const-hex" -version = "1.17.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" +checksum = "531185e432bb31db1ecda541e9e7ab21468d4d844ad7505e0546a49b4945d49b" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "proptest", "serde_core", ] @@ -1487,7 +2007,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "once_cell", "tiny-keccak", ] @@ -1526,9 +2046,9 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "constant_time_eq" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] name = "convert_case" @@ -1607,6 +2127,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "cranelift-assembler-x64" version = "0.122.0" @@ -1664,7 +2193,7 @@ dependencies = [ "log", "pulley-interpreter", "regalloc2 0.12.2", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "serde", "smallvec", "target-lexicon", @@ -1744,6 +2273,21 @@ version = "0.122.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b530783809a55cb68d070e0de60cfbb3db0dc94c8850dd5725411422bedcf6bb" +[[package]] +name = "crc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crc32fast" version = "1.5.0" @@ -1877,8 +2421,8 @@ dependencies = [ [[package]] name = "cumulus-client-parachain-inherent" -version = "0.22.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.23.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1899,8 +2443,8 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system" -version = "0.25.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.26.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "bytes", @@ -1908,6 +2452,8 @@ dependencies = [ "cumulus-primitives-core", "cumulus-primitives-parachain-inherent", "cumulus-primitives-proof-size-hostfunction", + "derive-where", + "docify", "environmental", "frame-benchmarking", "frame-support", @@ -1918,10 +2464,13 @@ dependencies = [ "pallet-message-queue", "parity-scale-codec", "polkadot-parachain-primitives", + "polkadot-primitives", "polkadot-runtime-parachains", "scale-info", + "sp-api", "sp-consensus-babe", "sp-core", + "sp-crypto-hashing", "sp-externalities", "sp-inherents", "sp-io", @@ -1937,19 +2486,19 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system-proc-macro" -version = "0.7.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.8.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "cumulus-primitives-core" -version = "0.23.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.24.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -1965,8 +2514,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" -version = "0.23.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.24.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1979,8 +2528,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-proof-size-hostfunction" -version = "0.16.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.17.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "sp-externalities", "sp-runtime-interface", @@ -1989,8 +2538,8 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" -version = "0.28.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.29.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2003,20 +2552,23 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-state-machine", + "sp-storage", "sp-version", "thiserror 1.0.69", ] [[package]] name = "cumulus-test-relay-sproof-builder" -version = "0.24.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.25.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", "polkadot-primitives", "sp-consensus-babe", "sp-core", + "sp-io", + "sp-keyring", "sp-runtime", "sp-state-machine", "sp-trie", @@ -2029,11 +2581,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", - "rustc_version", + "rustc_version 0.4.1", "subtle 2.6.1", "zeroize", ] @@ -2046,14 +2598,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "cxx" -version = "1.0.190" +version = "1.0.194" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7620f6cfc4dcca21f2b085b7a890e16c60fd66f560cd69ee60594908dc72ab1" +checksum = "747d8437319e3a2f43d93b341c137927ca70c0f5dabeea7a005a73665e247c7e" dependencies = [ "cc", "cxx-build", @@ -2066,49 +2618,49 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.190" +version = "1.0.194" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9bc1a22964ff6a355fbec24cf68266a0ed28f8b84c0864c386474ea3d0e479" +checksum = "b0f4697d190a142477b16aef7da8a99bfdc41e7e8b1687583c0d23a79c7afc1e" dependencies = [ "cc", "codespan-reporting", - "indexmap", + "indexmap 2.13.0", "proc-macro2", "quote", "scratch", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "cxxbridge-cmd" -version = "1.0.190" +version = "1.0.194" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f29a879d35f7906e3c9b77d7a1005a6a0787d330c09dfe4ffb5f617728cb44" +checksum = "d0956799fa8678d4c50eed028f2de1c0552ae183c76e976cf7ca8c4e36a7c328" dependencies = [ "clap", "codespan-reporting", - "indexmap", + "indexmap 2.13.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "cxxbridge-flags" -version = "1.0.190" +version = "1.0.194" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d67109015f93f683e364085aa6489a5b2118b4a40058482101d699936a7836d6" +checksum = "23384a836ab4f0ad98ace7e3955ad2de39de42378ab487dc28d3990392cb283a" [[package]] name = "cxxbridge-macro" -version = "1.0.190" +version = "1.0.194" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d187e019e7b05a1f3e69a8396b70800ee867aa9fc2ab972761173ccee03742df" +checksum = "e6acc6b5822b9526adfb4fc377b67128fdd60aac757cc4a741a6278603f763cf" dependencies = [ - "indexmap", + "indexmap 2.13.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2123,12 +2675,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.21.3" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ - "darling_core 0.21.3", - "darling_macro 0.21.3", + "darling_core 0.23.0", + "darling_macro 0.23.0", ] [[package]] @@ -2142,21 +2694,21 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "darling_core" -version = "0.21.3" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" dependencies = [ - "fnv", "ident_case", "proc-macro2", "quote", + "serde", "strsim", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2167,18 +2719,18 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "darling_macro" -version = "0.21.3" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ - "darling_core 0.21.3", + "darling_core 0.23.0", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2196,15 +2748,15 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" [[package]] name = "data-encoding-macro" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" +checksum = "8142a83c17aa9461d637e649271eae18bf2edd00e91f2e105df36c3c16355bdb" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -2212,12 +2764,12 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" +checksum = "7ab67060fc6b8ef687992d439ca0fa36e7ed17e9a0b16b25b601e8757df720de" dependencies = [ "data-encoding", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2270,11 +2822,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.5" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", + "serde_core", ] [[package]] @@ -2296,18 +2849,18 @@ checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "derive-where" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" +checksum = "d08b3a0bcc0d079199cd476b2cae8435016ec11d1c0986c6901c5ac223041534" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2319,8 +2872,8 @@ dependencies = [ "convert_case 0.4.0", "proc-macro2", "quote", - "rustc_version", - "syn 2.0.111", + "rustc_version 0.4.1", + "syn 2.0.117", ] [[package]] @@ -2334,11 +2887,11 @@ dependencies = [ [[package]] name = "derive_more" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10b768e943bed7bf2cab53df09f4bc34bfd217cdb57d971e769874c9a6710618" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ - "derive_more-impl 2.1.0", + "derive_more-impl 2.1.1", ] [[package]] @@ -2349,23 +2902,29 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "derive_more-impl" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d286bfdaf75e988b4a78e013ecd79c581e06399ab53fbacd2d916c2f904f30b" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ "convert_case 0.10.0", "proc-macro2", "quote", - "rustc_version", - "syn 2.0.111", + "rustc_version 0.4.1", + "syn 2.0.117", "unicode-xid", ] +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + [[package]] name = "digest" version = "0.8.1" @@ -2455,7 +3014,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2479,12 +3038,18 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.111", + "syn 2.0.117", "termcolor", "toml 0.8.23", "walkdir", ] +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + [[package]] name = "downcast" version = "0.11.0" @@ -2499,9 +3064,15 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dtoa" -version = "1.0.10" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dunce" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clonable" @@ -2521,7 +3092,7 @@ checksum = "7e8671d54058979a37a26f3511fbf8d198ba1aa35ffb202c42587d918d77213a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2572,13 +3143,13 @@ dependencies = [ [[package]] name = "ed25519-zebra" -version = "4.1.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0017d969298eec91e3db7a2985a8cab4df6341d86e6f3a6f5878b13fb7846bc9" +checksum = "775765289f7c6336c18d3d66127527820dd45ffd9eb3b6b8ee4708590e6c20f5" dependencies = [ "curve25519-dalek", "ed25519", - "hashbrown 0.15.5", + "hashbrown 0.16.1", "pkcs8", "rand_core 0.6.4", "sha2 0.10.9", @@ -2595,7 +3166,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2603,6 +3174,9 @@ name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", +] [[package]] name = "elliptic-curve" @@ -2651,7 +3225,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2691,7 +3265,7 @@ checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2704,6 +3278,29 @@ dependencies = [ "regex", ] +[[package]] +name = "env_filter" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" +dependencies = [ + "anstream", + "anstyle", + "env_filter 1.0.1", + "jiff", + "log", +] + [[package]] name = "environmental" version = "1.1.4" @@ -2726,6 +3323,56 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "ethbloom" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c321610643004cf908ec0f5f2aa0d8f1f8e14b540562a2887a1111ff1ecbf7b" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-codec 0.7.1", + "impl-rlp", + "impl-serde", + "scale-info", + "tiny-keccak", +] + +[[package]] +name = "ethereum-standards" +version = "0.1.3" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" +dependencies = [ + "alloy-core", +] + +[[package]] +name = "ethereum-types" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ab15ed80916029f878e0267c3a9f92b67df55e79af370bf66199059ae2b4ee3" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-codec 0.7.1", + "impl-rlp", + "impl-serde", + "primitive-types 0.13.1", + "scale-info", + "uint 0.10.0", +] + [[package]] name = "event-listener" version = "2.5.3" @@ -2774,7 +3421,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2789,6 +3436,28 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec 0.7.6", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec 0.7.6", + "auto_impl", + "bytes", +] + [[package]] name = "fatality" version = "0.1.1" @@ -2806,11 +3475,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb42427514b063d97ce21d5199f36c0c307d981434a6be32582bc79fe5bd2303" dependencies = [ "expander", - "indexmap", - "proc-macro-crate 3.4.0", + "indexmap 2.13.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -2851,14 +3520,13 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.26" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" +checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.60.2", ] [[package]] @@ -2879,9 +3547,19 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "finito" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "2384245d85162258a14b43567a9ee3598f5ae746a1581fb5d3d2cb780f0dbf95" +dependencies = [ + "futures-timer", + "pin-project", +] [[package]] name = "fixed-hash" @@ -2907,6 +3585,17 @@ version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "spin 0.9.8", +] + [[package]] name = "fnv" version = "1.0.7" @@ -2928,7 +3617,7 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "fork-tree" version = "13.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", ] @@ -2960,8 +3649,8 @@ checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-support", "frame-support-procedural", @@ -2984,8 +3673,8 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" -version = "53.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "54.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "Inflector", "array-bytes 6.2.3", @@ -2993,8 +3682,9 @@ dependencies = [ "clap", "comfy-table", "cumulus-client-parachain-inherent", + "cumulus-primitives-core", "cumulus-primitives-proof-size-hostfunction", - "env_filter", + "env_filter 0.1.4", "frame-benchmarking", "frame-storage-access-test-runtime", "frame-support", @@ -3049,33 +3739,35 @@ dependencies = [ [[package]] name = "frame-decode" -version = "0.8.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e56c0e51972d7b26ff76966c4d0f2307030df9daa5ce0885149ece1ab7ca5ad" +checksum = "c470df86cf28818dd3cd2fc4667b80dbefe2236c722c3dc1d09e7c6c82d6dfcd" dependencies = [ "frame-metadata", "parity-scale-codec", "scale-decode", + "scale-encode", "scale-info", "scale-type-resolver", "sp-crypto-hashing", + "thiserror 2.0.18", ] [[package]] name = "frame-election-provider-solution-type" version = "16.1.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "frame-election-provider-support" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -3091,8 +3783,8 @@ dependencies = [ [[package]] name = "frame-executive" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "aquamarine", "frame-support", @@ -3121,8 +3813,8 @@ dependencies = [ [[package]] name = "frame-metadata-hash-extension" -version = "0.13.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.14.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "const-hex", @@ -3137,8 +3829,8 @@ dependencies = [ [[package]] name = "frame-storage-access-test-runtime" -version = "0.6.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.7.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "cumulus-pallet-parachain-system", "parity-scale-codec", @@ -3151,8 +3843,8 @@ dependencies = [ [[package]] name = "frame-support" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "aquamarine", "array-bytes 6.2.3", @@ -3192,8 +3884,8 @@ dependencies = [ [[package]] name = "frame-support-procedural" -version = "36.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "37.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "Inflector", "cfg-expr", @@ -3207,35 +3899,35 @@ dependencies = [ "proc-macro2", "quote", "sp-crypto-hashing", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "frame-support-procedural-tools" version = "13.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-support-procedural-tools-derive", - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "frame-support-procedural-tools-derive" version = "12.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "frame-system" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "cfg-if", "docify", @@ -3253,8 +3945,8 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-benchmarking", "frame-support", @@ -3267,8 +3959,8 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" -version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "41.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "docify", "parity-scale-codec", @@ -3277,8 +3969,8 @@ dependencies = [ [[package]] name = "frame-try-runtime" -version = "0.51.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.52.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-support", "parity-scale-codec", @@ -3323,9 +4015,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -3348,9 +4040,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -3358,27 +4050,37 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", "futures-util", - "num_cpus", +] + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot 0.12.5", ] [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-lite" @@ -3395,13 +4097,13 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -3417,27 +4119,31 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers", + "send_wrapper", +] [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -3447,7 +4153,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -3466,7 +4171,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27d12c0aed7f1e24276a241aadc4cb8ea9f83000f34bc062b7cc2d51e3b0fabd" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "debugid", "fxhash", "serde", @@ -3505,9 +4210,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", @@ -3525,11 +4230,24 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "wasip2", + "wasip3", +] + [[package]] name = "getrandom_or_panic" version = "0.0.3" @@ -3557,7 +4275,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" dependencies = [ "fallible-iterator", - "indexmap", + "indexmap 2.13.0", "stable_deref_trait", ] @@ -3567,12 +4285,81 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" +[[package]] +name = "git2" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" +dependencies = [ + "bitflags 2.11.0", + "libc", + "libgit2-sys", + "log", + "url", +] + [[package]] name = "glob" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils", + "http 1.4.0", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gmp-mpfr-sys" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cfc928d8ff4ab3767a3674cf55f81186436fb6070866bb1443ffe65a640d2d6" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + [[package]] name = "governor" version = "0.6.3" @@ -3616,7 +4403,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap", + "indexmap 2.13.0", "slab", "tokio", "tokio-util", @@ -3625,9 +4412,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", @@ -3635,7 +4422,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.4.0", - "indexmap", + "indexmap 2.13.0", "slab", "tokio", "tokio-util", @@ -3716,6 +4503,13 @@ name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", + "serde", + "serde_core", +] [[package]] name = "hashlink" @@ -3726,6 +4520,15 @@ dependencies = [ "hashbrown 0.14.5", ] +[[package]] +name = "hashlink" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +dependencies = [ + "hashbrown 0.15.5", +] + [[package]] name = "heck" version = "0.4.1" @@ -3833,7 +4636,7 @@ dependencies = [ "once_cell", "rand 0.9.2", "ring 0.17.14", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tokio", "tracing", @@ -3877,7 +4680,7 @@ dependencies = [ "rand 0.9.2", "resolv-conf", "smallvec", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", ] @@ -3921,6 +4724,15 @@ dependencies = [ "hmac 0.8.1", ] +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "http" version = "0.2.12" @@ -3988,6 +4800,22 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "humantime" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" + +[[package]] +name = "humantime-serde" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" +dependencies = [ + "humantime", + "serde", +] + [[package]] name = "hyper" version = "0.14.32" @@ -4014,22 +4842,21 @@ dependencies = [ [[package]] name = "hyper" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", - "h2 0.4.12", + "h2 0.4.13", "http 1.4.0", "http-body 1.0.1", "httparse", "httpdate", "itoa", "pin-project-lite", - "pin-utils", "smallvec", "tokio", "want", @@ -4042,7 +4869,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http 1.4.0", - "hyper 1.8.1", + "hyper 1.9.0", "hyper-util", "log", "rustls", @@ -4055,20 +4882,19 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", "http 1.4.0", "http-body 1.0.1", - "hyper 1.8.1", + "hyper 1.9.0", "libc", "pin-project-lite", - "socket2 0.6.1", + "socket2 0.6.3", "tokio", "tower-service", "tracing", @@ -4076,9 +4902,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.64" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -4146,9 +4972,9 @@ checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ "icu_collections", "icu_locale_core", @@ -4160,9 +4986,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" @@ -4179,6 +5005,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -4208,19 +5040,19 @@ dependencies = [ [[package]] name = "if-addrs" -version = "0.10.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +checksum = "c0a05c691e1fae256cf7013d99dad472dc52d5543322761f83ec8d47eab40d2b" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] name = "if-watch" -version = "3.2.1" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" +checksum = "71c02a5161c313f0cbdbadc511611893584a10a7b6153cb554bdf83ddce99ec2" dependencies = [ "async-io", "core-foundation 0.9.4", @@ -4236,7 +5068,7 @@ dependencies = [ "rtnetlink", "system-configuration", "tokio", - "windows 0.53.0", + "windows 0.62.2", ] [[package]] @@ -4258,6 +5090,15 @@ dependencies = [ "xmltree", ] +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + [[package]] name = "impl-codec" version = "0.7.1" @@ -4278,6 +5119,15 @@ dependencies = [ "uint 0.10.0", ] +[[package]] +name = "impl-rlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54ed8ad1f3877f7e775b8cbf30ed1bd3209a95401817f19a0eb4402d13f8cf90" +dependencies = [ + "rlp 0.6.1", +] + [[package]] name = "impl-serde" version = "0.5.0" @@ -4295,7 +5145,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4319,9 +5169,20 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.1" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", @@ -4370,21 +5231,22 @@ checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" [[package]] name = "ipconfig" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" dependencies = [ - "socket2 0.5.10", + "socket2 0.6.3", "widestring", - "windows-sys 0.48.0", - "winreg", + "windows-registry", + "windows-result", + "windows-sys 0.61.2", ] [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "is-terminal" @@ -4450,9 +5312,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "ittapi" @@ -4496,10 +5358,34 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "319af585c4c8a6b5552a52b7787a1ab3e4d59df7614190b1f85b9b842488789d" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "jiff" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", +] + +[[package]] +name = "jiff-static" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" +dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4511,7 +5397,7 @@ dependencies = [ "cesu8", "cfg-if", "combine", - "jni-sys", + "jni-sys 0.3.1", "log", "thiserror 1.0.69", "walkdir", @@ -4520,9 +5406,31 @@ dependencies = [ [[package]] name = "jni-sys" -version = "0.3.0" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.117", +] [[package]] name = "jobserver" @@ -4536,10 +5444,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.83" +version = "0.3.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" +checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] @@ -4552,9 +5462,11 @@ checksum = "e281ae70cc3b98dac15fced3366a880949e65fc66e345ce857a5682d152f3e62" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", + "jsonrpsee-http-client", "jsonrpsee-proc-macros", "jsonrpsee-server", "jsonrpsee-types", + "jsonrpsee-wasm-client", "jsonrpsee-ws-client", "tokio", "tracing", @@ -4567,7 +5479,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc4280b709ac3bb5e16cf3bad5056a0ec8df55fa89edfe996361219aadc2c7ea" dependencies = [ "base64", + "futures-channel", "futures-util", + "gloo-net", "http 1.4.0", "jsonrpsee-core", "pin-project", @@ -4600,13 +5514,39 @@ dependencies = [ "parking_lot 0.12.5", "pin-project", "rand 0.8.5", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "serde", "serde_json", "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", + "wasm-bindgen-futures", +] + +[[package]] +name = "jsonrpsee-http-client" +version = "0.24.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f50c389d6e6a52eb7c3548a6600c90cf74d9b71cb5912209833f00a5479e9a01" +dependencies = [ + "async-trait", + "base64", + "http-body 1.0.1", + "hyper 1.9.0", + "hyper-rustls", + "hyper-util", + "jsonrpsee-core", + "jsonrpsee-types", + "rustls", + "rustls-platform-verifier", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tower", + "tracing", + "url", ] [[package]] @@ -4616,10 +5556,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7398cddf5013cca4702862a2692b66c48a3bd6cf6ec681a47453c93d63cf8de5" dependencies = [ "heck 0.5.0", - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -4632,7 +5572,7 @@ dependencies = [ "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper 1.8.1", + "hyper 1.9.0", "hyper-util", "jsonrpsee-core", "jsonrpsee-types", @@ -4661,6 +5601,17 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "jsonrpsee-wasm-client" +version = "0.24.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9d745e4f543fc10fc0e2b11aa1f3be506b1e475d412167e7191a65ecd239f1c" +dependencies = [ + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", +] + [[package]] name = "jsonrpsee-ws-client" version = "0.24.10" @@ -4690,20 +5641,36 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", ] +[[package]] +name = "keccak-asm" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa468878266ad91431012b3e5ef1bf9b170eab22883503a318d46857afa4579a" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + +[[package]] +name = "keccak-const" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d8d8ce877200136358e0bbff3a77965875db3af755a11e1fa6b1b3e2df13ea" + [[package]] name = "keccak-hash" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e1b8590eb6148af2ea2d75f38e7d29f5ca970d5a4df456b3ef19b8b415d0264" dependencies = [ - "primitive-types", + "primitive-types 0.13.1", "tiny-keccak", ] @@ -4750,6 +5717,9 @@ name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin 0.9.8", +] [[package]] name = "leb128fmt" @@ -4759,15 +5729,27 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.178" +version = "0.2.184" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" + +[[package]] +name = "libgit2-sys" +version = "0.18.3+1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" +checksum = "c9b3acc4b91781bb0b3386669d325163746af5f6e4f73e6d2d630e09a35f3487" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] [[package]] name = "libm" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libp2p" @@ -4779,7 +5761,7 @@ dependencies = [ "either", "futures", "futures-timer", - "getrandom 0.2.16", + "getrandom 0.2.17", "libp2p-allow-block-list", "libp2p-connection-limits", "libp2p-core", @@ -4897,9 +5879,9 @@ dependencies = [ [[package]] name = "libp2p-identity" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3104e13b51e4711ff5738caa1fb54467c8604c2e94d607e27745bcf709068774" +checksum = "f0c7892c221730ba55f7196e98b0b8ba5e04b4155651736036628e9f73ed6fc3" dependencies = [ "bs58", "ed25519-dalek", @@ -4908,7 +5890,7 @@ dependencies = [ "quick-protobuf", "rand 0.8.5", "sha2 0.10.9", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "zeroize", ] @@ -5102,7 +6084,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5190,18 +6172,19 @@ dependencies = [ "thiserror 1.0.69", "tracing", "yamux 0.12.1", - "yamux 0.13.8", + "yamux 0.13.10", ] [[package]] name = "libredox" -version = "0.1.10" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "libc", - "redox_syscall 0.5.18", + "plain", + "redox_syscall 0.7.3", ] [[package]] @@ -5265,13 +6248,25 @@ dependencies = [ "libsecp256k1-core", ] +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + [[package]] name = "libz-sys" -version = "1.1.23" +version = "1.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" +checksum = "d52f4c29e2a68ac30c9087e1b772dc9f44a2b66ed44edf2266cf2be9b03dafc1" dependencies = [ "cc", + "libc", "pkg-config", "vcpkg", ] @@ -5317,9 +6312,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "lioness" @@ -5341,9 +6336,9 @@ checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "litep2p" -version = "0.12.3" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d903b21d57fae0e8d184c6ea0107fb5303fcab7cd2acaf5d2d9beb2807194b4a" +checksum = "cbf3924cf539a761465543592b34c4198d60db2cda16594769edd43451e5ab41" dependencies = [ "async-trait", "bs58", @@ -5354,7 +6349,8 @@ dependencies = [ "futures", "futures-timer", "hickory-resolver 0.25.2", - "indexmap", + "indexmap 2.13.0", + "ip_network", "libc", "mockall", "multiaddr 0.17.1", @@ -5363,7 +6359,7 @@ dependencies = [ "parking_lot 0.12.5", "pin-project", "prost 0.13.5", - "prost-build 0.14.1", + "prost-build 0.14.3", "rand 0.8.5", "ring 0.17.14", "serde", @@ -5372,7 +6368,7 @@ dependencies = [ "smallvec", "snow", "socket2 0.5.10", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-stream", "tokio-tungstenite", @@ -5383,7 +6379,7 @@ dependencies = [ "url", "x25519-dalek", "x509-parser 0.17.0", - "yamux 0.13.8", + "yamux 0.13.10", "yasna", "zeroize", ] @@ -5464,6 +6460,17 @@ dependencies = [ "libc", ] +[[package]] +name = "macro-string" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "macro_magic" version = "0.5.1" @@ -5473,7 +6480,7 @@ dependencies = [ "macro_magic_core", "macro_magic_macros", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5487,7 +6494,7 @@ dependencies = [ "macro_magic_core_macros", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5498,7 +6505,7 @@ checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -5509,27 +6516,27 @@ checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" dependencies = [ "macro_magic_core", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "match-lookup" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e" +checksum = "757aee279b8bdbb9f9e676796fd459e4207a1f986e87886700abf589f5abf771" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.117", ] [[package]] name = "matchers" -version = "0.2.0" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] @@ -5542,11 +6549,21 @@ dependencies = [ "rawpointer", ] +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memfd" @@ -5554,7 +6571,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" dependencies = [ - "rustix 1.1.2", + "rustix 1.1.4", ] [[package]] @@ -5568,9 +6585,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" +checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" dependencies = [ "libc", ] @@ -5629,9 +6646,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", "wasi", @@ -5651,7 +6668,7 @@ dependencies = [ "c2-chacha", "curve25519-dalek", "either", - "hashlink", + "hashlink 0.8.4", "lioness", "log", "parking_lot 0.12.5", @@ -5665,8 +6682,8 @@ dependencies = [ [[package]] name = "mmr-gadget" -version = "50.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "51.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "futures", "log", @@ -5684,8 +6701,8 @@ dependencies = [ [[package]] name = "mmr-rpc" -version = "44.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "45.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -5720,14 +6737,14 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "moka" -version = "0.12.11" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" +checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" dependencies = [ "crossbeam-channel", "crossbeam-epoch", @@ -5735,7 +6752,6 @@ dependencies = [ "equivalent", "parking_lot 0.12.5", "portable-atomic", - "rustc_version", "smallvec", "tagptr", "uuid", @@ -5808,6 +6824,7 @@ dependencies = [ "digest 0.10.7", "multihash-derive", "sha2 0.10.9", + "sha3", "unsigned-varint 0.7.2", ] @@ -5857,9 +6874,9 @@ dependencies = [ [[package]] name = "nalgebra" -version = "0.33.2" +version = "0.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" +checksum = "9d43ddcacf343185dfd6de2ee786d9e8b1c2301622afab66b6c73baf9882abfd" dependencies = [ "approx", "matrixmultiply", @@ -5887,63 +6904,47 @@ checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" [[package]] name = "netlink-packet-core" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4" dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-utils", + "paste", ] [[package]] name = "netlink-packet-route" -version = "0.17.1" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" +checksum = "4ce3636fa715e988114552619582b530481fd5ef176a1e5c1bf024077c2c9445" dependencies = [ - "anyhow", - "bitflags 1.3.2", - "byteorder", + "bitflags 2.11.0", "libc", + "log", "netlink-packet-core", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-utils" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror 1.0.69", ] [[package]] name = "netlink-proto" -version = "0.11.5" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" +checksum = "b65d130ee111430e47eed7896ea43ca693c387f097dd97376bffafbf25812128" dependencies = [ "bytes", "futures", "log", "netlink-packet-core", "netlink-sys", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "netlink-sys" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" +checksum = "cd6c30ed10fa69cc491d491b85cc971f6bdeb8e7367b7cde2ee6cc878d583fae" dependencies = [ "bytes", - "futures", + "futures-util", "libc", "log", "tokio", @@ -5951,24 +6952,25 @@ dependencies = [ [[package]] name = "network-interface" -version = "2.0.3" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07709a6d4eba90ab10ec170a0530b3aafc81cb8a2d380e4423ae41fc55fe5745" +checksum = "4ddcb8865ad3d9950f22f42ffa0ef0aecbfbf191867b3122413602b0a360b2a6" dependencies = [ "cc", "libc", - "thiserror 2.0.17", + "thiserror 2.0.18", "winapi", ] [[package]] name = "nix" -version = "0.26.4" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.11.0", "cfg-if", + "cfg_aliases 0.2.1", "libc", ] @@ -6069,20 +7071,35 @@ checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" [[package]] name = "ntapi" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae" dependencies = [ "winapi", ] [[package]] name = "nu-ansi-term" -version = "0.50.3" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ - "windows-sys 0.61.2", + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", ] [[package]] @@ -6095,6 +7112,22 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-bigint-dig" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" +dependencies = [ + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + [[package]] name = "num-complex" version = "0.4.6" @@ -6106,9 +7139,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" [[package]] name = "num-derive" @@ -6118,7 +7151,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -6140,6 +7173,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-rational" version = "0.4.2" @@ -6171,6 +7215,42 @@ dependencies = [ "libc", ] +[[package]] +name = "num_enum" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "nybbles" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d49ff0c0d00d4a502b39df9af3a525e1efeb14b9dabb5bb83335284c1309210" +dependencies = [ + "alloy-rlp", + "cfg-if", + "proptest", + "ruint", + "serde", + "smallvec", +] + [[package]] name = "object" version = "0.36.7" @@ -6179,7 +7259,7 @@ checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "crc32fast", "hashbrown 0.15.5", - "indexmap", + "indexmap 2.13.0", "memchr", ] @@ -6212,9 +7292,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" dependencies = [ "critical-section", "portable-atomic", @@ -6240,9 +7320,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl-probe" -version = "0.1.6" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "option-ext" @@ -6274,15 +7354,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43dfaf083aef571385fccfdc3a2f8ede8d0a1863160455d4f2b014d8f7d04a3f" dependencies = [ "expander", - "indexmap", + "indexmap 2.13.0", "itertools 0.11.0", "petgraph 0.6.5", - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + [[package]] name = "pallet-asset" version = "0.1.0" @@ -6320,8 +7418,8 @@ dependencies = [ [[package]] name = "pallet-asset-conversion" -version = "27.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "28.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-benchmarking", "frame-support", @@ -6338,8 +7436,8 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-support", "frame-system", @@ -6353,8 +7451,8 @@ dependencies = [ [[package]] name = "pallet-authorship" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-support", "frame-system", @@ -6366,8 +7464,8 @@ dependencies = [ [[package]] name = "pallet-babe" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-benchmarking", "frame-support", @@ -6389,8 +7487,8 @@ dependencies = [ [[package]] name = "pallet-balances" -version = "46.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "47.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "docify", "frame-benchmarking", @@ -6424,8 +7522,8 @@ dependencies = [ [[package]] name = "pallet-beefy" -version = "46.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "47.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-support", "frame-system", @@ -6443,8 +7541,8 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" -version = "46.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "47.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "binary-merkle-tree", @@ -6468,8 +7566,8 @@ dependencies = [ [[package]] name = "pallet-broker" -version = "0.24.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.25.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "bitvec", "frame-benchmarking", @@ -6536,8 +7634,8 @@ dependencies = [ [[package]] name = "pallet-contracts" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "environmental", "frame-benchmarking", @@ -6568,17 +7666,17 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "23.0.3" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "pallet-contracts-uapi" version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -6618,8 +7716,8 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" -version = "44.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "45.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -6660,8 +7758,8 @@ dependencies = [ [[package]] name = "pallet-grandpa" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-benchmarking", "frame-support", @@ -6765,8 +7863,8 @@ dependencies = [ [[package]] name = "pallet-im-online" -version = "44.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "45.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-benchmarking", "frame-support", @@ -6784,8 +7882,8 @@ dependencies = [ [[package]] name = "pallet-indices" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-benchmarking", "frame-support", @@ -6799,8 +7897,8 @@ dependencies = [ [[package]] name = "pallet-message-queue" -version = "48.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "49.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "environmental", "frame-benchmarking", @@ -6818,8 +7916,8 @@ dependencies = [ [[package]] name = "pallet-mmr" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "log", "parity-scale-codec", @@ -6871,8 +7969,8 @@ dependencies = [ [[package]] name = "pallet-offences" -version = "44.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "45.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-support", "frame-system", @@ -6954,8 +8052,8 @@ dependencies = [ [[package]] name = "pallet-preimage" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-benchmarking", "frame-support", @@ -7037,10 +8135,145 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-revive" +version = "0.13.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" +dependencies = [ + "alloy-consensus", + "alloy-core", + "alloy-trie", + "derive_more 0.99.20", + "environmental", + "ethereum-standards", + "ethereum-types", + "frame-benchmarking", + "frame-support", + "frame-system", + "hex-literal 0.4.1", + "humantime-serde", + "impl-trait-for-tuples", + "k256", + "log", + "num-bigint", + "num-integer", + "num-traits", + "pallet-revive-fixtures", + "pallet-revive-proc-macro", + "pallet-revive-uapi", + "pallet-transaction-payment", + "parity-scale-codec", + "paste", + "polkavm", + "polkavm-common 0.31.0", + "rand 0.8.5", + "rand_pcg", + "revm", + "ripemd", + "rlp 0.6.1", + "scale-info", + "serde", + "serde_json", + "sp-api", + "sp-arithmetic", + "sp-consensus-aura", + "sp-consensus-babe", + "sp-consensus-slots", + "sp-core", + "sp-io", + "sp-runtime", + "sp-version", + "substrate-bn", + "subxt-signer", +] + +[[package]] +name = "pallet-revive-eth-rpc" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "env_logger", + "futures", + "git2", + "hex", + "jsonrpsee", + "log", + "pallet-revive", + "pallet-revive-fixtures", + "parity-scale-codec", + "polymesh", + "polymesh-runtime-develop", + "pretty_assertions", + "rlp 0.6.1", + "sc-cli", + "sc-rpc", + "sc-rpc-api", + "sc-service", + "serde", + "serde_json", + "sp-arithmetic", + "sp-core", + "sp-crypto-hashing", + "sp-io", + "sp-rpc", + "sp-runtime", + "sp-timestamp", + "sp-weights", + "sqlx", + "substrate-prometheus-endpoint", + "subxt", + "subxt-signer", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "pallet-revive-fixtures" +version = "0.10.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" +dependencies = [ + "alloy-core", + "anyhow", + "cargo_metadata", + "hex", + "pallet-revive-uapi", + "polkavm-linker 0.30.0", + "serde_json", + "sp-core", + "sp-io", + "toml 0.8.23", +] + +[[package]] +name = "pallet-revive-proc-macro" +version = "0.7.2" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "pallet-revive-uapi" +version = "0.11.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" +dependencies = [ + "alloy-core", + "bitflags 1.3.2", + "const-crypto", + "hex-literal 0.4.1", + "pallet-revive-proc-macro", + "parity-scale-codec", + "polkavm-derive 0.30.0", + "scale-info", +] + [[package]] name = "pallet-scheduler" -version = "46.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "47.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "docify", "frame-benchmarking", @@ -7056,8 +8289,8 @@ dependencies = [ [[package]] name = "pallet-session" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-support", "frame-system", @@ -7076,6 +8309,22 @@ dependencies = [ "sp-trie", ] +[[package]] +name = "pallet-session-benchmarking" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-session", + "pallet-staking", + "parity-scale-codec", + "rand 0.8.5", + "sp-runtime", + "sp-session", +] + [[package]] name = "pallet-settlement" version = "0.1.0" @@ -7111,8 +8360,8 @@ dependencies = [ [[package]] name = "pallet-staking" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -7134,18 +8383,18 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "12.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "pallet-staking-runtime-api" -version = "30.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "31.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "sp-api", @@ -7211,8 +8460,8 @@ dependencies = [ [[package]] name = "pallet-sudo" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "docify", "frame-benchmarking", @@ -7226,8 +8475,8 @@ dependencies = [ [[package]] name = "pallet-timestamp" -version = "44.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "45.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "docify", "frame-benchmarking", @@ -7244,8 +8493,8 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-benchmarking", "frame-support", @@ -7378,10 +8627,10 @@ version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -7505,9 +8754,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.4" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbcfd20a6d4eeba40179f05735784ad32bdaef05ce8e8af05f180d45bb3e7e22" +checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" dependencies = [ "memchr", "ucd-trie", @@ -7515,9 +8764,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.8.4" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f72981ade67b1ca6adc26ec221be9f463f2b5839c7508998daa17c23d94d7f" +checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" dependencies = [ "pest", "pest_generator", @@ -7525,22 +8774,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.4" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee9efd8cdb50d719a80088b76f81aec7c41ed6d522ee750178f83883d271625" +checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "pest_meta" -version = "2.8.4" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf1d70880e76bdc13ba52eafa6239ce793d85c8e43896507e43dd8984ff05b82" +checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" dependencies = [ "pest", "sha2 0.10.9", @@ -7553,7 +8802,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap", + "indexmap 2.13.0", ] [[package]] @@ -7563,7 +8812,60 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset 0.5.7", - "indexmap", + "indexmap 2.13.0", +] + +[[package]] +name = "petgraph" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" +dependencies = [ + "fixedbitset 0.5.7", + "hashbrown 0.15.5", + "indexmap 2.13.0", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.2", ] [[package]] @@ -7574,29 +8876,29 @@ checksum = "3f8cf1ae70818c6476eb2da0ac8f3f55ecdea41a7aa16824ea6efc4a31cccf41" [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pin-utils" @@ -7606,15 +8908,26 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" dependencies = [ "atomic-waker", "fastrand", "futures-io", ] +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -7629,7 +8942,13 @@ dependencies = [ name = "pkg-config" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "polkadot-ckb-merkle-mountain-range" @@ -7643,8 +8962,8 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" -version = "21.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "22.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "scale-info", @@ -7654,8 +8973,8 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" -version = "28.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "29.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "bs58", "futures", @@ -7671,8 +8990,8 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" -version = "28.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "29.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-channel 1.9.0", "async-trait", @@ -7696,8 +9015,8 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" -version = "23.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "24.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "bitvec", "bounded-vec", @@ -7720,8 +9039,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" -version = "28.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "29.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "derive_more 0.99.20", @@ -7748,8 +9067,8 @@ dependencies = [ [[package]] name = "polkadot-overseer" -version = "28.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "29.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "futures", @@ -7768,8 +9087,8 @@ dependencies = [ [[package]] name = "polkadot-parachain-primitives" -version = "20.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "21.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "bounded-collections", @@ -7785,8 +9104,8 @@ dependencies = [ [[package]] name = "polkadot-primitives" -version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "23.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "bitvec", "bounded-collections", @@ -7814,8 +9133,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" -version = "25.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "26.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "bs58", "frame-benchmarking", @@ -7826,8 +9145,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" -version = "24.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "25.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "bitflags 1.3.2", "bitvec", @@ -7845,6 +9164,7 @@ dependencies = [ "pallet-message-queue", "pallet-mmr", "pallet-session", + "pallet-session-benchmarking", "pallet-staking", "pallet-timestamp", "parity-scale-codec", @@ -7874,8 +9194,8 @@ dependencies = [ [[package]] name = "polkadot-sdk-frame" -version = "0.14.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.15.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "docify", "frame-benchmarking", @@ -7909,8 +9229,8 @@ dependencies = [ [[package]] name = "polkadot-statement-table" -version = "23.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "24.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -7919,23 +9239,23 @@ dependencies = [ [[package]] name = "polkavm" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4323d016144b2852da47cee55ca5fc33dfe7517be1f52395759f247ecc5695f6" +checksum = "34ddb26cbe473e21bf5c329723e72fdf9208b5f9674e54721bf436e2efdbb26f" dependencies = [ "libc", "log", "picosimd", "polkavm-assembler", - "polkavm-common", + "polkavm-common 0.31.0", "polkavm-linux-raw", ] [[package]] name = "polkavm-assembler" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a873fa7ace058d6507debf5fccb1d06bd3279f5b35dbaf70dc7fe94a6c415c" +checksum = "9f9006f0a135c6d035487fa88fa75b97b32a53d1d914c757f131c8e10a2af295" dependencies = [ "log", ] @@ -7946,6 +9266,16 @@ version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed1b408db93d4f49f5c651a7844682b9d7a561827b4dc6202c10356076c055c9" dependencies = [ + "picosimd", +] + +[[package]] +name = "polkavm-common" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0a3e43fa1a54b955a2f9422b1690c3cc29252ac8828c02a99d2370b9f2a188e" +dependencies = [ + "blake3", "log", "picosimd", "polkavm-assembler", @@ -7957,7 +9287,16 @@ version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acb4463fb0b9dbfafdc1d1a1183df4bf7afa3350d124f29d5700c6bee54556b5" dependencies = [ - "polkavm-derive-impl-macro", + "polkavm-derive-impl-macro 0.30.0", +] + +[[package]] +name = "polkavm-derive" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d944b6b4e792c2a120232b52bd6f2c9dd3071d3f48462afb2b5d00cb9f7ac9" +dependencies = [ + "polkavm-derive-impl-macro 0.31.0", ] [[package]] @@ -7966,10 +9305,22 @@ version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993ff45b972e09babe68adce7062c3c38a84b9f50f07b7caf393a023eaa6c74a" dependencies = [ - "polkavm-common", + "polkavm-common 0.30.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "polkavm-derive-impl" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c14b030150f81dfde110997b6fafc19741998130908fdab85f1a66bb735025" +dependencies = [ + "polkavm-common 0.31.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -7978,8 +9329,18 @@ version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a4f5352e13c1ca5f0e4d7b4a804fbb85b0e02c45cae435d101fe71081bc8ed8" dependencies = [ - "polkavm-derive-impl", - "syn 2.0.111", + "polkavm-derive-impl 0.30.0", + "syn 2.0.117", +] + +[[package]] +name = "polkavm-derive-impl-macro" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3fcadb13edfcc3b4046fcd2d292597782f5b7a2af140e6363fbf71fe196b425" +dependencies = [ + "polkavm-derive-impl 0.31.0", + "syn 2.0.117", ] [[package]] @@ -7993,16 +9354,32 @@ dependencies = [ "hashbrown 0.14.5", "log", "object 0.36.7", - "polkavm-common", + "polkavm-common 0.30.0", + "regalloc2 0.9.3", + "rustc-demangle", +] + +[[package]] +name = "polkavm-linker" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1ae3f7aff1af110dcd0f105d783b10ff25cd2837abe411ea4d88ae5cd193b49" +dependencies = [ + "dirs", + "gimli 0.31.1", + "hashbrown 0.14.5", + "log", + "object 0.36.7", + "polkavm-common 0.31.0", "regalloc2 0.9.3", "rustc-demangle", ] [[package]] name = "polkavm-linux-raw" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604b23cdb201979304449f53d21bfd5fb1724c03e3ea889067c9a3bf7ae33862" +checksum = "cbcd9ed5f77c60f3878289001d3e789da301746249b622bfb2876e2d0fe32c0b" [[package]] name = "polling" @@ -8014,7 +9391,7 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.1.2", + "rustix 1.1.4", "windows-sys 0.61.2", ] @@ -8024,7 +9401,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug 0.3.1", "universal-hash", ] @@ -8033,6 +9410,7 @@ dependencies = [ name = "polymesh" version = "8.0.0" dependencies = [ + "array-bytes 6.2.3", "clap", "frame-benchmarking", "frame-benchmarking-cli", @@ -8065,6 +9443,7 @@ dependencies = [ "pallet-protocol-fee", "pallet-protocol-fee-rpc", "pallet-protocol-fee-rpc-runtime-api", + "pallet-revive", "pallet-session", "pallet-staking", "pallet-staking-runtime-api", @@ -8266,6 +9645,7 @@ dependencies = [ "pallet-identity", "pallet-multisig", "pallet-relayer", + "pallet-transaction-payment", "parity-scale-codec", "polymesh-primitives", "polymesh-transaction-payment", @@ -8322,8 +9702,10 @@ dependencies = [ "pallet-protocol-fee", "pallet-protocol-fee-rpc-runtime-api", "pallet-relayer", + "pallet-revive", "pallet-scheduler", "pallet-session", + "pallet-session-benchmarking", "pallet-settlement", "pallet-staking", "pallet-staking-reward-curve", @@ -8408,6 +9790,7 @@ dependencies = [ "pallet-protocol-fee", "pallet-protocol-fee-rpc-runtime-api", "pallet-relayer", + "pallet-revive", "pallet-scheduler", "pallet-session", "pallet-settlement", @@ -8495,6 +9878,7 @@ dependencies = [ "pallet-protocol-fee", "pallet-protocol-fee-rpc-runtime-api", "pallet-relayer", + "pallet-revive", "pallet-scheduler", "pallet-session", "pallet-settlement", @@ -8584,6 +9968,7 @@ dependencies = [ "pallet-protocol-fee", "pallet-protocol-fee-rpc-runtime-api", "pallet-relayer", + "pallet-revive", "pallet-scheduler", "pallet-session", "pallet-settlement", @@ -8704,16 +10089,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug 0.3.1", "universal-hash", ] [[package]] name = "portable-atomic" -version = "1.11.1" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" + +[[package]] +name = "portable-atomic-util" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" +dependencies = [ + "portable-atomic", +] [[package]] name = "postcard" @@ -8753,9 +10147,9 @@ dependencies = [ [[package]] name = "predicates" -version = "3.1.3" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe" dependencies = [ "anstyle", "predicates-core", @@ -8763,20 +10157,30 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" +checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" [[package]] name = "predicates-tree" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" dependencies = [ "predicates-core", "termtree", ] +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + [[package]] name = "prettyplease" version = "0.2.37" @@ -8784,7 +10188,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.111", + "syn 2.0.117", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec 0.6.0", + "uint 0.9.5", ] [[package]] @@ -8794,8 +10218,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" dependencies = [ "fixed-hash", - "impl-codec", + "impl-codec 0.7.1", "impl-num-traits", + "impl-rlp", "impl-serde", "scale-info", "uint 0.10.0", @@ -8829,11 +10254,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.23.9", + "toml_edit 0.25.9+spec-1.1.0", ] [[package]] @@ -8879,7 +10304,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -8896,14 +10321,14 @@ checksum = "75eea531cfcd120e0851a3f8aed42c4841f78c889eefafd96339c72677ae42c3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -8942,21 +10367,25 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "proptest" -version = "1.9.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" +checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ - "bitflags 2.10.0", + "bit-set", + "bit-vec", + "bitflags 2.11.0", "num-traits", "rand 0.9.2", "rand_chacha 0.9.0", "rand_xorshift", - "regex-syntax", + "regex-syntax 0.8.10", + "rusty-fork", + "tempfile", "unarray", ] @@ -8982,12 +10411,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d" +checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" dependencies = [ "bytes", - "prost-derive 0.14.1", + "prost-derive 0.14.3", ] [[package]] @@ -9006,27 +10435,26 @@ dependencies = [ "prost 0.13.5", "prost-types 0.13.5", "regex", - "syn 2.0.111", + "syn 2.0.117", "tempfile", ] [[package]] name = "prost-build" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac6c3320f9abac597dcbc668774ef006702672474aad53c6d596b62e487b40b1" +checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7" dependencies = [ "heck 0.5.0", "itertools 0.14.0", "log", "multimap", - "once_cell", - "petgraph 0.7.1", + "petgraph 0.8.3", "prettyplease", - "prost 0.14.1", - "prost-types 0.14.1", + "prost 0.14.3", + "prost-types 0.14.3", "regex", - "syn 2.0.111", + "syn 2.0.117", "tempfile", ] @@ -9040,7 +10468,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9053,20 +10481,20 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "prost-derive" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" +checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" dependencies = [ "anyhow", "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9080,11 +10508,11 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72" +checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" dependencies = [ - "prost 0.14.1", + "prost 0.14.3", ] [[package]] @@ -9107,7 +10535,7 @@ checksum = "938543690519c20c3a480d20a8efcc8e69abeb44093ab1df4e7c1f81f26c677a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9125,6 +10553,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + [[package]] name = "quick-protobuf" version = "0.8.1" @@ -9159,10 +10593,10 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "rustls", - "socket2 0.6.1", - "thiserror 2.0.17", + "socket2 0.6.3", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -9170,20 +10604,20 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.13" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ "bytes", "getrandom 0.3.4", "lru-slab", "rand 0.9.2", "ring 0.17.14", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -9198,16 +10632,16 @@ dependencies = [ "cfg_aliases 0.2.1", "libc", "once_cell", - "socket2 0.6.1", + "socket2 0.6.3", "tracing", "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.42" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -9218,6 +10652,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "radium" version = "0.7.0" @@ -9233,6 +10673,7 @@ dependencies = [ "libc", "rand_chacha 0.3.1", "rand_core 0.6.4", + "serde", ] [[package]] @@ -9242,7 +10683,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.3", + "rand_core 0.9.5", + "serde", ] [[package]] @@ -9272,7 +10714,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -9287,16 +10729,17 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ "getrandom 0.3.4", + "serde", ] [[package]] @@ -9324,7 +10767,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "rand_core 0.9.3", + "rand_core 0.9.5", +] + +[[package]] +name = "rapidhash" +version = "4.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e48930979c155e2f33aa36ab3119b5ee81332beb6482199a8ecd6029b80b59" +dependencies = [ + "rustversion", ] [[package]] @@ -9333,7 +10785,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", ] [[package]] @@ -9389,7 +10841,16 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", +] + +[[package]] +name = "redox_syscall" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" +dependencies = [ + "bitflags 2.11.0", ] [[package]] @@ -9398,7 +10859,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", "thiserror 1.0.69", ] @@ -9420,7 +10881,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -9446,38 +10907,53 @@ dependencies = [ "bumpalo", "hashbrown 0.15.5", "log", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "smallvec", ] [[package]] name = "regex" -version = "1.12.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.14", + "regex-syntax 0.8.10", ] [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.10", ] [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "resolv-conf" @@ -9485,6 +10961,195 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" +[[package]] +name = "revm" +version = "27.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6bf82101a1ad8a2b637363a37aef27f88b4efc8a6e24c72bf5f64923dc5532" +dependencies = [ + "revm-bytecode", + "revm-context", + "revm-context-interface", + "revm-database", + "revm-database-interface", + "revm-handler", + "revm-inspector", + "revm-interpreter", + "revm-precompile", + "revm-primitives", + "revm-state", +] + +[[package]] +name = "revm-bytecode" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66c52031b73cae95d84cd1b07725808b5fd1500da3e5e24574a3b2dc13d9f16d" +dependencies = [ + "bitvec", + "phf", + "revm-primitives", + "serde", +] + +[[package]] +name = "revm-context" +version = "8.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cd508416a35a4d8a9feaf5ccd06ac6d6661cd31ee2dc0252f9f7316455d71f9" +dependencies = [ + "cfg-if", + "derive-where", + "revm-bytecode", + "revm-context-interface", + "revm-database-interface", + "revm-primitives", + "revm-state", + "serde", +] + +[[package]] +name = "revm-context-interface" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc90302642d21c8f93e0876e201f3c5f7913c4fcb66fb465b0fd7b707dfe1c79" +dependencies = [ + "alloy-eip2930", + "alloy-eip7702", + "auto_impl", + "either", + "revm-database-interface", + "revm-primitives", + "revm-state", + "serde", +] + +[[package]] +name = "revm-database" +version = "7.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39a276ed142b4718dcf64bc9624f474373ed82ef20611025045c3fb23edbef9c" +dependencies = [ + "alloy-eips", + "revm-bytecode", + "revm-database-interface", + "revm-primitives", + "revm-state", + "serde", +] + +[[package]] +name = "revm-database-interface" +version = "7.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c523c77e74eeedbac5d6f7c092e3851dbe9c7fec6f418b85992bd79229db361" +dependencies = [ + "auto_impl", + "either", + "revm-primitives", + "revm-state", + "serde", +] + +[[package]] +name = "revm-handler" +version = "8.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1529c8050e663be64010e80ec92bf480315d21b1f2dbf65540028653a621b27d" +dependencies = [ + "auto_impl", + "derive-where", + "revm-bytecode", + "revm-context", + "revm-context-interface", + "revm-database-interface", + "revm-interpreter", + "revm-precompile", + "revm-primitives", + "revm-state", + "serde", +] + +[[package]] +name = "revm-inspector" +version = "8.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78db140e332489094ef314eaeb0bd1849d6d01172c113ab0eb6ea8ab9372926" +dependencies = [ + "auto_impl", + "either", + "revm-context", + "revm-database-interface", + "revm-handler", + "revm-interpreter", + "revm-primitives", + "revm-state", + "serde", + "serde_json", +] + +[[package]] +name = "revm-interpreter" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff9d7d9d71e8a33740b277b602165b6e3d25fff091ba3d7b5a8d373bf55f28a7" +dependencies = [ + "revm-bytecode", + "revm-context-interface", + "revm-primitives", + "serde", +] + +[[package]] +name = "revm-precompile" +version = "25.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cee3f336b83621294b4cfe84d817e3eef6f3d0fce00951973364cc7f860424d" +dependencies = [ + "ark-bls12-381 0.5.0", + "ark-bn254", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "arrayref", + "aurora-engine-modexp", + "c-kzg", + "cfg-if", + "k256", + "libsecp256k1", + "once_cell", + "p256", + "revm-primitives", + "ripemd", + "rug", + "secp256k1 0.31.1", + "sha2 0.10.9", +] + +[[package]] +name = "revm-primitives" +version = "20.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa29d9da06fe03b249b6419b33968ecdf92ad6428e2f012dc57bcd619b5d94e" +dependencies = [ + "alloy-primitives", + "num_enum", + "once_cell", + "serde", +] + +[[package]] +name = "revm-state" +version = "7.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f64fbacb86008394aaebd3454f9643b7d5a782bd251135e17c5b33da592d84d" +dependencies = [ + "bitflags 2.11.0", + "revm-bytecode", + "revm-primitives", + "serde", +] + [[package]] name = "rfc6979" version = "0.4.0" @@ -9518,7 +11183,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted 0.9.0", "windows-sys 0.52.0", @@ -9533,6 +11198,26 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rustc-hex", +] + +[[package]] +name = "rlp" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa24e92bb2a83198bb76d661a71df9f7076b8c420b8696e4d3d97d50d94479e3" +dependencies = [ + "bytes", + "rustc-hex", +] + [[package]] name = "rocksdb" version = "0.24.0" @@ -9560,17 +11245,37 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "rsa" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" +dependencies = [ + "const-oid", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "signature", + "spki", + "subtle 2.6.1", + "zeroize", +] + [[package]] name = "rtnetlink" -version = "0.13.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" +checksum = "4b960d5d873a75b5be9761b1e73b146f52dddcd27bac75263f40fba686d4d7b5" dependencies = [ - "futures", + "futures-channel", + "futures-util", "log", "netlink-packet-core", "netlink-packet-route", - "netlink-packet-utils", "netlink-proto", "netlink-sys", "nix", @@ -9588,11 +11293,57 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rug" +version = "1.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25f6c8f906c90b48e0c1745c9f814c3a31c5eba847043b05c3e9a934dec7c4b3" +dependencies = [ + "az", + "gmp-mpfr-sys", + "libc", + "libm", +] + +[[package]] +name = "ruint" +version = "1.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c141e807189ad38a07276942c6623032d3753c8859c146104ac2e4d68865945a" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "ark-ff 0.5.0", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types 0.12.2", + "proptest", + "rand 0.8.5", + "rand 0.9.2", + "rlp 0.5.2", + "ruint-macro", + "serde_core", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + [[package]] name = "rustc-demangle" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" +checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" [[package]] name = "rustc-hash" @@ -9602,9 +11353,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" [[package]] name = "rustc-hex" @@ -9612,6 +11363,15 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + [[package]] name = "rustc_version" version = "0.4.1" @@ -9636,7 +11396,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -9645,37 +11405,37 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "errno", "libc", - "linux-raw-sys 0.11.0", + "linux-raw-sys 0.12.1", "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.35" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "log", "once_cell", "ring 0.17.14", "rustls-pki-types", - "rustls-webpki 0.103.8", + "rustls-webpki 0.103.10", "subtle 2.6.1", "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -9685,9 +11445,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ "web-time", "zeroize", @@ -9707,7 +11467,7 @@ dependencies = [ "rustls", "rustls-native-certs", "rustls-platform-verifier-android", - "rustls-webpki 0.103.8", + "rustls-webpki 0.103.10", "security-framework", "security-framework-sys", "webpki-root-certs 0.26.11", @@ -9732,9 +11492,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.8" +version = "0.103.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" dependencies = [ "ring 0.17.14", "rustls-pki-types", @@ -9747,6 +11507,18 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +[[package]] +name = "rusty-fork" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + [[package]] name = "ruzstd" version = "0.8.2" @@ -9766,9 +11538,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "safe_arch" @@ -9799,8 +11571,8 @@ dependencies = [ [[package]] name = "sc-allocator" -version = "35.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "36.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "log", "sp-core", @@ -9810,8 +11582,8 @@ dependencies = [ [[package]] name = "sc-authority-discovery" -version = "0.55.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.56.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "futures", @@ -9842,8 +11614,8 @@ dependencies = [ [[package]] name = "sc-basic-authorship" -version = "0.53.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.54.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "futures", "log", @@ -9858,33 +11630,34 @@ dependencies = [ "sp-core", "sp-inherents", "sp-runtime", + "sp-state-machine", "sp-trie", "substrate-prometheus-endpoint", ] [[package]] name = "sc-block-builder" -version = "0.48.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.49.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "sp-api", "sp-block-builder", "sp-blockchain", "sp-core", + "sp-externalities", "sp-inherents", "sp-runtime", - "sp-trie", ] [[package]] name = "sc-chain-spec" -version = "48.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "49.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "docify", - "memmap2 0.9.9", + "memmap2 0.9.10", "parity-scale-codec", "sc-chain-spec-derive", "sc-client-api", @@ -9906,18 +11679,18 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "12.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "sc-cli" -version = "0.57.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.58.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "bip39", @@ -9958,8 +11731,8 @@ dependencies = [ [[package]] name = "sc-client-api" -version = "44.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "45.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "fnv", "futures", @@ -9984,8 +11757,8 @@ dependencies = [ [[package]] name = "sc-client-db" -version = "0.51.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.52.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "hash-db", "kvdb", @@ -10012,8 +11785,8 @@ dependencies = [ [[package]] name = "sc-consensus" -version = "0.54.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.55.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "futures", @@ -10035,8 +11808,8 @@ dependencies = [ [[package]] name = "sc-consensus-babe" -version = "0.55.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.56.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "fork-tree", @@ -10072,8 +11845,8 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" -version = "0.55.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.56.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "futures", "jsonrpsee", @@ -10094,8 +11867,8 @@ dependencies = [ [[package]] name = "sc-consensus-beefy" -version = "34.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "35.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -10128,8 +11901,8 @@ dependencies = [ [[package]] name = "sc-consensus-beefy-rpc" -version = "34.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "35.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "futures", "jsonrpsee", @@ -10148,8 +11921,8 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" -version = "0.54.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.55.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "fork-tree", "parity-scale-codec", @@ -10161,8 +11934,8 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" -version = "0.40.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.41.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "ahash 0.8.12", "array-bytes 6.2.3", @@ -10179,6 +11952,7 @@ dependencies = [ "sc-block-builder", "sc-chain-spec", "sc-client-api", + "sc-client-db", "sc-consensus", "sc-network", "sc-network-common", @@ -10205,8 +11979,8 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa-rpc" -version = "0.40.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.41.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "finality-grandpa", "futures", @@ -10225,8 +11999,8 @@ dependencies = [ [[package]] name = "sc-consensus-slots" -version = "0.54.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.55.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "futures", @@ -10244,12 +12018,13 @@ dependencies = [ "sp-inherents", "sp-runtime", "sp-state-machine", + "sp-trie", ] [[package]] name = "sc-executor" -version = "0.47.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.48.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "parking_lot 0.12.5", @@ -10271,8 +12046,8 @@ dependencies = [ [[package]] name = "sc-executor-common" -version = "0.43.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.44.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "polkavm", "sc-allocator", @@ -10284,24 +12059,25 @@ dependencies = [ [[package]] name = "sc-executor-polkavm" -version = "0.40.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.41.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "log", "polkavm", "sc-executor-common", + "sp-runtime-interface", "sp-wasm-interface", ] [[package]] name = "sc-executor-wasmtime" -version = "0.43.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.44.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "anyhow", "log", "parking_lot 0.12.5", - "rustix 1.1.2", + "rustix 1.1.4", "sc-allocator", "sc-executor-common", "sp-runtime-interface", @@ -10311,8 +12087,8 @@ dependencies = [ [[package]] name = "sc-informant" -version = "0.54.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.55.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "console", "futures", @@ -10327,8 +12103,8 @@ dependencies = [ [[package]] name = "sc-keystore" -version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "40.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "parking_lot 0.12.5", @@ -10341,8 +12117,8 @@ dependencies = [ [[package]] name = "sc-mixnet" -version = "0.25.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.26.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "arrayvec 0.7.6", @@ -10369,8 +12145,8 @@ dependencies = [ [[package]] name = "sc-network" -version = "0.55.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.56.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -10418,8 +12194,8 @@ dependencies = [ [[package]] name = "sc-network-common" -version = "0.52.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.53.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -10428,8 +12204,8 @@ dependencies = [ [[package]] name = "sc-network-gossip" -version = "0.55.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.56.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "ahash 0.8.12", "futures", @@ -10447,8 +12223,8 @@ dependencies = [ [[package]] name = "sc-network-light" -version = "0.54.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.55.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -10466,10 +12242,32 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "sc-network-statement" +version = "0.38.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" +dependencies = [ + "array-bytes 6.2.3", + "async-channel 1.9.0", + "futures", + "governor", + "log", + "parity-scale-codec", + "sc-network", + "sc-network-common", + "sc-network-sync", + "sc-network-types", + "sp-consensus", + "sp-runtime", + "sp-statement-store", + "substrate-prometheus-endpoint", + "tokio", +] + [[package]] name = "sc-network-sync" -version = "0.54.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.55.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -10492,7 +12290,6 @@ dependencies = [ "sp-arithmetic", "sp-blockchain", "sp-consensus", - "sp-consensus-grandpa", "sp-core", "sp-runtime", "substrate-prometheus-endpoint", @@ -10503,8 +12300,8 @@ dependencies = [ [[package]] name = "sc-network-transactions" -version = "0.54.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.55.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "futures", @@ -10522,8 +12319,8 @@ dependencies = [ [[package]] name = "sc-network-types" -version = "0.20.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.20.2" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "bs58", "bytes", @@ -10543,15 +12340,15 @@ dependencies = [ [[package]] name = "sc-offchain" -version = "50.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "51.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "bytes", "fnv", "futures", "futures-timer", "http-body-util", - "hyper 1.8.1", + "hyper 1.9.0", "hyper-rustls", "hyper-util", "num_cpus", @@ -10578,7 +12375,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.20.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -10586,9 +12383,10 @@ dependencies = [ [[package]] name = "sc-rpc" -version = "50.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "51.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ + "async-channel 1.9.0", "futures", "jsonrpsee", "log", @@ -10599,6 +12397,7 @@ dependencies = [ "sc-client-api", "sc-mixnet", "sc-rpc-api", + "sc-statement-store", "sc-tracing", "sc-transaction-pool-api", "sc-utils", @@ -10618,8 +12417,8 @@ dependencies = [ [[package]] name = "sc-rpc-api" -version = "0.54.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.55.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10632,14 +12431,15 @@ dependencies = [ "sp-core", "sp-rpc", "sp-runtime", + "sp-statement-store", "sp-version", "thiserror 1.0.69", ] [[package]] name = "sc-rpc-server" -version = "27.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "28.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "dyn-clone", "forwarded-header-value", @@ -10647,7 +12447,7 @@ dependencies = [ "governor", "http 1.4.0", "http-body-util", - "hyper 1.8.1", + "hyper 1.9.0", "ip_network", "jsonrpsee", "log", @@ -10662,8 +12462,8 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" -version = "0.55.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.56.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "futures", @@ -10695,8 +12495,8 @@ dependencies = [ [[package]] name = "sc-runtime-utilities" -version = "0.7.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.8.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "sc-executor", @@ -10710,8 +12510,8 @@ dependencies = [ [[package]] name = "sc-service" -version = "0.56.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.57.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "directories", @@ -10774,8 +12574,8 @@ dependencies = [ [[package]] name = "sc-state-db" -version = "0.41.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.42.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "log", "parity-scale-codec", @@ -10783,10 +12583,35 @@ dependencies = [ "sp-core", ] +[[package]] +name = "sc-statement-store" +version = "27.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" +dependencies = [ + "async-channel 1.9.0", + "futures", + "itertools 0.11.0", + "log", + "parity-db", + "parking_lot 0.12.5", + "sc-client-api", + "sc-keystore", + "sc-network-statement", + "sc-utils", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-runtime", + "sp-statement-store", + "sp-storage", + "substrate-prometheus-endpoint", + "tokio", +] + [[package]] name = "sc-storage-monitor" -version = "0.27.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.28.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "clap", "fs4", @@ -10798,8 +12623,8 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" -version = "0.55.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.56.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -10817,8 +12642,8 @@ dependencies = [ [[package]] name = "sc-sysinfo" -version = "46.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "47.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "derive_more 0.99.20", "futures", @@ -10837,8 +12662,8 @@ dependencies = [ [[package]] name = "sc-telemetry" -version = "30.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "30.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "chrono", "futures", @@ -10856,8 +12681,8 @@ dependencies = [ [[package]] name = "sc-tracing" -version = "44.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "45.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "chrono", "console", @@ -10879,29 +12704,29 @@ dependencies = [ "thiserror 1.0.69", "tracing", "tracing-log", - "tracing-subscriber", + "tracing-subscriber 0.3.19", ] [[package]] name = "sc-tracing-proc-macro" -version = "11.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "11.1.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "sc-transaction-pool" -version = "44.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "45.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "futures", "futures-timer", - "indexmap", + "indexmap 2.13.0", "itertools 0.11.0", "linked-hash-map", "parity-scale-codec", @@ -10927,12 +12752,12 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" -version = "43.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "44.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "futures", - "indexmap", + "indexmap 2.13.0", "log", "parity-scale-codec", "serde", @@ -10945,8 +12770,8 @@ dependencies = [ [[package]] name = "sc-utils" -version = "20.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "20.1.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-channel 1.9.0", "futures", @@ -10976,12 +12801,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d6ed61699ad4d54101ab5a817169259b5b0efc08152f8632e61482d8a27ca3d" dependencies = [ "parity-scale-codec", - "primitive-types", + "primitive-types 0.13.1", "scale-bits", "scale-decode-derive", "scale-type-resolver", "smallvec", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -10993,35 +12818,35 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "scale-encode" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64901733157f9d25ef86843bd783eda439fac7efb0ad5a615d12d2cf3a29464b" +checksum = "f2a976d73564a59e482b74fd5d95f7518b79ca8c8ca5865398a4d629dd15ee50" dependencies = [ "parity-scale-codec", - "primitive-types", + "primitive-types 0.13.1", "scale-bits", "scale-encode-derive", "scale-type-resolver", "smallvec", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "scale-encode-derive" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78a3993a13b4eafa89350604672c8757b7ea84c7c5947d4b3691e3169c96379b" +checksum = "17020f2d59baabf2ddcdc20a4e567f8210baf089b8a8d4785f5fd5e716f92038" dependencies = [ "darling 0.20.11", - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -11044,10 +12869,10 @@ version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -11069,15 +12894,15 @@ dependencies = [ "proc-macro2", "quote", "scale-info", - "syn 2.0.111", - "thiserror 2.0.17", + "syn 2.0.117", + "thiserror 2.0.18", ] [[package]] name = "scale-value" -version = "0.18.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884aab179aba344c67ddcd1d7dd8e3f8fee202f2e570d97ec34ec8688442a5b3" +checksum = "b3b64809a541e8d5a59f7a9d67cc700cdf5d7f907932a83a0afdedc90db07ccb" dependencies = [ "base58", "blake2 0.10.6", @@ -11088,19 +12913,43 @@ dependencies = [ "scale-encode", "scale-type-resolver", "serde", - "thiserror 2.0.17", + "thiserror 2.0.18", "yap", ] [[package]] name = "schannel" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "schnellru" version = "0.2.4" @@ -11192,11 +13041,23 @@ dependencies = [ name = "secp256k1" version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" +checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "secp256k1-sys 0.10.1", + "serde", +] + +[[package]] +name = "secp256k1" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c3c81b43dc2d8877c216a3fccf76677ee1ebccd429566d3e67447290d0c42b2" dependencies = [ "bitcoin_hashes", - "rand 0.8.5", - "secp256k1-sys 0.10.1", + "rand 0.9.2", + "secp256k1-sys 0.11.0", ] [[package]] @@ -11226,6 +13087,15 @@ dependencies = [ "cc", ] +[[package]] +name = "secp256k1-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb913707158fadaf0d8702c2db0e857de66eb003ccfdda5924b5f5ac98efb38" +dependencies = [ + "cc", +] + [[package]] name = "secrecy" version = "0.8.0" @@ -11246,11 +13116,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.5.1" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -11259,9 +13129,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.15.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -11273,7 +13143,16 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" dependencies = [ - "semver-parser", + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser 0.10.3", ] [[package]] @@ -11292,6 +13171,21 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] + +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + [[package]] name = "serde" version = "1.0.228" @@ -11329,20 +13223,21 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ + "indexmap 2.13.0", "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] @@ -11354,15 +13249,31 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_with" -version = "3.16.1" +version = "3.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" +checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f" dependencies = [ "base64", "chrono", "hex", + "indexmap 1.9.3", + "indexmap 2.13.0", + "schemars 0.9.0", + "schemars 1.2.1", "serde_core", "serde_json", "serde_with_macros", @@ -11371,14 +13282,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.16.1" +version = "3.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" +checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65" dependencies = [ - "darling 0.21.3", + "darling 0.23.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -11398,7 +13309,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.10.7", ] @@ -11410,7 +13321,7 @@ checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.9.0", "opaque-debug 0.3.1", ] @@ -11422,10 +13333,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.10.7", ] +[[package]] +name = "sha2-const-stable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f179d4e11094a893b82fff208f74d448a7512f99f5a0acbd5c679b705f83ed9" + [[package]] name = "sha3" version = "0.10.8" @@ -11436,6 +13353,16 @@ dependencies = [ "keccak", ] +[[package]] +name = "sha3-asm" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59cbb88c189d6352cc8ae96a39d19c7ecad8f7330b29461187f2587fdc2988d5" +dependencies = [ + "cc", + "cfg-if", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -11453,10 +13380,11 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.7" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -11485,11 +13413,11 @@ dependencies = [ [[package]] name = "simple-dns" -version = "0.11.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cba3b4c122239e3b4473674cb7c79ad2693f008f0746bfe2fc3fe1ffcd936a" +checksum = "df350943049174c4ae8ced56c604e28270258faec12a6a48637a7655287c9ce0" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", ] [[package]] @@ -11506,15 +13434,15 @@ checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "siphasher" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slice-group-by" @@ -11563,7 +13491,7 @@ dependencies = [ "bs58", "chacha20", "crossbeam-queue", - "derive_more 2.1.0", + "derive_more 2.1.1", "ed25519-zebra", "either", "event-listener 5.4.1", @@ -11592,7 +13520,7 @@ dependencies = [ "serde_json", "sha2 0.10.9", "sha3", - "siphasher 1.0.1", + "siphasher 1.0.2", "slab", "smallvec", "soketto", @@ -11613,7 +13541,7 @@ dependencies = [ "base64", "blake2-rfc", "bs58", - "derive_more 2.1.0", + "derive_more 2.1.1", "either", "event-listener 5.4.1", "fnv", @@ -11631,7 +13559,7 @@ dependencies = [ "rand_chacha 0.3.1", "serde", "serde_json", - "siphasher 1.0.1", + "siphasher 1.0.2", "slab", "smol", "smoldot", @@ -11656,7 +13584,7 @@ dependencies = [ "curve25519-dalek", "rand_core 0.6.4", "ring 0.17.14", - "rustc_version", + "rustc_version 0.4.1", "sha2 0.10.9", "subtle 2.6.1", ] @@ -11673,12 +13601,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -11699,8 +13627,8 @@ dependencies = [ [[package]] name = "sp-api" -version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "41.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "docify", "hash-db", @@ -11721,22 +13649,22 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" -version = "26.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "27.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "Inflector", "blake2 0.10.6", "expander", - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "sp-application-crypto" -version = "44.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "45.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "scale-info", @@ -11747,8 +13675,8 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "28.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "28.0.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "docify", "integer-sqrt", @@ -11761,8 +13689,8 @@ dependencies = [ [[package]] name = "sp-authority-discovery" -version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "41.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "scale-info", @@ -11773,8 +13701,8 @@ dependencies = [ [[package]] name = "sp-block-builder" -version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "41.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "sp-api", "sp-inherents", @@ -11783,8 +13711,8 @@ dependencies = [ [[package]] name = "sp-blockchain" -version = "43.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "44.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "futures", "parity-scale-codec", @@ -11802,22 +13730,25 @@ dependencies = [ [[package]] name = "sp-consensus" -version = "0.46.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.47.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "futures", "log", + "sp-api", + "sp-externalities", "sp-inherents", "sp-runtime", "sp-state-machine", + "sp-trie", "thiserror 1.0.69", ] [[package]] name = "sp-consensus-aura" -version = "0.46.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.47.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "parity-scale-codec", @@ -11832,8 +13763,8 @@ dependencies = [ [[package]] name = "sp-consensus-babe" -version = "0.46.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.47.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "parity-scale-codec", @@ -11850,8 +13781,8 @@ dependencies = [ [[package]] name = "sp-consensus-beefy" -version = "28.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "29.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "scale-info", @@ -11870,8 +13801,8 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" -version = "27.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "28.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "finality-grandpa", "log", @@ -11887,8 +13818,8 @@ dependencies = [ [[package]] name = "sp-consensus-slots" -version = "0.46.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.47.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "scale-info", @@ -11898,8 +13829,8 @@ dependencies = [ [[package]] name = "sp-core" -version = "39.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "40.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "ark-vrf", "array-bytes 6.2.3", @@ -11922,7 +13853,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.12.5", "paste", - "primitive-types", + "primitive-types 0.13.1", "rand 0.8.5", "scale-info", "schnorrkel", @@ -11946,7 +13877,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "blake2b_simd", "byteorder", @@ -11959,17 +13890,17 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "quote", "sp-crypto-hashing", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "sp-database" version = "10.0.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "kvdb", "kvdb-rocksdb", @@ -11978,18 +13909,19 @@ dependencies = [ [[package]] name = "sp-debug-derive" -version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "15.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ + "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "sp-externalities" -version = "0.31.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.32.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "environmental", "parity-scale-codec", @@ -11998,8 +13930,8 @@ dependencies = [ [[package]] name = "sp-genesis-builder" -version = "0.21.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.22.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "scale-info", @@ -12010,8 +13942,8 @@ dependencies = [ [[package]] name = "sp-inherents" -version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "41.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -12023,8 +13955,8 @@ dependencies = [ [[package]] name = "sp-io" -version = "44.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "45.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "bytes", "docify", @@ -12032,7 +13964,7 @@ dependencies = [ "libsecp256k1", "log", "parity-scale-codec", - "polkavm-derive", + "polkavm-derive 0.31.0", "rustversion", "secp256k1 0.28.2", "sp-core", @@ -12049,8 +13981,8 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "sp-core", "sp-runtime", @@ -12059,8 +13991,8 @@ dependencies = [ [[package]] name = "sp-keystore" -version = "0.45.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.46.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "parking_lot 0.12.5", @@ -12071,7 +14003,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "11.1.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "thiserror 1.0.69", "zstd 0.12.4", @@ -12079,8 +14011,8 @@ dependencies = [ [[package]] name = "sp-metadata-ir" -version = "0.12.1" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.12.3" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "frame-metadata", "parity-scale-codec", @@ -12089,8 +14021,8 @@ dependencies = [ [[package]] name = "sp-mixnet" -version = "0.18.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.19.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "scale-info", @@ -12100,8 +14032,8 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" -version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "41.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "log", "parity-scale-codec", @@ -12117,8 +14049,8 @@ dependencies = [ [[package]] name = "sp-npos-elections" -version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "41.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "scale-info", @@ -12130,8 +14062,8 @@ dependencies = [ [[package]] name = "sp-offchain" -version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "41.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "sp-api", "sp-core", @@ -12141,7 +14073,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "13.0.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "backtrace", "regex", @@ -12149,8 +14081,8 @@ dependencies = [ [[package]] name = "sp-rpc" -version = "37.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "38.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "rustc-hash 1.1.0", "serde", @@ -12159,8 +14091,8 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "45.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "46.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "binary-merkle-tree", "bytes", @@ -12190,13 +14122,13 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "33.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "34.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "bytes", "impl-trait-for-tuples", "parity-scale-codec", - "polkavm-derive", + "polkavm-derive 0.31.0", "sp-externalities", "sp-runtime-interface-proc-macro", "sp-std", @@ -12208,21 +14140,21 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "20.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "21.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "Inflector", "expander", - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "sp-session" -version = "42.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "43.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "scale-info", @@ -12235,8 +14167,8 @@ dependencies = [ [[package]] name = "sp-staking" -version = "42.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "43.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -12248,8 +14180,8 @@ dependencies = [ [[package]] name = "sp-state-machine" -version = "0.49.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.50.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "hash-db", "log", @@ -12268,16 +14200,18 @@ dependencies = [ [[package]] name = "sp-statement-store" -version = "24.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "25.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "aes-gcm", "curve25519-dalek", "ed25519-dalek", + "frame-support", "hkdf", "parity-scale-codec", "rand 0.8.5", "scale-info", + "serde", "sha2 0.10.9", "sp-api", "sp-application-crypto", @@ -12293,12 +14227,12 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" [[package]] name = "sp-storage" -version = "22.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "23.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "impl-serde", "parity-scale-codec", @@ -12309,8 +14243,8 @@ dependencies = [ [[package]] name = "sp-timestamp" -version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "41.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "parity-scale-codec", @@ -12322,19 +14256,19 @@ dependencies = [ [[package]] name = "sp-tracing" version = "19.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "regex", "tracing", "tracing-core", - "tracing-subscriber", + "tracing-subscriber 0.3.19", ] [[package]] name = "sp-transaction-pool" -version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "41.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "sp-api", "sp-runtime", @@ -12342,12 +14276,13 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" -version = "40.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "41.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "async-trait", "parity-scale-codec", "scale-info", + "sp-api", "sp-core", "sp-inherents", "sp-runtime", @@ -12356,8 +14291,8 @@ dependencies = [ [[package]] name = "sp-trie" -version = "42.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "43.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "ahash 0.8.12", "foldhash 0.1.5", @@ -12381,14 +14316,15 @@ dependencies = [ [[package]] name = "sp-version" -version = "43.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "44.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "impl-serde", "parity-scale-codec", "parity-wasm", "scale-info", "serde", + "sp-core", "sp-crypto-hashing-proc-macro", "sp-runtime", "sp-std", @@ -12399,19 +14335,19 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "15.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "parity-scale-codec", "proc-macro-warning", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "sp-wasm-interface" version = "24.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -12422,8 +14358,8 @@ dependencies = [ [[package]] name = "sp-weights" -version = "33.2.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "34.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -12445,6 +14381,9 @@ name = "spin" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] [[package]] name = "spinning_top" @@ -12459,10 +14398,198 @@ dependencies = [ name = "spki" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlx" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" +dependencies = [ + "base64", + "bytes", + "crc", + "crossbeam-queue", + "either", + "event-listener 5.4.1", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.15.5", + "hashlink 0.10.0", + "indexmap 2.13.0", + "log", + "memchr", + "once_cell", + "percent-encoding", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "thiserror 2.0.18", + "tokio", + "tokio-stream", + "tracing", + "url", +] + +[[package]] +name = "sqlx-macros" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 2.0.117", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" +dependencies = [ + "dotenvy", + "either", + "heck 0.5.0", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.9", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 2.0.117", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" +dependencies = [ + "atoi", + "base64", + "bitflags 2.11.0", + "byteorder", + "bytes", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array 0.14.7", + "hex", + "hkdf", + "hmac 0.12.1", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "rsa", + "serde", + "sha1", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.18", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" +dependencies = [ + "atoi", + "base64", + "bitflags 2.11.0", + "byteorder", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-util", + "hex", + "hkdf", + "hmac 0.12.1", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.18", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" dependencies = [ - "base64ct", - "der", + "atoi", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "thiserror 2.0.18", + "tracing", + "url", ] [[package]] @@ -12488,8 +14615,8 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "staging-xcm" -version = "21.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "22.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "bounded-collections", @@ -12509,8 +14636,8 @@ dependencies = [ [[package]] name = "staging-xcm-builder" -version = "25.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "26.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "environmental", "frame-support", @@ -12533,8 +14660,8 @@ dependencies = [ [[package]] name = "staging-xcm-executor" -version = "24.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "25.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "environmental", "frame-benchmarking", @@ -12596,6 +14723,17 @@ dependencies = [ "serde", ] +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + [[package]] name = "strsim" version = "0.11.1" @@ -12640,13 +14778,13 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "substrate-bip39" -version = "0.6.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "0.6.1" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "hmac 0.12.1", "pbkdf2", @@ -12655,15 +14793,28 @@ dependencies = [ "zeroize", ] +[[package]] +name = "substrate-bn" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b5bbfa79abbae15dd642ea8176a21a635ff3c00059961d1ea27ad04e5b441c" +dependencies = [ + "byteorder", + "crunchy", + "lazy_static", + "rand 0.8.5", + "rustc-hex", +] + [[package]] name = "substrate-build-script-utils" version = "11.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" [[package]] name = "substrate-frame-rpc-system" -version = "49.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "50.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "docify", "frame-system-rpc-runtime-api", @@ -12683,10 +14834,10 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.17.7" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "http-body-util", - "hyper 1.8.1", + "hyper 1.9.0", "hyper-util", "log", "prometheus", @@ -12697,12 +14848,12 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "3.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" [[package]] name = "substrate-wasm-builder" -version = "31.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "32.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "array-bytes 6.2.3", "build-helper", @@ -12714,7 +14865,7 @@ dependencies = [ "merkleized-metadata", "parity-scale-codec", "parity-wasm", - "polkavm-linker", + "polkavm-linker 0.31.0", "sc-executor", "shlex", "sp-core", @@ -12743,9 +14894,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "subxt" -version = "0.43.1" +version = "0.44.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8c6dc0f90e23c521465b8f7e026af04a48cc6f00c51d88a8d313d33096149de" +checksum = "15d478a97cff6a704123c9a3871eff832f8ea4a477390a8ea5fd7cfedd41bf6f" dependencies = [ "async-trait", "derive-where", @@ -12753,8 +14904,9 @@ dependencies = [ "frame-metadata", "futures", "hex", + "jsonrpsee", "parity-scale-codec", - "primitive-types", + "primitive-types 0.13.1", "scale-bits", "scale-decode", "scale-encode", @@ -12768,19 +14920,20 @@ dependencies = [ "subxt-macro", "subxt-metadata", "subxt-rpcs", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-util", "tracing", "url", + "wasm-bindgen-futures", "web-time", ] [[package]] name = "subxt-codegen" -version = "0.43.0" +version = "0.44.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1728caecd9700391e78cc30dc298221d6f5ca0ea28258a452aa76b0b7c229842" +checksum = "461338acd557773106546b474fbb48d47617735fd50941ddc516818006daf8a0" dependencies = [ "heck 0.5.0", "parity-scale-codec", @@ -12789,15 +14942,15 @@ dependencies = [ "scale-info", "scale-typegen", "subxt-metadata", - "syn 2.0.111", - "thiserror 2.0.17", + "syn 2.0.117", + "thiserror 2.0.18", ] [[package]] name = "subxt-core" -version = "0.43.0" +version = "0.44.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25338dd11ae34293b8d0c5807064f2e00194ba1bd84cccfa694030c8d185b941" +checksum = "002d360ac0827c882d5a808261e06c11a5e7ad2d7c295176d5126a9af9aa5f23" dependencies = [ "base58", "blake2 0.10.6", @@ -12809,7 +14962,7 @@ dependencies = [ "impl-serde", "keccak-hash", "parity-scale-codec", - "primitive-types", + "primitive-types 0.13.1", "scale-bits", "scale-decode", "scale-encode", @@ -12819,22 +14972,22 @@ dependencies = [ "serde_json", "sp-crypto-hashing", "subxt-metadata", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", ] [[package]] name = "subxt-lightclient" -version = "0.43.0" +version = "0.44.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9097ef356e534ce0b6a50b95233512afc394347b971a4f929c4830adc52bbc6f" +checksum = "bab0c7a6504798b1c4a7dbe4cac9559560826e5df3f021efa3e9dd6393050521" dependencies = [ "futures", "futures-util", "serde", "serde_json", "smoldot-light", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-stream", "tracing", @@ -12842,9 +14995,9 @@ dependencies = [ [[package]] name = "subxt-macro" -version = "0.43.1" +version = "0.44.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c269228a2e5de4c0c61ed872b701967ee761df0f167d5b91ecec1185bca65793" +checksum = "fc844e7877b6fe4a4013c5836a916dee4e58fc875b98ccc18b5996db34b575c3" dependencies = [ "darling 0.20.11", "parity-scale-codec", @@ -12854,14 +15007,14 @@ dependencies = [ "subxt-codegen", "subxt-metadata", "subxt-utils-fetchmetadata", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "subxt-metadata" -version = "0.43.0" +version = "0.44.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c134068711c0c46906abc0e6e4911204420331530738e18ca903a5469364d9f" +checksum = "1b2f2a52d97d7539febc0006d6988081150b1c1a3e4a357ca02ab5cdb34072bc" dependencies = [ "frame-decode", "frame-metadata", @@ -12869,37 +15022,40 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-crypto-hashing", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "subxt-rpcs" -version = "0.43.0" +version = "0.44.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25de7727144780d780a6a7d78bbfd28414b8adbab68b05e87329c367d7705be4" +checksum = "dec54130c797530e6aa6a52e8ba9f95fd296d19da2f9f3e23ed5353a83573f74" dependencies = [ "derive-where", + "finito", "frame-metadata", "futures", "hex", "impl-serde", "jsonrpsee", "parity-scale-codec", - "primitive-types", + "primitive-types 0.13.1", "serde", "serde_json", "subxt-core", "subxt-lightclient", - "thiserror 2.0.17", + "thiserror 2.0.18", + "tokio", + "tokio-util", "tracing", "url", ] [[package]] name = "subxt-signer" -version = "0.43.0" +version = "0.44.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a9bd240ae819f64ac6898d7ec99a88c8b838dba2fb9d83b843feb70e77e34c8" +checksum = "1bdcc9159fdcc81aca0f71f0c8c77829a671f7348958fc77fb2fb320ed59a13a" dependencies = [ "base64", "bip32", @@ -12921,19 +15077,19 @@ dependencies = [ "sha2 0.10.9", "sp-crypto-hashing", "subxt-core", - "thiserror 2.0.17", + "thiserror 2.0.18", "zeroize", ] [[package]] name = "subxt-utils-fetchmetadata" -version = "0.43.0" +version = "0.44.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c4fb8fd6b16ecd3537a29d70699f329a68c1e47f70ed1a46d64f76719146563" +checksum = "4664a0b726f11b1d6da990872f9528be090d3570c2275c9b89ba5bbc8e764592" dependencies = [ "hex", "parity-scale-codec", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -12949,15 +15105,27 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "syn-solidity" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53f425ae0b12e2f5ae65542e00898d500d4d318b4baf09f40fd0d410454e9947" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "synstructure" version = "0.12.6" @@ -12978,7 +15146,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -12998,11 +15166,11 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -13031,20 +15199,20 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.13.3" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" +checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" [[package]] name = "tempfile" -version = "3.23.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.2", "once_cell", - "rustix 1.1.2", + "rustix 1.1.4", "windows-sys 0.61.2", ] @@ -13059,12 +15227,12 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" +checksum = "230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874" dependencies = [ - "rustix 1.1.2", - "windows-sys 0.60.2", + "rustix 1.1.4", + "windows-sys 0.61.2", ] [[package]] @@ -13084,11 +15252,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.18", ] [[package]] @@ -13099,18 +15267,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -13160,30 +15328,30 @@ dependencies = [ [[package]] name = "time" -version = "0.3.44" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -13210,9 +15378,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -13225,9 +15393,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.48.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ "bytes", "libc", @@ -13235,20 +15403,20 @@ dependencies = [ "parking_lot 0.12.5", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.1", + "socket2 0.6.3", "tokio-macros", "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -13263,9 +15431,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ "futures-core", "pin-project-lite", @@ -13291,9 +15459,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.17" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -13335,9 +15503,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.3" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ "serde_core", ] @@ -13348,33 +15516,33 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap", + "indexmap 2.13.0", "serde", "serde_spanned", "toml_datetime 0.6.11", "toml_write", - "winnow", + "winnow 0.7.15", ] [[package]] name = "toml_edit" -version = "0.23.9" +version = "0.25.9+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d7cbc3b4b49633d57a0509303158ca50de80ae32c265093b24c414705807832" +checksum = "da053d28fe57e2c9d21b48261e14e7b4c8b670b54d2c684847b91feaf4c7dac5" dependencies = [ - "indexmap", - "toml_datetime 0.7.3", + "indexmap 2.13.0", + "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow", + "winnow 1.0.1", ] [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "39ca317ebc49f06bd748bfba29533eac9485569dc9bf80b849024b025e814fb9" dependencies = [ - "winnow", + "winnow 1.0.1", ] [[package]] @@ -13404,7 +15572,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "bytes", "http 1.4.0", "http-body 1.0.1", @@ -13428,9 +15596,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -13446,14 +15614,14 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] name = "tracing-core" -version = "0.1.35" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -13471,8 +15639,8 @@ dependencies = [ [[package]] name = "tracing-gum" -version = "23.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +version = "24.0.0" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "coarsetime", "polkadot-primitives", @@ -13483,13 +15651,13 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "5.0.0" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "expander", - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -13507,15 +15675,24 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.22" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", "once_cell", "parking_lot 0.12.5", - "regex-automata", + "regex", "sharded-slab", "smallvec", "thread_local", @@ -13527,9 +15704,9 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c0670ab45a6b7002c7df369fee950a27cf29ae0474343fd3a15aa15f691e7a6" +checksum = "a7795f2df2ef744e4ffb2125f09325e60a21d305cc3ecece0adeef03f7a9e560" dependencies = [ "hash-db", "log", @@ -13573,7 +15750,7 @@ dependencies = [ "rustls", "rustls-pki-types", "sha1", - "thiserror 2.0.17", + "thiserror 2.0.18", "url", "utf-8", ] @@ -13644,11 +15821,17 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-normalization" @@ -13659,11 +15842,17 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-properties" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" + [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" [[package]] name = "unicode-width" @@ -13723,9 +15912,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", @@ -13753,11 +15942,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.19.0" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" +checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.2", "js-sys", "wasm-bindgen", ] @@ -13854,6 +16043,15 @@ dependencies = [ "w3f-plonk-common", ] +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + [[package]] name = "walkdir" version = "2.5.0" @@ -13881,27 +16079,42 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.1+wasi-0.2.4" +version = "1.0.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ "wit-bindgen", ] +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + [[package]] name = "wasix" -version = "0.12.21" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" +checksum = "1757e0d1f8456693c7e5c6c629bdb54884e032aa0bb53c155f6a39f94440d332" dependencies = [ "wasi", ] [[package]] name = "wasm-bindgen" -version = "0.2.106" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" +checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" dependencies = [ "cfg-if", "once_cell", @@ -13912,22 +16125,19 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.56" +version = "0.4.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" +checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e" dependencies = [ - "cfg-if", "js-sys", - "once_cell", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.106" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" +checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -13935,22 +16145,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.106" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" +checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.106" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" dependencies = [ "unicode-ident", ] @@ -13967,12 +16177,22 @@ dependencies = [ [[package]] name = "wasm-encoder" -version = "0.243.0" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser 0.244.0", +] + +[[package]] +name = "wasm-encoder" +version = "0.246.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55db9c896d70bd9fa535ce83cd4e1f2ec3726b0edd2142079f594fc3be1cb35" +checksum = "1e1929aad146499e47362c876fcbcbb0363f730951d93438f511178626e999a8" dependencies = [ "leb128fmt", - "wasmparser 0.243.0", + "wasmparser 0.246.1", ] [[package]] @@ -13993,6 +16213,18 @@ dependencies = [ "parity-wasm", ] +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.13.0", + "wasm-encoder 0.244.0", + "wasmparser 0.244.0", +] + [[package]] name = "wasm-opt" version = "0.116.1" @@ -14135,7 +16367,7 @@ version = "0.221.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d06bfa36ab3ac2be0dee563380147a5b81ba10dd8885d7fbbc9eb574be67d185" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", ] [[package]] @@ -14144,21 +16376,33 @@ version = "0.235.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "161296c618fa2d63f6ed5fffd1112937e803cb9ec71b32b01a76321555660917" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "hashbrown 0.15.5", - "indexmap", + "indexmap 2.13.0", "semver 1.0.27", "serde", ] [[package]] name = "wasmparser" -version = "0.243.0" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.0", + "hashbrown 0.15.5", + "indexmap 2.13.0", + "semver 1.0.27", +] + +[[package]] +name = "wasmparser" +version = "0.246.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6d8db401b0528ec316dfbe579e6ab4152d61739cfe076706d2009127970159d" +checksum = "2d991c35d79bf8336dc1cd632ed4aacf0dc5fac4bc466c670625b037b972bb9c" dependencies = [ - "bitflags 2.10.0", - "indexmap", + "bitflags 2.11.0", + "indexmap 2.13.0", "semver 1.0.27", ] @@ -14190,14 +16434,14 @@ checksum = "b6fe976922a16af3b0d67172c473d1fd4f1aa5d0af9c8ba6538c741f3af686f4" dependencies = [ "addr2line 0.24.2", "anyhow", - "bitflags 2.10.0", + "bitflags 2.11.0", "bumpalo", "cc", "cfg-if", "fxprof-processed-profile", "gimli 0.31.1", "hashbrown 0.15.5", - "indexmap", + "indexmap 2.13.0", "ittapi", "libc", "log", @@ -14208,7 +16452,7 @@ dependencies = [ "postcard", "pulley-interpreter", "rayon", - "rustix 1.1.2", + "rustix 1.1.4", "serde", "serde_derive", "serde_json", @@ -14241,7 +16485,7 @@ dependencies = [ "cranelift-bitset", "cranelift-entity", "gimli 0.31.1", - "indexmap", + "indexmap 2.13.0", "log", "object 0.36.7", "postcard", @@ -14275,7 +16519,7 @@ dependencies = [ "directories-next", "log", "postcard", - "rustix 1.1.2", + "rustix 1.1.4", "serde", "serde_derive", "sha2 0.10.9", @@ -14304,7 +16548,7 @@ dependencies = [ "pulley-interpreter", "smallvec", "target-lexicon", - "thiserror 2.0.17", + "thiserror 2.0.18", "wasmparser 0.235.0", "wasmtime-environ", "wasmtime-internal-math", @@ -14321,7 +16565,7 @@ dependencies = [ "cc", "cfg-if", "libc", - "rustix 1.1.2", + "rustix 1.1.4", "wasmtime-internal-asm-macros", "wasmtime-internal-versioned-export-macros", "windows-sys 0.59.0", @@ -14335,7 +16579,7 @@ checksum = "61d8693995ab3df48e88777b6ee3b2f441f2c4f895ab938996cdac3db26f256c" dependencies = [ "cc", "object 0.36.7", - "rustix 1.1.2", + "rustix 1.1.4", "wasmtime-internal-versioned-export-macros", ] @@ -14387,7 +16631,7 @@ checksum = "342b0466f92b7217a4de9e114175fedee1907028567d2548bcd42f71a8b5b016" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -14409,31 +16653,31 @@ dependencies = [ [[package]] name = "wast" -version = "243.0.0" +version = "246.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df21d01c2d91e46cb7a221d79e58a2d210ea02020d57c092e79255cc2999ca7f" +checksum = "96cf2d50bc7478dcca61d00df4dadf922ef46c5924db20a97e6daaf09fe1cb09" dependencies = [ "bumpalo", "leb128fmt", "memchr", "unicode-width", - "wasm-encoder 0.243.0", + "wasm-encoder 0.246.1", ] [[package]] name = "wat" -version = "1.243.0" +version = "1.246.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226a9a91cd80a50449312fef0c75c23478fcecfcc4092bdebe1dc8e760ef521b" +checksum = "723f2473b47f738c12fc11c8e0bb8b27ce7cf9c78cf1a29dadbc2d34a2513292" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.83" +version = "0.3.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" +checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" dependencies = [ "js-sys", "wasm-bindgen", @@ -14455,14 +16699,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75c7f0ef91146ebfb530314f5f1d24528d7f0767efbfd31dce919275413e393e" dependencies = [ - "webpki-root-certs 1.0.4", + "webpki-root-certs 1.0.6", ] [[package]] name = "webpki-root-certs" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee3e3b5f5e80bc89f30ce8d0343bf4e5f12341c51f3e26cbeecbc7c85443e85b" +checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" dependencies = [ "rustls-pki-types", ] @@ -14473,6 +16717,16 @@ version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +[[package]] +name = "whoami" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" +dependencies = [ + "libredox", + "wasite", +] + [[package]] name = "wide" version = "0.7.33" @@ -14533,7 +16787,7 @@ dependencies = [ "regalloc2 0.12.2", "smallvec", "target-lexicon", - "thiserror 2.0.17", + "thiserror 2.0.18", "wasmparser 0.235.0", "wasmtime-environ", "wasmtime-internal-cranelift", @@ -14552,30 +16806,31 @@ dependencies = [ [[package]] name = "windows" -version = "0.53.0" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" dependencies = [ - "windows-core 0.53.0", - "windows-targets 0.52.6", + "windows-collections", + "windows-core 0.62.2", + "windows-future", + "windows-numerics", ] [[package]] -name = "windows-core" -version = "0.52.0" +name = "windows-collections" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" dependencies = [ - "windows-targets 0.52.6", + "windows-core 0.62.2", ] [[package]] name = "windows-core" -version = "0.53.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-result 0.1.2", "windows-targets 0.52.6", ] @@ -14588,10 +16843,21 @@ dependencies = [ "windows-implement", "windows-interface", "windows-link", - "windows-result 0.4.1", + "windows-result", "windows-strings", ] +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core 0.62.2", + "windows-link", + "windows-threading", +] + [[package]] name = "windows-implement" version = "0.60.2" @@ -14600,7 +16866,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -14611,7 +16877,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -14621,12 +16887,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] -name = "windows-result" -version = "0.1.2" +name = "windows-numerics" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ - "windows-targets 0.52.6", + "windows-core 0.62.2", + "windows-link", +] + +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link", + "windows-result", + "windows-strings", ] [[package]] @@ -14764,6 +17042,15 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -14946,28 +17233,109 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.14" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" dependencies = [ "memchr", ] [[package]] -name = "winreg" -version = "0.50.0" +name = "winnow" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" dependencies = [ - "cfg-if", - "windows-sys 0.48.0", + "memchr", ] [[package]] name = "wit-bindgen" -version = "0.46.0" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.13.0", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.0", + "indexmap 2.13.0", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder 0.244.0", + "wasm-metadata", + "wasmparser 0.244.0", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.13.0", + "log", + "semver 1.0.27", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser 0.244.0", +] [[package]] name = "writeable" @@ -15026,19 +17394,19 @@ dependencies = [ "nom 7.1.3", "oid-registry 0.8.1", "rusticata-macros", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", ] [[package]] name = "xcm-procedural" version = "11.0.2" -source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2512#b6946c70dd092816cefe8a12b0b5af78a076f916" +source = "git+https://github.com/PolymeshAssociation/polkadot-sdk?branch=polymesh-v8-stable2603#02f0bdeecdca97a122aca35b029e23534bf4aa53" dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -15073,9 +17441,9 @@ dependencies = [ [[package]] name = "yamux" -version = "0.13.8" +version = "0.13.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deab71f2e20691b4728b349c6cee8fc7223880fa67b6b4f92225ec32225447e5" +checksum = "1991f6690292030e31b0144d73f5e8368936c58e45e7068254f7138b23b00672" dependencies = [ "futures", "log", @@ -15087,6 +17455,12 @@ dependencies = [ "web-time", ] +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + [[package]] name = "yap" version = "0.12.0" @@ -15121,28 +17495,28 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", "synstructure 0.13.2", ] [[package]] name = "zerocopy" -version = "0.8.31" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.31" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -15162,7 +17536,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", "synstructure 0.13.2", ] @@ -15177,13 +17551,13 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] [[package]] @@ -15216,9 +17590,15 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.117", ] +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" + [[package]] name = "zstd" version = "0.12.4" diff --git a/Cargo.toml b/Cargo.toml index 1b63959329..06e77a880b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,10 +11,11 @@ path = "src/bin/main.rs" [patch.crates-io] # Patch this to avoid duplicate deps (subxt uses this dep). -sp-crypto-hashing = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } +sp-crypto-hashing = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } [workspace] members = [ + "eth-rpc", "node-rpc", "pallets/asset", "pallets/base", @@ -56,6 +57,13 @@ members = [ ] exclude = ["contracts", "integration", "metadata-tools"] +[workspace.package] +version = "8.0.0" +authors = ["PolymeshAssociation"] +edition = "2021" +repository = "https://github.com/PolymeshAssociation/Polymesh" +homepage = "https://github.com/PolymeshAssociation/Polymesh" + ## Keep common dependencies here. [workspace.dependencies] # Our pallets @@ -116,117 +124,122 @@ scale-info = { version = "2.11.6", default-features = false, features = [ ] } # Substrate pallet/runtime deps. -frame-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -frame-benchmarking-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -frame-executive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -frame-metadata-hash-extension = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -frame-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -frame-election-provider-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -frame-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -frame-system-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -frame-system-rpc-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -mmr-gadget = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -mmr-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-balances = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false, features = [ +frame-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +frame-benchmarking-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +frame-executive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +frame-metadata-hash-extension = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +frame-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +frame-election-provider-support = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +frame-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +frame-system-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +frame-system-rpc-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +mmr-gadget = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +mmr-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-balances = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false, features = [ 'insecure_zero_ed', ] } -pallet-beefy = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-beefy-mmr = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-contracts = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-election-provider-multi-phase = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-im-online = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-indices = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-mmr = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-offences = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-preimage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-scheduler = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-staking-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-staking-reward-curve = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-sudo = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-transaction-payment = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -pallet-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-application-crypto = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-arithmetic = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-blockchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-consensus-beefy = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-core = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-debug-derive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-externalities = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-genesis-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-inherents = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-io = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-keyring = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-mmr-primitives = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-npos-elections = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-offchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-runtime = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-weights = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-runtime-interface = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-state-machine = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-std = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-storage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-tracing = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-transaction-storage-proof = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-trie = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sp-version = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } +pallet-beefy = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-beefy-mmr = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-contracts = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-election-provider-multi-phase = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-im-online = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-indices = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-mmr = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-offences = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-preimage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-revive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-revive-fixtures = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-scheduler = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-session-benchmarking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-staking-runtime-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-staking-reward-curve = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-sudo = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-transaction-payment = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +pallet-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-application-crypto = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-arithmetic = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-blockchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-consensus-beefy = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-core = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-crypto-hashing = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sp-debug-derive = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-externalities = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-genesis-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-inherents = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-io = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-keyring = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-mmr-primitives = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-npos-elections = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-offchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-runtime = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-weights = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-runtime-interface = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-session = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-staking = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-state-machine = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-std = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-storage = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-timestamp = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-tracing = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-transaction-storage-proof = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-trie = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sp-version = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } # Substrate client/node deps. -sc-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-basic-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-chain-spec = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-client-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-client-db = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512", default-features = false } -sc-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-consensus-babe-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-consensus-beefy = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-consensus-beefy-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-consensus-epochs = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-executor = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-consensus-grandpa-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-network = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-network-common = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-network-sync = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-rpc-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-rpc-spec-v2 = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-service = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-storage-monitor = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-sync-state-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-sysinfo = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-telemetry = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-transaction-pool-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -sc-offchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -substrate-frame-rpc-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -substrate-prometheus-endpoint = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -substrate-wasm-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -substrate-test-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } -substrate-build-script-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } +sc-authority-discovery = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-basic-authorship = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-block-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-chain-spec = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-cli = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-client-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-client-db = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603", default-features = false } +sc-consensus = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-consensus-babe = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-consensus-babe-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-consensus-beefy = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-consensus-beefy-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-consensus-epochs = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-consensus-slots = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-executor = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-consensus-grandpa = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-consensus-grandpa-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-keystore = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-network = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-network-common = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-network-sync = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-rpc-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-rpc-spec-v2 = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-service = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-storage-monitor = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-sync-state-rpc = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-sysinfo = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-telemetry = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-transaction-pool = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-transaction-pool-api = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +sc-offchain = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +substrate-frame-rpc-system = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +substrate-prometheus-endpoint = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +substrate-wasm-builder = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +substrate-test-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +substrate-build-script-utils = { git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2603" } # Crypto rand = { version = "0.8", default-features = false } @@ -275,6 +288,7 @@ serde = { version = "1.0.136", default-features = false, features = [ serde_json = { version = "1.0", features = ["arbitrary_precision"] } clap = { version = "4.0.9", features = ["derive"] } rustc-hex = "2.1.0" +array-bytes = { version = "6.2.2", default-features = false } # Substrate client deps. mmr-gadget = { workspace = true } @@ -319,12 +333,13 @@ pallet-balances = { workspace = true, default-features = false, features = [ ] } pallet-im-online = { workspace = true } pallet-indices = { workspace = true } +pallet-revive = { workspace = true } pallet-session = { workspace = true } pallet-staking = { workspace = true, default-features = false } pallet-staking-runtime-api = { workspace = true, default-features = false } pallet-transaction-payment = { workspace = true, default-features = false } pallet-sudo = { workspace = true, default-features = false } -prometheus-endpoint = { package = "substrate-prometheus-endpoint", git = "https://github.com/PolymeshAssociation/polkadot-sdk", branch = "polymesh-v8-stable2512" } +prometheus-endpoint = { workspace = true, default-features = false } sp-api = { workspace = true } sp-authority-discovery = { workspace = true } sp-block-builder = { workspace = true } diff --git a/eth-rpc/.rustfmt.toml b/eth-rpc/.rustfmt.toml new file mode 100644 index 0000000000..eac07da167 --- /dev/null +++ b/eth-rpc/.rustfmt.toml @@ -0,0 +1,26 @@ +# Basic +edition = "2021" +hard_tabs = true +max_width = 100 +use_small_heuristics = "Max" +# Imports +imports_granularity = "Crate" +reorder_imports = true +# Consistency +newline_style = "Unix" +normalize_comments = true +normalize_doc_attributes = true +# Misc +chain_width = 80 +spaces_around_ranges = false +binop_separator = "Back" +reorder_impl_items = false +match_arm_leading_pipes = "Never" +match_arm_blocks = true +match_block_trailing_comma = true +trailing_comma = "Vertical" +trailing_semicolon = true +use_field_init_shorthand = true +# Format comments +comment_width = 100 +wrap_comments = true diff --git a/eth-rpc/.sqlx/query-2348bd412ca114197996e4395fd68c427245f94b80d37ec3aef04cd96fb36298.json b/eth-rpc/.sqlx/query-2348bd412ca114197996e4395fd68c427245f94b80d37ec3aef04cd96fb36298.json new file mode 100644 index 0000000000..507564cd05 --- /dev/null +++ b/eth-rpc/.sqlx/query-2348bd412ca114197996e4395fd68c427245f94b80d37ec3aef04cd96fb36298.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT COUNT(*) as count\n FROM transaction_hashes\n WHERE block_hash = $1\n ", + "describe": { + "columns": [ + { + "name": "count", + "ordinal": 0, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false + ] + }, + "hash": "2348bd412ca114197996e4395fd68c427245f94b80d37ec3aef04cd96fb36298" +} diff --git a/eth-rpc/.sqlx/query-29af64347f700919dc2ee12463f332be50096d4e37be04ed8b6f46ac5c242043.json b/eth-rpc/.sqlx/query-29af64347f700919dc2ee12463f332be50096d4e37be04ed8b6f46ac5c242043.json new file mode 100644 index 0000000000..b125d2401d --- /dev/null +++ b/eth-rpc/.sqlx/query-29af64347f700919dc2ee12463f332be50096d4e37be04ed8b6f46ac5c242043.json @@ -0,0 +1,26 @@ +{ + "db_name": "SQLite", + "query": "\n\t\t\tSELECT block_hash, transaction_index\n\t\t\tFROM transaction_hashes\n\t\t\tWHERE transaction_hash = $1\n\t\t\t", + "describe": { + "columns": [ + { + "name": "block_hash", + "ordinal": 0, + "type_info": "Blob" + }, + { + "name": "transaction_index", + "ordinal": 1, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false + ] + }, + "hash": "29af64347f700919dc2ee12463f332be50096d4e37be04ed8b6f46ac5c242043" +} diff --git a/eth-rpc/.sqlx/query-2fcbf357b3993c0065141859e5ad8c11bd7800e3e6d22e8383ab9ac8bbec25b1.json b/eth-rpc/.sqlx/query-2fcbf357b3993c0065141859e5ad8c11bd7800e3e6d22e8383ab9ac8bbec25b1.json new file mode 100644 index 0000000000..07e69b7d8f --- /dev/null +++ b/eth-rpc/.sqlx/query-2fcbf357b3993c0065141859e5ad8c11bd7800e3e6d22e8383ab9ac8bbec25b1.json @@ -0,0 +1,26 @@ +{ + "db_name": "SQLite", + "query": "\n\t\t SELECT transaction_index, transaction_hash\n\t\t FROM transaction_hashes\n\t\t WHERE block_hash = $1\n\t\t ", + "describe": { + "columns": [ + { + "name": "transaction_index", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "transaction_hash", + "ordinal": 1, + "type_info": "Blob" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false + ] + }, + "hash": "2fcbf357b3993c0065141859e5ad8c11bd7800e3e6d22e8383ab9ac8bbec25b1" +} diff --git a/eth-rpc/.sqlx/query-3de332f45edf5ee4592bd0061956305983861ccaea79eec44518e1bca5233920.json b/eth-rpc/.sqlx/query-3de332f45edf5ee4592bd0061956305983861ccaea79eec44518e1bca5233920.json new file mode 100644 index 0000000000..672d9fbac5 --- /dev/null +++ b/eth-rpc/.sqlx/query-3de332f45edf5ee4592bd0061956305983861ccaea79eec44518e1bca5233920.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n\t\t\t\t\t\tINSERT INTO logs(\n\t\t\t\t\t\t\tblock_hash,\n\t\t\t\t\t\t\ttransaction_index,\n\t\t\t\t\t\t\tlog_index,\n\t\t\t\t\t\t\taddress,\n\t\t\t\t\t\t\tblock_number,\n\t\t\t\t\t\t\ttransaction_hash,\n\t\t\t\t\t\t\ttopic_0, topic_1, topic_2, topic_3,\n\t\t\t\t\t\t\tdata)\n\t\t\t\t\t\tVALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)\n\t\t\t\t\t\t", + "describe": { + "columns": [], + "parameters": { + "Right": 11 + }, + "nullable": [] + }, + "hash": "3de332f45edf5ee4592bd0061956305983861ccaea79eec44518e1bca5233920" +} diff --git a/eth-rpc/.sqlx/query-47b830cef6768ed5b119c74037482baef86a7c3d3469873a205805ef342ba031.json b/eth-rpc/.sqlx/query-47b830cef6768ed5b119c74037482baef86a7c3d3469873a205805ef342ba031.json new file mode 100644 index 0000000000..bc7541d529 --- /dev/null +++ b/eth-rpc/.sqlx/query-47b830cef6768ed5b119c74037482baef86a7c3d3469873a205805ef342ba031.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "\n\t\t\tSELECT substrate_block_hash\n\t\t\tFROM eth_to_substrate_blocks\n\t\t\tWHERE ethereum_block_hash = $1\n\t\t\t", + "describe": { + "columns": [ + { + "name": "substrate_block_hash", + "ordinal": 0, + "type_info": "Blob" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false + ] + }, + "hash": "47b830cef6768ed5b119c74037482baef86a7c3d3469873a205805ef342ba031" +} diff --git a/eth-rpc/.sqlx/query-5c0ea8efbd2591e3ede3833acfcadf2d552140a20d84edbf90583da4619bcf2a.json b/eth-rpc/.sqlx/query-5c0ea8efbd2591e3ede3833acfcadf2d552140a20d84edbf90583da4619bcf2a.json new file mode 100644 index 0000000000..a3d8e82365 --- /dev/null +++ b/eth-rpc/.sqlx/query-5c0ea8efbd2591e3ede3833acfcadf2d552140a20d84edbf90583da4619bcf2a.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n\t\t\t\t\tINSERT INTO transaction_hashes (transaction_hash, block_hash, transaction_index)\n\t\t\t\t\tVALUES ($1, $2, $3)\n\t\t\t\t\t", + "describe": { + "columns": [], + "parameters": { + "Right": 3 + }, + "nullable": [] + }, + "hash": "5c0ea8efbd2591e3ede3833acfcadf2d552140a20d84edbf90583da4619bcf2a" +} diff --git a/eth-rpc/.sqlx/query-7e5be81ad6f5d96bc6dbf62098cbd61d257d1ffad222317634327e12be403ab2.json b/eth-rpc/.sqlx/query-7e5be81ad6f5d96bc6dbf62098cbd61d257d1ffad222317634327e12be403ab2.json new file mode 100644 index 0000000000..d012a83ef5 --- /dev/null +++ b/eth-rpc/.sqlx/query-7e5be81ad6f5d96bc6dbf62098cbd61d257d1ffad222317634327e12be403ab2.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "\n\t\t\tSELECT ethereum_block_hash\n\t\t\tFROM eth_to_substrate_blocks\n\t\t\tWHERE substrate_block_hash = $1\n\t\t\t", + "describe": { + "columns": [ + { + "name": "ethereum_block_hash", + "ordinal": 0, + "type_info": "Blob" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false + ] + }, + "hash": "7e5be81ad6f5d96bc6dbf62098cbd61d257d1ffad222317634327e12be403ab2" +} diff --git a/eth-rpc/.sqlx/query-b296f5ac320c7537133dca1ede0285ccf101a8e36d68455e05a76df3b366420e.json b/eth-rpc/.sqlx/query-b296f5ac320c7537133dca1ede0285ccf101a8e36d68455e05a76df3b366420e.json new file mode 100644 index 0000000000..76ad4a8c1f --- /dev/null +++ b/eth-rpc/.sqlx/query-b296f5ac320c7537133dca1ede0285ccf101a8e36d68455e05a76df3b366420e.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n\t\t\t\t\tINSERT OR REPLACE INTO transaction_hashes (transaction_hash, block_hash, transaction_index)\n\t\t\t\t\tVALUES ($1, $2, $3)\n\t\t\t\t\t", + "describe": { + "columns": [], + "parameters": { + "Right": 3 + }, + "nullable": [] + }, + "hash": "b296f5ac320c7537133dca1ede0285ccf101a8e36d68455e05a76df3b366420e" +} diff --git a/eth-rpc/.sqlx/query-cf515b47790a2ac4b3802c29e36a07ace0c67849e5b20c92532d7a77861ebf80.json b/eth-rpc/.sqlx/query-cf515b47790a2ac4b3802c29e36a07ace0c67849e5b20c92532d7a77861ebf80.json new file mode 100644 index 0000000000..ad5b093ce9 --- /dev/null +++ b/eth-rpc/.sqlx/query-cf515b47790a2ac4b3802c29e36a07ace0c67849e5b20c92532d7a77861ebf80.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n\t\t\tINSERT OR REPLACE INTO eth_to_substrate_blocks (ethereum_block_hash, substrate_block_hash)\n\t\t\tVALUES ($1, $2)\n\t\t\t", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "cf515b47790a2ac4b3802c29e36a07ace0c67849e5b20c92532d7a77861ebf80" +} diff --git a/eth-rpc/.sqlx/query-e712acbeb712c0a61fc2a47f966abae1ae43ffba0920a9d209d01dcfce44c5e0.json b/eth-rpc/.sqlx/query-e712acbeb712c0a61fc2a47f966abae1ae43ffba0920a9d209d01dcfce44c5e0.json new file mode 100644 index 0000000000..a342fcaf8c --- /dev/null +++ b/eth-rpc/.sqlx/query-e712acbeb712c0a61fc2a47f966abae1ae43ffba0920a9d209d01dcfce44c5e0.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT EXISTS(SELECT 1 FROM eth_to_substrate_blocks WHERE substrate_block_hash = $1) AS \"exists!:bool\"", + "describe": { + "columns": [ + { + "name": "exists!:bool", + "ordinal": 0, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false + ] + }, + "hash": "e712acbeb712c0a61fc2a47f966abae1ae43ffba0920a9d209d01dcfce44c5e0" +} diff --git a/eth-rpc/Cargo.toml b/eth-rpc/Cargo.toml new file mode 100644 index 0000000000..4a3155abc3 --- /dev/null +++ b/eth-rpc/Cargo.toml @@ -0,0 +1,67 @@ +[package] +name = "pallet-revive-eth-rpc" +version = "0.1.0" +authors.workspace = true +edition.workspace = true +license = "Apache-2.0" +homepage.workspace = true +repository.workspace = true +description = "An Ethereum JSON-RPC server for pallet-revive." +default-run = "eth-rpc" + +#[lints] +#workspace = true + +[package.metadata.polkadot-sdk] +exclude-from-umbrella = true + +[[bin]] +name = "eth-rpc" +path = "src/main.rs" + +[dependencies] +anyhow = { version = "1.0.81", default-features = false } +clap = { version = "4.5.13", features = ["derive", "env"] } +codec = { workspace = true, features = ["derive"] } +futures = { version = "0.3.31", features = ["thread-pool"] } +hex = { version = "0.4.3", default-features = false } +jsonrpsee = { version = "0.24.10", features = ["full"] } +log = { version = "0.4.22", default-features = false } +pallet-revive = { workspace = true, default-features = true } +prometheus-endpoint = { workspace = true, default-features = true } +rlp = { version = "0.6.1", default-features = false } +sc-cli = { workspace = true, default-features = true } +sc-rpc = { workspace = true, default-features = true } +sc-rpc-api = { workspace = true, default-features = true } +sc-service = { workspace = true, default-features = true } +serde = { version = "1.0.214", default-features = false, features = ["alloc", "derive"] } +serde_json = { version = "1.0.132", default-features = false } +sp-arithmetic = { workspace = true, default-features = true } +sp-core = { workspace = true, default-features = true } +sp-crypto-hashing = { workspace = true } +sp-rpc = { workspace = true, default-features = true } +sp-runtime = { workspace = true, default-features = true } +sp-timestamp = { workspace = true } +sp-weights = { workspace = true, default-features = true } +sqlx = { version = "0.8.2", features = ["macros", "runtime-tokio", "sqlite"] } +subxt = { version = "0.44", default-features = true, features = ["reconnecting-rpc-client"] } +subxt-signer = { version = "0.44", features = ["unstable-eth"] } +thiserror = { version = "1.0.64" } +tokio = { version = "1.45.0", default-features = false, features = ["full"] } + +[dev-dependencies] +env_logger = { version = "0.11.2" } +pallet-revive-fixtures = { workspace = true, default-features = true } +pretty_assertions = { version = "1.3.0" } +# POLYMESH CHANGE +#revive-dev-node = { workspace = true } +polymesh = { path = "../", default-features = true } +sp-io = { workspace = true, default-features = true } + +[build-dependencies] +git2 = { version = "0.20.0", default-features = false } +# POLYMESH CHANGE +#revive-dev-runtime = { workspace = true, default-features = true } +polymesh-runtime-develop = { workspace = true, default-features = true } +sp-io = { workspace = true, default-features = true } +sp-runtime = { workspace = true, default-features = true } diff --git a/eth-rpc/build.rs b/eth-rpc/build.rs new file mode 100644 index 0000000000..04f6c8cbcf --- /dev/null +++ b/eth-rpc/build.rs @@ -0,0 +1,66 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +use std::{fs, process::Command}; + +fn main() { + generate_git_revision(); + generate_metadata_file(); +} + +fn generate_git_revision() { + let output = Command::new("rustc") + .arg("--version") + .output() + .expect("cannot get the current rustc version"); + // Exports the default rustc --version output: + // e.g. rustc 1.83.0 (90b35a623 2024-11-26) + // into the usual Ethereum web3_clientVersion format + // e.g. rustc1.83.0 + let rustc_version = String::from_utf8_lossy(&output.stdout) + .split_whitespace() + .take(2) + .collect::>() + .join(""); + let target = std::env::var("TARGET").unwrap_or_else(|_| "unknown".to_string()); + + let (branch, id) = if let Ok(repo) = git2::Repository::open("../../../..") { + let head = repo.head().expect("should have head"); + let commit = head.peel_to_commit().expect("should have commit"); + let branch = head.shorthand().unwrap_or("unknown").to_string(); + let id = &commit.id().to_string()[..7]; + (branch, id.to_string()) + } else { + ("unknown".to_string(), "unknown".to_string()) + }; + + println!("cargo:rustc-env=RUSTC_VERSION={rustc_version}"); + println!("cargo:rustc-env=TARGET={target}"); + println!("cargo:rustc-env=GIT_REVISION={branch}-{id}"); +} + +fn generate_metadata_file() { + let mut ext = sp_io::TestExternalities::new(Default::default()); + ext.execute_with(|| { + // POLYMESH CHANGE + // let metadata = revive_dev_runtime::Runtime::metadata_at_version(16).unwrap(); + let metadata = polymesh_runtime_develop::Runtime::metadata_at_version(16).unwrap(); + let bytes: &[u8] = &metadata; + let out_dir = std::env::var("OUT_DIR").expect("OUT_DIR not set"); + let out_path = std::path::Path::new(&out_dir).join("revive_chain.scale"); + fs::write(out_path, bytes).unwrap(); + }); +} diff --git a/eth-rpc/examples/README.md b/eth-rpc/examples/README.md new file mode 100644 index 0000000000..ceed155ab1 --- /dev/null +++ b/eth-rpc/examples/README.md @@ -0,0 +1,48 @@ +## Start the node + +Start the kitchensink node: + +```bash +RUST_LOG="error,evm=debug,sc_rpc_server=info,runtime::revive=debug" cargo run --bin substrate-node -- --dev +``` + +## Start a zombienet network + +Alternatively, you can start a zombienet network with the westend Asset Hub parachain: + +Prerequisites for running a local network: +- download latest [zombienet release](https://github.com/paritytech/zombienet/releases); +- build Polkadot binary by running `cargo build -p polkadot --release --features fast-runtime` command in the + [`polkadot-sdk`](https://github.com/paritytech/polkadot-sdk) repository clone; +- build Polkadot Parachain binary by running `cargo build -p polkadot-parachain-bin --release` command in the + [`polkadot-sdk`](https://github.com/paritytech/polkadot-sdk) repository clone; + +```bash +zombienet spawn --provider native westend_local_network.toml +``` + +## Start the RPC server + +This command starts the Ethereum JSON-RPC server, which runs on `localhost:8545` by default: + +```bash +RUST_LOG="info,eth-rpc=debug" cargo run -p pallet-revive-eth-rpc -- --dev +``` + +## Rust examples + +Run one of the examples from the `examples` directory to send a transaction to the node: + +```bash +RUST_LOG="info,eth-rpc=debug" cargo run -p pallet-revive-eth-rpc --example deploy +``` + +## JS examples + +JS examples have been moved to the [evm-test-suite](https://github.com/paritytech/evm-test-suite) repository. + +### Configure MetaMask + +See the doc [here](https://contracts.polkadot.io/work-with-a-local-node#metemask-configuration) for more +information on how to configure MetaMask. + diff --git a/eth-rpc/examples/deploy.rs b/eth-rpc/examples/deploy.rs new file mode 100644 index 0000000000..bcea0fc280 --- /dev/null +++ b/eth-rpc/examples/deploy.rs @@ -0,0 +1,82 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +use jsonrpsee::http_client::HttpClientBuilder; +use pallet_revive::{ + create1, + evm::{Account, BlockTag, ReceiptInfo, U256}, +}; +use pallet_revive_eth_rpc::{example::TransactionBuilder, EthRpcClient}; +use std::sync::Arc; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + env_logger::init(); + let account = Account::default(); + + let data = vec![]; + let (bytes, _) = pallet_revive_fixtures::compile_module("dummy")?; + let input = bytes.into_iter().chain(data.clone()).collect::>(); + + println!("Account:"); + println!("- address: {:?}", account.address()); + println!("- substrate: {}", account.substrate_account()); + let client = Arc::new(HttpClientBuilder::default().build("http://localhost:8545")?); + + println!("\n\n=== Deploying contract ===\n\n"); + + let nonce = client.get_transaction_count(account.address(), BlockTag::Latest.into()).await?; + let tx = TransactionBuilder::new(client.clone()) + .value(5_000_000_000_000u128.into()) + .input(input) + .send() + .await?; + + println!("Deploy Tx hash: {:?}", tx.hash()); + let ReceiptInfo { block_number, gas_used, contract_address, .. } = + tx.wait_for_receipt().await?; + + let contract_address = contract_address.unwrap(); + assert_eq!(contract_address, create1(&account.address(), nonce.try_into().unwrap())); + + println!("Receipt:"); + println!("- Block number: {block_number}"); + println!("- Gas estimated: {}", tx.gas()); + println!("- Gas used: {gas_used}"); + println!("- Contract address: {contract_address:?}"); + let balance = client.get_balance(contract_address, BlockTag::Latest.into()).await?; + println!("- Contract balance: {balance:?}"); + + if std::env::var("SKIP_CALL").is_ok() { + return Ok(()); + } + + println!("\n\n=== Calling contract ===\n\n"); + let tx = TransactionBuilder::new(client.clone()) + .value(U256::from(1_000_000u32)) + .to(contract_address) + .send() + .await?; + + println!("Contract call tx hash: {:?}", tx.hash()); + let ReceiptInfo { block_number, gas_used, to, .. } = tx.wait_for_receipt().await?; + println!("Receipt:"); + println!("- Block number: {block_number}"); + println!("- Gas used: {gas_used}"); + println!("- Gas estimated: {}", tx.gas()); + println!("- To: {to:?}"); + Ok(()) +} diff --git a/eth-rpc/examples/eth-remark-call.rs b/eth-rpc/examples/eth-remark-call.rs new file mode 100644 index 0000000000..2e9353e06c --- /dev/null +++ b/eth-rpc/examples/eth-remark-call.rs @@ -0,0 +1,55 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +use jsonrpsee::http_client::HttpClientBuilder; +use pallet_revive::evm::{Account, ReceiptInfo}; +use pallet_revive_eth_rpc::example::TransactionBuilder; +use sp_core::H160; +use std::sync::Arc; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let tx_payload: Vec = vec![ + 0x00, // System pallet index. + 0x07, // Remark With Event call index. + 0x10, // Compact-encoded length of the remark (16). + 0x54, 0x45, 0x53, 0x54, // Remark 'T', 'E', 'S', 'T' + ]; + + let client = Arc::new(HttpClientBuilder::default().build("http://localhost:8545")?); + + let alith = Account::default(); + // Revive pallet address. + let dest = H160::from_slice(&hex::decode("6d6f646c70792f70616464720000000000000000")?); + + println!("\n\n=== Eth calling System.Remark ===\n\n"); + + let tx = TransactionBuilder::new(client) + .signer(alith) + .input(tx_payload) + .to(dest) + .send() + .await?; + println!("Transaction hash: {:?}", tx.hash()); + + let ReceiptInfo { block_number, gas_used, status, .. } = tx.wait_for_receipt().await?; + println!("Receipt: "); + println!("- Block number: {block_number}"); + println!("- Gas used: {gas_used}"); + println!("- Success: {status:?}"); + + Ok(()) +} diff --git a/eth-rpc/examples/eth-rpc-tester.rs b/eth-rpc/examples/eth-rpc-tester.rs new file mode 100644 index 0000000000..1fa03ffbe7 --- /dev/null +++ b/eth-rpc/examples/eth-rpc-tester.rs @@ -0,0 +1,171 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +use clap::Parser; +use jsonrpsee::http_client::HttpClientBuilder; +use pallet_revive::evm::{Account, BlockTag, ReceiptInfo}; +use pallet_revive_eth_rpc::{example::TransactionBuilder, EthRpcClient}; +use std::sync::Arc; +use tokio::{ + io::{AsyncBufReadExt, BufReader}, + process::{Child, ChildStderr, Command}, + signal::unix::{signal, SignalKind}, +}; + +const DOCKER_CONTAINER_NAME: &str = "eth-rpc-test"; + +#[derive(Parser, Debug)] +#[clap(author, about, version)] +pub struct CliCommand { + /// The eth-rpc url to connect to + #[clap(long, default_value = "http://127.0.0.1:8545")] + pub rpc_url: String, + + /// The parity docker image e.g eth-rpc:master-fb2e414f + /// When not specified, no eth-rpc docker image is started + /// and the test runs against the provided `rpc_url` directly. + #[clap(long)] + docker_image: Option, + + /// The docker binary + /// Either docker or podman + #[clap(long, default_value = "docker")] + docker_bin: String, +} + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let CliCommand { docker_bin, rpc_url, docker_image, .. } = CliCommand::parse(); + + let Some(docker_image) = docker_image else { + println!("Docker image not specified, using: {rpc_url:?}"); + return test_eth_rpc(&rpc_url).await; + }; + + let mut docker_process = start_docker(&docker_bin, &docker_image)?; + let stderr = docker_process.stderr.take().unwrap(); + + tokio::select! { + result = docker_process.wait() => { + println!("docker failed: {result:?}"); + } + _ = interrupt() => { + kill_docker().await?; + } + _ = wait_and_test_eth_rpc(stderr, &rpc_url) => { + kill_docker().await?; + } + } + + Ok(()) +} + +async fn interrupt() { + let mut sigint = signal(SignalKind::interrupt()).expect("failed to listen for SIGINT"); + let mut sigterm = signal(SignalKind::terminate()).expect("failed to listen for SIGTERM"); + + tokio::select! { + _ = sigint.recv() => {}, + _ = sigterm.recv() => {}, + } +} + +fn start_docker(docker_bin: &str, docker_image: &str) -> anyhow::Result { + let docker_process = Command::new(docker_bin) + .args([ + "run", + "--name", + DOCKER_CONTAINER_NAME, + "--rm", + "-p", + "8545:8545", + &format!("docker.io/paritypr/{docker_image}"), + "--node-rpc-url", + "wss://westend-asset-hub-rpc.polkadot.io", + "--rpc-cors", + "all", + "--unsafe-rpc-external", + "--log=sc_rpc_server:info", + ]) + .stderr(std::process::Stdio::piped()) + .kill_on_drop(true) + .spawn()?; + + Ok(docker_process) +} + +async fn kill_docker() -> anyhow::Result<()> { + Command::new("docker").args(["kill", DOCKER_CONTAINER_NAME]).output().await?; + Ok(()) +} + +async fn wait_and_test_eth_rpc(stderr: ChildStderr, rpc_url: &str) -> anyhow::Result<()> { + let mut reader = BufReader::new(stderr).lines(); + while let Some(line) = reader.next_line().await? { + println!("{line}"); + if line.contains("Running JSON-RPC server") { + break; + } + } + + test_eth_rpc(rpc_url).await +} + +async fn test_eth_rpc(rpc_url: &str) -> anyhow::Result<()> { + let account = Account::default(); + let data = vec![]; + let (bytes, _) = pallet_revive_fixtures::compile_module("dummy")?; + let input = bytes.into_iter().chain(data).collect::>(); + + println!("Account:"); + println!("- address: {:?}", account.address()); + println!("- substrate address: {}", account.substrate_account()); + let client = Arc::new(HttpClientBuilder::default().build(rpc_url)?); + + let nonce = client.get_transaction_count(account.address(), BlockTag::Latest.into()).await?; + let balance = client.get_balance(account.address(), BlockTag::Latest.into()).await?; + println!("- nonce: {nonce:?}"); + println!("- balance: {balance:?}"); + + println!("\n\n=== Deploying dummy contract ===\n\n"); + let tx = TransactionBuilder::new(client.clone()).input(input).send().await?; + + println!("Hash: {:?}", tx.hash()); + println!("Waiting for receipt..."); + let ReceiptInfo { block_number, gas_used, contract_address, .. } = + tx.wait_for_receipt().await?; + + let contract_address = contract_address.unwrap(); + println!("\nReceipt:"); + println!("Block explorer: https://westend-asset-hub-eth-explorer.parity.io/{:?}", tx.hash()); + println!("- Block number: {block_number}"); + println!("- Gas used: {gas_used}"); + println!("- Address: {contract_address:?}"); + + println!("\n\n=== Calling dummy contract ===\n\n"); + let tx = TransactionBuilder::new(client.clone()).to(contract_address).send().await?; + + println!("Hash: {:?}", tx.hash()); + println!("Waiting for receipt..."); + + let ReceiptInfo { block_number, gas_used, to, .. } = tx.wait_for_receipt().await?; + println!("\nReceipt:"); + println!("Block explorer: https://westend-asset-hub-eth-explorer.parity.io/{:?}", tx.hash()); + println!("- Block number: {block_number}"); + println!("- Gas used: {gas_used}"); + println!("- To: {to:?}"); + Ok(()) +} diff --git a/eth-rpc/examples/extrinsic.rs b/eth-rpc/examples/extrinsic.rs new file mode 100644 index 0000000000..2d207d2eed --- /dev/null +++ b/eth-rpc/examples/extrinsic.rs @@ -0,0 +1,54 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +use pallet_revive_eth_rpc::subxt_client::{ + self, revive::calls::types::InstantiateWithCode, SrcChainConfig, +}; +use sp_weights::Weight; +use subxt::OnlineClient; +use subxt_signer::sr25519::dev; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let client = OnlineClient::::new().await?; + + let (bytes, _) = pallet_revive_fixtures::compile_module("dummy")?; + + let tx_payload = subxt_client::tx().revive().instantiate_with_code( + 0u32.into(), + Weight::from_parts(100_000, 0).into(), + 3_000_000_000_000_000_000, + bytes, + vec![], + None, + ); + + let res = client + .tx() + .sign_and_submit_then_watch_default(&tx_payload, &dev::alice()) + .await? + .wait_for_finalized() + .await?; + println!("Transaction finalized: {:?}", res.extrinsic_hash()); + + let block_hash = res.block_hash(); + + let block = client.blocks().at(block_hash).await.unwrap(); + let extrinsics = block.extrinsics().await.unwrap(); + extrinsics.find_first::()?; + + Ok(()) +} diff --git a/eth-rpc/examples/remark-extrinsic.rs b/eth-rpc/examples/remark-extrinsic.rs new file mode 100644 index 0000000000..b106d27c21 --- /dev/null +++ b/eth-rpc/examples/remark-extrinsic.rs @@ -0,0 +1,43 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +use pallet_revive_eth_rpc::subxt_client::{self, system::calls::types::Remark, SrcChainConfig}; +use subxt::OnlineClient; +use subxt_signer::sr25519::dev; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let client = OnlineClient::::new().await?; + let tx_payload = subxt_client::tx().system().remark(b"bonjour".to_vec()); + let res = client + .tx() + .sign_and_submit_then_watch_default(&tx_payload, &dev::alice()) + .await? + .wait_for_finalized() + .await?; + + println!("Transaction finalized: {:?}", res.extrinsic_hash()); + let block_hash = res.block_hash(); + let block = client.blocks().at(block_hash).await.unwrap(); + let extrinsics = block.extrinsics().await.unwrap(); + let remarks = extrinsics + .find::() + .map(|remark| remark.unwrap().value) + .collect::>(); + + dbg!(remarks); + Ok(()) +} diff --git a/eth-rpc/examples/rpc-playground.rs b/eth-rpc/examples/rpc-playground.rs new file mode 100644 index 0000000000..ea8916b3b9 --- /dev/null +++ b/eth-rpc/examples/rpc-playground.rs @@ -0,0 +1,42 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +use jsonrpsee::http_client::HttpClientBuilder; +use pallet_revive::evm::{Account, BlockTag}; +use pallet_revive_eth_rpc::EthRpcClient; +use std::sync::Arc; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let account = Account::default(); + println!("Account address: {:?}", account.address()); + + let client = Arc::new(HttpClientBuilder::default().build("http://localhost:8545")?); + + let block = client.get_block_by_number(BlockTag::Latest.into(), false).await?; + println!("Latest block: {block:#?}"); + + let nonce = client.get_transaction_count(account.address(), BlockTag::Latest.into()).await?; + println!("Account nonce: {nonce:?}"); + + let balance = client.get_balance(account.address(), BlockTag::Latest.into()).await?; + println!("Account balance: {balance:?}"); + + let sync_state = client.syncing().await?; + println!("Sync state: {sync_state:?}"); + + Ok(()) +} diff --git a/eth-rpc/examples/transfer.rs b/eth-rpc/examples/transfer.rs new file mode 100644 index 0000000000..12823d4a34 --- /dev/null +++ b/eth-rpc/examples/transfer.rs @@ -0,0 +1,58 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +use jsonrpsee::http_client::HttpClientBuilder; +use pallet_revive::evm::{Account, BlockTag, ReceiptInfo}; +use pallet_revive_eth_rpc::{example::TransactionBuilder, EthRpcClient}; +use std::sync::Arc; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let client = Arc::new(HttpClientBuilder::default().build("http://localhost:8545")?); + + let alith = Account::default(); + let alith_address = alith.address(); + let ethan = Account::from(subxt_signer::eth::dev::ethan()); + let value = 1_000_000_000_000_000_000_000u128.into(); + + let print_balance = || async { + let balance = client.get_balance(alith_address, BlockTag::Latest.into()).await?; + println!("Alith {alith_address:?} balance: {balance:?}"); + let balance = client.get_balance(ethan.address(), BlockTag::Latest.into()).await?; + println!("ethan {:?} balance: {balance:?}", ethan.address()); + anyhow::Result::<()>::Ok(()) + }; + + print_balance().await?; + println!("\n\n=== Transferring ===\n\n"); + + let tx = TransactionBuilder::new(client.clone()) + .signer(alith) + .value(value) + .to(ethan.address()) + .send() + .await?; + println!("Transaction hash: {:?}", tx.hash()); + + let ReceiptInfo { block_number, gas_used, status, .. } = tx.wait_for_receipt().await?; + println!("Receipt: "); + println!("- Block number: {block_number}"); + println!("- Gas used: {gas_used}"); + println!("- Success: {status:?}"); + + print_balance().await?; + Ok(()) +} diff --git a/eth-rpc/examples/tx-types.rs b/eth-rpc/examples/tx-types.rs new file mode 100644 index 0000000000..ec6dccf401 --- /dev/null +++ b/eth-rpc/examples/tx-types.rs @@ -0,0 +1,50 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +use jsonrpsee::http_client::HttpClientBuilder; +use pallet_revive::evm::Account; +use pallet_revive_eth_rpc::example::{TransactionBuilder, TransactionType}; +use std::sync::Arc; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let client = Arc::new(HttpClientBuilder::default().build("http://localhost:8545")?); + + let alith = Account::default(); + let ethan = Account::from(subxt_signer::eth::dev::ethan()); + let value = 1_000_000_000_000_000_000_000u128.into(); + + for tx_type in [ + TransactionType::Legacy, + TransactionType::Eip2930, + TransactionType::Eip1559, + TransactionType::Eip4844, + ] { + println!("\n\n=== TransactionType {tx_type:?} ===\n\n",); + + let tx = TransactionBuilder::new(client.clone()) + .signer(alith.clone()) + .value(value) + .to(ethan.address()) + .send_with_type(tx_type) + .await?; + println!("Transaction hash: {:?}", tx.hash()); + + let receipt = tx.wait_for_receipt().await?; + println!("Receipt: {receipt:#?}"); + } + Ok(()) +} diff --git a/eth-rpc/examples/westend_local_network.toml b/eth-rpc/examples/westend_local_network.toml new file mode 100644 index 0000000000..76561be814 --- /dev/null +++ b/eth-rpc/examples/westend_local_network.toml @@ -0,0 +1,37 @@ +[settings] +node_spawn_timeout = 240 + +[relaychain] +default_command = "{{POLKADOT_BINARY}}" +default_args = ["-lparachain=debug,xcm=trace"] +chain = "westend-local" +[[relaychain.nodes]] +name = "alice-westend-validator" +validator = true +rpc_port = 9935 +ws_port = 9945 +balance = 2000000000000 + +[[relaychain.nodes]] +name = "bob-westend-validator" +validator = true +rpc_port = 9936 +ws_port = 9946 +balance = 2000000000000 + +[[parachains]] +id = 1000 +chain = "asset-hub-westend-local" +cumulus_based = true + +[[parachains.collators]] +name = "asset-hub-westend-collator1" +rpc_port = 9011 +ws_port = 9944 +command = "{{POLKADOT_PARACHAIN_BINARY}}" +args = ["-lparachain=debug,runtime::revive=debug"] + +[[parachains.collators]] +name = "asset-hub-westend-collator2" +command = "{{POLKADOT_PARACHAIN_BINARY}}" +args = ["-lparachain=debug,runtime::revive=debug"] diff --git a/eth-rpc/migrations/0001_create_transaction_hashes.sql b/eth-rpc/migrations/0001_create_transaction_hashes.sql new file mode 100644 index 0000000000..8fd6b353fa --- /dev/null +++ b/eth-rpc/migrations/0001_create_transaction_hashes.sql @@ -0,0 +1,22 @@ +-- Useful commands: +-- +-- Set DATABASE_URL environment variable. +-- export DATABASE_URL=sqlite:///$HOME/eth_rpc.db +-- +-- Create DB: +-- cargo sqlx database create +-- +-- Run migration manually: +-- cargo sqlx migrate run +-- +-- Update compile time artifacts: +-- cargo sqlx prepare +CREATE TABLE IF NOT EXISTS transaction_hashes ( + transaction_hash BLOB NOT NULL PRIMARY KEY, + transaction_index INTEGER NOT NULL, + block_hash BLOB NOT NULL +); + +CREATE INDEX IF NOT EXISTS idx_block_hash ON transaction_hashes ( + block_hash +); diff --git a/eth-rpc/migrations/0002_create_log_table.sql b/eth-rpc/migrations/0002_create_log_table.sql new file mode 100644 index 0000000000..4b012e17a3 --- /dev/null +++ b/eth-rpc/migrations/0002_create_log_table.sql @@ -0,0 +1,28 @@ +CREATE TABLE IF NOT EXISTS logs ( + block_hash BLOB NOT NULL, + transaction_index INTEGER NOT NULL, + log_index INTEGER NOT NULL, + address BLOB NOT NULL, + block_number INTEGER NOT NULL, + transaction_hash BLOB NOT NULL, + topic_0 BLOB, + topic_1 BLOB, + topic_2 BLOB, + topic_3 BLOB, + data BLOB, + PRIMARY KEY (block_hash, transaction_index, log_index) +); + +CREATE INDEX IF NOT EXISTS idx_block_number_address_topics ON logs ( + block_number, + address, + topic_0, + topic_1, + topic_2, + topic_3 +); + +CREATE INDEX IF NOT EXISTS idx_block_hash ON logs ( + block_hash +); + diff --git a/eth-rpc/migrations/0003_create_eth_substrate_block_mapping.sql b/eth-rpc/migrations/0003_create_eth_substrate_block_mapping.sql new file mode 100644 index 0000000000..80f7326528 --- /dev/null +++ b/eth-rpc/migrations/0003_create_eth_substrate_block_mapping.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS eth_to_substrate_blocks ( + ethereum_block_hash BLOB NOT NULL PRIMARY KEY, + substrate_block_hash BLOB NOT NULL +); + +CREATE INDEX IF NOT EXISTS idx_substrate_block_hash ON eth_to_substrate_blocks ( + substrate_block_hash +); diff --git a/eth-rpc/src/apis.rs b/eth-rpc/src/apis.rs new file mode 100644 index 0000000000..0d3366f5d5 --- /dev/null +++ b/eth-rpc/src/apis.rs @@ -0,0 +1,27 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +mod debug_apis; +pub use debug_apis::*; + +mod execution_apis; +pub use execution_apis::*; + +mod health_api; +pub use health_api::*; + +mod polkadot_api; +pub use polkadot_api::*; diff --git a/eth-rpc/src/apis/debug_apis.rs b/eth-rpc/src/apis/debug_apis.rs new file mode 100644 index 0000000000..673a6101d3 --- /dev/null +++ b/eth-rpc/src/apis/debug_apis.rs @@ -0,0 +1,125 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +use crate::*; +use jsonrpsee::{core::RpcResult, proc_macros::rpc}; + +/// Debug Ethererum JSON-RPC apis. +#[rpc(server, client)] +pub trait DebugRpc { + /// Returns the tracing of the execution of a specific block using its number. + /// + /// ## References + /// + /// - + #[method(name = "debug_traceBlockByNumber")] + async fn trace_block_by_number( + &self, + block: BlockNumberOrTag, + tracer_config: Option, + ) -> RpcResult>; + + /// Returns a transaction's traces by replaying it. + /// + /// ## References + /// + /// - + #[method(name = "debug_traceTransaction")] + async fn trace_transaction( + &self, + transaction_hash: H256, + tracer_config: Option, + ) -> RpcResult; + + /// Dry run a call and returns the transaction's traces. + /// + /// ## References + /// + /// - + #[method(name = "debug_traceCall")] + async fn trace_call( + &self, + transaction: GenericTransaction, + block: BlockNumberOrTagOrHash, + tracer_config: Option, + ) -> RpcResult; + + #[method(name = "debug_getAutomine")] + async fn get_automine(&self) -> RpcResult; +} + +pub struct DebugRpcServerImpl { + client: client::Client, +} + +impl DebugRpcServerImpl { + pub fn new(client: client::Client) -> Self { + Self { client } + } +} + +async fn with_timeout( + timeout: Option, + fut: impl std::future::Future>, +) -> RpcResult { + if let Some(timeout) = timeout { + match tokio::time::timeout(timeout, fut).await { + Ok(r) => Ok(r?), + Err(_) => Err(ErrorObjectOwned::owned::( + -32000, + "execution timeout".to_string(), + None, + )), + } + } else { + Ok(fut.await?) + } +} + +#[async_trait] +impl DebugRpcServer for DebugRpcServerImpl { + async fn trace_block_by_number( + &self, + block: BlockNumberOrTag, + tracer_config: Option, + ) -> RpcResult> { + let TracerConfig { config, timeout } = tracer_config.unwrap_or_default(); + with_timeout(timeout, self.client.trace_block_by_number(block, config)).await + } + + async fn trace_transaction( + &self, + transaction_hash: H256, + tracer_config: Option, + ) -> RpcResult { + let TracerConfig { config, timeout } = tracer_config.unwrap_or_default(); + with_timeout(timeout, self.client.trace_transaction(transaction_hash, config)).await + } + + async fn trace_call( + &self, + transaction: GenericTransaction, + block: BlockNumberOrTagOrHash, + tracer_config: Option, + ) -> RpcResult { + let TracerConfig { config, timeout } = tracer_config.unwrap_or_default(); + with_timeout(timeout, self.client.trace_call(transaction, block, config)).await + } + + async fn get_automine(&self) -> RpcResult { + Ok(self.client.get_automine().await) + } +} diff --git a/eth-rpc/src/apis/execution_apis.rs b/eth-rpc/src/apis/execution_apis.rs new file mode 100644 index 0000000000..9ef03a8334 --- /dev/null +++ b/eth-rpc/src/apis/execution_apis.rs @@ -0,0 +1,189 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Generated JSON-RPC methods. +#![allow(missing_docs)] + +use crate::*; +use jsonrpsee::{core::RpcResult, proc_macros::rpc}; + +#[rpc(server, client)] +pub trait EthRpc { + /// Returns a list of addresses owned by client. + #[method(name = "eth_accounts")] + async fn accounts(&self) -> RpcResult>; + + /// Returns the number of most recent block. + #[method(name = "eth_blockNumber")] + async fn block_number(&self) -> RpcResult; + + /// Executes a new message call immediately without creating a transaction on the block chain. + #[method(name = "eth_call")] + async fn call( + &self, + transaction: GenericTransaction, + block: Option, + ) -> RpcResult; + + /// Returns the chain ID of the current network. + #[method(name = "eth_chainId")] + async fn chain_id(&self) -> RpcResult; + + /// Generates and returns an estimate of how much gas is necessary to allow the transaction to + /// complete. + #[method(name = "eth_estimateGas")] + async fn estimate_gas( + &self, + transaction: GenericTransaction, + block: Option, + ) -> RpcResult; + + /// Returns the current price per gas in wei. + #[method(name = "eth_gasPrice")] + async fn gas_price(&self) -> RpcResult; + + /// Returns the balance of the account of given address. + #[method(name = "eth_getBalance")] + async fn get_balance(&self, address: Address, block: BlockNumberOrTagOrHash) + -> RpcResult; + + /// Returns information about a block by hash. + #[method(name = "eth_getBlockByHash")] + async fn get_block_by_hash( + &self, + block_hash: H256, + hydrated_transactions: bool, + ) -> RpcResult>; + + /// Returns information about a block by number. + #[method(name = "eth_getBlockByNumber")] + async fn get_block_by_number( + &self, + block: BlockNumberOrTag, + hydrated_transactions: bool, + ) -> RpcResult>; + + /// Returns the number of transactions in a block from a block matching the given block hash. + #[method(name = "eth_getBlockTransactionCountByHash")] + async fn get_block_transaction_count_by_hash( + &self, + block_hash: Option, + ) -> RpcResult>; + + /// Returns the number of transactions in a block matching the given block number. + #[method(name = "eth_getBlockTransactionCountByNumber")] + async fn get_block_transaction_count_by_number( + &self, + block: Option, + ) -> RpcResult>; + + /// Returns code at a given address. + #[method(name = "eth_getCode")] + async fn get_code(&self, address: Address, block: BlockNumberOrTagOrHash) -> RpcResult; + + /// Returns an array of all logs matching filter with given id. + #[method(name = "eth_getLogs")] + async fn get_logs(&self, filter: Option) -> RpcResult; + + /// Returns the value from a storage position at a given address. + #[method(name = "eth_getStorageAt")] + async fn get_storage_at( + &self, + address: Address, + storage_slot: U256, + block: BlockNumberOrTagOrHash, + ) -> RpcResult; + + /// Returns information about a transaction by block hash and transaction index position. + #[method(name = "eth_getTransactionByBlockHashAndIndex")] + async fn get_transaction_by_block_hash_and_index( + &self, + block_hash: H256, + transaction_index: U256, + ) -> RpcResult>; + + /// Returns information about a transaction by block number and transaction index position. + #[method(name = "eth_getTransactionByBlockNumberAndIndex")] + async fn get_transaction_by_block_number_and_index( + &self, + block: BlockNumberOrTag, + transaction_index: U256, + ) -> RpcResult>; + + /// Returns the information about a transaction requested by transaction hash. + #[method(name = "eth_getTransactionByHash")] + async fn get_transaction_by_hash( + &self, + transaction_hash: H256, + ) -> RpcResult>; + + /// Returns the number of transactions sent from an address. + #[method(name = "eth_getTransactionCount")] + async fn get_transaction_count( + &self, + address: Address, + block: BlockNumberOrTagOrHash, + ) -> RpcResult; + + /// Returns the receipt of a transaction by transaction hash. + #[method(name = "eth_getTransactionReceipt")] + async fn get_transaction_receipt( + &self, + transaction_hash: H256, + ) -> RpcResult>; + + /// Returns the current maxPriorityFeePerGas per gas in wei. + #[method(name = "eth_maxPriorityFeePerGas")] + async fn max_priority_fee_per_gas(&self) -> RpcResult; + + /// Submits a raw transaction. For EIP-4844 transactions, the raw form must be the network form. + /// This means it includes the blobs, KZG commitments, and KZG proofs. + #[method(name = "eth_sendRawTransaction")] + async fn send_raw_transaction(&self, transaction: Bytes) -> RpcResult; + + /// Signs and submits a transaction. + #[method(name = "eth_sendTransaction")] + async fn send_transaction(&self, transaction: GenericTransaction) -> RpcResult; + + /// Returns an object with data about the sync status or false. + #[method(name = "eth_syncing")] + async fn syncing(&self) -> RpcResult; + + /// Returns true when the client is actively listening for network connections, otherwise false + #[method(name = "net_listening")] + async fn net_listening(&self) -> RpcResult; + + /// The string value of current network id + #[method(name = "net_version")] + async fn net_version(&self) -> RpcResult; + + /// The string value of the current client version + #[method(name = "web3_clientVersion")] + async fn web3_client_version(&self) -> RpcResult; + + /// Returns transaction base fee per gas and effective priority fee per gas for the + /// requested/supported block range. + /// + /// Transaction fee history, which is introduced in EIP-1159. + #[method(name = "eth_feeHistory")] + async fn fee_history( + &self, + block_count: U256, + newest_block: BlockNumberOrTag, + reward_percentiles: Option>, + ) -> RpcResult; +} diff --git a/eth-rpc/src/apis/health_api.rs b/eth-rpc/src/apis/health_api.rs new file mode 100644 index 0000000000..312aed816e --- /dev/null +++ b/eth-rpc/src/apis/health_api.rs @@ -0,0 +1,74 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//! Heatlh JSON-RPC methods. + +use crate::*; +use jsonrpsee::{core::RpcResult, proc_macros::rpc}; +use sc_rpc_api::system::helpers::Health; + +#[rpc(server, client)] +pub trait SystemHealthRpc { + /// Proxy the substrate chain system_health RPC call. + #[method(name = "system_health")] + async fn system_health(&self) -> RpcResult; + + /// Returns the number of peers currently connected to the client. + #[method(name = "net_peerCount")] + async fn net_peer_count(&self) -> RpcResult; +} + +pub struct SystemHealthRpcServerImpl { + client: client::Client, +} + +impl SystemHealthRpcServerImpl { + pub fn new(client: client::Client) -> Self { + Self { client } + } +} + +#[async_trait] +impl SystemHealthRpcServer for SystemHealthRpcServerImpl { + async fn system_health(&self) -> RpcResult { + let (sync_state, health) = + tokio::try_join!(self.client.sync_state(), self.client.system_health())?; + + let latest = self.client.latest_block().await.number(); + + // Compare against `latest + 1` to avoid a false positive if the health check runs + // immediately after a new block is produced but before the cache updates. + if sync_state.current_block > latest + 1 { + log::warn!( + target: LOG_TARGET, + "Client is out of sync. Current block: {}, latest cache block: {latest}", + sync_state.current_block, + ); + return Err(ErrorCode::InternalError.into()); + } + + Ok(Health { + peers: health.peers, + is_syncing: health.is_syncing, + should_have_peers: health.should_have_peers, + }) + } + + async fn net_peer_count(&self) -> RpcResult { + let health = self.client.system_health().await?; + Ok((health.peers as u64).into()) + } +} diff --git a/eth-rpc/src/apis/polkadot_api.rs b/eth-rpc/src/apis/polkadot_api.rs new file mode 100644 index 0000000000..bf683b5e4d --- /dev/null +++ b/eth-rpc/src/apis/polkadot_api.rs @@ -0,0 +1,46 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//! Polkadot-specific JSON-RPC methods. + +use crate::*; +use jsonrpsee::{core::RpcResult, proc_macros::rpc}; +use sp_runtime::Weight; + +#[rpc(server, client)] +pub trait PolkadotRpc { + /// Get the post dispatch weight for a given transaction hash. + #[method(name = "polkadot_postDispatchWeight")] + async fn post_dispatch_weight(&self, transaction_hash: H256) -> RpcResult>; +} + +pub struct PolkadotRpcServerImpl { + client: client::Client, +} + +impl PolkadotRpcServerImpl { + pub fn new(client: client::Client) -> Self { + Self { client } + } +} + +#[async_trait] +impl PolkadotRpcServer for PolkadotRpcServerImpl { + async fn post_dispatch_weight(&self, transaction_hash: H256) -> RpcResult> { + let weight = self.client.post_dispatch_weight(&transaction_hash).await; + Ok(weight) + } +} diff --git a/eth-rpc/src/block_info_provider.rs b/eth-rpc/src/block_info_provider.rs new file mode 100644 index 0000000000..1755ce58a5 --- /dev/null +++ b/eth-rpc/src/block_info_provider.rs @@ -0,0 +1,206 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use crate::{ + client::{SubscriptionType, SubstrateBlock, SubstrateBlockNumber}, + subxt_client::SrcChainConfig, + ClientError, +}; +use jsonrpsee::core::async_trait; +use sp_core::H256; +use std::sync::Arc; +use subxt::{backend::legacy::LegacyRpcMethods, OnlineClient}; +use tokio::sync::RwLock; + +/// BlockInfoProvider cache and retrieves information about blocks. +#[async_trait] +pub trait BlockInfoProvider: Send + Sync { + /// Update the latest block + async fn update_latest(&self, block: Arc, subscription_type: SubscriptionType); + + /// Return the latest finalized block. + async fn latest_finalized_block(&self) -> Arc; + + /// Return the latest block. + async fn latest_block(&self) -> Arc; + + /// Return the latest block number + async fn latest_block_number(&self) -> SubstrateBlockNumber { + return self.latest_block().await.number(); + } + + /// Get block by block_number. + async fn block_by_number( + &self, + block_number: SubstrateBlockNumber, + ) -> Result>, ClientError>; + + /// Get block by block hash. + async fn block_by_hash(&self, hash: &H256) -> Result>, ClientError>; +} + +/// Provides information about blocks. +#[derive(Clone)] +pub struct SubxtBlockInfoProvider { + /// The latest block. + latest_block: Arc>>, + + /// The latest finalized block. + latest_finalized_block: Arc>>, + + /// The rpc client, used to fetch blocks not in the cache. + rpc: LegacyRpcMethods, + + /// The api client, used to fetch blocks not in the cache. + api: OnlineClient, +} + +impl SubxtBlockInfoProvider { + pub async fn new( + api: OnlineClient, + rpc: LegacyRpcMethods, + ) -> Result { + let latest = Arc::new(api.blocks().at_latest().await?); + Ok(Self { + api, + rpc, + latest_block: Arc::new(RwLock::new(latest.clone())), + latest_finalized_block: Arc::new(RwLock::new(latest)), + }) + } +} + +#[async_trait] +impl BlockInfoProvider for SubxtBlockInfoProvider { + async fn update_latest(&self, block: Arc, subscription_type: SubscriptionType) { + let mut latest = match subscription_type { + SubscriptionType::FinalizedBlocks => self.latest_finalized_block.write().await, + SubscriptionType::BestBlocks => self.latest_block.write().await, + }; + *latest = block; + } + + async fn latest_block(&self) -> Arc { + self.latest_block.read().await.clone() + } + + async fn latest_finalized_block(&self) -> Arc { + self.latest_finalized_block.read().await.clone() + } + + async fn block_by_number( + &self, + block_number: SubstrateBlockNumber, + ) -> Result>, ClientError> { + let latest = self.latest_block().await; + if block_number == latest.number() { + return Ok(Some(latest)); + } + + let latest_finalized = self.latest_finalized_block().await; + if block_number == latest_finalized.number() { + return Ok(Some(latest_finalized)); + } + + let Some(hash) = self.rpc.chain_get_block_hash(Some(block_number.into())).await? else { + return Ok(None); + }; + + match self.api.blocks().at(hash).await { + Ok(block) => Ok(Some(Arc::new(block))), + Err(subxt::Error::Block(subxt::error::BlockError::NotFound(_))) => Ok(None), + Err(err) => Err(err.into()), + } + } + + async fn block_by_hash(&self, hash: &H256) -> Result>, ClientError> { + let latest = self.latest_block().await; + if hash == &latest.hash() { + return Ok(Some(latest)); + } + + let latest_finalized = self.latest_finalized_block().await; + if hash == &latest_finalized.hash() { + return Ok(Some(latest_finalized)); + } + + match self.api.blocks().at(*hash).await { + Ok(block) => Ok(Some(Arc::new(block))), + Err(subxt::Error::Block(subxt::error::BlockError::NotFound(_))) => Ok(None), + Err(err) => Err(err.into()), + } + } +} + +#[cfg(test)] +pub mod test { + use super::*; + use crate::BlockInfo; + + /// A Noop BlockInfoProvider used to test [`db::ReceiptProvider`]. + pub struct MockBlockInfoProvider; + + pub struct MockBlockInfo { + pub number: SubstrateBlockNumber, + pub hash: H256, + } + + impl BlockInfo for MockBlockInfo { + fn hash(&self) -> H256 { + self.hash + } + fn number(&self) -> SubstrateBlockNumber { + self.number + } + } + + #[async_trait] + impl BlockInfoProvider for MockBlockInfoProvider { + async fn update_latest( + &self, + _block: Arc, + _subscription_type: SubscriptionType, + ) { + } + + async fn latest_finalized_block(&self) -> Arc { + unimplemented!() + } + + async fn latest_block(&self) -> Arc { + unimplemented!() + } + + async fn latest_block_number(&self) -> SubstrateBlockNumber { + 2u32 + } + + async fn block_by_number( + &self, + _block_number: SubstrateBlockNumber, + ) -> Result>, ClientError> { + Ok(None) + } + + async fn block_by_hash( + &self, + _hash: &H256, + ) -> Result>, ClientError> { + Ok(None) + } + } +} diff --git a/eth-rpc/src/cli.rs b/eth-rpc/src/cli.rs new file mode 100644 index 0000000000..87793e78be --- /dev/null +++ b/eth-rpc/src/cli.rs @@ -0,0 +1,297 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//! The Ethereum JSON-RPC server. +use crate::{ + client::{connect, Client, SubscriptionType, SubstrateBlockNumber}, + DebugRpcServer, DebugRpcServerImpl, EthRpcServer, EthRpcServerImpl, PolkadotRpcServer, + PolkadotRpcServerImpl, ReceiptExtractor, ReceiptProvider, SubxtBlockInfoProvider, + SystemHealthRpcServer, SystemHealthRpcServerImpl, LOG_TARGET, +}; +use clap::Parser; +use futures::{future::BoxFuture, pin_mut, FutureExt}; +use jsonrpsee::server::RpcModule; +use sc_cli::{PrometheusParams, RpcParams, SharedParams, Signals}; +use sc_service::{ + config::{PrometheusConfig, RpcConfiguration}, + start_rpc_servers, TaskManager, +}; +use sqlx::sqlite::SqlitePoolOptions; + +// Default port if --prometheus-port is not specified +const DEFAULT_PROMETHEUS_PORT: u16 = 9616; + +// Default port if --rpc-port is not specified +const DEFAULT_RPC_PORT: u16 = 8545; + +const IN_MEMORY_DB: &str = "sqlite::memory:"; + +// Parsed command instructions from the command line +#[derive(Parser, Debug)] +#[clap(author, about, version)] +pub struct CliCommand { + /// The node url to connect to + #[clap(long, default_value = "ws://127.0.0.1:9944")] + pub node_rpc_url: String, + + /// The maximum number of blocks to cache in memory. + #[clap(long, default_value = "256")] + pub cache_size: usize, + + /// Earliest block number to consider when searching for transaction receipts. + #[clap(long)] + pub earliest_receipt_block: Option, + + /// The database used to store Ethereum transaction hashes. + /// This is only useful if the node needs to act as an archive node and respond to Ethereum RPC + /// queries for transactions that are not in the in memory cache. + #[clap(long, env = "DATABASE_URL", default_value = IN_MEMORY_DB)] + pub database_url: String, + + /// If provided, index the last n blocks + #[clap(long)] + pub index_last_n_blocks: Option, + + #[allow(missing_docs)] + #[clap(flatten)] + pub shared_params: SharedParams, + + #[allow(missing_docs)] + #[clap(flatten)] + pub rpc_params: RpcParams, + + #[allow(missing_docs)] + #[clap(flatten)] + pub prometheus_params: PrometheusParams, + + /// By default, the node rejects any transaction that's unprotected (i.e., that doesn't have a + /// chain-id). If the user wishes the submit such a transaction then they can use this flag to + /// instruct the RPC to ignore this check. + #[arg(long)] + pub allow_unprotected_txs: bool, +} + +/// Initialize the logger +#[cfg(not(test))] +fn init_logger(params: &SharedParams) -> anyhow::Result<()> { + let mut logger = sc_cli::LoggerBuilder::new(params.log_filters().join(",")); + logger + .with_log_reloading(params.enable_log_reloading) + .with_detailed_output(params.detailed_log_output); + + if let Some(tracing_targets) = ¶ms.tracing_targets { + let tracing_receiver = params.tracing_receiver.into(); + logger.with_profiling(tracing_receiver, tracing_targets); + } + + if params.disable_log_color { + logger.with_colors(false); + } + + logger.init()?; + Ok(()) +} + +fn build_client( + tokio_handle: &tokio::runtime::Handle, + cache_size: usize, + earliest_receipt_block: Option, + node_rpc_url: &str, + database_url: &str, + max_request_size: u32, + max_response_size: u32, + abort_signal: Signals, +) -> anyhow::Result { + let fut = async { + let (api, rpc_client, rpc) = connect(node_rpc_url, max_request_size, max_response_size).await?; + let block_provider = SubxtBlockInfoProvider::new( api.clone(), rpc.clone()).await?; + + let (pool, keep_latest_n_blocks) = if database_url == IN_MEMORY_DB { + log::warn!( target: LOG_TARGET, "💾 Using in-memory database, keeping only {cache_size} blocks in memory"); + // see sqlite in-memory issue: https://github.com/launchbadge/sqlx/issues/2510 + let pool = SqlitePoolOptions::new() + .max_connections(1) + .idle_timeout(None) + .max_lifetime(None) + .connect(database_url).await?; + + (pool, Some(cache_size)) + } else { + (SqlitePoolOptions::new().connect(database_url).await?, None) + }; + + let receipt_extractor = ReceiptExtractor::new( + api.clone(), + earliest_receipt_block, + ).await?; + + let receipt_provider = ReceiptProvider::new( + pool, + block_provider.clone(), + receipt_extractor.clone(), + keep_latest_n_blocks, + ) + .await?; + + let client = + Client::new(api, rpc_client, rpc, block_provider, receipt_provider).await?; + + Ok(client) + } + .fuse(); + pin_mut!(fut); + + match tokio_handle.block_on(abort_signal.try_until_signal(fut)) { + Ok(Ok(client)) => Ok(client), + Ok(Err(err)) => Err(err), + Err(_) => anyhow::bail!("Process interrupted"), + } +} + +/// Start the JSON-RPC server using the given command line arguments. +pub fn run(cmd: CliCommand) -> anyhow::Result<()> { + let CliCommand { + rpc_params, + prometheus_params, + node_rpc_url, + cache_size, + database_url, + earliest_receipt_block, + index_last_n_blocks, + shared_params, + allow_unprotected_txs, + .. + } = cmd; + + #[cfg(not(test))] + init_logger(&shared_params)?; + let is_dev = shared_params.dev; + let rpc_addrs: Option> = rpc_params + .rpc_addr(is_dev, false, 8545)? + .map(|addrs| addrs.into_iter().map(Into::into).collect()); + + let rpc_config = RpcConfiguration { + addr: rpc_addrs, + methods: rpc_params.rpc_methods.into(), + max_connections: rpc_params.rpc_max_connections, + cors: rpc_params.rpc_cors(is_dev)?, + max_request_size: rpc_params.rpc_max_request_size, + max_response_size: rpc_params.rpc_max_response_size, + id_provider: None, + max_subs_per_conn: rpc_params.rpc_max_subscriptions_per_connection, + port: rpc_params.rpc_port.unwrap_or(DEFAULT_RPC_PORT), + message_buffer_capacity: rpc_params.rpc_message_buffer_capacity_per_connection, + batch_config: rpc_params.rpc_batch_config()?, + rate_limit: rpc_params.rpc_rate_limit, + rate_limit_whitelisted_ips: rpc_params.rpc_rate_limit_whitelisted_ips, + rate_limit_trust_proxy_headers: rpc_params.rpc_rate_limit_trust_proxy_headers, + request_logger_limit: if is_dev { 1024 * 1024 } else { 1024 }, + }; + + let prometheus_config = + prometheus_params.prometheus_config(DEFAULT_PROMETHEUS_PORT, "eth-rpc".into()); + let prometheus_registry = prometheus_config.as_ref().map(|config| &config.registry); + + let tokio_runtime = sc_cli::build_runtime()?; + let tokio_handle = tokio_runtime.handle(); + let mut task_manager = TaskManager::new(tokio_handle.clone(), prometheus_registry)?; + + let client = build_client( + tokio_handle, + cache_size, + earliest_receipt_block, + &node_rpc_url, + &database_url, + rpc_config.max_request_size * 1024 * 1024, + rpc_config.max_response_size * 1024 * 1024, + tokio_runtime.block_on(async { Signals::capture() })?, + )?; + + // Prometheus metrics. + if let Some(PrometheusConfig { port, registry }) = prometheus_config.clone() { + task_manager.spawn_handle().spawn( + "prometheus-endpoint", + None, + prometheus_endpoint::init_prometheus(port, registry).map(drop), + ); + } + + let rpc_server_handle = start_rpc_servers( + &rpc_config, + prometheus_registry, + tokio_handle, + || rpc_module(is_dev, client.clone(), allow_unprotected_txs), + None, + )?; + + task_manager + .spawn_essential_handle() + .spawn("block-subscription", None, async move { + let mut futures: Vec>> = vec![ + Box::pin(client.subscribe_and_cache_new_blocks(SubscriptionType::BestBlocks)), + Box::pin(client.subscribe_and_cache_new_blocks(SubscriptionType::FinalizedBlocks)), + ]; + + if let Some(index_last_n_blocks) = index_last_n_blocks { + futures.push(Box::pin(client.subscribe_and_cache_blocks(index_last_n_blocks))); + } + + if let Err(err) = futures::future::try_join_all(futures).await { + panic!("Block subscription task failed: {err:?}",) + } + }); + + task_manager.keep_alive(rpc_server_handle); + let signals = tokio_runtime.block_on(async { Signals::capture() })?; + tokio_runtime.block_on(signals.run_until_signal(task_manager.future().fuse()))?; + Ok(()) +} + +/// Create the JSON-RPC module. +fn rpc_module( + is_dev: bool, + client: Client, + allow_unprotected_txs: bool, +) -> Result, sc_service::Error> { + let eth_api = EthRpcServerImpl::new(client.clone()) + .with_accounts(if is_dev { + vec![ + crate::Account::from(subxt_signer::eth::dev::alith()), + crate::Account::from(subxt_signer::eth::dev::baltathar()), + crate::Account::from(subxt_signer::eth::dev::charleth()), + crate::Account::from(subxt_signer::eth::dev::dorothy()), + crate::Account::from(subxt_signer::eth::dev::ethan()), + ] + } else { + vec![] + }) + .with_allow_unprotected_txs(allow_unprotected_txs) + .with_use_pending_for_estimate_gas(is_dev) + .into_rpc(); + + let health_api = SystemHealthRpcServerImpl::new(client.clone()).into_rpc(); + let debug_api = DebugRpcServerImpl::new(client.clone()).into_rpc(); + let polkadot_api = PolkadotRpcServerImpl::new(client).into_rpc(); + + let mut module = RpcModule::new(()); + module.merge(eth_api).map_err(|e| sc_service::Error::Application(e.into()))?; + module.merge(health_api).map_err(|e| sc_service::Error::Application(e.into()))?; + module.merge(debug_api).map_err(|e| sc_service::Error::Application(e.into()))?; + module + .merge(polkadot_api) + .map_err(|e| sc_service::Error::Application(e.into()))?; + Ok(module) +} diff --git a/eth-rpc/src/client.rs b/eth-rpc/src/client.rs new file mode 100644 index 0000000000..283458d9bb --- /dev/null +++ b/eth-rpc/src/client.rs @@ -0,0 +1,815 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//! The client connects to the source substrate chain +//! and is used by the rpc server to query and send transactions to the substrate chain. + +pub(crate) mod runtime_api; +pub(crate) mod storage_api; + +use crate::{ + subxt_client::{self, revive::calls::types::EthTransact, SrcChainConfig}, + BlockInfoProvider, BlockTag, FeeHistoryProvider, ReceiptProvider, SubxtBlockInfoProvider, + TracerType, TransactionInfo, +}; +use jsonrpsee::types::{error::CALL_EXECUTION_FAILED_CODE, ErrorObjectOwned}; +use pallet_revive::{ + evm::{ + decode_revert_reason, Block, BlockNumberOrTag, BlockNumberOrTagOrHash, FeeHistoryResult, + Filter, GenericTransaction, HashesOrTransactionInfos, Log, ReceiptInfo, SyncingProgress, + SyncingStatus, Trace, TransactionSigned, TransactionTrace, H256, + }, + EthTransactError, +}; +use runtime_api::RuntimeApi; +use sp_runtime::traits::Block as BlockT; +use sp_weights::Weight; +use std::{ops::Range, sync::Arc, time::Duration}; +use storage_api::StorageApi; +use subxt::{ + backend::{ + legacy::{rpc_methods::SystemHealth, LegacyRpcMethods}, + rpc::{ + reconnecting_rpc_client::{ExponentialBackoff, RpcClient as ReconnectingRpcClient}, + RpcClient, + }, + }, + config::{HashFor, Header}, + ext::subxt_rpcs::rpc_params, + Config, OnlineClient, +}; +use thiserror::Error; +use tokio::sync::Mutex; + +/// The substrate block type. +pub type SubstrateBlock = subxt::blocks::Block>; + +/// The substrate block header. +pub type SubstrateBlockHeader = ::Header; + +/// The substrate block number type. +pub type SubstrateBlockNumber = ::Number; + +/// The substrate block hash type. +pub type SubstrateBlockHash = HashFor; + +/// The runtime balance type. +pub type Balance = u128; + +/// The subscription type used to listen to new blocks. +#[derive(Debug, Clone, Copy, PartialEq)] +pub enum SubscriptionType { + /// Subscribe to best blocks. + BestBlocks, + /// Subscribe to finalized blocks. + FinalizedBlocks, +} + +/// The error type for the client. +#[derive(Error, Debug)] +pub enum ClientError { + /// A [`jsonrpsee::core::ClientError`] wrapper error. + #[error(transparent)] + Jsonrpsee(#[from] jsonrpsee::core::ClientError), + /// A [`subxt::Error`] wrapper error. + #[error(transparent)] + SubxtError(#[from] subxt::Error), + #[error(transparent)] + RpcError(#[from] subxt::ext::subxt_rpcs::Error), + /// A [`sqlx::Error`] wrapper error. + #[error(transparent)] + SqlxError(#[from] sqlx::Error), + /// A [`codec::Error`] wrapper error. + #[error(transparent)] + CodecError(#[from] codec::Error), + /// Transcact call failed. + #[error("contract reverted: {0:?}")] + TransactError(EthTransactError), + /// A decimal conversion failed. + #[error("conversion failed")] + ConversionFailed, + /// The block hash was not found. + #[error("hash not found")] + BlockNotFound, + /// The contract was not found. + #[error("Contract not found")] + ContractNotFound, + #[error("No Ethereum extrinsic found")] + EthExtrinsicNotFound, + /// The transaction fee could not be found + #[error("transactionFeePaid event not found")] + TxFeeNotFound, + /// Failed to decode a raw payload into a signed transaction. + #[error("Failed to decode a raw payload into a signed transaction")] + TxDecodingFailed, + /// Failed to recover eth address. + #[error("failed to recover eth address")] + RecoverEthAddressFailed, + /// Failed to filter logs. + #[error("Failed to filter logs")] + LogFilterFailed(#[from] anyhow::Error), + /// Receipt storage was not found. + #[error("Receipt storage not found")] + ReceiptDataNotFound, + /// Ethereum block was not found. + #[error("Ethereum block not found")] + EthereumBlockNotFound, + /// Receipt data length mismatch. + #[error("Receipt data length mismatch")] + ReceiptDataLengthMismatch, +} +const LOG_TARGET: &str = "eth-rpc::client"; + +const REVERT_CODE: i32 = 3; + +const NOTIFIER_CAPACITY: usize = 16; +impl From for ErrorObjectOwned { + fn from(err: ClientError) -> Self { + match err { + ClientError::SubxtError(subxt::Error::Rpc(subxt::error::RpcError::ClientError( + subxt::ext::subxt_rpcs::Error::User(err), + ))) | + ClientError::RpcError(subxt::ext::subxt_rpcs::Error::User(err)) => { + ErrorObjectOwned::owned::>(err.code, err.message, None) + }, + ClientError::TransactError(EthTransactError::Data(data)) => { + let msg = match decode_revert_reason(&data) { + Some(reason) => format!("execution reverted: {reason}"), + None => "execution reverted".to_string(), + }; + + let data = format!("0x{}", hex::encode(data)); + ErrorObjectOwned::owned::(REVERT_CODE, msg, Some(data)) + }, + ClientError::TransactError(EthTransactError::Message(msg)) => { + ErrorObjectOwned::owned::(CALL_EXECUTION_FAILED_CODE, msg, None) + }, + _ => { + ErrorObjectOwned::owned::(CALL_EXECUTION_FAILED_CODE, err.to_string(), None) + }, + } + } +} + +/// A client connect to a node and maintains a cache of the last `CACHE_SIZE` blocks. +#[derive(Clone)] +pub struct Client { + api: OnlineClient, + rpc_client: RpcClient, + rpc: LegacyRpcMethods, + receipt_provider: ReceiptProvider, + block_provider: SubxtBlockInfoProvider, + fee_history_provider: FeeHistoryProvider, + chain_id: u64, + max_block_weight: Weight, + /// Whether the node has automine enabled. + automine: bool, + /// A notifier, that informs subscribers of new best blocks. + block_notifier: Option>, + /// A lock to ensure only one subscription can perform write operations at a time. + subscription_lock: Arc>, +} + +/// Fetch the chain ID from the substrate chain. +async fn chain_id(api: &OnlineClient) -> Result { + let query = subxt_client::constants().revive().chain_id(); + api.constants().at(&query).map_err(|err| err.into()) +} + +/// Fetch the max block weight from the substrate chain. +async fn max_block_weight(api: &OnlineClient) -> Result { + let query = subxt_client::constants().system().block_weights(); + let weights = api.constants().at(&query)?; + let max_block = weights.per_class.normal.max_extrinsic.unwrap_or(weights.max_block); + Ok(max_block.0) +} + +/// Get the automine status from the node. +async fn get_automine(rpc_client: &RpcClient) -> bool { + match rpc_client.request::("getAutomine", rpc_params![]).await { + Ok(val) => val, + Err(err) => { + log::info!(target: LOG_TARGET, "Node does not have getAutomine RPC. Defaulting to automine=false. error: {err:?}"); + false + }, + } +} + +/// Connect to a node at the given URL, and return the underlying API, RPC client, and legacy RPC +/// clients. +pub async fn connect( + node_rpc_url: &str, + max_request_size: u32, + max_response_size: u32, +) -> Result<(OnlineClient, RpcClient, LegacyRpcMethods), ClientError> +{ + log::info!(target: LOG_TARGET, "🌐 Connecting to node at: {node_rpc_url} ..."); + let rpc_client = ReconnectingRpcClient::builder() + .retry_policy(ExponentialBackoff::from_millis(100).max_delay(Duration::from_secs(10))) + .max_request_size(max_request_size) + .max_response_size(max_response_size) + .build(node_rpc_url.to_string()) + .await?; + let rpc_client = RpcClient::new(rpc_client); + log::info!(target: LOG_TARGET, "🌟 Connected to node at: {node_rpc_url}"); + + let api = OnlineClient::::from_rpc_client(rpc_client.clone()).await?; + let rpc = LegacyRpcMethods::::new(rpc_client.clone()); + Ok((api, rpc_client, rpc)) +} + +impl Client { + /// Create a new client instance. + pub async fn new( + api: OnlineClient, + rpc_client: RpcClient, + rpc: LegacyRpcMethods, + block_provider: SubxtBlockInfoProvider, + receipt_provider: ReceiptProvider, + ) -> Result { + let (chain_id, max_block_weight, automine) = + tokio::try_join!(chain_id(&api), max_block_weight(&api), async { + Ok(get_automine(&rpc_client).await) + },)?; + + let client = Self { + api, + rpc_client, + rpc, + receipt_provider, + block_provider, + fee_history_provider: FeeHistoryProvider::default(), + chain_id, + max_block_weight, + automine, + block_notifier: automine + .then(|| tokio::sync::broadcast::channel::(NOTIFIER_CAPACITY).0), + subscription_lock: Arc::new(Mutex::new(())), + }; + + Ok(client) + } + + /// Creates a block notifier instance. + pub fn create_block_notifier(&mut self) { + self.block_notifier = Some(tokio::sync::broadcast::channel::(NOTIFIER_CAPACITY).0); + } + + /// Sets a block notifier + pub fn set_block_notifier(&mut self, notifier: Option>) { + self.block_notifier = notifier; + } + + /// Subscribe to past blocks executing the callback for each block in `range`. + async fn subscribe_past_blocks( + &self, + range: Range, + callback: F, + ) -> Result<(), ClientError> + where + F: Fn(Arc) -> Fut + Send + Sync, + Fut: std::future::Future> + Send, + { + let mut block = self + .block_provider + .block_by_number(range.end) + .await? + .ok_or(ClientError::BlockNotFound)?; + + loop { + let block_number = block.number(); + log::trace!(target: "eth-rpc::subscription", "Processing past block #{block_number}"); + + let parent_hash = block.header().parent_hash; + callback(block.clone()).await.inspect_err(|err| { + log::error!(target: "eth-rpc::subscription", "Failed to process past block #{block_number}: {err:?}"); + })?; + + if range.start < block_number { + block = self + .block_provider + .block_by_hash(&parent_hash) + .await? + .ok_or(ClientError::BlockNotFound)?; + } else { + return Ok(()); + } + } + } + + /// Subscribe to new blocks, and execute the async closure for each block. + async fn subscribe_new_blocks( + &self, + subscription_type: SubscriptionType, + callback: F, + ) -> Result<(), ClientError> + where + F: Fn(SubstrateBlock) -> Fut + Send + Sync, + Fut: std::future::Future> + Send, + { + let mut block_stream = match subscription_type { + SubscriptionType::BestBlocks => self.api.blocks().subscribe_best().await, + SubscriptionType::FinalizedBlocks => self.api.blocks().subscribe_finalized().await, + } + .inspect_err(|err| { + log::error!(target: LOG_TARGET, "Failed to subscribe to blocks: {err:?}"); + })?; + + while let Some(block) = block_stream.next().await { + let block = match block { + Ok(block) => block, + Err(err) => { + if err.is_disconnected_will_reconnect() { + log::warn!( + target: LOG_TARGET, + "The RPC connection was lost and we may have missed a few blocks ({subscription_type:?}): {err:?}" + ); + continue; + } + + log::error!(target: LOG_TARGET, "Failed to fetch block ({subscription_type:?}): {err:?}"); + return Err(err.into()); + }, + }; + + // Acquire lock to ensure only one subscription can perform write operations at a time + let _guard = self.subscription_lock.lock().await; + + let block_number = block.number(); + log::trace!(target: "eth-rpc::subscription", "⏳ Processing {subscription_type:?} block: {block_number}"); + if let Err(err) = callback(block).await { + log::error!(target: LOG_TARGET, "Failed to process block {block_number}: {err:?}"); + } else { + log::trace!(target: "eth-rpc::subscription", "✅ Processed {subscription_type:?} block: {block_number}"); + } + } + + log::info!(target: LOG_TARGET, "Block subscription ended"); + Ok(()) + } + + /// Start the block subscription, and populate the block cache. + pub async fn subscribe_and_cache_new_blocks( + &self, + subscription_type: SubscriptionType, + ) -> Result<(), ClientError> { + log::info!(target: LOG_TARGET, "🔌 Subscribing to new blocks ({subscription_type:?})"); + self.subscribe_new_blocks(subscription_type, |block| async { + let hash = block.hash(); + let evm_block = self.runtime_api(hash).eth_block().await?; + let (_, receipts): (Vec<_>, Vec<_>) = self + .receipt_provider + .insert_block_receipts(&block, &evm_block.hash) + .await? + .into_iter() + .unzip(); + + self.block_provider.update_latest(Arc::new(block), subscription_type).await; + self.fee_history_provider.update_fee_history(&evm_block, &receipts).await; + + // Only broadcast for best blocks to avoid duplicate notifications. + match (subscription_type, &self.block_notifier) { + (SubscriptionType::BestBlocks, Some(sender)) if sender.receiver_count() > 0 => { + let _ = sender.send(hash); + }, + _ => {}, + } + Ok(()) + }) + .await + } + + /// Cache old blocks up to the given block number. + pub async fn subscribe_and_cache_blocks( + &self, + index_last_n_blocks: SubstrateBlockNumber, + ) -> Result<(), ClientError> { + let last = self.latest_block().await.number().saturating_sub(1); + let range = last.saturating_sub(index_last_n_blocks)..last; + log::info!(target: LOG_TARGET, "🗄️ Indexing past blocks in range {range:?}"); + + self.subscribe_past_blocks(range, |block| async move { + let ethereum_hash = self + .runtime_api(block.hash()) + .eth_block_hash(pallet_revive::evm::U256::from(block.number())) + .await? + .ok_or(ClientError::EthereumBlockNotFound)?; + self.receipt_provider.insert_block_receipts(&block, ðereum_hash).await?; + Ok(()) + }) + .await?; + + log::info!(target: LOG_TARGET, "🗄️ Finished indexing past blocks"); + Ok(()) + } + + /// Get the block hash for the given block number or tag. + pub async fn block_hash_for_tag( + &self, + at: BlockNumberOrTagOrHash, + ) -> Result { + match at { + BlockNumberOrTagOrHash::BlockHash(hash) => self + .resolve_substrate_hash(&hash) + .await + .ok_or(ClientError::EthereumBlockNotFound), + BlockNumberOrTagOrHash::BlockNumber(block_number) => { + let n: SubstrateBlockNumber = + (block_number).try_into().map_err(|_| ClientError::ConversionFailed)?; + let hash = self.get_block_hash(n).await?.ok_or(ClientError::BlockNotFound)?; + Ok(hash) + }, + BlockNumberOrTagOrHash::BlockTag(BlockTag::Finalized | BlockTag::Safe) => { + let block = self.latest_finalized_block().await; + Ok(block.hash()) + }, + BlockNumberOrTagOrHash::BlockTag(_) => { + let block = self.latest_block().await; + Ok(block.hash()) + }, + } + } + + /// Get the storage API for the given block. + pub fn storage_api(&self, block_hash: H256) -> StorageApi { + StorageApi::new(self.api.storage().at(block_hash)) + } + + /// Get the runtime API for the given block. + pub fn runtime_api(&self, block_hash: H256) -> RuntimeApi { + RuntimeApi::new(self.api.runtime_api().at(block_hash)) + } + + /// Get the latest finalized block. + pub async fn latest_finalized_block(&self) -> Arc { + self.block_provider.latest_finalized_block().await + } + + /// Get the latest best block. + pub async fn latest_block(&self) -> Arc { + self.block_provider.latest_block().await + } + + /// Expose the transaction API. + pub async fn submit( + &self, + call: subxt::tx::DefaultPayload, + ) -> Result<(), ClientError> { + let ext = self.api.tx().create_unsigned(&call).map_err(ClientError::from)?; + let hash: H256 = self + .rpc_client + .request("author_submitExtrinsic", rpc_params![to_hex(ext.encoded())]) + .await?; + log::debug!(target: LOG_TARGET, "Submitted transaction with substrate hash: {hash:?}"); + Ok(()) + } + + /// Get an EVM transaction receipt by hash. + pub async fn receipt(&self, tx_hash: &H256) -> Option { + self.receipt_provider.receipt_by_hash(tx_hash).await + } + + /// Get The post dispatch weight associated with this Ethereum transaction hash. + pub async fn post_dispatch_weight(&self, tx_hash: &H256) -> Option { + use crate::subxt_client::system::events::ExtrinsicSuccess; + let ReceiptInfo { block_hash, transaction_index, .. } = self.receipt(tx_hash).await?; + let block_hash = self.resolve_substrate_hash(&block_hash).await?; + let block = self.block_provider.block_by_hash(&block_hash).await.ok()??; + let ext = block.extrinsics().await.ok()?.iter().nth(transaction_index.as_u32() as _)?; + let event = ext.events().await.ok()?.find_first::().ok()??; + Some(event.dispatch_info.weight.0) + } + + pub async fn sync_state( + &self, + ) -> Result, ClientError> { + let client = self.rpc_client.clone(); + let sync_state: sc_rpc::system::SyncState = + client.request("system_syncState", Default::default()).await?; + Ok(sync_state) + } + + /// Get the syncing status of the chain. + pub async fn syncing(&self) -> Result { + let health = self.rpc.system_health().await?; + + let status = if health.is_syncing { + let sync_state = self.sync_state().await?; + SyncingProgress { + current_block: Some(sync_state.current_block.into()), + highest_block: Some(sync_state.highest_block.into()), + starting_block: Some(sync_state.starting_block.into()), + } + .into() + } else { + SyncingStatus::Bool(false) + }; + + Ok(status) + } + + /// Get an EVM transaction receipt by hash. + pub async fn receipt_by_hash_and_index( + &self, + block_hash: &H256, + transaction_index: usize, + ) -> Option { + self.receipt_provider + .receipt_by_block_hash_and_index(block_hash, transaction_index) + .await + } + + pub async fn signed_tx_by_hash(&self, tx_hash: &H256) -> Option { + self.receipt_provider.signed_tx_by_hash(tx_hash).await + } + + /// Get receipts count per block. + pub async fn receipts_count_per_block(&self, block_hash: &SubstrateBlockHash) -> Option { + self.receipt_provider.receipts_count_per_block(block_hash).await + } + + /// Get an EVM transaction receipt by specified Ethereum block hash. + pub async fn receipt_by_ethereum_hash_and_index( + &self, + ethereum_hash: &H256, + transaction_index: usize, + ) -> Option { + // Fallback: use hash as Substrate hash if Ethereum hash cannot be resolved + let substrate_hash = + self.resolve_substrate_hash(ethereum_hash).await.unwrap_or(*ethereum_hash); + self.receipt_by_hash_and_index(&substrate_hash, transaction_index).await + } + + /// Get the system health. + pub async fn system_health(&self) -> Result { + let health = self.rpc.system_health().await?; + Ok(health) + } + + /// Get the block number of the latest block. + pub async fn block_number(&self) -> Result { + let latest_block = self.block_provider.latest_block().await; + Ok(latest_block.number()) + } + + /// Get a block hash for the given block number. + pub async fn get_block_hash( + &self, + block_number: SubstrateBlockNumber, + ) -> Result, ClientError> { + let maybe_block = self.block_provider.block_by_number(block_number).await?; + Ok(maybe_block.map(|block| block.hash())) + } + + /// Get a block for the specified hash or number. + pub async fn block_by_number_or_tag( + &self, + block: &BlockNumberOrTag, + ) -> Result>, ClientError> { + match block { + BlockNumberOrTag::U256(n) => { + let n = (*n).try_into().map_err(|_| ClientError::ConversionFailed)?; + self.block_by_number(n).await + }, + BlockNumberOrTag::BlockTag(BlockTag::Finalized | BlockTag::Safe) => { + let block = self.block_provider.latest_finalized_block().await; + Ok(Some(block)) + }, + BlockNumberOrTag::BlockTag(_) => { + let block = self.block_provider.latest_block().await; + Ok(Some(block)) + }, + } + } + + /// Get a block by hash + pub async fn block_by_hash( + &self, + hash: &SubstrateBlockHash, + ) -> Result>, ClientError> { + self.block_provider.block_by_hash(hash).await + } + + /// Resolve Ethereum block hash to Substrate block hash, then get the block. + /// This method provides the abstraction layer needed by the RPC APIs. + pub async fn resolve_substrate_hash(&self, ethereum_hash: &H256) -> Option { + self.receipt_provider.get_substrate_hash(ethereum_hash).await + } + + /// Resolve Substrate block hash to Ethereum block hash, then get the block. + /// This method provides the abstraction layer needed by the RPC APIs. + pub async fn resolve_ethereum_hash(&self, substrate_hash: &H256) -> Option { + self.receipt_provider.get_ethereum_hash(substrate_hash).await + } + + /// Get a block by Ethereum hash with automatic resolution to Substrate hash. + /// Falls back to treating the hash as a Substrate hash if no mapping exists. + pub async fn block_by_ethereum_hash( + &self, + ethereum_hash: &H256, + ) -> Result>, ClientError> { + // First try to resolve the Ethereum hash to a Substrate hash + if let Some(substrate_hash) = self.resolve_substrate_hash(ethereum_hash).await { + return self.block_by_hash(&substrate_hash).await; + } + + // Fallback: treat the provided hash as a Substrate hash (backward compatibility) + self.block_by_hash(ethereum_hash).await + } + + /// Get a block by number + pub async fn block_by_number( + &self, + block_number: SubstrateBlockNumber, + ) -> Result>, ClientError> { + self.block_provider.block_by_number(block_number).await + } + + async fn tracing_block( + &self, + block_hash: H256, + ) -> Result< + sp_runtime::generic::Block< + sp_runtime::generic::Header, + sp_runtime::OpaqueExtrinsic, + >, + ClientError, + > { + let signed_block: sp_runtime::generic::SignedBlock< + sp_runtime::generic::Block< + sp_runtime::generic::Header, + sp_runtime::OpaqueExtrinsic, + >, + > = self + .rpc_client + .request("chain_getBlock", rpc_params![block_hash]) + .await + .unwrap(); + + Ok(signed_block.block) + } + + /// Get the transaction traces for the given block. + pub async fn trace_block_by_number( + &self, + at: BlockNumberOrTag, + config: TracerType, + ) -> Result, ClientError> { + if self.receipt_provider.is_before_earliest_block(&at) { + return Ok(vec![]); + } + + let block_hash = self.block_hash_for_tag(at.into()).await?; + let block = self.tracing_block(block_hash).await?; + let parent_hash = block.header().parent_hash; + let runtime_api = RuntimeApi::new(self.api.runtime_api().at(parent_hash)); + let traces = runtime_api.trace_block(block, config.clone()).await?; + + let mut hashes = self + .receipt_provider + .block_transaction_hashes(&block_hash) + .await + .ok_or(ClientError::EthExtrinsicNotFound)?; + + let traces = traces.into_iter().filter_map(|(index, trace)| { + Some(TransactionTrace { tx_hash: hashes.remove(&(index as usize))?, trace }) + }); + + Ok(traces.collect()) + } + + /// Get the transaction traces for the given transaction. + pub async fn trace_transaction( + &self, + transaction_hash: H256, + config: TracerType, + ) -> Result { + let (block_hash, transaction_index) = self + .receipt_provider + .find_transaction(&transaction_hash) + .await + .ok_or(ClientError::EthExtrinsicNotFound)?; + + let block = self.tracing_block(block_hash).await?; + let parent_hash = block.header.parent_hash; + let runtime_api = self.runtime_api(parent_hash); + + runtime_api.trace_tx(block, transaction_index as u32, config).await + } + + /// Get the transaction traces for the given block. + pub async fn trace_call( + &self, + transaction: GenericTransaction, + block: BlockNumberOrTagOrHash, + config: TracerType, + ) -> Result { + let block_hash = self.block_hash_for_tag(block).await?; + let runtime_api = self.runtime_api(block_hash); + runtime_api.trace_call(transaction, config).await + } + + /// Get the EVM block for the given Substrate block. + pub async fn evm_block( + &self, + block: Arc, + hydrated_transactions: bool, + ) -> Option { + log::trace!(target: LOG_TARGET, "Get Ethereum block for hash {:?}", block.hash()); + + // This could potentially fail under below circumstances: + // - state has been pruned + // - the block author cannot be obtained from the digest logs (highly unlikely) + // - the node we are targeting has an outdated revive pallet (or ETH block functionality is + // disabled) + match self.runtime_api(block.hash()).eth_block().await { + Ok(mut eth_block) => { + log::trace!(target: LOG_TARGET, "Ethereum block from runtime API hash {:?}", eth_block.hash); + + if hydrated_transactions { + // Hydrate the block. + let tx_infos = self + .receipt_provider + .receipts_from_block(&block) + .await + .unwrap_or_default() + .into_iter() + .map(|(signed_tx, receipt)| TransactionInfo::new(&receipt, signed_tx)) + .collect::>(); + + eth_block.transactions = HashesOrTransactionInfos::TransactionInfos(tx_infos); + } + + Some(eth_block) + }, + Err(err) => { + log::error!(target: LOG_TARGET, "Failed to get Ethereum block for hash {:?}: {err:?}", block.hash()); + None + }, + } + } + + /// Get the chain ID. + pub fn chain_id(&self) -> u64 { + self.chain_id + } + + /// Get the Max Block Weight. + pub fn max_block_weight(&self) -> Weight { + self.max_block_weight + } + + /// Get the block notifier, if automine is enabled or Self::create_block_notifier was called. + pub fn block_notifier(&self) -> Option> { + self.block_notifier.clone() + } + + /// Get the logs matching the given filter. + pub async fn logs(&self, filter: Option) -> Result, ClientError> { + let logs = + self.receipt_provider.logs(filter).await.map_err(ClientError::LogFilterFailed)?; + Ok(logs) + } + + pub async fn fee_history( + &self, + block_count: u32, + latest_block: BlockNumberOrTag, + reward_percentiles: Option>, + ) -> Result { + let Some(latest_block) = self.block_by_number_or_tag(&latest_block).await? else { + return Err(ClientError::BlockNotFound); + }; + + self.fee_history_provider + .fee_history(block_count, latest_block.number(), reward_percentiles) + .await + } + + /// Check if automine is enabled. + pub fn is_automine(&self) -> bool { + self.automine + } + + /// Get the automine status from the node. + pub async fn get_automine(&self) -> bool { + get_automine(&self.rpc_client).await + } +} + +fn to_hex(bytes: impl AsRef<[u8]>) -> String { + format!("0x{}", hex::encode(bytes.as_ref())) +} diff --git a/eth-rpc/src/client/runtime_api.rs b/eth-rpc/src/client/runtime_api.rs new file mode 100644 index 0000000000..e90cbc524c --- /dev/null +++ b/eth-rpc/src/client/runtime_api.rs @@ -0,0 +1,240 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use crate::{ + client::Balance, + subxt_client::{self, SrcChainConfig}, + ClientError, +}; +use futures::TryFutureExt; +use pallet_revive::{ + evm::{ + Block as EthBlock, BlockNumberOrTagOrHash, BlockTag, GenericTransaction, ReceiptGasInfo, + Trace, H160, U256, + }, + DryRunConfig, EthTransactInfo, +}; +use sp_core::H256; +use sp_timestamp::Timestamp; +use subxt::{error::MetadataError, ext::subxt_rpcs::UserError, Error::Metadata, OnlineClient}; + +const LOG_TARGET: &str = "eth-rpc::runtime_api"; + +/// A Wrapper around subxt Runtime API +#[derive(Clone)] +pub struct RuntimeApi(subxt::runtime_api::RuntimeApi>); + +impl RuntimeApi { + /// Create a new instance. + pub fn new( + api: subxt::runtime_api::RuntimeApi>, + ) -> Self { + Self(api) + } + + /// Get the balance of the given address. + pub async fn balance(&self, address: H160) -> Result { + let address = address.0.into(); + let payload = subxt_client::apis().revive_api().balance(address); + let balance = self.0.call(payload).await?; + Ok(*balance) + } + + /// Get the contract storage for the given contract address and key. + pub async fn get_storage( + &self, + contract_address: H160, + key: [u8; 32], + ) -> Result>, ClientError> { + let contract_address = contract_address.0.into(); + let payload = subxt_client::apis().revive_api().get_storage(contract_address, key); + let result = self.0.call(payload).await?.map_err(|_| ClientError::ContractNotFound)?; + Ok(result) + } + + /// Dry run a transaction and returns the [`EthTransactInfo`] for the transaction. + pub async fn dry_run( + &self, + tx: GenericTransaction, + block: BlockNumberOrTagOrHash, + ) -> Result, ClientError> { + let timestamp_override = match block { + BlockNumberOrTagOrHash::BlockTag(BlockTag::Pending) => { + Some(Timestamp::current().as_millis()) + }, + _ => None, + }; + + let payload = subxt_client::apis() + .revive_api() + .eth_transact_with_config( + tx.clone().into(), + DryRunConfig::new(timestamp_override).into(), + ) + .unvalidated(); + + let result = self + .0 + .call(payload) + .or_else(|err| async { + match err { + // This will be hit if subxt metadata (subxt uses the latest finalized block + // metadata when the eth-rpc starts) does not contain the new method + Metadata(MetadataError::RuntimeMethodNotFound(name)) => { + log::debug!(target: LOG_TARGET, "Method {name:?} not found falling back to eth_transact"); + let payload = subxt_client::apis().revive_api().eth_transact(tx.into()); + self.0.call(payload).await + }, + // This will be hit if we are trying to hit a block where the runtime did not + // have this new runtime `eth_transact_with_config` defined + subxt::Error::Rpc(subxt::error::RpcError::ClientError( + subxt::ext::subxt_rpcs::Error::User(UserError { message, .. }), + )) if message.contains("eth_transact_with_config is not found") => { + log::debug!(target: LOG_TARGET, "{message:?} not found falling back to eth_transact"); + let payload = subxt_client::apis().revive_api().eth_transact(tx.into()); + self.0.call(payload).await + }, + e => Err(e), + } + }) + .await?; + + match result { + Err(err) => { + log::debug!(target: LOG_TARGET, "Dry run failed {err:?}"); + Err(ClientError::TransactError(err.0)) + }, + Ok(result) => Ok(result.0), + } + } + + /// Get the nonce of the given address. + pub async fn nonce(&self, address: H160) -> Result { + let address = address.0.into(); + let payload = subxt_client::apis().revive_api().nonce(address); + let nonce = self.0.call(payload).await?; + Ok(nonce.into()) + } + + /// Get the gas price + pub async fn gas_price(&self) -> Result { + let payload = subxt_client::apis().revive_api().gas_price(); + let gas_price = self.0.call(payload).await?; + Ok(*gas_price) + } + + /// Convert a weight to a fee. + pub async fn block_gas_limit(&self) -> Result { + let payload = subxt_client::apis().revive_api().block_gas_limit(); + let gas_limit = self.0.call(payload).await?; + Ok(*gas_limit) + } + + /// Get the miner address + pub async fn block_author(&self) -> Result { + let payload = subxt_client::apis().revive_api().block_author(); + let author = self.0.call(payload).await?; + Ok(author) + } + + /// Get the trace for the given transaction index in the given block. + pub async fn trace_tx( + &self, + block: sp_runtime::generic::Block< + sp_runtime::generic::Header, + sp_runtime::OpaqueExtrinsic, + >, + transaction_index: u32, + tracer_type: crate::TracerType, + ) -> Result { + let payload = subxt_client::apis() + .revive_api() + .trace_tx(block.into(), transaction_index, tracer_type.into()) + .unvalidated(); + + let trace = self.0.call(payload).await?.ok_or(ClientError::EthExtrinsicNotFound)?.0; + Ok(trace) + } + + /// Get the trace for the given block. + pub async fn trace_block( + &self, + block: sp_runtime::generic::Block< + sp_runtime::generic::Header, + sp_runtime::OpaqueExtrinsic, + >, + tracer_type: crate::TracerType, + ) -> Result, ClientError> { + let payload = subxt_client::apis() + .revive_api() + .trace_block(block.into(), tracer_type.into()) + .unvalidated(); + + let traces = self.0.call(payload).await?.into_iter().map(|(idx, t)| (idx, t.0)).collect(); + Ok(traces) + } + + /// Get the trace for the given call. + pub async fn trace_call( + &self, + transaction: GenericTransaction, + tracer_type: crate::TracerType, + ) -> Result { + let payload = subxt_client::apis() + .revive_api() + .trace_call(transaction.into(), tracer_type.into()) + .unvalidated(); + + let trace = self.0.call(payload).await?.map_err(|err| ClientError::TransactError(err.0))?; + Ok(trace.0) + } + + /// Get the code of the given address. + pub async fn code(&self, address: H160) -> Result, ClientError> { + let payload = subxt_client::apis().revive_api().code(address); + let code = self.0.call(payload).await?; + Ok(code) + } + + /// Get the current Ethereum block. + pub async fn eth_block(&self) -> Result { + let payload = subxt_client::apis().revive_api().eth_block(); + let block = self.0.call(payload).await.inspect_err(|err| { + log::debug!(target: LOG_TARGET, "Ethereum block not found, err: {err:?}"); + })?; + Ok(block.0) + } + + /// Get the Ethereum block hash for the given block number. + pub async fn eth_block_hash(&self, number: U256) -> Result, ClientError> { + let payload = subxt_client::apis().revive_api().eth_block_hash(number.into()); + let hash = self.0.call(payload).await.inspect_err(|err| { + log::debug!(target: LOG_TARGET, "Ethereum block hash for block #{number:?} not found, err: {err:?}"); + })?; + Ok(hash) + } + + /// Get the receipt data for the current block. + pub async fn eth_receipt_data(&self) -> Result, ClientError> { + let payload = subxt_client::apis().revive_api().eth_receipt_data(); + let receipt_data = self.0.call(payload).await.inspect_err(|err| { + log::debug!(target: LOG_TARGET, "Receipt data not found, err: {err:?}"); + })?; + let receipt_data = receipt_data.into_iter().map(|item| item.0).collect(); + Ok(receipt_data) + } +} diff --git a/eth-rpc/src/client/storage_api.rs b/eth-rpc/src/client/storage_api.rs new file mode 100644 index 0000000000..d4b27d7162 --- /dev/null +++ b/eth-rpc/src/client/storage_api.rs @@ -0,0 +1,63 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use crate::{ + subxt_client::{ + self, + runtime_types::pallet_revive::storage::{AccountType, ContractInfo}, + SrcChainConfig, + }, + ClientError, H160, +}; +use subxt::{storage::Storage, OnlineClient}; + +/// A wrapper around the Substrate Storage API. +#[derive(Clone)] +pub struct StorageApi(Storage>); + +impl StorageApi { + /// Create a new instance of the StorageApi. + pub fn new(api: Storage>) -> Self { + Self(api) + } + + /// Get the contract info for the given contract address. + pub async fn get_contract_info( + &self, + contract_address: &H160, + ) -> Result { + // TODO: remove once subxt is updated + let contract_address: subxt::utils::H160 = contract_address.0.into(); + + let query = subxt_client::storage().revive().account_info_of(contract_address); + let Some(info) = self.0.fetch(&query).await? else { + return Err(ClientError::ContractNotFound); + }; + + let AccountType::Contract(contract_info) = info.account_type else { + return Err(ClientError::ContractNotFound); + }; + + Ok(contract_info) + } + + /// Get the contract trie id for the given contract address. + pub async fn get_contract_trie_id(&self, address: &H160) -> Result, ClientError> { + let ContractInfo { trie_id, .. } = self.get_contract_info(address).await?; + Ok(trie_id.0) + } +} diff --git a/eth-rpc/src/example.rs b/eth-rpc/src/example.rs new file mode 100644 index 0000000000..ba15c0959c --- /dev/null +++ b/eth-rpc/src/example.rs @@ -0,0 +1,292 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//! Example utilities +use crate::{EthRpcClient, ReceiptInfo}; +use anyhow::Context; +use pallet_revive::evm::*; +use std::sync::Arc; + +/// Transaction type enum for specifying which type of transaction to send +#[derive(Debug, Clone, Copy)] +pub enum TransactionType { + Legacy, + Eip2930, + Eip1559, + Eip4844, +} + +/// Transaction builder. +pub struct TransactionBuilder { + client: Arc, + signer: Account, + value: U256, + input: Bytes, + to: Option, + nonce: Option, + mutate: Box, +} + +#[derive(Debug)] +pub struct SubmittedTransaction { + tx: GenericTransaction, + hash: H256, + client: Arc, +} + +impl SubmittedTransaction { + /// Get the hash of the transaction. + pub fn hash(&self) -> H256 { + self.hash + } + + /// The gas sent with the transaction. + pub fn gas(&self) -> U256 { + self.tx.gas.unwrap() + } + + pub fn generic_transaction(&self) -> GenericTransaction { + self.tx.clone() + } + + /// Wait for the receipt of the transaction. + pub async fn wait_for_receipt(&self) -> anyhow::Result { + let hash = self.hash(); + for _ in 0..30 { + tokio::time::sleep(std::time::Duration::from_secs(2)).await; + let receipt = self.client.get_transaction_receipt(hash).await?; + if let Some(receipt) = receipt { + if receipt.is_success() { + assert!( + self.gas() > receipt.gas_used, + "Gas used {:?} should be less than gas estimated {:?}", + receipt.gas_used, + self.gas() + ); + return Ok(receipt); + } else { + anyhow::bail!("Transaction failed receipt: {receipt:?}") + } + } + } + + anyhow::bail!("Timeout, failed to get receipt") + } +} + +impl TransactionBuilder { + pub fn new(client: Arc) -> Self { + Self { + client, + signer: Account::default(), + value: U256::zero(), + input: Bytes::default(), + to: None, + nonce: None, + mutate: Box::new(|_| {}), + } + } + /// Set the signer. + pub fn signer(mut self, signer: Account) -> Self { + self.signer = signer; + self + } + + /// Set the value. + pub fn value(mut self, value: U256) -> Self { + self.value = value; + self + } + + /// Set the input. + pub fn input(mut self, input: Vec) -> Self { + self.input = Bytes(input); + self + } + + /// Set the destination. + pub fn to(mut self, to: H160) -> Self { + self.to = Some(to); + self + } + + /// Set the nonce. + pub fn nonce(mut self, nonce: U256) -> Self { + self.nonce = Some(nonce); + self + } + + /// Set a mutation function, that mutates the transaction before sending. + pub fn mutate(mut self, mutate: impl FnOnce(&mut TransactionUnsigned) + 'static) -> Self { + self.mutate = Box::new(mutate); + self + } + + /// Call eth_call to get the result of a view function + pub async fn eth_call(self) -> anyhow::Result> { + let TransactionBuilder { client, signer, value, input, to, .. } = self; + + let from = signer.address(); + let result = client + .call( + GenericTransaction { + from: Some(from), + input: input.into(), + value: Some(value), + to, + ..Default::default() + }, + None, + ) + .await + .map_err(|e| anyhow::anyhow!("eth_call failed: {e}"))?; + Ok(result.0) + } + + /// Send the transaction. + pub async fn send(self) -> anyhow::Result> { + self.send_with_type(TransactionType::Legacy).await + } + + /// Send the transaction with a specific transaction type. + pub async fn send_with_type( + self, + tx_type: TransactionType, + ) -> anyhow::Result> { + let TransactionBuilder { client, signer, value, input, to, nonce, mutate } = self; + + let from = signer.address(); + let chain_id = client.chain_id().await?; + let gas_price = client.gas_price().await?; + let nonce = if let Some(nonce) = nonce { + nonce + } else { + client + .get_transaction_count(from, BlockTag::Latest.into()) + .await + .with_context(|| "Failed to fetch account nonce")? + }; + + let gas = client + .estimate_gas( + GenericTransaction { + from: Some(from), + input: input.clone().into(), + value: Some(value), + gas_price: Some(gas_price), + to, + ..Default::default() + }, + None, + ) + .await + .with_context(|| "Failed to fetch gas estimate")?; + + println!("Gas estimate: {gas:?}"); + + let mut unsigned_tx: TransactionUnsigned = match tx_type { + TransactionType::Legacy => TransactionLegacyUnsigned { + gas, + nonce, + to, + value, + input, + gas_price, + chain_id: Some(chain_id), + ..Default::default() + } + .into(), + TransactionType::Eip2930 => Transaction2930Unsigned { + gas, + nonce, + to, + value, + input, + gas_price, + chain_id, + access_list: vec![], + r#type: TypeEip2930, + } + .into(), + TransactionType::Eip1559 => Transaction1559Unsigned { + gas, + nonce, + to, + value, + input, + gas_price, + max_fee_per_gas: gas_price, + max_priority_fee_per_gas: U256::zero(), + chain_id, + access_list: vec![], + r#type: TypeEip1559, + } + .into(), + TransactionType::Eip4844 => { + // For EIP-4844, we need a destination address (cannot be None for blob + // transactions) + let to = to.ok_or_else(|| { + anyhow::anyhow!("EIP-4844 transactions require a destination address") + })?; + let max_priority_fee_per_gas = gas_price / 10; // 10% of gas price as priority fee + Transaction4844Unsigned { + gas, + nonce, + to, + value, + input, + max_fee_per_gas: gas_price, + max_priority_fee_per_gas, + max_fee_per_blob_gas: gas_price, // Use gas_price as blob gas fee + chain_id, + access_list: vec![], + blob_versioned_hashes: vec![], + r#type: TypeEip4844, + } + .into() + }, + }; + mutate(&mut unsigned_tx); + + let signed_tx = signer.sign_transaction(unsigned_tx); + let bytes = signed_tx.signed_payload(); + + let hash = client + .send_raw_transaction(bytes.into()) + .await + .with_context(|| "send_raw_transaction failed")?; + + Ok(SubmittedTransaction { + tx: GenericTransaction::from_signed(signed_tx, gas_price, Some(from)), + hash, + client, + }) + } +} + +#[test] +fn test_dummy_payload_has_correct_len() { + let signer = Account::from(subxt_signer::eth::dev::ethan()); + let unsigned_tx: TransactionUnsigned = + TransactionLegacyUnsigned { input: vec![42u8; 100].into(), ..Default::default() }.into(); + + let signed_tx = signer.sign_transaction(unsigned_tx.clone()); + let signed_payload = signed_tx.signed_payload(); + let unsigned_tx = signed_tx.unsigned(); + + let dummy_payload = unsigned_tx.dummy_signed_payload(); + assert_eq!(dummy_payload.len(), signed_payload.len()); +} diff --git a/eth-rpc/src/fee_history_provider.rs b/eth-rpc/src/fee_history_provider.rs new file mode 100644 index 0000000000..b12f8e1e7d --- /dev/null +++ b/eth-rpc/src/fee_history_provider.rs @@ -0,0 +1,200 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +use crate::{client::SubstrateBlockNumber, ClientError}; +use pallet_revive::evm::{Block, FeeHistoryResult, ReceiptInfo}; +use sp_core::U256; +use std::{collections::BTreeMap, sync::Arc}; +use tokio::sync::RwLock; + +/// The size of the fee history cache. +const CACHE_SIZE: u32 = 1024; + +#[derive(Default, Clone)] +struct FeeHistoryCacheItem { + base_fee: u128, + gas_used_ratio: f64, + rewards: Vec, +} + +/// Manages the fee history cache. +#[derive(Default, Clone)] +pub struct FeeHistoryProvider { + fee_history_cache: Arc>>, +} + +impl FeeHistoryProvider { + /// Update the fee history cache with the given block and receipts. + pub async fn update_fee_history(&self, block: &Block, receipts: &[ReceiptInfo]) { + // Evenly spaced percentile list from 0.0 to 100.0 with a 0.5 resolution. + // This means we cache 200 percentile points. + // Later in request handling we will approximate by rounding percentiles that + // fall in between with `(round(n*2)/2)`. + let reward_percentiles: Vec = (0..=200).map(|i| i as f64 * 0.5).collect(); + let block_number: SubstrateBlockNumber = + block.number.try_into().expect("Block number is always valid"); + + let base_fee = block.base_fee_per_gas.as_u128(); + let gas_used = block.gas_used.as_u128(); + let gas_used_ratio = (gas_used as f64) / (block.gas_limit.as_u128() as f64); + let mut result = FeeHistoryCacheItem { base_fee, gas_used_ratio, rewards: vec![] }; + + let mut receipts = receipts + .iter() + .map(|receipt| { + let gas_used = receipt.gas_used.as_u128(); + let effective_reward = + receipt.effective_gas_price.as_u128().saturating_sub(base_fee); + (gas_used, effective_reward) + }) + .collect::>(); + receipts.sort_by(|(_, a), (_, b)| a.cmp(b)); + + // Calculate percentile rewards. + result.rewards = reward_percentiles + .into_iter() + .filter_map(|p| { + let target_gas = (p * gas_used as f64 / 100f64) as u128; + let mut sum_gas = 0u128; + for (gas_used, reward) in &receipts { + sum_gas += gas_used; + if target_gas <= sum_gas { + return Some(*reward); + } + } + None + }) + .collect(); + + let mut cache = self.fee_history_cache.write().await; + if cache.len() >= CACHE_SIZE as usize { + cache.pop_first(); + } + cache.insert(block_number, result); + } + + /// Get the fee history for the given block range. + pub async fn fee_history( + &self, + block_count: u32, + highest: SubstrateBlockNumber, + reward_percentiles: Option>, + ) -> Result { + let block_count = block_count.min(CACHE_SIZE); + + let cache = self.fee_history_cache.read().await; + let Some(lowest_in_cache) = cache.first_key_value().map(|(k, _)| *k) else { + return Ok(FeeHistoryResult { + oldest_block: U256::zero(), + base_fee_per_gas: vec![], + gas_used_ratio: vec![], + reward: vec![], + }); + }; + + let lowest = highest.saturating_sub(block_count.saturating_sub(1)).max(lowest_in_cache); + + let mut response = FeeHistoryResult { + oldest_block: U256::from(lowest), + base_fee_per_gas: Vec::new(), + gas_used_ratio: Vec::new(), + reward: Default::default(), + }; + + let rewards = &mut response.reward; + // Iterate over the requested block range. + for n in lowest..=highest { + if let Some(block) = cache.get(&n) { + response.base_fee_per_gas.push(U256::from(block.base_fee)); + response.gas_used_ratio.push(block.gas_used_ratio); + // If the request includes reward percentiles, get them from the cache. + if let Some(ref requested_percentiles) = reward_percentiles { + let mut block_rewards = Vec::new(); + // Resolution is half a point. I.e. 1.0,1.5 + let resolution_per_percentile: f64 = 2.0; + // Get cached reward for each provided percentile. + for p in requested_percentiles { + // Find the cache index from the user percentile. + let p = p.clamp(0.0, 100.0); + let index = ((p.round() / 2f64) * 2f64) * resolution_per_percentile; + // Get and push the reward. + let reward = if let Some(r) = block.rewards.get(index as usize) { + U256::from(*r) + } else { + U256::zero() + }; + block_rewards.push(reward); + } + // Push block rewards. + if !block_rewards.is_empty() { + rewards.push(block_rewards); + } + } + } + } + + // Next block base fee, use constant value for now + let base_fee = cache + .last_key_value() + .map(|(_, block)| U256::from(block.base_fee)) + .unwrap_or_default(); + response.base_fee_per_gas.push(base_fee); + Ok(response) + } +} + +#[tokio::test] +async fn test_update_fee_history() { + let block = Block { + number: U256::from(200u64), + base_fee_per_gas: U256::from(1000u64), + gas_used: U256::from(600u64), + gas_limit: U256::from(1200u64), + ..Default::default() + }; + + let receipts = vec![ + ReceiptInfo { + gas_used: U256::from(200u64), + effective_gas_price: U256::from(1200u64), + ..Default::default() + }, + ReceiptInfo { + gas_used: U256::from(200u64), + effective_gas_price: U256::from(1100u64), + ..Default::default() + }, + ReceiptInfo { + gas_used: U256::from(200u64), + effective_gas_price: U256::from(1050u64), + ..Default::default() + }, + ]; + + let provider = FeeHistoryProvider { fee_history_cache: Arc::new(RwLock::new(BTreeMap::new())) }; + provider.update_fee_history(&block, &receipts).await; + + let fee_history_result = + provider.fee_history(1, 200, Some(vec![0.0f64, 50.0, 100.0])).await.unwrap(); + + let expected_result = FeeHistoryResult { + oldest_block: U256::from(200), + base_fee_per_gas: vec![U256::from(1000), U256::from(1000)], + gas_used_ratio: vec![0.5f64], + reward: vec![vec![U256::from(50), U256::from(100), U256::from(200)]], + }; + assert_eq!(fee_history_result, expected_result); +} diff --git a/eth-rpc/src/lib.rs b/eth-rpc/src/lib.rs new file mode 100644 index 0000000000..b59c24484a --- /dev/null +++ b/eth-rpc/src/lib.rs @@ -0,0 +1,512 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//! The [`EthRpcServer`] RPC server implementation +#![cfg_attr(docsrs, feature(doc_cfg))] + +use client::ClientError; +use jsonrpsee::{ + core::{async_trait, RpcResult}, + types::{ErrorCode, ErrorObjectOwned}, +}; +use pallet_revive::evm::*; +use sp_core::{keccak_256, H160, H256, U256}; +use thiserror::Error; +use tokio::time::Duration; + +pub mod cli; +pub mod client; +pub mod example; +pub mod subxt_client; + +#[cfg(test)] +mod tests; + +mod block_info_provider; +pub use block_info_provider::*; + +mod receipt_provider; +pub use receipt_provider::*; + +mod fee_history_provider; +pub use fee_history_provider::*; + +mod receipt_extractor; +pub use receipt_extractor::*; + +mod apis; +pub use apis::*; + +pub const LOG_TARGET: &str = "eth-rpc"; + +/// An EVM RPC server implementation. +pub struct EthRpcServerImpl { + /// The client used to interact with the substrate node. + client: client::Client, + + /// The accounts managed by the server. + accounts: Vec, + + /// Controls if unprotected txs are allowed or not. + allow_unprotected_txs: bool, + + /// When true, estimate_gas uses Pending block if no block is specified. + use_pending_for_estimate_gas: bool, +} + +impl EthRpcServerImpl { + /// Creates a new [`EthRpcServerImpl`]. + pub fn new(client: client::Client) -> Self { + Self { + client, + accounts: vec![], + allow_unprotected_txs: false, + use_pending_for_estimate_gas: false, + } + } + + /// Sets the accounts managed by the server. + pub fn with_accounts(mut self, accounts: Vec) -> Self { + self.accounts = accounts; + self + } + + /// Sets whether unprotected transactions are allowed or not. + pub fn with_allow_unprotected_txs(mut self, allow_unprotected_txs: bool) -> Self { + self.allow_unprotected_txs = allow_unprotected_txs; + self + } + + /// Sets whether estimate_gas uses Pending block when no block is specified. + pub fn with_use_pending_for_estimate_gas(mut self, use_pending_for_estimate_gas: bool) -> Self { + self.use_pending_for_estimate_gas = use_pending_for_estimate_gas; + self + } +} + +/// The error type for the EVM RPC server. +#[derive(Error, Debug)] +pub enum EthRpcError { + /// A [`ClientError`] wrapper error. + #[error("Client error: {0}")] + ClientError(#[from] ClientError), + /// A [`rlp::DecoderError`] wrapper error. + #[error("Decoding error: {0}")] + RlpError(#[from] rlp::DecoderError), + /// A Decimals conversion error. + #[error("Conversion error")] + ConversionError, + /// An invalid signature error. + #[error("Invalid signature")] + InvalidSignature, + /// The account was not found at the given address + #[error("Account not found for address {0:?}")] + AccountNotFound(H160), + /// Received an invalid transaction + #[error("Invalid transaction")] + InvalidTransaction, + /// Received an invalid transaction + #[error("Invalid transaction {0:?}")] + TransactionTypeNotSupported(Byte), +} + +// TODO use https://eips.ethereum.org/EIPS/eip-1474#error-codes +impl From for ErrorObjectOwned { + fn from(value: EthRpcError) -> Self { + match value { + EthRpcError::ClientError(err) => Self::from(err), + _ => Self::owned::(ErrorCode::InvalidRequest.code(), value.to_string(), None), + } + } +} + +#[async_trait] +impl EthRpcServer for EthRpcServerImpl { + async fn net_version(&self) -> RpcResult { + Ok(self.client.chain_id().to_string()) + } + + async fn net_listening(&self) -> RpcResult { + let syncing = self.client.syncing().await?; + let listening = matches!(syncing, SyncingStatus::Bool(false)); + Ok(listening) + } + + async fn syncing(&self) -> RpcResult { + Ok(self.client.syncing().await?) + } + + async fn block_number(&self) -> RpcResult { + let number = self.client.block_number().await?; + Ok(number.into()) + } + + async fn get_transaction_receipt( + &self, + transaction_hash: H256, + ) -> RpcResult> { + let receipt = self.client.receipt(&transaction_hash).await; + Ok(receipt) + } + + async fn estimate_gas( + &self, + transaction: GenericTransaction, + block: Option, + ) -> RpcResult { + log::trace!(target: LOG_TARGET, "estimate_gas transaction={transaction:?} block={block:?}"); + let block = block.unwrap_or_else(|| { + if self.use_pending_for_estimate_gas { + BlockTag::Pending.into() + } else { + Default::default() + } + }); + let hash = self.client.block_hash_for_tag(block.clone().into()).await?; + let runtime_api = self.client.runtime_api(hash); + let dry_run = runtime_api.dry_run(transaction, block.into()).await?; + log::trace!(target: LOG_TARGET, "estimate_gas result={dry_run:?}"); + Ok(dry_run.eth_gas) + } + + async fn call( + &self, + transaction: GenericTransaction, + block: Option, + ) -> RpcResult { + let block = block.unwrap_or_default(); + let hash = self.client.block_hash_for_tag(block.clone()).await?; + let runtime_api = self.client.runtime_api(hash); + let dry_run = runtime_api.dry_run(transaction, block).await?; + Ok(dry_run.data.into()) + } + + async fn send_raw_transaction(&self, transaction: Bytes) -> RpcResult { + let hash = H256(keccak_256(&transaction.0)); + log::trace!(target: LOG_TARGET, "send_raw_transaction transaction: {transaction:?} ethereum_hash: {hash:?}"); + + if !self.allow_unprotected_txs { + let signed_transaction = TransactionSigned::decode(transaction.0.as_slice()) + .map_err(|err| { + log::trace!(target: LOG_TARGET, "Transaction decoding failed. ethereum_hash: {hash:?}, error: {err:?}"); + EthRpcError::InvalidTransaction + })?; + + let is_chain_id_provided = match signed_transaction { + TransactionSigned::Transaction7702Signed(tx) => { + tx.transaction_7702_unsigned.chain_id != U256::zero() + }, + TransactionSigned::Transaction4844Signed(tx) => { + tx.transaction_4844_unsigned.chain_id != U256::zero() + }, + TransactionSigned::Transaction1559Signed(tx) => { + tx.transaction_1559_unsigned.chain_id != U256::zero() + }, + TransactionSigned::Transaction2930Signed(tx) => { + tx.transaction_2930_unsigned.chain_id != U256::zero() + }, + TransactionSigned::TransactionLegacySigned(tx) => { + tx.transaction_legacy_unsigned.chain_id.is_some() + }, + }; + + if !is_chain_id_provided { + log::trace!(target: LOG_TARGET, "Invalid Transaction: transaction doesn't include a chain-id. ethereum_hash: {hash:?}"); + Err(EthRpcError::InvalidTransaction)?; + } + } + + let call = subxt_client::tx().revive().eth_transact(transaction.0); + + // Subscribe to new block only when automine is enabled. + let receiver = self.client.block_notifier().map(|sender| sender.subscribe()); + + // Submit the transaction + self.client.submit(call).await.map_err(|err| { + log::trace!(target: LOG_TARGET, "send_raw_transaction ethereum_hash: {hash:?} failed: {err:?}"); + err + })?; + + log::trace!(target: LOG_TARGET, "send_raw_transaction with hash: {hash:?}"); + + // Wait for the transaction to be included in a block if automine is enabled + if let Some(mut receiver) = receiver { + if let Err(err) = tokio::time::timeout(Duration::from_millis(500), async { + loop { + if let Ok(block_hash) = receiver.recv().await { + let Ok(Some(block)) = self.client.block_by_hash(&block_hash).await else { + log::debug!(target: LOG_TARGET, "Could not find the block with the received hash: {hash:?}."); + continue + }; + let Some(evm_block) = self.client.evm_block(block, false).await else { + log::debug!(target: LOG_TARGET, "Failed to get the EVM block for substrate block with hash: {hash:?}"); + continue + }; + if evm_block.transactions.contains_tx(hash) { + log::debug!(target: LOG_TARGET, "{hash:} was included in a block"); + break; + } + } + } + }) + .await + { + log::debug!(target: LOG_TARGET, "timeout waiting for new block: {err:?}"); + } + } + + log::debug!(target: LOG_TARGET, "send_raw_transaction hash: {hash:?}"); + Ok(hash) + } + + async fn send_transaction(&self, mut transaction: GenericTransaction) -> RpcResult { + log::debug!(target: LOG_TARGET, "{transaction:#?}"); + + let Some(from) = transaction.from else { + log::debug!(target: LOG_TARGET, "Transaction must have a sender"); + return Err(EthRpcError::InvalidTransaction.into()); + }; + + let account = self + .accounts + .iter() + .find(|account| account.address() == from) + .ok_or(EthRpcError::AccountNotFound(from))?; + + if transaction.gas.is_none() { + transaction.gas = Some(self.estimate_gas(transaction.clone(), None).await?); + } + + if transaction.gas_price.is_none() { + transaction.gas_price = Some(self.gas_price().await?); + } + + if transaction.nonce.is_none() { + transaction.nonce = + Some(self.get_transaction_count(from, BlockTag::Latest.into()).await?); + } + + if transaction.chain_id.is_none() { + transaction.chain_id = Some(self.chain_id().await?); + } + + let tx = transaction.try_into_unsigned().map_err(|_| EthRpcError::InvalidTransaction)?; + let payload = account.sign_transaction(tx).signed_payload(); + self.send_raw_transaction(Bytes(payload)).await + } + + async fn get_block_by_hash( + &self, + block_hash: H256, + hydrated_transactions: bool, + ) -> RpcResult> { + let Some(block) = self.client.block_by_ethereum_hash(&block_hash).await? else { + return Ok(None); + }; + let block = self.client.evm_block(block, hydrated_transactions).await; + Ok(block) + } + + async fn get_balance(&self, address: H160, block: BlockNumberOrTagOrHash) -> RpcResult { + let hash = self.client.block_hash_for_tag(block).await?; + let runtime_api = self.client.runtime_api(hash); + let balance = runtime_api.balance(address).await?; + Ok(balance) + } + + async fn chain_id(&self) -> RpcResult { + Ok(self.client.chain_id().into()) + } + + async fn gas_price(&self) -> RpcResult { + let hash = self.client.block_hash_for_tag(BlockTag::Latest.into()).await?; + let runtime_api = self.client.runtime_api(hash); + Ok(runtime_api.gas_price().await?) + } + + async fn max_priority_fee_per_gas(&self) -> RpcResult { + // We do not support tips. Hence the recommended priority fee is + // always zero. The effective gas price will always be the base price. + Ok(Default::default()) + } + + async fn get_code(&self, address: H160, block: BlockNumberOrTagOrHash) -> RpcResult { + let hash = self.client.block_hash_for_tag(block).await?; + let code = self.client.runtime_api(hash).code(address).await?; + Ok(code.into()) + } + + async fn accounts(&self) -> RpcResult> { + Ok(self.accounts.iter().map(|account| account.address()).collect()) + } + + async fn get_block_by_number( + &self, + block_number: BlockNumberOrTag, + hydrated_transactions: bool, + ) -> RpcResult> { + let Some(block) = self.client.block_by_number_or_tag(&block_number).await? else { + return Ok(None); + }; + let block = self.client.evm_block(block, hydrated_transactions).await; + Ok(block) + } + + async fn get_block_transaction_count_by_hash( + &self, + block_hash: Option, + ) -> RpcResult> { + let block_hash = if let Some(block_hash) = block_hash { + block_hash + } else { + self.client.latest_block().await.hash() + }; + + let Some(substrate_hash) = self.client.resolve_substrate_hash(&block_hash).await else { + return Ok(None); + }; + + Ok(self.client.receipts_count_per_block(&substrate_hash).await.map(U256::from)) + } + + async fn get_block_transaction_count_by_number( + &self, + block: Option, + ) -> RpcResult> { + let substrate_hash = if let Some(block) = self + .client + .block_by_number_or_tag(&block.unwrap_or_else(|| BlockTag::Latest.into())) + .await? + { + block.hash() + } else { + return Ok(None); + }; + + Ok(self.client.receipts_count_per_block(&substrate_hash).await.map(U256::from)) + } + + async fn get_logs(&self, filter: Option) -> RpcResult { + let logs = self.client.logs(filter).await?; + Ok(FilterResults::Logs(logs)) + } + + async fn get_storage_at( + &self, + address: H160, + storage_slot: U256, + block: BlockNumberOrTagOrHash, + ) -> RpcResult { + let hash = self.client.block_hash_for_tag(block).await?; + let runtime_api = self.client.runtime_api(hash); + let bytes = runtime_api.get_storage(address, storage_slot.to_big_endian()).await?; + Ok(bytes.unwrap_or([0u8; 32].into()).into()) + } + + async fn get_transaction_by_block_hash_and_index( + &self, + block_hash: H256, + transaction_index: U256, + ) -> RpcResult> { + let Some(substrate_block_hash) = self.client.resolve_substrate_hash(&block_hash).await + else { + return Ok(None); + }; + self.get_transaction_by_substrate_block_hash_and_index( + substrate_block_hash, + transaction_index, + ) + .await + } + + async fn get_transaction_by_block_number_and_index( + &self, + block: BlockNumberOrTag, + transaction_index: U256, + ) -> RpcResult> { + let Some(block) = self.client.block_by_number_or_tag(&block).await? else { + return Ok(None); + }; + self.get_transaction_by_substrate_block_hash_and_index(block.hash(), transaction_index) + .await + } + + async fn get_transaction_by_hash( + &self, + transaction_hash: H256, + ) -> RpcResult> { + let receipt = self.client.receipt(&transaction_hash).await; + let signed_tx = self.client.signed_tx_by_hash(&transaction_hash).await; + if let (Some(receipt), Some(signed_tx)) = (receipt, signed_tx) { + return Ok(Some(TransactionInfo::new(&receipt, signed_tx))); + } + + Ok(None) + } + + async fn get_transaction_count( + &self, + address: H160, + block: BlockNumberOrTagOrHash, + ) -> RpcResult { + let hash = self.client.block_hash_for_tag(block).await?; + let runtime_api = self.client.runtime_api(hash); + let nonce = runtime_api.nonce(address).await?; + Ok(nonce) + } + + async fn web3_client_version(&self) -> RpcResult { + let git_revision = env!("GIT_REVISION"); + let rustc_version = env!("RUSTC_VERSION"); + let target = env!("TARGET"); + Ok(format!("eth-rpc/{git_revision}/{target}/{rustc_version}")) + } + + async fn fee_history( + &self, + block_count: U256, + newest_block: BlockNumberOrTag, + reward_percentiles: Option>, + ) -> RpcResult { + let block_count: u32 = block_count.try_into().map_err(|_| EthRpcError::ConversionError)?; + let result = self.client.fee_history(block_count, newest_block, reward_percentiles).await?; + Ok(result) + } +} + +impl EthRpcServerImpl { + async fn get_transaction_by_substrate_block_hash_and_index( + &self, + substrate_block_hash: H256, + transaction_index: U256, + ) -> RpcResult> { + let Some(receipt) = self + .client + .receipt_by_hash_and_index( + &substrate_block_hash, + transaction_index.try_into().map_err(|_| EthRpcError::ConversionError)?, + ) + .await + else { + return Ok(None); + }; + let Some(signed_tx) = self.client.signed_tx_by_hash(&receipt.transaction_hash).await else { + return Ok(None); + }; + + Ok(Some(TransactionInfo::new(&receipt, signed_tx))) + } +} diff --git a/eth-rpc/src/main.rs b/eth-rpc/src/main.rs new file mode 100644 index 0000000000..3376b9b10b --- /dev/null +++ b/eth-rpc/src/main.rs @@ -0,0 +1,24 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//! The Ethereum JSON-RPC server. +use clap::Parser; +use pallet_revive_eth_rpc::cli; + +fn main() -> anyhow::Result<()> { + let cmd = cli::CliCommand::parse(); + cli::run(cmd) +} diff --git a/eth-rpc/src/receipt_extractor.rs b/eth-rpc/src/receipt_extractor.rs new file mode 100644 index 0000000000..7bece956c7 --- /dev/null +++ b/eth-rpc/src/receipt_extractor.rs @@ -0,0 +1,355 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +use crate::{ + client::{runtime_api::RuntimeApi, SubstrateBlock, SubstrateBlockNumber}, + subxt_client::{ + revive::{ + calls::types::EthTransact, + events::{ContractEmitted, EthExtrinsicRevert}, + }, + SrcChainConfig, + }, + ClientError, H160, LOG_TARGET, +}; + +use futures::{stream, StreamExt}; +use pallet_revive::{ + create1, + evm::{GenericTransaction, Log, ReceiptGasInfo, ReceiptInfo, TransactionSigned, H256, U256}, +}; +use sp_core::keccak_256; +use std::{future::Future, pin::Pin, sync::Arc}; +use subxt::{blocks::ExtrinsicDetails, OnlineClient}; + +type FetchReceiptDataFn = Arc< + dyn Fn(H256) -> Pin>> + Send>> + Send + Sync, +>; + +type FetchEthBlockHashFn = + Arc Pin> + Send>> + Send + Sync>; + +type RecoverEthAddressFn = Arc Result + Send + Sync>; + +/// Utility to extract receipts from extrinsics. +#[derive(Clone)] +pub struct ReceiptExtractor { + /// Fetch the receipt data info. + fetch_receipt_data: FetchReceiptDataFn, + + /// Fetch ethereum block hash. + fetch_eth_block_hash: FetchEthBlockHashFn, + + /// Earliest block number to consider when searching for transaction receipts. + earliest_receipt_block: Option, + + /// Recover the ethereum address from a transaction signature. + recover_eth_address: RecoverEthAddressFn, +} + +impl ReceiptExtractor { + /// Check if the block is before the earliest block. + pub fn is_before_earliest_block(&self, block_number: SubstrateBlockNumber) -> bool { + block_number < self.earliest_receipt_block.unwrap_or_default() + } + + /// Create a new `ReceiptExtractor` with the given native to eth ratio. + pub async fn new( + api: OnlineClient, + earliest_receipt_block: Option, + ) -> Result { + Self::new_with_custom_address_recovery( + api, + earliest_receipt_block, + Arc::new(|signed_tx: &TransactionSigned| signed_tx.recover_eth_address()), + ) + .await + } + + /// Create a new `ReceiptExtractor` with the given native to eth ratio. + /// + /// Specify also a custom Ethereum address recovery logic. + /// Use `ReceiptExtractor::new` if the default Ethereum address recovery + /// logic ([`TransactionSigned::recover_eth_address`] based) is enough. + pub async fn new_with_custom_address_recovery( + api: OnlineClient, + earliest_receipt_block: Option, + recover_eth_address_fn: RecoverEthAddressFn, + ) -> Result { + let api_inner = api.clone(); + let fetch_eth_block_hash = Arc::new(move |block_hash, block_number| { + let api_inner = api_inner.clone(); + + let fut = async move { + let runtime_api = RuntimeApi::new(api_inner.runtime_api().at(block_hash)); + runtime_api.eth_block_hash(U256::from(block_number)).await.ok().flatten() + }; + + Box::pin(fut) as Pin> + }); + + let api_inner = api.clone(); + let fetch_receipt_data = Arc::new(move |block_hash| { + let api_inner = api_inner.clone(); + + let fut = async move { + let runtime_api = RuntimeApi::new(api_inner.runtime_api().at(block_hash)); + runtime_api.eth_receipt_data().await.ok() + }; + + Box::pin(fut) as Pin> + }); + + Ok(Self { + fetch_receipt_data, + fetch_eth_block_hash, + earliest_receipt_block, + recover_eth_address: recover_eth_address_fn, + }) + } + + #[cfg(test)] + pub fn new_mock() -> Self { + let fetch_receipt_data = Arc::new(|_| Box::pin(std::future::ready(None)) as Pin>); + // This method is useful when testing eth - substrate mapping. + let fetch_eth_block_hash = Arc::new(|block_hash: H256, block_number: u64| { + // Generate hash from substrate block hash and number + let bytes: Vec = [block_hash.as_bytes(), &block_number.to_be_bytes()].concat(); + let eth_block_hash = H256::from(keccak_256(&bytes)); + Box::pin(std::future::ready(Some(eth_block_hash))) as Pin> + }); + + Self { + fetch_receipt_data, + fetch_eth_block_hash, + earliest_receipt_block: None, + recover_eth_address: Arc::new(|signed_tx: &TransactionSigned| { + signed_tx.recover_eth_address() + }), + } + } + + /// Extract a [`TransactionSigned`] and a [`ReceiptInfo`] from an extrinsic. + async fn extract_from_extrinsic( + &self, + substrate_block: &SubstrateBlock, + eth_block_hash: H256, + ext: subxt::blocks::ExtrinsicDetails>, + call: EthTransact, + receipt_gas_info: ReceiptGasInfo, + transaction_index: usize, + ) -> Result<(TransactionSigned, ReceiptInfo), ClientError> { + let events = ext.events().await?; + let block_number: U256 = substrate_block.number().into(); + + let success = !events.has::().inspect_err(|err| { + log::debug!( + target: LOG_TARGET, + "Failed to lookup for EthExtrinsicRevert event in block {block_number}: {err:?}" + ); + })?; + + let transaction_hash = H256(keccak_256(&call.payload)); + + let signed_tx = + TransactionSigned::decode(&call.payload).map_err(|_| ClientError::TxDecodingFailed)?; + let from = (self.recover_eth_address)(&signed_tx).map_err(|_| { + log::error!(target: LOG_TARGET, "Failed to recover eth address from signed tx"); + ClientError::RecoverEthAddressFailed + })?; + + let tx_info = GenericTransaction::from_signed( + signed_tx.clone(), + receipt_gas_info.effective_gas_price, + Some(from), + ); + + // get logs from ContractEmitted event + let logs = events + .iter() + .filter_map(|event_details| { + let event_details = event_details.ok()?; + let event = event_details.as_event::().ok()??; + + Some(Log { + address: event.contract, + topics: event.topics, + data: Some(event.data.into()), + block_number, + transaction_hash, + transaction_index: transaction_index.into(), + block_hash: eth_block_hash, + log_index: event_details.index().into(), + ..Default::default() + }) + }) + .collect(); + + let contract_address = if tx_info.to.is_none() { + Some(create1( + &from, + tx_info + .nonce + .unwrap_or_default() + .try_into() + .map_err(|_| ClientError::ConversionFailed)?, + )) + } else { + None + }; + + let receipt = ReceiptInfo::new( + eth_block_hash, + block_number, + contract_address, + from, + logs, + tx_info.to, + receipt_gas_info.effective_gas_price, + U256::from(receipt_gas_info.gas_used), + success, + transaction_hash, + transaction_index.into(), + tx_info.r#type.unwrap_or_default(), + ); + Ok((signed_tx, receipt)) + } + + /// Extract receipts from block. + pub async fn extract_from_block( + &self, + block: &SubstrateBlock, + ) -> Result, ClientError> { + if self.is_before_earliest_block(block.number()) { + return Ok(vec![]); + } + + let ext_iter = self.get_block_extrinsics(block).await?; + + let substrate_block_number = block.number() as u64; + let substrate_block_hash = block.hash(); + let eth_block_hash = + (self.fetch_eth_block_hash)(substrate_block_hash, substrate_block_number) + .await + .unwrap_or(substrate_block_hash); + + // Process extrinsics in order while maintaining parallelism within buffer window + stream::iter(ext_iter) + .map(|(ext, call, receipt, ext_idx)| async move { + self.extract_from_extrinsic(block, eth_block_hash, ext, call, receipt, ext_idx) + .await + .inspect_err(|err| { + log::warn!(target: LOG_TARGET, "Error extracting extrinsic: {err:?}"); + }) + }) + .buffered(10) + .collect::>>() + .await + .into_iter() + .collect::, _>>() + } + + /// Return the ETH extrinsics of the block grouped with reconstruction receipt info and + /// extrinsic index + pub async fn get_block_extrinsics( + &self, + block: &SubstrateBlock, + ) -> Result< + impl Iterator< + Item = ( + ExtrinsicDetails>, + EthTransact, + ReceiptGasInfo, + usize, + ), + >, + ClientError, + > { + // Filter extrinsics from pallet_revive + let extrinsics = block.extrinsics().await.inspect_err(|err| { + log::debug!(target: LOG_TARGET, "Error fetching for #{:?} extrinsics: {err:?}", block.number()); + })?; + + let receipt_data = (self.fetch_receipt_data)(block.hash()) + .await + .ok_or(ClientError::ReceiptDataNotFound)?; + let extrinsics: Vec<_> = extrinsics + .iter() + .enumerate() + .flat_map(|(ext_idx, ext)| { + let call = ext.as_extrinsic::().ok()??; + Some((ext, call, ext_idx)) + }) + .collect(); + + // Sanity check we received enough data from the pallet revive. + if receipt_data.len() != extrinsics.len() { + log::error!( + target: LOG_TARGET, + "Receipt data length ({}) does not match extrinsics length ({})", + receipt_data.len(), + extrinsics.len() + ); + Err(ClientError::ReceiptDataLengthMismatch) + } else { + Ok(extrinsics + .into_iter() + .zip(receipt_data) + .map(|((extr, call, ext_idx), rec)| (extr, call, rec, ext_idx))) + } + } + + /// Extract a [`TransactionSigned`] and a [`ReceiptInfo`] for a specific transaction in a + /// [`SubstrateBlock`] + pub async fn extract_from_transaction( + &self, + block: &SubstrateBlock, + transaction_index: usize, + ) -> Result<(TransactionSigned, ReceiptInfo), ClientError> { + let ext_iter = self.get_block_extrinsics(block).await?; + + let (ext, eth_call, receipt_gas_info, _) = ext_iter + .into_iter() + .find(|(_, _, _, ext_idx)| *ext_idx == transaction_index) + .ok_or(ClientError::EthExtrinsicNotFound)?; + + let substrate_block_number = block.number() as u64; + let substrate_block_hash = block.hash(); + let eth_block_hash = + (self.fetch_eth_block_hash)(substrate_block_hash, substrate_block_number) + .await + .unwrap_or(substrate_block_hash); + + self.extract_from_extrinsic( + block, + eth_block_hash, + ext, + eth_call, + receipt_gas_info, + transaction_index, + ) + .await + } + + /// Get the Ethereum block hash for the Substrate block with specific hash. + pub async fn get_ethereum_block_hash( + &self, + block_hash: &H256, + block_number: u64, + ) -> Option { + (self.fetch_eth_block_hash)(*block_hash, block_number).await + } +} diff --git a/eth-rpc/src/receipt_provider.rs b/eth-rpc/src/receipt_provider.rs new file mode 100644 index 0000000000..ff55adb05b --- /dev/null +++ b/eth-rpc/src/receipt_provider.rs @@ -0,0 +1,1140 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +use crate::{ + client::{SubstrateBlock, SubstrateBlockNumber}, + Address, AddressOrAddresses, BlockInfoProvider, BlockNumberOrTag, BlockTag, Bytes, ClientError, + FilterTopic, ReceiptExtractor, SubxtBlockInfoProvider, +}; +use pallet_revive::evm::{Filter, Log, ReceiptInfo, TransactionSigned}; +use sp_core::{H256, U256}; +use sqlx::{query, QueryBuilder, Row, Sqlite, SqlitePool}; +use std::{ + collections::{BTreeMap, HashMap}, + sync::Arc, +}; +use tokio::sync::Mutex; + +const LOG_TARGET: &str = "eth-rpc::receipt_provider"; + +/// ReceiptProvider stores transaction receipts and logs in a SQLite database. +#[derive(Clone)] +pub struct ReceiptProvider { + /// The database pool. + pool: SqlitePool, + /// The block provider used to fetch blocks, and reconstruct receipts. + block_provider: B, + /// A means to extract receipts from extrinsics. + receipt_extractor: ReceiptExtractor, + /// When `Some`, old blocks will be pruned. + keep_latest_n_blocks: Option, + /// A Map of the latest block numbers to block hashes. + block_number_to_hashes: Arc>>, +} + +/// Substrate block to Ethereum block mapping +#[derive(Clone, Debug, PartialEq, Eq)] +struct BlockHashMap { + substrate_hash: H256, + ethereum_hash: H256, +} + +impl BlockHashMap { + fn new(substrate_hash: H256, ethereum_hash: H256) -> Self { + Self { substrate_hash, ethereum_hash } + } +} + +/// Provides information about a block, +/// This is an abstratction on top of [`SubstrateBlock`] that can't be mocked in tests. +/// Can be removed once is fixed. +pub trait BlockInfo { + /// Returns the block hash. + fn hash(&self) -> H256; + /// Returns the block number. + fn number(&self) -> SubstrateBlockNumber; +} + +impl BlockInfo for SubstrateBlock { + fn hash(&self) -> H256 { + SubstrateBlock::hash(self) + } + fn number(&self) -> SubstrateBlockNumber { + SubstrateBlock::number(self) + } +} + +impl ReceiptProvider { + /// Create a new `ReceiptProvider` with the given database URL and block provider. + pub async fn new( + pool: SqlitePool, + block_provider: B, + receipt_extractor: ReceiptExtractor, + keep_latest_n_blocks: Option, + ) -> Result { + sqlx::migrate!().run(&pool).await?; + Ok(Self { + pool, + block_provider, + receipt_extractor, + keep_latest_n_blocks, + block_number_to_hashes: Default::default(), + }) + } + + // Get block hash and transaction index by transaction hash + pub async fn find_transaction(&self, transaction_hash: &H256) -> Option<(H256, usize)> { + let transaction_hash = transaction_hash.as_ref(); + let result = query!( + r#" + SELECT block_hash, transaction_index + FROM transaction_hashes + WHERE transaction_hash = $1 + "#, + transaction_hash + ) + .fetch_optional(&self.pool) + .await + .ok()??; + + let block_hash = H256::from_slice(&result.block_hash[..]); + let transaction_index = result.transaction_index.try_into().ok()?; + Some((block_hash, transaction_index)) + } + + /// Insert a block mapping from Ethereum block hash to Substrate block hash. + async fn insert_block_mapping(&self, block_map: &BlockHashMap) -> Result<(), ClientError> { + let ethereum_hash_ref = block_map.ethereum_hash.as_ref(); + let substrate_hash_ref = block_map.substrate_hash.as_ref(); + + query!( + r#" + INSERT OR REPLACE INTO eth_to_substrate_blocks (ethereum_block_hash, substrate_block_hash) + VALUES ($1, $2) + "#, + ethereum_hash_ref, + substrate_hash_ref, + ) + .execute(&self.pool) + .await?; + + log::trace!(target: LOG_TARGET, "Insert block mapping ethereum block: {:?} -> substrate block: {:?}", block_map.ethereum_hash, block_map.substrate_hash); + Ok(()) + } + + /// Get the Substrate block hash for the given Ethereum block hash. + pub async fn get_substrate_hash(&self, ethereum_block_hash: &H256) -> Option { + let ethereum_hash = ethereum_block_hash.as_ref(); + let result = query!( + r#" + SELECT substrate_block_hash + FROM eth_to_substrate_blocks + WHERE ethereum_block_hash = $1 + "#, + ethereum_hash + ) + .fetch_optional(&self.pool) + .await + .inspect_err(|e| { + log::error!(target: LOG_TARGET, "failed to get block mapping for ethereum block {ethereum_block_hash:?}, err: {e:?}"); + }) + .ok()? + .or_else(||{ + log::trace!(target: LOG_TARGET, "No block mapping found for ethereum block: {ethereum_block_hash:?}"); + None + })?; + + log::trace!(target: LOG_TARGET, "Get block mapping ethereum block: {:?} -> substrate block: {ethereum_block_hash:?}", H256::from_slice(&result.substrate_block_hash[..])); + + Some(H256::from_slice(&result.substrate_block_hash[..])) + } + + /// Get the Ethereum block hash for the given Substrate block hash. + pub async fn get_ethereum_hash(&self, substrate_block_hash: &H256) -> Option { + let substrate_hash = substrate_block_hash.as_ref(); + let result = query!( + r#" + SELECT ethereum_block_hash + FROM eth_to_substrate_blocks + WHERE substrate_block_hash = $1 + "#, + substrate_hash + ) + .fetch_optional(&self.pool) + .await + .inspect_err(|e| { + log::error!(target: LOG_TARGET, "failed to get block mapping for substrate block {substrate_block_hash:?}, err: {e:?}"); + }) + .ok()? + .or_else(||{ + log::trace!(target: LOG_TARGET, "No block mapping found for substrate block: {substrate_block_hash:?}"); + None + })?; + + log::trace!(target: LOG_TARGET, "Get block mapping substrate block: {substrate_block_hash:?} -> ethereum block: {:?}", H256::from_slice(&result.ethereum_block_hash[..])); + + Some(H256::from_slice(&result.ethereum_block_hash[..])) + } + + /// Deletes older records from the database. + async fn remove(&self, block_mappings: &[BlockHashMap]) -> Result<(), ClientError> { + if block_mappings.is_empty() { + return Ok(()); + } + log::debug!(target: LOG_TARGET, "Removing block hashes: {block_mappings:?}"); + + let placeholders = vec!["?"; block_mappings.len()].join(", "); + let sql = format!("DELETE FROM transaction_hashes WHERE block_hash in ({placeholders})"); + + let mut delete_tx_query = sqlx::query(&sql); + let sql = format!( + "DELETE FROM eth_to_substrate_blocks WHERE substrate_block_hash in ({placeholders})" + ); + let mut delete_mappings_query = sqlx::query(&sql); + + let sql = format!("DELETE FROM logs WHERE block_hash in ({placeholders})"); + let mut delete_logs_query = sqlx::query(&sql); + + for block_map in block_mappings { + delete_tx_query = delete_tx_query.bind(block_map.substrate_hash.as_ref()); + delete_mappings_query = delete_mappings_query.bind(block_map.substrate_hash.as_ref()); + // logs table uses ethereum block hash + delete_logs_query = delete_logs_query.bind(block_map.ethereum_hash.as_ref()); + } + + let delete_transaction_hashes = delete_tx_query.execute(&self.pool); + let delete_logs = delete_logs_query.execute(&self.pool); + let delete_mappings = delete_mappings_query.execute(&self.pool); + tokio::try_join!(delete_transaction_hashes, delete_logs, delete_mappings)?; + Ok(()) + } + + /// Check if the block is before the earliest block. + pub fn is_before_earliest_block(&self, at: &BlockNumberOrTag) -> bool { + match at { + BlockNumberOrTag::U256(block_number) => { + self.receipt_extractor.is_before_earliest_block(block_number.as_u32()) + }, + BlockNumberOrTag::BlockTag(_) => false, + } + } + + /// Fetch receipts from the given block. + pub async fn receipts_from_block( + &self, + block: &SubstrateBlock, + ) -> Result, ClientError> { + self.receipt_extractor.extract_from_block(block).await + } + + /// Extract and insert receipts from the given block. + pub async fn insert_block_receipts( + &self, + block: &SubstrateBlock, + ethereum_hash: &H256, + ) -> Result, ClientError> { + let receipts = self.receipts_from_block(block).await?; + self.insert(block, &receipts, ethereum_hash).await?; + Ok(receipts) + } + + /// Prune blocks older blocks. + async fn prune_blocks( + &self, + block_number: SubstrateBlockNumber, + block_map: &BlockHashMap, + ) -> Result<(), ClientError> { + let mut to_remove = Vec::new(); + let mut block_number_to_hash = self.block_number_to_hashes.lock().await; + + // Fork? - If inserting the same block number with a different hash, remove the old ones. + match block_number_to_hash.insert(block_number, block_map.clone()) { + Some(old_block_map) if &old_block_map != block_map => { + to_remove.push(old_block_map); + + // Now loop through the blocks that were building on top of the old fork and remove + // them. + let mut next_block_number = block_number.saturating_add(1); + while let Some(old_block_map) = block_number_to_hash.remove(&next_block_number) { + to_remove.push(old_block_map); + next_block_number = next_block_number.saturating_add(1); + } + }, + _ => {}, + } + + if let Some(keep_latest_n_blocks) = self.keep_latest_n_blocks { + // If we have more blocks than we should keep, remove the oldest ones by count + // (not by block number range, to handle gaps correctly) + while block_number_to_hash.len() > keep_latest_n_blocks { + // Remove the block with the smallest number (first in BTreeMap) + if let Some((_, block_map)) = block_number_to_hash.pop_first() { + to_remove.push(block_map); + } + } + } + + // Release the lock. + drop(block_number_to_hash); + + if !to_remove.is_empty() { + log::trace!(target: LOG_TARGET, "Pruning old blocks: {to_remove:?}"); + self.remove(&to_remove).await?; + } + + Ok(()) + } + + /// Insert receipts into the provider. + /// + /// Note: Can be merged into `insert_block_receipts` once is fixed and subxt let + /// us create Mock `SubstrateBlock` + async fn insert( + &self, + block: &impl BlockInfo, + receipts: &[(TransactionSigned, ReceiptInfo)], + ethereum_hash: &H256, + ) -> Result<(), ClientError> { + let substrate_block_hash = block.hash(); + let substrate_hash_ref = substrate_block_hash.as_ref(); + let block_number = block.number() as i64; + let ethereum_hash_ref = ethereum_hash.as_ref(); + let block_map = BlockHashMap::new(substrate_block_hash, *ethereum_hash); + + log::trace!(target: LOG_TARGET, "Insert receipts for substrate block #{block_number} {:?}", substrate_block_hash); + + self.prune_blocks(block.number(), &block_map).await?; + + // Check if mapping already exists (eg. added when processing best block and we are now + // processing finalized block) + let result = sqlx::query!( + r#"SELECT EXISTS(SELECT 1 FROM eth_to_substrate_blocks WHERE substrate_block_hash = $1) AS "exists!:bool""#, substrate_hash_ref + ) + .fetch_one(&self.pool) + .await?; + + // Assuming that if no mapping exists then no relevant entries in transaction_hashes and + // logs exist + if !result.exists { + for (_, receipt) in receipts { + let transaction_hash: &[u8] = receipt.transaction_hash.as_ref(); + let transaction_index = receipt.transaction_index.as_u32() as i32; + + query!( + r#" + INSERT OR REPLACE INTO transaction_hashes (transaction_hash, block_hash, transaction_index) + VALUES ($1, $2, $3) + "#, + transaction_hash, + substrate_hash_ref, + transaction_index + ) + .execute(&self.pool) + .await?; + + for log in &receipt.logs { + let log_index = log.log_index.as_u32() as i32; + let address: &[u8] = log.address.as_ref(); + + let topic_0 = log.topics.first().as_ref().map(|v| &v[..]); + let topic_1 = log.topics.get(1).as_ref().map(|v| &v[..]); + let topic_2 = log.topics.get(2).as_ref().map(|v| &v[..]); + let topic_3 = log.topics.get(3).as_ref().map(|v| &v[..]); + let data = log.data.as_ref().map(|v| &v.0[..]); + + query!( + r#" + INSERT INTO logs( + block_hash, + transaction_index, + log_index, + address, + block_number, + transaction_hash, + topic_0, topic_1, topic_2, topic_3, + data) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) + "#, + ethereum_hash_ref, + transaction_index, + log_index, + address, + block_number, + transaction_hash, + topic_0, + topic_1, + topic_2, + topic_3, + data + ) + .execute(&self.pool) + .await?; + } + } + // Insert block mapping from Ethereum to Substrate hash + self.insert_block_mapping(&block_map).await?; + } + + Ok(()) + } + + /// Get logs that match the given filter. + pub async fn logs(&self, filter: Option) -> anyhow::Result> { + let mut qb = QueryBuilder::::new("SELECT logs.* FROM logs WHERE 1=1"); + let filter = filter.unwrap_or_default(); + + let latest_block = U256::from(self.block_provider.latest_block_number().await); + + let as_block_number = |block_param| match block_param { + None => Ok(None), + Some(BlockNumberOrTag::U256(v)) => Ok(Some(v)), + Some(BlockNumberOrTag::BlockTag(BlockTag::Latest)) => Ok(Some(latest_block)), + Some(BlockNumberOrTag::BlockTag(tag)) => anyhow::bail!("Unsupported tag: {tag:?}"), + }; + + let from_block = as_block_number(filter.from_block)?; + let to_block = as_block_number(filter.to_block)?; + + match (from_block, to_block, filter.block_hash) { + (Some(_), _, Some(_)) | (_, Some(_), Some(_)) => { + anyhow::bail!("block number and block hash cannot be used together"); + }, + + (Some(block), _, _) | (_, Some(block), _) if block > latest_block => { + anyhow::bail!("block number exceeds latest block"); + }, + (Some(from_block), Some(to_block), None) if from_block > to_block => { + anyhow::bail!("invalid block range params"); + }, + (Some(from_block), Some(to_block), None) if from_block == to_block => { + qb.push(" AND block_number = ").push_bind(from_block.as_u64() as i64); + }, + (Some(from_block), Some(to_block), None) => { + qb.push(" AND block_number BETWEEN ") + .push_bind(from_block.as_u64() as i64) + .push(" AND ") + .push_bind(to_block.as_u64() as i64); + }, + (Some(from_block), None, None) => { + qb.push(" AND block_number >= ").push_bind(from_block.as_u64() as i64); + }, + (None, Some(to_block), None) => { + qb.push(" AND block_number <= ").push_bind(to_block.as_u64() as i64); + }, + (None, None, Some(hash)) => { + qb.push(" AND block_hash = ").push_bind(hash.0.to_vec()); + }, + (None, None, None) => { + qb.push(" AND block_number = ").push_bind(latest_block.as_u64() as i64); + }, + } + + if let Some(addresses) = filter.address { + match addresses { + AddressOrAddresses::Address(addr) => { + qb.push(" AND address = ").push_bind(addr.0.to_vec()); + }, + AddressOrAddresses::Addresses(addrs) => { + qb.push(" AND address IN ("); + let mut separated = qb.separated(", "); + for addr in addrs { + separated.push_bind(addr.0.to_vec()); + } + separated.push_unseparated(")"); + }, + } + } + + if let Some(topics) = filter.topics { + if topics.len() > 4 { + return Err(anyhow::anyhow!("exceed max topics")); + } + + for (i, topic) in topics.into_iter().enumerate() { + match topic { + FilterTopic::Single(hash) => { + qb.push(format_args!(" AND topic_{i} = ")).push_bind(hash.0.to_vec()); + }, + FilterTopic::Multiple(hashes) => { + qb.push(format_args!(" AND topic_{i} IN (")); + let mut separated = qb.separated(", "); + for hash in hashes { + separated.push_bind(hash.0.to_vec()); + } + separated.push_unseparated(")"); + }, + } + } + } + + qb.push(" LIMIT 10000"); + + let logs = qb + .build() + .try_map(|row| { + let block_hash: Vec = row.try_get("block_hash")?; + let transaction_index: i64 = row.try_get("transaction_index")?; + let log_index: i64 = row.try_get("log_index")?; + let address: Vec = row.try_get("address")?; + let block_number: i64 = row.try_get("block_number")?; + let transaction_hash: Vec = row.try_get("transaction_hash")?; + let topic_0: Option> = row.try_get("topic_0")?; + let topic_1: Option> = row.try_get("topic_1")?; + let topic_2: Option> = row.try_get("topic_2")?; + let topic_3: Option> = row.try_get("topic_3")?; + let data: Option> = row.try_get("data")?; + + let topics = [topic_0, topic_1, topic_2, topic_3] + .iter() + .filter_map(|t| t.as_ref().map(|t| H256::from_slice(t))) + .collect::>(); + + Ok(Log { + address: Address::from_slice(&address), + block_hash: H256::from_slice(&block_hash), + block_number: U256::from(block_number as u64), + data: data.map(Bytes::from), + log_index: U256::from(log_index as u64), + topics, + transaction_hash: H256::from_slice(&transaction_hash), + transaction_index: U256::from(transaction_index as u64), + removed: false, + }) + }) + .fetch_all(&self.pool) + .await?; + + Ok(logs) + } + + /// Get the number of receipts per block. + pub async fn receipts_count_per_block(&self, block_hash: &H256) -> Option { + let block_hash = block_hash.as_ref(); + let row = query!( + r#" + SELECT COUNT(*) as count + FROM transaction_hashes + WHERE block_hash = $1 + "#, + block_hash + ) + .fetch_one(&self.pool) + .await + .ok()?; + + let count = row.count as usize; + Some(count) + } + + /// Return all transaction hashes for the given block hash. + pub async fn block_transaction_hashes( + &self, + block_hash: &H256, + ) -> Option> { + let block_hash = block_hash.as_ref(); + let rows = query!( + r#" + SELECT transaction_index, transaction_hash + FROM transaction_hashes + WHERE block_hash = $1 + "#, + block_hash + ) + .map(|row| { + let transaction_index = row.transaction_index as usize; + let transaction_hash = H256::from_slice(&row.transaction_hash); + (transaction_index, transaction_hash) + }) + .fetch_all(&self.pool) + .await + .ok()?; + + Some(rows.into_iter().collect()) + } + + /// Get the receipt for the given block hash and transaction index. + pub async fn receipt_by_block_hash_and_index( + &self, + block_hash: &H256, + transaction_index: usize, + ) -> Option { + let block = self.block_provider.block_by_hash(block_hash).await.ok()??; + let (_, receipt) = self + .receipt_extractor + .extract_from_transaction(&block, transaction_index) + .await + .ok()?; + Some(receipt) + } + + /// Get the receipt for the given transaction hash. + pub async fn receipt_by_hash(&self, transaction_hash: &H256) -> Option { + let (block_hash, transaction_index) = self.find_transaction(transaction_hash).await?; + + let block = self.block_provider.block_by_hash(&block_hash).await.ok()??; + let (_, receipt) = self + .receipt_extractor + .extract_from_transaction(&block, transaction_index) + .await + .ok()?; + Some(receipt) + } + + /// Get the signed transaction for the given transaction hash. + pub async fn signed_tx_by_hash(&self, transaction_hash: &H256) -> Option { + let (block_hash, transaction_index) = self.find_transaction(transaction_hash).await?; + + let block = self.block_provider.block_by_hash(&block_hash).await.ok()??; + let (signed_tx, _) = self + .receipt_extractor + .extract_from_transaction(&block, transaction_index) + .await + .ok()?; + Some(signed_tx) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::test::{MockBlockInfo, MockBlockInfoProvider}; + use pallet_revive::evm::{ReceiptInfo, TransactionSigned}; + use pretty_assertions::assert_eq; + use sp_core::{H160, H256}; + use sqlx::SqlitePool; + + async fn count(pool: &SqlitePool, table: &str, block_hash: Option) -> usize { + let count: i64 = match block_hash { + None => { + sqlx::query_scalar(&format!("SELECT COUNT(*) FROM {table}")) + .fetch_one(pool) + .await + }, + Some(hash) => { + sqlx::query_scalar(&format!("SELECT COUNT(*) FROM {table} WHERE block_hash = ?")) + .bind(hash.as_ref()) + .fetch_one(pool) + .await + }, + } + .unwrap(); + + count as _ + } + + async fn setup_sqlite_provider(pool: SqlitePool) -> ReceiptProvider { + ReceiptProvider { + pool, + block_provider: MockBlockInfoProvider {}, + receipt_extractor: ReceiptExtractor::new_mock(), + keep_latest_n_blocks: Some(10), + block_number_to_hashes: Default::default(), + } + } + + #[sqlx::test] + async fn test_insert_remove(pool: SqlitePool) -> anyhow::Result<()> { + let provider = setup_sqlite_provider(pool).await; + let block = MockBlockInfo { hash: H256::default(), number: 0 }; + let receipts = vec![( + TransactionSigned::default(), + ReceiptInfo { + logs: vec![Log { block_hash: block.hash, ..Default::default() }], + ..Default::default() + }, + )]; + let ethereum_hash = H256::from([1_u8; 32]); + let block_map = BlockHashMap::new(block.hash(), ethereum_hash); + + provider.insert(&block, &receipts, ðereum_hash).await?; + let row = provider.find_transaction(&receipts[0].1.transaction_hash).await; + assert_eq!(row, Some((block.hash, 0))); + + provider.remove(&[block_map]).await?; + assert_eq!(count(&provider.pool, "transaction_hashes", Some(block.hash())).await, 0); + assert_eq!(count(&provider.pool, "logs", Some(block.hash())).await, 0); + Ok(()) + } + + #[sqlx::test] + async fn test_prune(pool: SqlitePool) -> anyhow::Result<()> { + let provider = setup_sqlite_provider(pool).await; + let n = provider.keep_latest_n_blocks.unwrap(); + + for i in 0..2 * n { + let block = MockBlockInfo { hash: H256::from([i as u8; 32]), number: i as _ }; + let transaction_hash = H256::from([i as u8; 32]); + let receipts = vec![( + TransactionSigned::default(), + ReceiptInfo { + transaction_hash, + logs: vec![Log { + block_hash: block.hash, + transaction_hash, + ..Default::default() + }], + ..Default::default() + }, + )]; + let ethereum_hash = H256::from([(i + 1) as u8; 32]); + provider.insert(&block, &receipts, ðereum_hash).await?; + } + assert_eq!(count(&provider.pool, "transaction_hashes", None).await, n); + assert_eq!(count(&provider.pool, "logs", None).await, n); + assert_eq!(count(&provider.pool, "eth_to_substrate_blocks", None).await, n); + assert_eq!(provider.block_number_to_hashes.lock().await.len(), n); + + return Ok(()); + } + + #[sqlx::test] + async fn test_fork(pool: SqlitePool) -> anyhow::Result<()> { + let provider = setup_sqlite_provider(pool).await; + + let build_block = |seed, number| { + let block = MockBlockInfo { hash: H256::from([seed; 32]), number }; + let transaction_hash = H256::from([seed; 32]); + let receipts = vec![( + TransactionSigned::default(), + ReceiptInfo { + transaction_hash, + logs: vec![Log { + block_hash: block.hash, + transaction_hash, + ..Default::default() + }], + ..Default::default() + }, + )]; + let ethereum_hash = H256::from([seed + 1; 32]); + + (block, receipts, ethereum_hash) + }; + + // Build 4 blocks on consecutive heights: 0,1,2,3. + let (block0, receipts, ethereum_hash_0) = build_block(0, 0); + provider.insert(&block0, &receipts, ðereum_hash_0).await?; + let (block1, receipts, ethereum_hash_1) = build_block(1, 1); + provider.insert(&block1, &receipts, ðereum_hash_1).await?; + let (block2, receipts, ethereum_hash_2) = build_block(2, 2); + provider.insert(&block2, &receipts, ðereum_hash_2).await?; + let (block3, receipts, ethereum_hash_3) = build_block(3, 3); + provider.insert(&block3, &receipts, ðereum_hash_3).await?; + + assert_eq!(count(&provider.pool, "transaction_hashes", None).await, 4); + assert_eq!(count(&provider.pool, "logs", None).await, 4); + assert_eq!(count(&provider.pool, "eth_to_substrate_blocks", None).await, 4); + assert_eq!( + provider.block_number_to_hashes.lock().await.clone(), + [ + (0, BlockHashMap::new(block0.hash, ethereum_hash_0)), + (1, BlockHashMap::new(block1.hash, ethereum_hash_1)), + (2, BlockHashMap::new(block2.hash, ethereum_hash_2)), + (3, BlockHashMap::new(block3.hash, ethereum_hash_3)) + ] + .into(), + ); + + // Now build another block on height 1. + let (fork_block, receipts, ethereum_hash_fork) = build_block(4, 1); + provider.insert(&fork_block, &receipts, ðereum_hash_fork).await?; + + assert_eq!(count(&provider.pool, "transaction_hashes", None).await, 2); + assert_eq!(count(&provider.pool, "logs", None).await, 2); + assert_eq!(count(&provider.pool, "eth_to_substrate_blocks", None).await, 2); + + assert_eq!( + provider.block_number_to_hashes.lock().await.clone(), + [ + (0, BlockHashMap::new(block0.hash, ethereum_hash_0)), + (1, BlockHashMap::new(fork_block.hash, ethereum_hash_fork)) + ] + .into(), + ); + + return Ok(()); + } + + #[sqlx::test] + async fn test_reorg_same_transaction_hash(pool: SqlitePool) -> anyhow::Result<()> { + let provider = setup_sqlite_provider(pool).await; + + // Build two blocks at the same height with the same transaction hash + let tx_hash = H256::from([42u8; 32]); + + // Block A at height 1 + let block_a = MockBlockInfo { hash: H256::from([1u8; 32]), number: 1 }; + let ethereum_hash_a = H256::from([2u8; 32]); + let receipts_a = vec![( + TransactionSigned::default(), + ReceiptInfo { + transaction_hash: tx_hash, + transaction_index: U256::from(0), + ..Default::default() + }, + )]; + + provider.insert(&block_a, &receipts_a, ðereum_hash_a).await?; + + // Verify transaction points to block A + let (found_hash, _) = provider.find_transaction(&tx_hash).await.unwrap(); + assert_eq!(found_hash, block_a.hash); + + // Clear the in-memory map to simulate server restart + provider.block_number_to_hashes.lock().await.clear(); + + // Block B at same height 1 (re-org) with SAME transaction + let block_b = MockBlockInfo { hash: H256::from([3u8; 32]), number: 1 }; + let ethereum_hash_b = H256::from([4u8; 32]); + let receipts_b = vec![( + TransactionSigned::default(), + ReceiptInfo { + transaction_hash: tx_hash, // Same tx hash! + transaction_index: U256::from(0), + ..Default::default() + }, + )]; + + // This should NOT fail with UNIQUE constraint violation + provider.insert(&block_b, &receipts_b, ðereum_hash_b).await?; + + // Transaction should now point to block B + let (found_hash, _) = provider.find_transaction(&tx_hash).await.unwrap(); + assert_eq!(found_hash, block_b.hash); + + Ok(()) + } + + #[sqlx::test] + async fn test_receipts_count_per_block(pool: SqlitePool) -> anyhow::Result<()> { + let provider = setup_sqlite_provider(pool).await; + let block = MockBlockInfo { hash: H256::default(), number: 0 }; + let receipts = vec![ + ( + TransactionSigned::default(), + ReceiptInfo { transaction_hash: H256::from([0u8; 32]), ..Default::default() }, + ), + ( + TransactionSigned::default(), + ReceiptInfo { transaction_hash: H256::from([1u8; 32]), ..Default::default() }, + ), + ]; + let ethereum_hash = H256::from([2u8; 32]); + + provider.insert(&block, &receipts, ðereum_hash).await?; + let count = provider.receipts_count_per_block(&block.hash).await; + assert_eq!(count, Some(2)); + Ok(()) + } + + #[sqlx::test] + async fn test_query_logs(pool: SqlitePool) -> anyhow::Result<()> { + let provider = setup_sqlite_provider(pool).await; + let block1 = MockBlockInfo { hash: H256::from([1u8; 32]), number: 1 }; + let block2 = MockBlockInfo { hash: H256::from([2u8; 32]), number: 2 }; + let ethereum_hash1 = H256::from([3u8; 32]); + let ethereum_hash2 = H256::from([4u8; 32]); + let log1 = Log { + block_hash: ethereum_hash1, + block_number: block1.number.into(), + address: H160::from([1u8; 20]), + topics: vec![H256::from([1u8; 32]), H256::from([2u8; 32])], + data: Some(vec![0u8; 32].into()), + transaction_hash: H256::default(), + transaction_index: U256::from(1), + log_index: U256::from(1), + ..Default::default() + }; + let log2 = Log { + block_hash: ethereum_hash2, + block_number: block2.number.into(), + address: H160::from([2u8; 20]), + topics: vec![H256::from([2u8; 32]), H256::from([3u8; 32])], + transaction_hash: H256::from([1u8; 32]), + transaction_index: U256::from(2), + log_index: U256::from(1), + ..Default::default() + }; + + provider + .insert( + &block1, + &vec![( + TransactionSigned::default(), + ReceiptInfo { + logs: vec![log1.clone()], + transaction_hash: log1.transaction_hash, + transaction_index: log1.transaction_index, + ..Default::default() + }, + )], + ðereum_hash1, + ) + .await?; + provider + .insert( + &block2, + &vec![( + TransactionSigned::default(), + ReceiptInfo { + logs: vec![log2.clone()], + transaction_hash: log2.transaction_hash, + transaction_index: log2.transaction_index, + ..Default::default() + }, + )], + ðereum_hash2, + ) + .await?; + + // Empty filter + let logs = provider.logs(None).await?; + assert_eq!(logs, vec![log2.clone()]); + + // from_block filter + let logs = provider + .logs(Some(Filter { from_block: Some(log2.block_number.into()), ..Default::default() })) + .await?; + assert_eq!(logs, vec![log2.clone()]); + + // from_block filter (using latest block) + let logs = provider + .logs(Some(Filter { from_block: Some(BlockTag::Latest.into()), ..Default::default() })) + .await?; + assert_eq!(logs, vec![log2.clone()]); + + // to_block filter + let logs = provider + .logs(Some(Filter { to_block: Some(log1.block_number.into()), ..Default::default() })) + .await?; + assert_eq!(logs, vec![log1.clone()]); + + // block_hash filter + let logs = provider + .logs(Some(Filter { block_hash: Some(log1.block_hash), ..Default::default() })) + .await?; + assert_eq!(logs, vec![log1.clone()]); + + // single address + let logs = provider + .logs(Some(Filter { + from_block: Some(U256::from(0).into()), + address: Some(log1.address.into()), + ..Default::default() + })) + .await?; + assert_eq!(logs, vec![log1.clone()]); + + // multiple addresses + let logs = provider + .logs(Some(Filter { + from_block: Some(U256::from(0).into()), + address: Some(vec![log1.address, log2.address].into()), + ..Default::default() + })) + .await?; + assert_eq!(logs, vec![log1.clone(), log2.clone()]); + + // single topic + let logs = provider + .logs(Some(Filter { + from_block: Some(U256::from(0).into()), + topics: Some(vec![FilterTopic::Single(log1.topics[0])]), + ..Default::default() + })) + .await?; + assert_eq!(logs, vec![log1.clone()]); + + // multiple topic + let logs = provider + .logs(Some(Filter { + from_block: Some(U256::from(0).into()), + topics: Some(vec![ + FilterTopic::Single(log1.topics[0]), + FilterTopic::Single(log1.topics[1]), + ]), + ..Default::default() + })) + .await?; + assert_eq!(logs, vec![log1.clone()]); + + // multiple topic for topic_0 + let logs = provider + .logs(Some(Filter { + from_block: Some(U256::from(0).into()), + topics: Some(vec![FilterTopic::Multiple(vec![log1.topics[0], log2.topics[0]])]), + ..Default::default() + })) + .await?; + assert_eq!(logs, vec![log1.clone(), log2.clone()]); + + // Altogether + let logs = provider + .logs(Some(Filter { + from_block: Some(log1.block_number.into()), + to_block: Some(log2.block_number.into()), + block_hash: None, + address: Some(vec![log1.address, log2.address].into()), + topics: Some(vec![FilterTopic::Multiple(vec![log1.topics[0], log2.topics[0]])]), + })) + .await?; + assert_eq!(logs, vec![log1.clone(), log2.clone()]); + Ok(()) + } + + #[sqlx::test] + async fn test_block_mapping_insert_get(pool: SqlitePool) -> anyhow::Result<()> { + let provider = setup_sqlite_provider(pool).await; + let ethereum_hash = H256::from([1u8; 32]); + let substrate_hash = H256::from([2u8; 32]); + let block_map = BlockHashMap::new(substrate_hash, ethereum_hash); + + // Insert mapping + provider.insert_block_mapping(&block_map).await?; + + // Test forward lookup + let resolved = provider.get_substrate_hash(ðereum_hash).await; + assert_eq!(resolved, Some(substrate_hash)); + + // Test reverse lookup + let resolved = provider.get_ethereum_hash(&substrate_hash).await; + assert_eq!(resolved, Some(ethereum_hash)); + + Ok(()) + } + + #[sqlx::test] + async fn test_block_mapping_remove(pool: SqlitePool) -> anyhow::Result<()> { + let provider = setup_sqlite_provider(pool).await; + let ethereum_hash1 = H256::from([1u8; 32]); + let ethereum_hash2 = H256::from([2u8; 32]); + let substrate_hash1 = H256::from([3u8; 32]); + let substrate_hash2 = H256::from([4u8; 32]); + let block_map1 = BlockHashMap::new(substrate_hash1, ethereum_hash1); + let block_map2 = BlockHashMap::new(substrate_hash2, ethereum_hash2); + + // Insert mappings + provider.insert_block_mapping(&block_map1).await?; + provider.insert_block_mapping(&block_map2).await?; + + // Verify they exist + assert_eq!( + provider.get_substrate_hash(&block_map1.ethereum_hash).await, + Some(block_map1.substrate_hash) + ); + assert_eq!( + provider.get_substrate_hash(&block_map2.ethereum_hash).await, + Some(block_map2.substrate_hash) + ); + + // Remove one mapping + provider.remove(&[block_map1]).await?; + + // Verify removal + assert_eq!(provider.get_substrate_hash(ðereum_hash1).await, None); + assert_eq!(provider.get_substrate_hash(ðereum_hash2).await, Some(substrate_hash2)); + + Ok(()) + } + + #[sqlx::test] + async fn test_block_mapping_pruning_integration(pool: SqlitePool) -> anyhow::Result<()> { + let provider = setup_sqlite_provider(pool).await; + let ethereum_hash = H256::from([1u8; 32]); + let substrate_hash = H256::from([2u8; 32]); + let block_map = BlockHashMap::new(substrate_hash, ethereum_hash); + + // Insert mapping + provider.insert_block_mapping(&block_map).await?; + assert_eq!( + provider.get_substrate_hash(&block_map.ethereum_hash).await, + Some(block_map.substrate_hash) + ); + + // Remove substrate block (this should also remove the mapping) + provider.remove(&[block_map.clone()]).await?; + + // Mapping should be gone + assert_eq!(provider.get_substrate_hash(&block_map.ethereum_hash).await, None); + + Ok(()) + } + + #[sqlx::test] + async fn test_logs_with_ethereum_block_hash_mapping(pool: SqlitePool) -> anyhow::Result<()> { + let provider = setup_sqlite_provider(pool).await; + let ethereum_hash = H256::from([1u8; 32]); + let substrate_hash = H256::from([2u8; 32]); + let block_number = 1u64; + + // Create a log with ethereum hash + let log = Log { + block_hash: ethereum_hash, + block_number: block_number.into(), + address: H160::from([1u8; 20]), + topics: vec![H256::from([1u8; 32])], + transaction_hash: H256::from([3u8; 32]), + transaction_index: U256::from(0), + log_index: U256::from(0), + data: Some(vec![0u8; 32].into()), + ..Default::default() + }; + + // Insert the log + let block = MockBlockInfo { hash: substrate_hash, number: block_number as u32 }; + let receipts = vec![( + TransactionSigned::default(), + ReceiptInfo { + logs: vec![log.clone()], + transaction_hash: log.transaction_hash, + transaction_index: log.transaction_index, + ..Default::default() + }, + )]; + provider.insert(&block, &receipts, ðereum_hash).await?; + + // Query logs using Ethereum block hash (should resolve to substrate hash) + let logs = provider + .logs(Some(Filter { block_hash: Some(ethereum_hash), ..Default::default() })) + .await?; + assert_eq!(logs, vec![log]); + + Ok(()) + } + + #[sqlx::test] + async fn test_mapping_count(pool: SqlitePool) -> anyhow::Result<()> { + let provider = setup_sqlite_provider(pool).await; + + // Initially no mappings + assert_eq!(count(&provider.pool, "eth_to_substrate_blocks", None).await, 0); + + let block_map1 = BlockHashMap::new(H256::from([1u8; 32]), H256::from([2u8; 32])); + let block_map2 = BlockHashMap::new(H256::from([3u8; 32]), H256::from([4u8; 32])); + + // Insert some mappings + provider.insert_block_mapping(&block_map1).await?; + provider.insert_block_mapping(&block_map2).await?; + + assert_eq!(count(&provider.pool, "eth_to_substrate_blocks", None).await, 2); + + // Remove one + provider.remove(&[block_map1]).await?; + assert_eq!(count(&provider.pool, "eth_to_substrate_blocks", None).await, 1); + + Ok(()) + } +} diff --git a/eth-rpc/src/subxt_client.rs b/eth-rpc/src/subxt_client.rs new file mode 100644 index 0000000000..f36a565928 --- /dev/null +++ b/eth-rpc/src/subxt_client.rs @@ -0,0 +1,81 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//! The generated subxt client. +//! Generated against a substrate chain configured with [`pallet_revive`] using: +//! subxt metadata --url ws://localhost:9944 -o rpc/revive_chain.scale +pub use subxt::config::PolkadotConfig as SrcChainConfig; + +#[subxt::subxt( + runtime_metadata_path = "$OUT_DIR/revive_chain.scale", + // TODO remove once subxt use the same U256 type + substitute_type( + path = "primitive_types::U256", + with = "::subxt::utils::Static<::sp_core::U256>" + ), + + substitute_type( + path = "sp_runtime::generic::block::Block", + with = "::subxt::utils::Static<::sp_runtime::generic::Block< + ::sp_runtime::generic::Header, + ::sp_runtime::OpaqueExtrinsic + >>" + ), + substitute_type( + path = "pallet_revive::evm::api::debug_rpc_types::Trace", + with = "::subxt::utils::Static<::pallet_revive::evm::Trace>" + ), + substitute_type( + path = "pallet_revive::evm::api::debug_rpc_types::TracerType", + with = "::subxt::utils::Static<::pallet_revive::evm::TracerType>" + ), + + substitute_type( + path = "pallet_revive::evm::api::rpc_types_gen::GenericTransaction", + with = "::subxt::utils::Static<::pallet_revive::evm::GenericTransaction>" + ), + substitute_type( + path = "pallet_revive::evm::api::rpc_types::DryRunConfig", + with = "::subxt::utils::Static<::pallet_revive::evm::DryRunConfig>" + ), + substitute_type( + path = "pallet_revive::primitives::EthTransactInfo", + with = "::subxt::utils::Static<::pallet_revive::EthTransactInfo>" + ), + substitute_type( + path = "pallet_revive::primitives::EthTransactError", + with = "::subxt::utils::Static<::pallet_revive::EthTransactError>" + ), + substitute_type( + path = "pallet_revive::primitives::ExecReturnValue", + with = "::subxt::utils::Static<::pallet_revive::ExecReturnValue>" + ), + substitute_type( + path = "sp_weights::weight_v2::Weight", + with = "::subxt::utils::Static<::sp_weights::Weight>" + ), + substitute_type( + path = "pallet_revive::evm::api::rpc_types_gen::Block", + with = "::subxt::utils::Static<::pallet_revive::evm::Block>" + ), + substitute_type( + path = "pallet_revive::evm::block_hash::ReceiptGasInfo", + with = "::subxt::utils::Static<::pallet_revive::evm::ReceiptGasInfo>" + ), + derive_for_all_types = "codec::Encode, codec::Decode" +)] +mod src_chain {} +pub use src_chain::*; diff --git a/eth-rpc/src/tests.rs b/eth-rpc/src/tests.rs new file mode 100644 index 0000000000..f164bea1c9 --- /dev/null +++ b/eth-rpc/src/tests.rs @@ -0,0 +1,867 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//! Test the eth-rpc cli with the kitchensink node. +//! This only includes basic transaction tests, most of the other tests are in the +//! [evm-test-suite](https://github.com/paritytech/evm-test-suite) repository. + +use crate::{ + cli::{self, CliCommand}, + example::TransactionBuilder, + subxt_client::{ + self, src_chain::runtime_types::pallet_revive::primitives::Code, SrcChainConfig, + }, + EthRpcClient, +}; +use anyhow::anyhow; +use clap::Parser; +use jsonrpsee::ws_client::{WsClient, WsClientBuilder}; +use pallet_revive::{ + create1, + evm::{ + Account, Block, BlockNumberOrTag, BlockNumberOrTagOrHash, BlockTag, + HashesOrTransactionInfos, TransactionInfo, TransactionUnsigned, H256, U256, + }, +}; +use std::{sync::Arc, thread}; +use subxt::{ + backend::rpc::RpcClient, + ext::subxt_rpcs::rpc_params, + tx::{SubmittableTransaction, TxStatus}, + OnlineClient, +}; + +const LOG_TARGET: &str = "eth-rpc-tests"; + +/// Create a websocket client with a 120s timeout. +async fn ws_client_with_retry(url: &str) -> WsClient { + let timeout = tokio::time::Duration::from_secs(120); + tokio::time::timeout(timeout, async { + loop { + if let Ok(client) = WsClientBuilder::default().build(url).await { + return client; + } else { + tokio::time::sleep(tokio::time::Duration::from_secs(1)).await; + } + } + }) + .await + .expect("Hit timeout") +} + +struct SharedResources { + _node_handle: std::thread::JoinHandle<()>, + _rpc_handle: std::thread::JoinHandle<()>, +} + +impl SharedResources { + fn start() -> Self { + // Start revive-dev-node + let _node_handle = thread::spawn(move || { + // POLYMESH CHANGE + // if let Err(e) = revive_dev_node::command::run_with_args(vec![ + if let Err(e) = polymesh::command::run_with_args(vec![ + "polymesh".to_string(), + "--dev".to_string(), + "--rpc-port=45789".to_string(), + "-lerror,sc_rpc_server=info,runtime::revive=debug".to_string(), + ]) { + panic!("Node exited with error: {e:?}"); + } + }); + + // Start the rpc server. + let args = CliCommand::parse_from([ + "eth-rpc", + "--dev", + "--rpc-port=45788", + "--node-rpc-url=ws://localhost:45789", + "--no-prometheus", + "-linfo,eth-rpc=debug", + ]); + + let _rpc_handle = thread::spawn(move || { + if let Err(e) = cli::run(args) { + panic!("eth-rpc exited with error: {e:?}"); + } + }); + + Self { _node_handle, _rpc_handle } + } + + async fn client() -> WsClient { + ws_client_with_retry("ws://localhost:45788").await + } + + async fn node_client() -> OnlineClient { + OnlineClient::::from_url(Self::node_rpc_url()).await.unwrap() + } + + fn node_rpc_url() -> &'static str { + "ws://localhost:45789" + } +} + +macro_rules! unwrap_call_err( + ($err:expr) => { + match $err.downcast_ref::().unwrap() { + jsonrpsee::core::client::Error::Call(call) => call, + _ => panic!("Expected Call error"), + } + } +); + +// Helper functions +/// Prepare multiple EVM transfer transactions with nonce in descending order +async fn prepare_evm_transactions( + client: Arc, + signer: Account, + recipient: pallet_revive::evm::Address, + amount: U256, + count: usize, +) -> anyhow::Result>> { + let start_nonce = + client.get_transaction_count(signer.address(), BlockTag::Latest.into()).await?; + + let mut transactions = Vec::new(); + for i in (0..count).rev() { + let nonce = start_nonce.saturating_add(U256::from(i as u64)); + let tx_builder = TransactionBuilder::new(Arc::clone(&client)) + .signer(signer.clone()) + .nonce(nonce) + .value(amount) + .to(recipient); + + transactions.push(tx_builder); + log::trace!(target: LOG_TARGET, "Prepared EVM transaction {}/{count} with nonce: {nonce:?}", i + 1); + } + + Ok(transactions) +} + +/// Prepare multiple Substrate transfer transactions with sequential nonces +async fn prepare_substrate_transactions( + node_client: &OnlineClient, + signer: &subxt_signer::sr25519::Keypair, + count: usize, +) -> anyhow::Result>>> { + let mut nonce = node_client.tx().account_nonce(&signer.public_key().into()).await?; + let mut substrate_txs = Vec::new(); + for i in 0..count { + let remark_data = format!("Hello from test {}", i); + let call = subxt::dynamic::tx( + "System", + "remark", + vec![subxt::dynamic::Value::from_bytes(remark_data.as_bytes())], + ); + + let params = subxt::config::polkadot::PolkadotExtrinsicParamsBuilder::new() + .nonce(nonce) + .build(); + + let tx = node_client.tx().create_signed(&call, signer, params).await?; + substrate_txs.push(tx); + log::trace!(target: LOG_TARGET, "Prepared substrate transaction {i}/{count} with nonce: {nonce}"); + nonce += 1 as u64; + } + Ok(substrate_txs) +} + +/// Submit multiple transactions and return them without waiting for receipts +async fn submit_evm_transactions( + transactions: Vec>, +) -> anyhow::Result< + Vec<( + H256, + pallet_revive::evm::GenericTransaction, + crate::example::SubmittedTransaction, + )>, +> { + let mut submitted_txs = Vec::new(); + + for tx_builder in transactions { + let tx = tx_builder.send().await?; + let hash = tx.hash(); + let generic_tx = tx.generic_transaction(); + submitted_txs.push((hash, generic_tx, tx)); + } + + Ok(submitted_txs) +} + +/// Submit substrate transactions and return futures for waiting +async fn submit_substrate_transactions( + substrate_txs: Vec>>, +) -> Vec>> { + let mut futures = Vec::new(); + + for (i, tx) in substrate_txs.into_iter().enumerate() { + let fut = async move { + match tx.submit_and_watch().await { + Ok(mut progress) => { + log::trace!(target: LOG_TARGET, "Substrate tx {i} submitted"); + while let Some(status) = progress.next().await { + match status { + Ok(TxStatus::InFinalizedBlock(block)) | + Ok(TxStatus::InBestBlock(block)) => { + log::trace!(target: LOG_TARGET, + "Substrate tx {i} included in block {:?}", + block.block_hash() + ); + return Ok(()); + }, + Err(e) => return Err(anyhow::anyhow!("Substrate tx {i} error: {e}")), + Ok(status) => { + log::trace!(target: LOG_TARGET, "Substrate tx {i} status {:?}", status); + }, + } + } + Err(anyhow::anyhow!( + "Failed to get status of submitted substrate tx {i}, assuming error" + )) + }, + Err(e) => Err(anyhow::anyhow!("Failed to submit substrate tx {i}: {e}")), + } + }; + futures.push(fut); + } + + futures +} + +/// Verify all given transaction hashes are in the specified block and accessible via RPC +async fn verify_transactions_in_single_block( + client: &Arc, + block_number: U256, + expected_tx_hashes: &[H256], +) -> anyhow::Result<()> { + // Fetch the block + let block = client + .get_block_by_number(BlockNumberOrTag::U256(block_number), false) + .await? + .ok_or_else(|| anyhow!("Block {block_number} should exist"))?; + + let block_tx_hashes = match &block.transactions { + HashesOrTransactionInfos::Hashes(hashes) => hashes.clone(), + HashesOrTransactionInfos::TransactionInfos(infos) => { + infos.iter().map(|info| info.hash).collect() + }, + }; + + if let Some(missing_hash) = + expected_tx_hashes.iter().find(|hash| !block_tx_hashes.contains(hash)) + { + return Err(anyhow!("Transaction {missing_hash:?} not found in block {block_number}")); + } + + Ok(()) +} + +#[tokio::test] +async fn run_all_eth_rpc_tests() -> anyhow::Result<()> { + // Set up a 2-minute timeout for the entire test + let timeout_duration = tokio::time::Duration::from_secs(120); + let result = tokio::time::timeout(timeout_duration, run_all_eth_rpc_tests_inner()).await; + + match result { + Ok(inner_result) => inner_result, + Err(_) => { + log::error!(target: LOG_TARGET, "Test timed out after 2 minutes!"); + std::process::exit(1); + }, + } +} + +async fn run_all_eth_rpc_tests_inner() -> anyhow::Result<()> { + // start node and rpc server + let _shared = SharedResources::start(); + // Wait for servers to be ready + let _ = SharedResources::client().await; + + macro_rules! run_tests { + ($($test:ident),+ $(,)?) => { + $( + { + let test_name = stringify!($test); + log::debug!(target: LOG_TARGET, "Running test: {}", test_name); + match $test().await { + Ok(()) => log::debug!(target: LOG_TARGET, "Test passed: {}", test_name), + Err(err) => panic!("Test {} failed: {err:?}", test_name), + } + } + )+ + }; + } + + run_tests!( + test_fibonacci_large_value_runs_out_of_gas, + test_transfer, + test_deploy_and_call, + test_runtime_api_dry_run_addr_works, + test_invalid_transaction, + test_evm_blocks_should_match, + test_evm_blocks_hydrated_should_match, + test_block_hash_for_tag_with_proper_ethereum_block_hash_works, + test_block_hash_for_tag_with_invalid_ethereum_block_hash_fails, + test_block_hash_for_tag_with_block_number_works, + test_block_hash_for_tag_with_block_tags_works, + test_multiple_transactions_in_block, + test_mixed_evm_substrate_transactions, + test_runtime_pallets_address_upload_code, + ); + + log::debug!(target: LOG_TARGET, "All tests completed successfully!"); + Ok(()) +} + +async fn test_transfer() -> anyhow::Result<()> { + let client = Arc::new(SharedResources::client().await); + let ethan = Account::from(subxt_signer::eth::dev::ethan()); + let initial_balance = client.get_balance(ethan.address(), BlockTag::Latest.into()).await?; + + let value = 1_000_000_000_000_000_000_000u128.into(); + let tx = TransactionBuilder::new(client.clone()) + .value(value) + .to(ethan.address()) + .send() + .await?; + + let receipt = tx.wait_for_receipt().await?; + assert_eq!( + Some(ethan.address()), + receipt.to, + "Receipt should have the correct contract address." + ); + + let balance = client.get_balance(ethan.address(), BlockTag::Latest.into()).await?; + assert_eq!( + Some(value), + balance.checked_sub(initial_balance), + "Ethan {:?} {balance:?} should have increased by {value:?} from {initial_balance}.", + ethan.address() + ); + Ok(()) +} + +async fn test_deploy_and_call() -> anyhow::Result<()> { + let client = Arc::new(SharedResources::client().await); + let account = Account::default(); + + // Balance transfer + let ethan = Account::from(subxt_signer::eth::dev::ethan()); + let initial_balance = client.get_balance(ethan.address(), BlockTag::Latest.into()).await?; + let value = 1_000_000_000_000_000_000_000u128.into(); + let tx = TransactionBuilder::new(client.clone()) + .value(value) + .to(ethan.address()) + .send() + .await?; + + let receipt = tx.wait_for_receipt().await?; + assert_eq!( + Some(ethan.address()), + receipt.to, + "Receipt should have the correct contract address." + ); + + let balance = client.get_balance(ethan.address(), BlockTag::Latest.into()).await?; + assert_eq!( + Some(value), + balance.checked_sub(initial_balance), + "Ethan {:?} {balance:?} should have increased by {value:?} from {initial_balance}.", + ethan.address() + ); + + // Deploy contract + let data = b"hello world".to_vec(); + let value = U256::from(5_000_000_000_000u128); + let (bytes, _) = pallet_revive_fixtures::compile_module("dummy")?; + let input = bytes.into_iter().chain(data.clone()).collect::>(); + let nonce = client.get_transaction_count(account.address(), BlockTag::Latest.into()).await?; + let tx = TransactionBuilder::new(client.clone()).value(value).input(input).send().await?; + let receipt = tx.wait_for_receipt().await?; + let contract_address = create1(&account.address(), nonce.try_into().unwrap()); + assert_eq!( + Some(contract_address), + receipt.contract_address, + "Contract should be deployed at {contract_address:?}." + ); + + let nonce_after_deploy = + client.get_transaction_count(account.address(), BlockTag::Latest.into()).await?; + + assert_eq!(nonce_after_deploy - nonce, U256::from(1), "Nonce should have increased by 1"); + + let initial_balance = client.get_balance(contract_address, BlockTag::Latest.into()).await?; + assert_eq!( + value, initial_balance, + "Contract {contract_address:?} balance should be the same as the value sent ({value})." + ); + + // Call contract + let tx = TransactionBuilder::new(client.clone()) + .value(value) + .to(contract_address) + .send() + .await?; + let receipt = tx.wait_for_receipt().await?; + + assert_eq!( + Some(contract_address), + receipt.to, + "Receipt should have the correct contract address {contract_address:?}." + ); + + let balance = client.get_balance(contract_address, BlockTag::Latest.into()).await?; + assert_eq!(Some(value), balance.checked_sub(initial_balance), "Contract {contract_address:?} Balance {balance} should have increased from {initial_balance} by {value}."); + + // Balance transfer to contract + let initial_balance = client.get_balance(contract_address, BlockTag::Latest.into()).await?; + let tx = TransactionBuilder::new(client.clone()) + .value(value) + .to(contract_address) + .send() + .await?; + + tx.wait_for_receipt().await?; + + let balance = client.get_balance(contract_address, BlockTag::Latest.into()).await?; + + assert_eq!( + Some(value), + balance.checked_sub(initial_balance), + "Balance {balance} should have increased from {initial_balance} by {value}." + ); + Ok(()) +} + +async fn test_runtime_api_dry_run_addr_works() -> anyhow::Result<()> { + let client = Arc::new(SharedResources::client().await); + let node_client = SharedResources::node_client().await; + let account = Account::default(); + let origin: [u8; 32] = account.substrate_account().into(); + let data = b"hello world".to_vec(); + let value = 5_000_000_000_000u128; + let (bytes, _) = pallet_revive_fixtures::compile_module("dummy")?; + + let payload = subxt_client::apis().revive_api().instantiate( + subxt::utils::AccountId32(origin), + value, + None, + None, + Code::Upload(bytes), + data, + None, + ); + + // runtime_api.at_latest() uses the latest finalized block, query nonce accordingly + let nonce = client + .get_transaction_count(account.address(), BlockTag::Finalized.into()) + .await?; + let contract_address = create1(&account.address(), nonce.try_into().unwrap()); + + let res = node_client + .runtime_api() + .at_latest() + .await? + .call(payload) + .await? + .result + .unwrap(); + + assert_eq!(res.addr, contract_address); + Ok(()) +} + +async fn test_invalid_transaction() -> anyhow::Result<()> { + let client = Arc::new(SharedResources::client().await); + let ethan = Account::from(subxt_signer::eth::dev::ethan()); + + let err = TransactionBuilder::new(client.clone()) + .value(U256::from(1_000_000_000_000u128)) + .to(ethan.address()) + .mutate(|tx| match tx { + TransactionUnsigned::TransactionLegacyUnsigned(tx) => tx.chain_id = Some(42u32.into()), + TransactionUnsigned::Transaction1559Unsigned(tx) => tx.chain_id = 42u32.into(), + TransactionUnsigned::Transaction2930Unsigned(tx) => tx.chain_id = 42u32.into(), + TransactionUnsigned::Transaction4844Unsigned(tx) => tx.chain_id = 42u32.into(), + TransactionUnsigned::Transaction7702Unsigned(tx) => tx.chain_id = 42u32.into(), + }) + .send() + .await + .unwrap_err(); + + let call_err = unwrap_call_err!(err.source().unwrap()); + assert_eq!(call_err.message(), "Invalid Transaction"); + + Ok(()) +} + +async fn get_evm_block_from_storage( + node_client: &OnlineClient, + node_rpc_client: &RpcClient, + block_number: U256, +) -> anyhow::Result { + let block_hash: H256 = node_rpc_client + .request("chain_getBlockHash", rpc_params![block_number]) + .await + .unwrap(); + + let query = subxt_client::storage().revive().ethereum_block(); + let Some(block) = node_client.storage().at(block_hash).fetch(&query).await.unwrap() else { + return Err(anyhow!("EVM block {block_hash:?} not found")); + }; + Ok(block.0) +} + +async fn test_evm_blocks_should_match() -> anyhow::Result<()> { + let client = Arc::new(SharedResources::client().await); + let node_client = SharedResources::node_client().await; + let node_rpc_client = RpcClient::from_url(SharedResources::node_rpc_url()).await?; + + // Deploy a contract to have some interesting blocks + let (bytes, _) = pallet_revive_fixtures::compile_module("dummy")?; + let value = U256::from(5_000_000_000_000u128); + let tx = TransactionBuilder::new(client.clone()) + .value(value) + .input(bytes.to_vec()) + .send() + .await?; + + let receipt = tx.wait_for_receipt().await?; + let block_number = receipt.block_number; + let block_hash = receipt.block_hash; + log::trace!(target: LOG_TARGET, "block_number = {block_number:?}"); + log::trace!(target: LOG_TARGET, "tx hash = {:?}", tx.hash()); + + let evm_block_from_storage = + get_evm_block_from_storage(&node_client, &node_rpc_client, block_number).await?; + + // Fetch the block immediately (should come from storage EthereumBlock) + let evm_block_from_rpc_by_number = client + .get_block_by_number(BlockNumberOrTag::U256(block_number.into()), false) + .await? + .expect("Block should exist"); + let evm_block_from_rpc_by_hash = + client.get_block_by_hash(block_hash, false).await?.expect("Block should exist"); + + assert!( + matches!( + evm_block_from_rpc_by_number.transactions, + pallet_revive::evm::HashesOrTransactionInfos::Hashes(_) + ), + "Block should not have hydrated transactions" + ); + + // All EVM blocks must match + assert_eq!(evm_block_from_storage, evm_block_from_rpc_by_number, "EVM blocks should match"); + assert_eq!(evm_block_from_storage, evm_block_from_rpc_by_hash, "EVM blocks should match"); + + Ok(()) +} + +async fn test_evm_blocks_hydrated_should_match() -> anyhow::Result<()> { + let client = Arc::new(SharedResources::client().await); + // Deploy a contract to have some transactions in the block + let (bytes, _) = pallet_revive_fixtures::compile_module("dummy")?; + let value = U256::from(5_000_000_000_000u128); + let signer = Account::default(); + let signer_copy = Account::default(); + let tx = TransactionBuilder::new(client.clone()) + .value(value) + .signer(signer) + .input(bytes.to_vec()) + .send() + .await?; + + let receipt = tx.wait_for_receipt().await?; + let block_number = receipt.block_number; + let block_hash = receipt.block_hash; + log::trace!(target: LOG_TARGET, "block_number = {block_number:?}"); + log::trace!(target: LOG_TARGET, "tx hash = {:?}", tx.hash()); + + // Fetch the block with hydrated transactions via RPC (by number and by hash) + let evm_block_from_rpc_by_number = client + .get_block_by_number(BlockNumberOrTag::U256(block_number.into()), true) + .await? + .expect("Block should exist"); + let evm_block_from_rpc_by_hash = + client.get_block_by_hash(block_hash, true).await?.expect("Block should exist"); + + // Both blocks should be identical + assert_eq!( + evm_block_from_rpc_by_number, evm_block_from_rpc_by_hash, + "Hydrated EVM blocks should match" + ); + + // Verify transaction info + let unsigned_tx = tx + .generic_transaction() + .try_into_unsigned() + .expect("Transaction shall be converted"); + let signed_tx = signer_copy.sign_transaction(unsigned_tx); + let expected_tx_info = TransactionInfo::new(&receipt, signed_tx); + + let tx_info = if let HashesOrTransactionInfos::TransactionInfos(tx_infos) = + evm_block_from_rpc_by_number.transactions + { + tx_infos[0].clone() + } else { + panic!("Expected hydrated transactions"); + }; + assert_eq!(expected_tx_info, tx_info, "TransationInfos should match"); + + Ok(()) +} + +async fn test_block_hash_for_tag_with_proper_ethereum_block_hash_works() -> anyhow::Result<()> { + let client = Arc::new(SharedResources::client().await); + // Deploy a transaction to create a block with transactions + let (bytes, _) = pallet_revive_fixtures::compile_module("dummy")?; + let value = U256::from(5_000_000_000_000u128); + let tx = TransactionBuilder::new(client.clone()) + .value(value) + .input(bytes.to_vec()) + .send() + .await?; + + let receipt = tx.wait_for_receipt().await?; + let ethereum_block_hash = receipt.block_hash; + + log::trace!(target: LOG_TARGET, "Testing with Ethereum block hash: {ethereum_block_hash:?}"); + + let block_by_hash = client + .get_block_by_hash(ethereum_block_hash, false) + .await? + .expect("Block should exist"); + + let account = Account::default(); + let balance = client.get_balance(account.address(), ethereum_block_hash.into()).await?; + + assert!(balance >= U256::zero(), "Balance should be retrievable with Ethereum hash"); + assert_eq!(block_by_hash.hash, ethereum_block_hash, "Block hash should match"); + + Ok(()) +} + +async fn test_block_hash_for_tag_with_invalid_ethereum_block_hash_fails() -> anyhow::Result<()> { + let client = Arc::new(SharedResources::client().await); + let fake_eth_hash = H256::from([0x42u8; 32]); + + log::trace!(target: LOG_TARGET, "Testing with fake Ethereum hash: {fake_eth_hash:?}"); + + let account = Account::default(); + let result = client.get_balance(account.address(), fake_eth_hash.into()).await; + + assert!(result.is_err(), "Should fail with non-existent Ethereum hash"); + + Ok(()) +} + +async fn test_block_hash_for_tag_with_block_number_works() -> anyhow::Result<()> { + let client = Arc::new(SharedResources::client().await); + let block_number = client.block_number().await?; + + log::trace!(target: LOG_TARGET, "Testing with block number: {block_number}"); + + let account = Account::default(); + let balance = client + .get_balance(account.address(), BlockNumberOrTagOrHash::BlockNumber(block_number)) + .await?; + + assert!(balance >= U256::zero(), "Balance should be retrievable with block number"); + Ok(()) +} + +async fn test_block_hash_for_tag_with_block_tags_works() -> anyhow::Result<()> { + let client = Arc::new(SharedResources::client().await); + let account = Account::default(); + + let tags = vec![ + BlockTag::Latest, + BlockTag::Finalized, + BlockTag::Safe, + BlockTag::Earliest, + BlockTag::Pending, + ]; + + for tag in tags { + let balance = client.get_balance(account.address(), tag.clone().into()).await?; + + assert!(balance >= U256::zero(), "Balance should be retrievable with tag {tag:?}"); + } + + Ok(()) +} + +async fn test_multiple_transactions_in_block() -> anyhow::Result<()> { + let client = Arc::new(SharedResources::client().await); + let num_transactions = 20; + let alith = Account::default(); + let ethan = Account::from(subxt_signer::eth::dev::ethan()); + let amount = U256::from(1_000_000_000_000_000_000u128); + + // Prepare EVM transfer transactions + let transactions = + prepare_evm_transactions(client.clone(), alith, ethan.address(), amount, num_transactions) + .await?; + + // Submit all transactions + let submitted_txs = submit_evm_transactions(transactions).await?; + let tx_hashes: Vec = submitted_txs.iter().map(|(hash, _, _)| *hash).collect(); + log::trace!(target: LOG_TARGET, "Submitted {} transactions", submitted_txs.len()); + + // All transactions should be included in the same block since nonces are in descending order + let first_receipt = submitted_txs[0].2.wait_for_receipt().await?; + + // Fetch and verify block contains all transactions + verify_transactions_in_single_block(&client, first_receipt.block_number, &tx_hashes).await?; + Ok(()) +} + +async fn test_mixed_evm_substrate_transactions() -> anyhow::Result<()> { + let client = Arc::new(SharedResources::client().await); + let node_client = SharedResources::node_client().await; + let num_evm_txs = 10; + let num_substrate_txs = 7; + + let alith = Account::default(); + let ethan = Account::from(subxt_signer::eth::dev::ethan()); + let amount = U256::from(500_000_000_000_000_000u128); + + // Prepare EVM transactions + log::trace!(target: LOG_TARGET, "Creating {num_evm_txs} EVM transfer transactions"); + let evm_transactions = + prepare_evm_transactions(client.clone(), alith, ethan.address(), amount, num_evm_txs) + .await?; + + // Prepare substrate transactions (simple remarks) + log::trace!(target: LOG_TARGET, "Creating {num_substrate_txs} substrate remark transactions"); + let alice_signer = subxt_signer::sr25519::dev::alice(); + + let substrate_txs = + prepare_substrate_transactions(&node_client, &alice_signer, num_substrate_txs).await?; + + log::trace!(target: LOG_TARGET, "Submitting {num_evm_txs} EVM and {num_substrate_txs} substrate transactions"); + + // Submit EVM transactions + let evm_submitted = submit_evm_transactions(evm_transactions).await?; + let evm_tx_hashes: Vec = evm_submitted.iter().map(|(hash, _, _)| *hash).collect(); + + // Submit substrate transactions + let substrate_futures = submit_substrate_transactions(substrate_txs).await; + + // Wait for first EVM receipt and all substrate transactions in parallel + let (evm_first_receipt_result, _substrate_results) = tokio::join!( + async { evm_submitted[0].2.wait_for_receipt().await }, + futures::future::join_all(substrate_futures) + ); + // Handle the EVM receipt result + let evm_first_receipt = evm_first_receipt_result?; + + // Fetch and verify block contains all transactions + verify_transactions_in_single_block(&client, evm_first_receipt.block_number, &evm_tx_hashes) + .await?; + + Ok(()) +} + +async fn test_runtime_pallets_address_upload_code() -> anyhow::Result<()> { + let client = Arc::new(SharedResources::client().await); + let node_client = SharedResources::node_client().await; + let node_rpc_client = RpcClient::from_url(SharedResources::node_rpc_url()).await?; + + let (bytecode, _) = pallet_revive_fixtures::compile_module("dummy")?; + let signer = Account::default(); + + // Helper function to get substrate block hash from EVM block number + let get_substrate_block_hash = |block_number: U256| { + let rpc_client = node_rpc_client.clone(); + async move { + rpc_client + .request::("chain_getBlockHash", rpc_params![block_number]) + .await + } + }; + + // Step 1: Encode the Substrate upload_code call + let upload_call = subxt::dynamic::tx( + "Revive", + "upload_code", + vec![ + subxt::dynamic::Value::from_bytes(&bytecode), + subxt::dynamic::Value::u128(u128::max_value()), // storage_deposit_limit + ], + ); + let encoded_call = node_client.tx().call_data(&upload_call)?; + + // Step 2: Send the encoded call to RUNTIME_PALLETS_ADDR + let tx = TransactionBuilder::new(client.clone()) + .signer(signer.clone()) + .to(pallet_revive::RUNTIME_PALLETS_ADDR) + .input(encoded_call.clone()) + .send() + .await?; + + // Step 3: Wait for receipt + let receipt = tx.wait_for_receipt().await?; + + // Step 4: Verify transaction was successful + assert_eq!( + receipt.status.unwrap_or(U256::zero()), + U256::one(), + "Transaction should be successful" + ); + + // Step 5: Verify the code was actually uploaded + let code_hash = H256(sp_io::hashing::keccak_256(&bytecode)); + let query = subxt_client::storage().revive().pristine_code(code_hash); + let block_hash: sp_core::H256 = get_substrate_block_hash(receipt.block_number).await?; + let stored_code = node_client.storage().at(block_hash).fetch(&query).await?; + assert!(stored_code.is_some(), "Code with hash {code_hash:?} should exist in storage"); + assert_eq!(stored_code.unwrap(), bytecode, "Stored code should match the uploaded bytecode"); + + Ok(()) +} + +async fn test_fibonacci_large_value_runs_out_of_gas() -> anyhow::Result<()> { + use pallet_revive::precompiles::alloy::sol_types::SolCall; + use pallet_revive_fixtures::Fibonacci; + + let client = Arc::new(SharedResources::client().await); + let (bytes, _) = pallet_revive_fixtures::compile_module_with_type( + "Fibonacci", + pallet_revive_fixtures::FixtureType::Solc, + )?; + + let account = Account::default(); + let nonce = client.get_transaction_count(account.address(), BlockTag::Latest.into()).await?; + let tx = TransactionBuilder::new(client.clone()).input(bytes.to_vec()).send().await?; + let receipt = tx.wait_for_receipt().await?; + let contract_address = create1(&account.address(), nonce.try_into().unwrap()); + assert_eq!(Some(contract_address), receipt.contract_address); + + let result = TransactionBuilder::new(client.clone()) + .to(contract_address) + .input(Fibonacci::fibCall { n: 100u64 }.abi_encode()) + .eth_call() + .await; + + let err = result.expect_err("fib(100) should run out of gas"); + assert!(err.to_string().contains("OutOfGas"), "expected OutOfGas error, got: {err}"); + + Ok(()) +} diff --git a/integration/Cargo.lock b/integration/Cargo.lock index d42258ffe2..b43223f33d 100644 --- a/integration/Cargo.lock +++ b/integration/Cargo.lock @@ -14,18 +14,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aead" @@ -44,7 +44,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -52,9 +52,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -67,9 +67,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "anstream" -version = "0.6.18" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", "anstyle-parse", @@ -82,44 +82,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", - "once_cell", - "windows-sys 0.59.0", + "once_cell_polyfill", + "windows-sys 0.61.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "ark-bls12-377" @@ -186,7 +186,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.3", + "hashbrown 0.15.5", "itertools 0.13.0", "num-bigint", "num-integer", @@ -263,7 +263,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -289,7 +289,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -317,7 +317,7 @@ dependencies = [ "ark-std 0.5.0", "educe", "fnv", - "hashbrown 0.15.3", + "hashbrown 0.15.5", ] [[package]] @@ -364,7 +364,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -403,9 +403,9 @@ dependencies = [ [[package]] name = "ark-vrf" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9501da18569b2afe0eb934fb7afd5a247d238b94116155af4dd068f319adfe6d" +checksum = "0d63e9780640021b74d02b32895d8cec1b4abe8e5547b560a6bda6b14b78c6da" dependencies = [ "ark-bls12-381 0.5.0", "ark-ec 0.5.0", @@ -472,18 +472,18 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -497,15 +497,15 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -513,7 +513,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets", + "windows-link", ] [[package]] @@ -542,9 +542,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.7.3" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "beef" @@ -557,9 +557,9 @@ dependencies = [ [[package]] name = "binary-merkle-tree" -version = "16.0.0" +version = "16.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "181f5380e435b8ba6d901f8b16fc8908c6f0f8bea8973113d1c8718d89bb1809" +checksum = "a6d867f1ffee8b07e7bee466f4f33a043b91f868f5c7b1d22d8a02f86e92bee8" dependencies = [ "hash-db", "log", @@ -568,11 +568,11 @@ dependencies = [ [[package]] name = "bip39" -version = "2.1.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387" +checksum = "90dbd31c98227229239363921e60fcf5e558e43ec69094d46fc4996f08d1d5bc" dependencies = [ - "bitcoin_hashes 0.13.0", + "bitcoin_hashes 0.14.1", "serde", "unicode-normalization", ] @@ -585,9 +585,9 @@ checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" [[package]] name = "bitcoin-io" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" +checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" [[package]] name = "bitcoin_hashes" @@ -601,12 +601,12 @@ dependencies = [ [[package]] name = "bitcoin_hashes" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" dependencies = [ "bitcoin-io", - "hex-conservative 0.2.1", + "hex-conservative 0.2.2", ] [[package]] @@ -617,9 +617,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "bitvec" @@ -644,9 +644,9 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +checksum = "b79834656f71332577234b50bfc009996f7449e0c056884e6a02492ded0ca2f3" dependencies = [ "arrayref", "arrayvec", @@ -694,9 +694,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "byte-slice-cast" @@ -712,24 +712,25 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "cc" -version = "1.2.23" +version = "1.2.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4ac86a9e5bc1e2b3449ab9d7d3a6a405e3d1bb28d7b9be8614f55846ae3766" +checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1" dependencies = [ + "find-msvc-tools", "shlex", ] [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cipher" @@ -744,9 +745,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "common-path" @@ -771,9 +772,9 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const_format" -version = "0.2.34" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" dependencies = [ "const_format_proc_macros", ] @@ -791,9 +792,9 @@ dependencies = [ [[package]] name = "constant_time_eq" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] name = "core-foundation" @@ -805,6 +806,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -822,9 +833,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" dependencies = [ "crc-catalog", ] @@ -852,9 +863,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" @@ -870,9 +881,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "rand_core", @@ -928,7 +939,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -973,14 +984,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", + "pem-rfc7468", "zeroize", ] [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", ] @@ -1004,7 +1016,7 @@ checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -1015,7 +1027,7 @@ checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -1035,7 +1047,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -1067,7 +1079,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -1091,7 +1103,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.101", + "syn 2.0.117", "termcolor", "toml", "walkdir", @@ -1121,14 +1133,14 @@ checksum = "7e8671d54058979a37a26f3511fbf8d198ba1aa35ffb202c42587d918d77213a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ecdsa" @@ -1157,9 +1169,9 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ "curve25519-dalek", "ed25519", @@ -1171,16 +1183,17 @@ dependencies = [ [[package]] name = "ed25519-zebra" -version = "4.0.3" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +checksum = "775765289f7c6336c18d3d66127527820dd45ffd9eb3b6b8ee4708590e6c20f5" dependencies = [ "curve25519-dalek", "ed25519", - "hashbrown 0.14.5", - "hex", + "hashbrown 0.16.1", + "pkcs8", "rand_core", "sha2 0.10.9", + "subtle", "zeroize", ] @@ -1193,7 +1206,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -1227,29 +1240,29 @@ dependencies = [ [[package]] name = "enum-ordinalize" -version = "4.3.0" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0" dependencies = [ "enum-ordinalize-derive", ] [[package]] name = "enum-ordinalize-derive" -version = "4.3.1" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "env_filter" -version = "0.1.3" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" dependencies = [ "log", "regex", @@ -1270,9 +1283,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.8" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" dependencies = [ "anstream", "anstyle", @@ -1295,12 +1308,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.12" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1311,9 +1324,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -1332,7 +1345,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -1367,6 +1380,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + [[package]] name = "fixed-hash" version = "0.8.0" @@ -1402,6 +1421,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "foreign-types" version = "0.3.2" @@ -1419,9 +1444,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -1455,9 +1480,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -1470,9 +1495,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -1480,20 +1505,19 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", "futures-util", - "num_cpus", ] [[package]] @@ -1509,32 +1533,32 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" @@ -1548,9 +1572,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -1560,7 +1584,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -1577,25 +1600,38 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "wasip2", + "wasip3", ] [[package]] @@ -1610,9 +1646,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "gloo-net" @@ -1673,9 +1709,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" dependencies = [ "bytes", "fnv", @@ -1683,7 +1719,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.9.0", + "indexmap 2.13.0", "slab", "tokio", "tokio-util", @@ -1722,23 +1758,24 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "ahash", "allocator-api2", + "equivalent", + "foldhash 0.1.5", ] [[package]] name = "hashbrown" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.2.0", ] [[package]] @@ -1747,7 +1784,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.15.3", + "hashbrown 0.15.5", ] [[package]] @@ -1764,15 +1801,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hermit-abi" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -1791,9 +1822,9 @@ checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" [[package]] name = "hex-conservative" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +checksum = "fda06d18ac606267c40c04e41b9947729bf8b9efe74bd4e82b61a5f26a510b9f" dependencies = [ "arrayvec", ] @@ -1864,9 +1895,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "hyper" @@ -1885,7 +1916,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -1910,9 +1941,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -1923,9 +1954,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -1936,11 +1967,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -1951,42 +1981,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -1994,6 +2020,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -2002,9 +2034,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -2085,7 +2117,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -2100,12 +2132,14 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", - "hashbrown 0.15.3", + "hashbrown 0.16.1", + "serde", + "serde_core", ] [[package]] @@ -2154,7 +2188,7 @@ dependencies = [ "quote", "serde", "serde_json", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -2211,7 +2245,7 @@ dependencies = [ "itertools 0.10.5", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -2226,7 +2260,7 @@ dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", "synstructure", ] @@ -2338,20 +2372,20 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ - "hermit-abi 0.5.1", + "hermit-abi", "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -2382,40 +2416,42 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.13" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02000660d30638906021176af16b17498bd0d12813dbfe7b276d8bc7f3c0806" +checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" dependencies = [ "jiff-static", "log", "portable-atomic", "portable-atomic-util", - "serde", + "serde_core", ] [[package]] name = "jiff-static" -version = "0.2.13" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c30758ddd7188629c6713fc45d1188af4f44c90582311d0c8d8c9907f60c48" +checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] @@ -2554,9 +2590,9 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" dependencies = [ "cpufeatures", ] @@ -2567,11 +2603,17 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + [[package]] name = "libc" -version = "0.2.172" +version = "0.2.184" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" [[package]] name = "libsecp256k1" @@ -2634,46 +2676,45 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.27" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] name = "memchr" -version = "2.7.4" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memory-db" @@ -2698,37 +2739,37 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] name = "native-tls" -version = "0.2.14" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" dependencies = [ "libc", "log", "openssl", - "openssl-probe", + "openssl-probe 0.2.1", "openssl-sys", "schannel", - "security-framework", + "security-framework 3.7.0", "security-framework-sys", "tempfile", ] @@ -2741,12 +2782,11 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "overload", - "winapi", + "windows-sys 0.61.2", ] [[package]] @@ -2761,9 +2801,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" [[package]] name = "num-format" @@ -2793,30 +2833,26 @@ dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi 0.3.9", - "libc", -] - [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "opaque-debug" @@ -2826,11 +2862,11 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.72" +version = "0.10.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" +checksum = "951c002c75e16ea2c65b8c7e4d3d51d5530d8dfa7d060b4776828c88cfb18ecf" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.11.0", "cfg-if", "foreign-types", "libc", @@ -2847,7 +2883,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -2856,11 +2892,17 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + [[package]] name = "openssl-sys" -version = "0.9.108" +version = "0.9.112" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e145e1651e858e820e4860f7b9c5e169bc1d8ce1c86043be79fa7b7634821847" +checksum = "57d55af3b3e226502be1526dfdba67ab0e9c96fc293004e79576b2b9edb0dbdb" dependencies = [ "cc", "libc", @@ -2868,12 +2910,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "parity-bip39" version = "2.0.1" @@ -2910,10 +2946,10 @@ version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -2924,9 +2960,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -2934,15 +2970,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets", + "windows-link", ] [[package]] @@ -2973,43 +3009,46 @@ dependencies = [ "password-hash", ] +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkcs8" @@ -3051,7 +3090,7 @@ dependencies = [ "polkavm-common", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -3061,7 +3100,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c16669ddc7433e34c1007d31080b80901e3e8e523cb9d4b441c3910cf9294b" dependencies = [ "polkavm-derive-impl", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -3198,7 +3237,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5baf6433b8ebd0cfae673d173746081f97ce9b3dd5f5f9b847472187208e917" dependencies = [ "async-trait", - "env_logger 0.11.8", + "env_logger 0.11.10", "hex", "log", "polymesh-api", @@ -3215,24 +3254,24 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.11.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" dependencies = [ "portable-atomic", ] [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -3254,12 +3293,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.32" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -3301,11 +3340,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.22.26", + "toml_edit 0.25.9+spec-1.1.0", ] [[package]] @@ -3334,27 +3373,33 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "radium" @@ -3389,81 +3434,66 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "redox_syscall" -version = "0.5.12" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.11.0", ] [[package]] name = "ref-cast" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "rfc6979" @@ -3483,7 +3513,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", @@ -3497,9 +3527,9 @@ checksum = "fc874b127765f014d792f16763a81245ab80500e2ad921ed4ee9e82481ee08fe" [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" [[package]] name = "rustc-hash" @@ -3524,15 +3554,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3553,10 +3583,10 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ - "openssl-probe", + "openssl-probe 0.1.6", "rustls-pemfile", "schannel", - "security-framework", + "security-framework 2.11.1", ] [[package]] @@ -3580,15 +3610,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "salsa20" @@ -3691,19 +3721,19 @@ version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3719,9 +3749,9 @@ dependencies = [ [[package]] name = "schnorrkel" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" +checksum = "6e9fcb6c2e176e86ec703e22560d99d65a5ee9056ae45a08e13e84ebf796296f" dependencies = [ "aead", "arrayref", @@ -3785,7 +3815,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" dependencies = [ - "secp256k1-sys 0.8.1", + "secp256k1-sys 0.8.2", ] [[package]] @@ -3803,16 +3833,16 @@ version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" dependencies = [ - "bitcoin_hashes 0.14.0", + "bitcoin_hashes 0.14.1", "rand", "secp256k1-sys 0.10.1", ] [[package]] name = "secp256k1-sys" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" +checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" dependencies = [ "cc", ] @@ -3859,8 +3889,21 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.1", - "core-foundation", + "bitflags 2.11.0", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags 2.11.0", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -3868,9 +3911,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -3878,9 +3921,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "send_wrapper" @@ -3890,10 +3933,11 @@ checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] @@ -3908,42 +3952,53 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.17" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" dependencies = [ "serde", + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.13.0", "itoa", "memchr", - "ryu", "serde", + "serde_core", + "zmij", ] [[package]] name = "serde_spanned" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ "serde", ] @@ -4034,10 +4089,11 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -4059,29 +4115,36 @@ checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + [[package]] name = "soketto" version = "0.7.1" @@ -4195,7 +4258,7 @@ checksum = "48d09fa0a5f7299fb81ee25ae3853d26200f7a348148aed6de76be905c007dbe" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -4327,10 +4390,10 @@ checksum = "0195f32c628fee3ce1dfbbf2e7e52a30ea85f3589da9fe62a8b816d70fc06294" dependencies = [ "Inflector", "expander", - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.5.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -4387,9 +4450,9 @@ dependencies = [ [[package]] name = "sp-trie" -version = "39.1.0" +version = "39.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a555bf4c42ca89e2e7bf2f11308806dad13cdbd7f8fd60cf2649f12b6ee809bf" +checksum = "287022ea19685d81641d3fbf4271c2b95ca70e9104b82b154ce47269d484c2b8" dependencies = [ "ahash", "hash-db", @@ -4476,14 +4539,14 @@ dependencies = [ "crc", "crossbeam-queue", "either", - "event-listener 5.4.0", + "event-listener 5.4.1", "futures-core", "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.3", + "hashbrown 0.15.5", "hashlink", - "indexmap 2.9.0", + "indexmap 2.13.0", "log", "memchr", "native-tls", @@ -4492,7 +4555,7 @@ dependencies = [ "serde", "sha2 0.10.9", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.18", "tokio", "tokio-stream", "tracing", @@ -4509,7 +4572,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -4530,7 +4593,7 @@ dependencies = [ "sha2 0.10.9", "sqlx-core", "sqlx-sqlite", - "syn 2.0.101", + "syn 2.0.117", "tokio", "url", ] @@ -4554,7 +4617,7 @@ dependencies = [ "serde", "serde_urlencoded", "sqlx-core", - "thiserror 2.0.12", + "thiserror 2.0.18", "tracing", "url", ] @@ -4576,9 +4639,9 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "static_assertions" @@ -4611,14 +4674,14 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "substrate-bip39" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca58ffd742f693dc13d69bdbb2e642ae239e0053f6aab3b104252892f856700a" +checksum = "d93affb0135879b1b67cbcf6370a256e1772f9eaaece3899ec20966d67ad0492" dependencies = [ "hmac 0.12.1", "pbkdf2", @@ -4656,7 +4719,7 @@ dependencies = [ "serde_json", "sha2 0.10.9", "sp-crypto-hashing", - "thiserror 2.0.12", + "thiserror 2.0.18", "zeroize", ] @@ -4673,9 +4736,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.101" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -4690,7 +4753,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -4701,15 +4764,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.20.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.4.2", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4732,11 +4795,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.18", ] [[package]] @@ -4747,56 +4810,55 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] name = "time" -version = "0.3.41" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -4804,9 +4866,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -4814,9 +4876,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -4829,31 +4891,30 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ - "backtrace", "bytes", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.6.3", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -4868,9 +4929,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ "futures-core", "pin-project-lite", @@ -4879,9 +4940,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -4893,55 +4954,85 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.22" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", - "toml_datetime", - "toml_edit 0.22.26", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", ] [[package]] name = "toml_datetime" -version = "0.6.9" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.9.0", - "toml_datetime", + "indexmap 2.13.0", + "toml_datetime 0.6.11", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.26" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.13.0", "serde", "serde_spanned", - "toml_datetime", + "toml_datetime 0.6.11", "toml_write", - "winnow 0.7.10", + "winnow 0.7.15", +] + +[[package]] +name = "toml_edit" +version = "0.25.9+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da053d28fe57e2c9d21b48261e14e7b4c8b670b54d2c684847b91feaf4c7dac5" +dependencies = [ + "indexmap 2.13.0", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.1", +] + +[[package]] +name = "toml_parser" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ca317ebc49f06bd748bfba29533eac9485569dc9bf80b849024b025e814fb9" +dependencies = [ + "winnow 1.0.1", ] [[package]] name = "toml_write" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "tower" @@ -4972,9 +5063,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -4984,20 +5075,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -5016,14 +5107,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", @@ -5080,9 +5171,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "uint" @@ -5110,9 +5201,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-normalization" @@ -5147,13 +5238,14 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] [[package]] @@ -5170,11 +5262,13 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.16.0" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" +checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" dependencies = [ - "serde", + "js-sys", + "serde_core", + "wasm-bindgen", ] [[package]] @@ -5284,63 +5378,56 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] -name = "wasm-bindgen" -version = "0.2.100" +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", + "wit-bindgen", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" +name = "wasm-bindgen" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.101", + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e" dependencies = [ - "cfg-if", "js-sys", - "once_cell", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5348,31 +5435,65 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.101", - "wasm-bindgen-backend", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.13.0", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.0", + "hashbrown 0.15.5", + "indexmap 2.13.0", + "semver", +] + [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" dependencies = [ "js-sys", "wasm-bindgen", @@ -5402,11 +5523,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5415,6 +5536,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + [[package]] name = "windows-sys" version = "0.52.0" @@ -5426,11 +5553,11 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.59.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-targets", + "windows-link", ] [[package]] @@ -5508,27 +5635,115 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.10" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" +checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" dependencies = [ "memchr", ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" dependencies = [ - "bitflags 2.9.1", + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.13.0", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.0", + "indexmap 2.13.0", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.13.0", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", ] [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "wyz" @@ -5547,11 +5762,10 @@ checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -5559,34 +5773,34 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.25" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.25" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -5606,35 +5820,35 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -5643,9 +5857,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -5654,11 +5868,17 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/integration/rust-toolchain.toml b/integration/rust-toolchain.toml index 65f6dc2fdd..2cfd986445 100644 --- a/integration/rust-toolchain.toml +++ b/integration/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "nightly-2025-09-01" +channel = "nightly-2025-12-01" components = [ "rustfmt" ] profile = "minimal" diff --git a/pallets/asset/src/checkpoint/mod.rs b/pallets/asset/src/checkpoint/mod.rs index d21a28ecfc..23c1872954 100644 --- a/pallets/asset/src/checkpoint/mod.rs +++ b/pallets/asset/src/checkpoint/mod.rs @@ -47,7 +47,6 @@ use frame_support::{pallet_prelude::*, traits::UnixTime}; use frame_system::pallet_prelude::*; use sp_runtime::traits::SaturatedConversion; use sp_std::prelude::*; -use sp_std::vec; use pallet_base::try_next_pre; use polymesh_primitives::asset::{AssetId, CheckpointId}; diff --git a/pallets/contracts/src/lib.rs b/pallets/contracts/src/lib.rs index efa27c4a44..275cbb03e4 100644 --- a/pallets/contracts/src/lib.rs +++ b/pallets/contracts/src/lib.rs @@ -69,7 +69,7 @@ use pallet_contracts::Determinism; use scale_info::TypeInfo; use sp_core::crypto::UncheckedFrom; use sp_runtime::traits::Hash; -use sp_std::{vec, vec::Vec}; +use sp_std::vec::Vec; pub use chain_extension::{ExtrinsicId, PolymeshExtension}; use pallet_contracts::weights::WeightInfo as FrameWeightInfo; diff --git a/pallets/permissions/src/lib.rs b/pallets/permissions/src/lib.rs index 2c303f3919..39f42c5e31 100644 --- a/pallets/permissions/src/lib.rs +++ b/pallets/permissions/src/lib.rs @@ -33,9 +33,9 @@ use frame_support::traits::{CallMetadata, GetCallMetadata}; use scale_info::TypeInfo; use sp_runtime::traits::{DispatchInfoOf, Dispatchable, PostDispatchInfoOf, TransactionExtension}; use sp_runtime::transaction_validity::{TransactionValidityError, ValidTransaction}; +use sp_std::fmt; use sp_std::marker::PhantomData; use sp_std::result::Result; -use sp_std::{fmt, vec}; use polymesh_primitives::{ExtrinsicName, IdentityId, PalletName, SecondaryKey}; diff --git a/pallets/relayer/src/lib.rs b/pallets/relayer/src/lib.rs index f35b137b15..90e29e5902 100644 --- a/pallets/relayer/src/lib.rs +++ b/pallets/relayer/src/lib.rs @@ -53,7 +53,6 @@ use frame_system::{ensure_signed, RawOrigin}; use scale_info::TypeInfo; use sp_runtime::transaction_validity::InvalidTransaction; use sp_std::prelude::*; -use sp_std::vec; use polymesh_primitives::crypto::{ChainScopedMessage, RELAY_TX_LABEL}; use polymesh_primitives::identity::AuthorizationNonce; diff --git a/pallets/runtime/common/Cargo.toml b/pallets/runtime/common/Cargo.toml index 8fee59c4ba..b0a4eac246 100644 --- a/pallets/runtime/common/Cargo.toml +++ b/pallets/runtime/common/Cargo.toml @@ -28,6 +28,7 @@ frame-system = { workspace = true, default-features = false } pallet-balances = { workspace = true, default-features = false } pallet-authorship = { workspace = true, default-features = false } pallet-election-provider-multi-phase = { workspace = true, default-features = false } +pallet-transaction-payment = { workspace = true, default-features = false } sp-genesis-builder = { workspace = true, default-features = false } sp-io = { workspace = true, default-features = false } sp-std = { workspace = true, default-features = false } @@ -47,6 +48,7 @@ std = [ "pallet-balances/std", "pallet-committee/std", "pallet-election-provider-multi-phase/std", + "pallet-transaction-payment/std", "pallet-group-rpc-runtime-api/std", "pallet-identity/std", "pallet-multisig/std", @@ -68,6 +70,7 @@ runtime-benchmarks = [ "pallet-multisig/runtime-benchmarks", "pallet-relayer/runtime-benchmarks", "polymesh-transaction-payment/runtime-benchmarks", + "pallet-transaction-payment/runtime-benchmarks", "polymesh-primitives/runtime-benchmarks", "sp-runtime/runtime-benchmarks", ] diff --git a/pallets/runtime/common/src/lib.rs b/pallets/runtime/common/src/lib.rs index 9bb97f7ab4..26b4c2610b 100644 --- a/pallets/runtime/common/src/lib.rs +++ b/pallets/runtime/common/src/lib.rs @@ -24,6 +24,7 @@ pub mod runtime; use frame_election_provider_support::bounds::{ElectionBounds, ElectionBoundsBuilder}; pub use frame_support::dispatch::{DispatchClass, GetDispatchInfo}; +use frame_support::pallet_prelude::One; pub use frame_support::parameter_types; pub use frame_support::traits::{Currency, Get}; pub use frame_support::weights::constants::{ @@ -34,8 +35,9 @@ pub use frame_support::weights::{ RuntimeDbWeight, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, }; use frame_system::limits::{BlockLength, BlockWeights}; +use pallet_transaction_payment::Multiplier; pub use sp_runtime::transaction_validity::TransactionPriority; -pub use sp_runtime::{Perbill, Percent, Permill, SaturatedConversion, Saturating}; +pub use sp_runtime::{FixedU128, Perbill, Percent, Permill, SaturatedConversion, Saturating}; pub use impls::Author; use polymesh_primitives::constants::currency::*; @@ -82,6 +84,8 @@ parameter_types! { pub const PolyXBaseFee: Balance = 3 * CENTS; /// The multiplier for operational fees. pub const OperationalFeeMultiplier: u8 = 5; + /// The fee multiplier to use for adjusting fees. + pub FeeMultiplier: Multiplier = Multiplier::one(); /// The maximum weight of the pips extrinsic `enact_snapshot_results` which equals to /// `MaximumBlockWeight * AvailableBlockRatio`. pub const PipsEnactSnapshotMaximumWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_mul(75).saturating_div(100); @@ -91,12 +95,16 @@ parameter_types! { pub const DepositPerContract: Balance = 10 * CENTS; /// The balance a contract needs to deposit per storage item to stay alive indefinitely. pub const DepositPerItem: Balance = deposit(1, 0); + /// The balance a contract needs to deposit per child trie item to stay alive indefinitely. + pub const DepositPerChildTrieItem: Balance = deposit(1, 0) / 100; /// The balance a contract needs to deposit per storage byte to stay alive indefinitely. pub const DepositPerByte: Balance = deposit(0, 1); /// The code hash lookup deposit. pub CodeHashLockupDepositPercent: Perbill = Perbill::from_percent(30); /// The default deposit limit. pub const DefaultDepositLimit: Balance = deposit(1024, 1024 * 1024); + /// The maximum ratio of eth extrinsic weight to block weight. + pub const MaxEthExtrinsicWeight: FixedU128 = FixedU128::from_rational(9, 10); /// The maximum nesting level of a call/instantiate stack. pub const ContractsMaxDepth: u32 = 32; /// The maximum size of a storage value and event payload in bytes. @@ -104,8 +112,10 @@ parameter_types! { /// Max length of (instrumented) contract code in bytes. pub const ContractsMaxCodeSize: u32 = 100 * 1024; - pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(10 * 1024 * 1024, NORMAL_DISPATCH_RATIO); + pub RuntimeBlockLength: BlockLength = BlockLength::builder() + .max_length(10 * 1024 * 1024) + .modify_max_length_for_class(DispatchClass::Normal, |m| *m = NORMAL_DISPATCH_RATIO * *m) + .build(); pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() .base_block(BlockExecutionWeight::get()) diff --git a/pallets/runtime/common/src/runtime.rs b/pallets/runtime/common/src/runtime.rs index 12a5acbacf..3095a39563 100644 --- a/pallets/runtime/common/src/runtime.rs +++ b/pallets/runtime/common/src/runtime.rs @@ -222,9 +222,15 @@ macro_rules! misc_pallet_impls { #[allow(deprecated)] type OnChargeTransaction = pallet_transaction_payment::FungibleAdapter; - type WeightToFee = polymesh_runtime_common::WeightToFee; + // The two generic parameters of `BlockRatioFee` define a rational number that defines the + // ref_time to fee mapping. The numbers chosen here are exactly the same as the one from the + // `WeightToFeePolynomial` that was used before: + // - The numerator is `3 * currency::CENTS` = 3 * 1_000_000 / 100 = 30_000 + // - The denominator is `Balance::from(ExtrinsicBaseWeight::get().ref_time())` + // - which is 1_000_000 * 650 = 650_000_000 + type WeightToFee = pallet_revive::evm::fees::BlockRatioFee<30_000, 650_000_000, Self, Balance>; type LengthToFee = polymesh_runtime_common::LengthToFee; - type FeeMultiplierUpdate = (); + type FeeMultiplierUpdate = pallet_transaction_payment::ConstFeeMultiplier; type OperationalFeeMultiplier = polymesh_runtime_common::OperationalFeeMultiplier; type WeightInfo = polymesh_weights::polymesh_transaction_payment::SubstrateWeight; type ChargeFees = PolymeshTransactionPayment; @@ -633,6 +639,36 @@ macro_rules! misc_pallet_impls { type PolymeshHooks = polymesh_contracts::benchmarking::BenchmarkContractPolymeshHooks; } + impl pallet_revive::Config for Runtime { + type Time = Timestamp; + type Balance = Balance; + type Currency = Balances; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type RuntimeOrigin = RuntimeOrigin; + type DepositPerItem = polymesh_runtime_common::DepositPerItem; + type DepositPerChildTrieItem = polymesh_runtime_common::DepositPerChildTrieItem; + type DepositPerByte = polymesh_runtime_common::DepositPerByte; + type WeightInfo = pallet_revive::weights::SubstrateWeight; + type Precompiles = (); + type AddressMapper = pallet_revive::AccountId32Mapper; + type RuntimeMemory = frame_support::traits::ConstU32<{ 128 * 1024 * 1024 }>; + type PVFMemory = frame_support::traits::ConstU32<{ 512 * 1024 * 1024 }>; + type UploadOrigin = frame_system::EnsureSigned; + type InstantiateOrigin = frame_system::EnsureSigned; + type RuntimeHoldReason = RuntimeHoldReason; + type CodeHashLockupDepositPercent = polymesh_runtime_common::CodeHashLockupDepositPercent; + type ChainId = EvmChainId; + type NativeToEthRatio = frame_support::traits::ConstU64<1_000_000_000_000>; // 10^(18 - 6) Eth is 10^18, Native is 10^6. + type FindAuthor = ::FindAuthor; + type AllowEVMBytecode = frame_support::traits::ConstBool; + type FeeInfo = pallet_revive::evm::fees::Info; + type MaxEthExtrinsicWeight = polymesh_runtime_common::MaxEthExtrinsicWeight; + type DebugEnabled = frame_support::traits::ConstBool; + type GasScale = frame_support::traits::ConstU32<1>; + type OnBurn = (); + } + impl pallet_compliance_manager::Config for Runtime { type WeightInfo = polymesh_weights::pallet_compliance_manager::SubstrateWeight; type MaxConditionComplexity = MaxConditionComplexity; @@ -799,17 +835,20 @@ macro_rules! misc_pallet_impls { .saturating_sub(1); let era = generic::Era::mortal(period, current_block); let tx_ext: TxExtension = ( - frame_system::AuthorizeCall::new(), - frame_system::CheckNonZeroSender::new(), - frame_system::CheckSpecVersion::new(), - frame_system::CheckTxVersion::new(), - frame_system::CheckGenesis::new(), + ( + frame_system::AuthorizeCall::new(), + frame_system::CheckNonZeroSender::new(), + frame_system::CheckSpecVersion::new(), + frame_system::CheckTxVersion::new(), + frame_system::CheckGenesis::new(), + ), frame_system::CheckEra::from(era), frame_system::CheckNonce::from(nonce), frame_system::CheckWeight::new(), polymesh_transaction_payment::ChargeTransactionPayment::from(tip), pallet_permissions::StoreCallMetadata::new(), frame_metadata_hash_extension::CheckMetadataHash::new(false), + pallet_revive::evm::tx_extension::SetOrigin::default(), frame_system::WeightReclaim::new(), ); let raw_payload = SignedPayload::new(call, tx_ext) @@ -820,7 +859,7 @@ macro_rules! misc_pallet_impls { let signature = raw_payload.using_encoded(|payload| C::sign(payload, public))?; let address = Indices::unlookup(account); let (call, tx_ext, _) = raw_payload.deconstruct(); - let transaction = UncheckedExtrinsic::new_signed(call, address, signature, tx_ext); + let transaction = generic::UncheckedExtrinsic::new_signed(call, address, signature, tx_ext).into(); Some(transaction) } } @@ -844,17 +883,20 @@ macro_rules! misc_pallet_impls { { fn create_extension() -> Self::Extension { ( - frame_system::AuthorizeCall::::new(), - frame_system::CheckNonZeroSender::::new(), - frame_system::CheckSpecVersion::::new(), - frame_system::CheckTxVersion::::new(), - frame_system::CheckGenesis::::new(), + ( + frame_system::AuthorizeCall::::new(), + frame_system::CheckNonZeroSender::::new(), + frame_system::CheckSpecVersion::::new(), + frame_system::CheckTxVersion::::new(), + frame_system::CheckGenesis::::new(), + ), frame_system::CheckEra::::from(generic::Era::Immortal), frame_system::CheckNonce::::from(0), frame_system::CheckWeight::::new(), polymesh_transaction_payment::ChargeTransactionPayment::::from(0), pallet_permissions::StoreCallMetadata::::new(), frame_metadata_hash_extension::CheckMetadataHash::::new(false), + pallet_revive::evm::tx_extension::SetOrigin::::default(), frame_system::WeightReclaim::::new(), ) } @@ -865,7 +907,7 @@ macro_rules! misc_pallet_impls { RuntimeCall: From, { fn create_bare(call: RuntimeCall) -> UncheckedExtrinsic { - UncheckedExtrinsic::new_bare(call) + generic::UncheckedExtrinsic::new_bare(call).into() } } @@ -973,6 +1015,7 @@ macro_rules! runtime_apis { use frame_support::pallet_prelude::DispatchError; use frame_support::traits::GetStorageVersion; use sp_inherents::{CheckInherentsResult, InherentData}; + use sp_api::impl_runtime_apis; use frame_support::dispatch::DispatchResult; use node_rpc_runtime_api::asset as rpc_api_asset; @@ -1000,21 +1043,53 @@ macro_rules! runtime_apis { pub type BlockId = generic::BlockId; /// The SignedExtension to the basic transaction logic. pub type TxExtension = ( - frame_system::AuthorizeCall, - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, + ( + frame_system::AuthorizeCall, + frame_system::CheckNonZeroSender, + frame_system::CheckSpecVersion, + frame_system::CheckTxVersion, + frame_system::CheckGenesis, + ), frame_system::CheckEra, frame_system::CheckNonce, frame_system::CheckWeight, polymesh_transaction_payment::ChargeTransactionPayment, pallet_permissions::StoreCallMetadata, frame_metadata_hash_extension::CheckMetadataHash, + pallet_revive::evm::tx_extension::SetOrigin, frame_system::WeightReclaim, ); + + #[derive(Clone, PartialEq, Eq, Debug)] + pub struct EthExtraImpl; + + impl pallet_revive::evm::runtime::EthExtra for EthExtraImpl { + type Config = Runtime; + type Extension = TxExtension; + + fn get_eth_extension(nonce: u32, tip: Balance) -> Self::Extension { + ( + ( + frame_system::AuthorizeCall::::new(), + frame_system::CheckNonZeroSender::::new(), + frame_system::CheckSpecVersion::::new(), + frame_system::CheckTxVersion::::new(), + frame_system::CheckGenesis::::new(), + ), + frame_system::CheckEra::::from(generic::Era::Immortal), + frame_system::CheckNonce::::from(nonce), + frame_system::CheckWeight::::new(), + polymesh_transaction_payment::ChargeTransactionPayment::::from(tip), + pallet_permissions::StoreCallMetadata::new(), + frame_metadata_hash_extension::CheckMetadataHash::::new(false), + pallet_revive::evm::tx_extension::SetOrigin::::new_from_eth_transaction(), + frame_system::WeightReclaim::::new(), + ) + } + } + /// Unchecked extrinsic type as expected by this runtime. - pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; + pub type UncheckedExtrinsic = pallet_revive::evm::runtime::UncheckedExtrinsic; /// The payload being signed in transactions. pub type SignedPayload = generic::SignedPayload; /// Extrinsic type that has already been checked. @@ -1043,7 +1118,12 @@ macro_rules! runtime_apis { pub type Hashing = ::Hashing; } - sp_api::impl_runtime_apis! { + pallet_revive::impl_runtime_apis_plus_revive_traits!( + Runtime, + Revive, + Executive, + EthExtraImpl, + impl sp_api::Core for Runtime { fn version() -> RuntimeVersion { VERSION @@ -1297,8 +1377,8 @@ macro_rules! runtime_apis { } impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(seed: Option>) -> Vec { - SessionKeys::generate(seed) + fn generate_session_keys(owner: Vec, seed: Option>) -> sp_session::OpaqueGeneratedSessionKeys { + SessionKeys::generate(&owner, seed).into() } fn decode_session_keys( @@ -1658,6 +1738,6 @@ macro_rules! runtime_apis { } $($extra)* - } + ); } } diff --git a/pallets/runtime/develop/Cargo.toml b/pallets/runtime/develop/Cargo.toml index 897a4627e8..e51fad6a08 100644 --- a/pallets/runtime/develop/Cargo.toml +++ b/pallets/runtime/develop/Cargo.toml @@ -81,8 +81,10 @@ pallet-indices = { workspace = true, default-features = false } pallet-mmr = { workspace = true, default-features = false } pallet-offences = { workspace = true, default-features = false } pallet-preimage = { workspace = true, default-features = false } +pallet-revive = { workspace = true, default-features = false } pallet-scheduler = { workspace = true, default-features = false } pallet-session = { workspace = true, default-features = false } +pallet-session-benchmarking = { workspace = true, default-features = false, optional = true } pallet-staking = { workspace = true, default-features = false } pallet-staking-reward-curve = { workspace = true, default-features = false } pallet-sudo = { workspace = true, default-features = false } @@ -152,6 +154,7 @@ std = [ "pallet-portfolio/std", "pallet-protocol-fee/std", "pallet-protocol-fee-rpc-runtime-api/std", + "pallet-revive/std", "pallet-session/std", "pallet-settlement/std", "pallet-staking/std", @@ -176,6 +179,7 @@ std = [ ] runtime-benchmarks = [ "frame-benchmarking", + "pallet-session-benchmarking/runtime-benchmarks", "frame-system-benchmarking/runtime-benchmarks", "frame-election-provider-support/runtime-benchmarks", "frame-support/runtime-benchmarks", @@ -200,6 +204,7 @@ runtime-benchmarks = [ "pallet-preimage/runtime-benchmarks", "pallet-protocol-fee/runtime-benchmarks", "pallet-relayer/runtime-benchmarks", + "pallet-revive/runtime-benchmarks", "pallet-scheduler/runtime-benchmarks", "pallet-settlement/runtime-benchmarks", "pallet-staking/runtime-benchmarks", diff --git a/pallets/runtime/develop/src/benchmarks/mod.rs b/pallets/runtime/develop/src/benchmarks/mod.rs deleted file mode 100644 index b19bb6dd36..0000000000 --- a/pallets/runtime/develop/src/benchmarks/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod pallet_session; diff --git a/pallets/runtime/develop/src/benchmarks/pallet_session.rs b/pallets/runtime/develop/src/benchmarks/pallet_session.rs deleted file mode 100644 index 5a3cc32616..0000000000 --- a/pallets/runtime/develop/src/benchmarks/pallet_session.rs +++ /dev/null @@ -1,99 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) 2020 Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! Benchmarks for the Session Pallet. -// This is separated into its own crate due to cyclic dependency issues. - -// Modified by Polymesh Association - 4th January 2021 -// - It uses our Staking pallet. - -use codec::Decode; -use frame_benchmarking::benchmarks; -use frame_support::traits::OnInitialize; -use frame_system::pallet_prelude::BlockNumberFor; -use frame_system::RawOrigin; -use sp_core::Get; -use sp_runtime::traits::TrailingZeroInput; -use sp_std::prelude::*; -use sp_std::vec; - -use pallet_session::historical::Config as HistoricalConfig; -use pallet_session::{Call, Config as SessionConfig, Pallet as Session}; -use pallet_staking::benchmarking::create_validator_with_nominators; -use pallet_staking::{Config as StakingConfig, MaxNominationsOf, RewardDestination}; - -pub struct Pallet(Session); -pub trait Config: SessionConfig + HistoricalConfig + StakingConfig {} - -impl OnInitialize> for Pallet { - fn on_initialize(n: BlockNumberFor) -> frame_support::weights::Weight { - Session::::on_initialize(n) - } -} - -struct ValidatorInfo { - controller: T::AccountId, - keys: T::Keys, - proof: Vec, -} - -impl ValidatorInfo { - pub fn build(nominators: u32) -> Result, &'static str> { - let stash = create_validator_with_nominators::( - nominators, - MaxNominationsOf::::get(), - false, - false, - RewardDestination::Staked, - ) - .unwrap() - .0; - let controller = pallet_staking::Pallet::::bonded(&stash).expect("not stash"); - - let keys = T::Keys::decode(&mut TrailingZeroInput::zeroes()).unwrap(); - let proof: Vec = vec![0, 1, 2, 3]; - - // Whitelist controller account from further DB operations. - let controller_key = frame_system::Account::::hashed_key_for(&controller); - frame_benchmarking::benchmarking::add_to_whitelist(controller_key.into()); - - Ok(Self { - controller, - keys, - proof, - }) - } -} - -benchmarks! { - set_keys { - let n = MaxNominationsOf::::get(); - let validator = ValidatorInfo::::build(n).unwrap(); - let proof = validator.proof.clone(); - let keys = validator.keys.clone(); - - }: _(RawOrigin::Signed(validator.controller), keys, proof) - - purge_keys { - let n = MaxNominationsOf::::get(); - let validator = ValidatorInfo::::build(n).unwrap(); - let controller = RawOrigin::Signed(validator.controller.clone()); - - Session::::set_keys(controller.clone().into(), validator.keys, validator.proof).unwrap(); - - }: _(controller) -} diff --git a/pallets/runtime/develop/src/lib.rs b/pallets/runtime/develop/src/lib.rs index 0abe67d0b9..54c0afdfde 100644 --- a/pallets/runtime/develop/src/lib.rs +++ b/pallets/runtime/develop/src/lib.rs @@ -2,16 +2,9 @@ // `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. #![recursion_limit = "1024"] -#[cfg(feature = "runtime-benchmarks")] -#[macro_use] -extern crate frame_benchmarking; - pub mod constants; pub mod runtime; -#[cfg(feature = "runtime-benchmarks")] -pub mod benchmarks; - #[cfg(feature = "std")] pub use pallet_staking::StakerStatus; diff --git a/pallets/runtime/develop/src/runtime.rs b/pallets/runtime/develop/src/runtime.rs index 0519acf6a3..6b1eabe3b7 100644 --- a/pallets/runtime/develop/src/runtime.rs +++ b/pallets/runtime/develop/src/runtime.rs @@ -27,7 +27,7 @@ use polymesh_primitives::constants::currency::*; use polymesh_primitives::constants::ENSURED_MAX_LEN; use polymesh_primitives::protocol_fee::ProtocolOp; use polymesh_primitives::settlement::Leg; -use polymesh_primitives::{Balance, BlockNumber, Moment}; +use polymesh_primitives::{AccountId, Balance, BlockNumber, Moment}; use polymesh_runtime_common::impls::Author; use polymesh_runtime_common::merge_active_and_inactive; use polymesh_runtime_common::runtime::{GovernanceCommittee, BENCHMARK_MAX_INCREASE, VMO}; @@ -75,6 +75,9 @@ parameter_types! { pub const ExpectedBlockTime: Moment = MILLISECS_PER_BLOCK; pub const SS58Prefix: u8 = 42; + // Revive/EVM + pub const EvmChainId: u64 = 1_641_818; + // Base: pub const MaxLen: u32 = ENSURED_MAX_LEN; @@ -481,12 +484,15 @@ mod runtime { #[runtime::pallet_index(54)] pub type MmrLeaf = pallet_beefy_mmr::Pallet; + + #[runtime::pallet_index(80)] + pub type Revive = pallet_revive::Pallet; } #[cfg(feature = "runtime-benchmarks")] #[macro_use] mod benches { - define_benchmarks!( + frame_benchmarking::define_benchmarks!( [frame_benchmarking, BaselineBench::] [pallet_asset, Asset] [pallet_balances, Balances] @@ -526,6 +532,7 @@ mod benches { [polymesh_contracts, PolymeshContracts] [pallet_nft, Nft] [pallet_contracts, Contracts] + [pallet_revive, Revive] ); } @@ -539,13 +546,18 @@ polymesh_runtime_common::runtime_apis! { use frame_benchmarking::{baseline, BenchmarkBatch}; use frame_support::traits::TrackedStorageKey; - use crate::benchmarks::pallet_session::Pallet as SessionBench; + use pallet_session_benchmarking::Pallet as SessionBench; use frame_system_benchmarking::Pallet as SystemBench; use baseline::Pallet as BaselineBench; impl frame_system_benchmarking::Config for Runtime {} impl baseline::Config for Runtime {} - impl crate::benchmarks::pallet_session::Config for Runtime {} + impl pallet_session_benchmarking::Config for Runtime { + fn generate_session_keys_and_proof(owner: Self::AccountId) -> (Self::Keys, Vec) { + let keys = SessionKeys::generate(&owner.encode(), None); + (keys.keys, keys.proof.encode()) + } + } let whitelist: Vec = vec![ // Block Number @@ -575,7 +587,7 @@ polymesh_runtime_common::runtime_apis! { use frame_benchmarking::{baseline, BenchmarkList}; use frame_support::traits::StorageInfoTrait; - use crate::benchmarks::pallet_session::Pallet as SessionBench; + use pallet_session_benchmarking::Pallet as SessionBench; use frame_system_benchmarking::Pallet as SystemBench; use baseline::Pallet as BaselineBench; diff --git a/pallets/runtime/mainnet/Cargo.toml b/pallets/runtime/mainnet/Cargo.toml index 7a695b58c1..3afd0ae010 100644 --- a/pallets/runtime/mainnet/Cargo.toml +++ b/pallets/runtime/mainnet/Cargo.toml @@ -83,6 +83,7 @@ pallet-indices = { workspace = true, default-features = false } pallet-mmr = { workspace = true, default-features = false } pallet-offences = { workspace = true, default-features = false } pallet-preimage = { workspace = true, default-features = false } +pallet-revive = { workspace = true, default-features = false } pallet-scheduler = { workspace = true, default-features = false } pallet-session = { workspace = true, default-features = false } pallet-staking = { workspace = true, default-features = false } @@ -157,6 +158,7 @@ std = [ "pallet-protocol-fee-rpc-runtime-api/std", "pallet-protocol-fee/std", "pallet-relayer/std", + "pallet-revive/std", "pallet-scheduler/std", "pallet-session/std", "pallet-settlement/std", @@ -217,6 +219,7 @@ runtime-benchmarks = [ "pallet-preimage/runtime-benchmarks", "pallet-protocol-fee/runtime-benchmarks", "pallet-relayer/runtime-benchmarks", + "pallet-revive/runtime-benchmarks", "pallet-scheduler/runtime-benchmarks", "pallet-settlement/runtime-benchmarks", "pallet-staking/runtime-benchmarks", diff --git a/pallets/runtime/mainnet/src/runtime.rs b/pallets/runtime/mainnet/src/runtime.rs index f77405fb3b..2667db1e3a 100644 --- a/pallets/runtime/mainnet/src/runtime.rs +++ b/pallets/runtime/mainnet/src/runtime.rs @@ -32,7 +32,7 @@ use polymesh_primitives::constants::currency::*; use polymesh_primitives::constants::ENSURED_MAX_LEN; use polymesh_primitives::protocol_fee::ProtocolOp; use polymesh_primitives::settlement::Leg; -use polymesh_primitives::{Balance, BlockNumber, Moment}; +use polymesh_primitives::{AccountId, Balance, BlockNumber, Moment}; use polymesh_runtime_common::impls::Author; use polymesh_runtime_common::merge_active_and_inactive; use polymesh_runtime_common::runtime::{GovernanceCommittee, BENCHMARK_MAX_INCREASE, VMO}; @@ -74,6 +74,9 @@ parameter_types! { pub const ExpectedBlockTime: Moment = MILLISECS_PER_BLOCK; pub const SS58Prefix: u8 = 12; + // Revive/EVM + pub const EvmChainId: u64 = 1_641_820; + // Base: pub const MaxLen: u32 = ENSURED_MAX_LEN; @@ -470,6 +473,9 @@ mod runtime { #[runtime::pallet_index(54)] pub type MmrLeaf = pallet_beefy_mmr::Pallet; + + #[runtime::pallet_index(80)] + pub type Revive = pallet_revive::Pallet; } polymesh_runtime_common::runtime_apis! {} diff --git a/pallets/runtime/testnet/Cargo.toml b/pallets/runtime/testnet/Cargo.toml index c44c27272d..405620510b 100644 --- a/pallets/runtime/testnet/Cargo.toml +++ b/pallets/runtime/testnet/Cargo.toml @@ -83,6 +83,7 @@ pallet-indices = { workspace = true, default-features = false } pallet-mmr = { workspace = true, default-features = false } pallet-offences = { workspace = true, default-features = false } pallet-preimage = { workspace = true, default-features = false } +pallet-revive = { workspace = true, default-features = false } pallet-scheduler = { workspace = true, default-features = false } pallet-session = { workspace = true, default-features = false } pallet-staking = { workspace = true, default-features = false } @@ -157,6 +158,7 @@ std = [ "pallet-protocol-fee-rpc-runtime-api/std", "pallet-protocol-fee/std", "pallet-relayer/std", + "pallet-revive/std", "pallet-scheduler/std", "pallet-session/std", "pallet-settlement/std", @@ -217,6 +219,7 @@ runtime-benchmarks = [ "pallet-preimage/runtime-benchmarks", "pallet-protocol-fee/runtime-benchmarks", "pallet-relayer/runtime-benchmarks", + "pallet-revive/runtime-benchmarks", "pallet-scheduler/runtime-benchmarks", "pallet-settlement/runtime-benchmarks", "pallet-staking/runtime-benchmarks", diff --git a/pallets/runtime/testnet/src/runtime.rs b/pallets/runtime/testnet/src/runtime.rs index b007ca29ee..eaca377ae2 100644 --- a/pallets/runtime/testnet/src/runtime.rs +++ b/pallets/runtime/testnet/src/runtime.rs @@ -34,7 +34,7 @@ use polymesh_primitives::constants::currency::*; use polymesh_primitives::constants::ENSURED_MAX_LEN; use polymesh_primitives::protocol_fee::ProtocolOp; use polymesh_primitives::settlement::Leg; -use polymesh_primitives::{Balance, BlockNumber, Moment}; +use polymesh_primitives::{AccountId, Balance, BlockNumber, Moment}; use polymesh_runtime_common::impls::Author; use polymesh_runtime_common::merge_active_and_inactive; use polymesh_runtime_common::runtime::{GovernanceCommittee, BENCHMARK_MAX_INCREASE, VMO}; @@ -77,6 +77,9 @@ parameter_types! { pub const ExpectedBlockTime: Moment = MILLISECS_PER_BLOCK; pub const SS58Prefix: u8 = 42; + // Revive/EVM + pub const EvmChainId: u64 = 1_641_819; + // Base: pub const MaxLen: u32 = ENSURED_MAX_LEN; @@ -478,6 +481,9 @@ mod runtime { #[runtime::pallet_index(54)] pub type MmrLeaf = pallet_beefy_mmr::Pallet; + + #[runtime::pallet_index(80)] + pub type Revive = pallet_revive::Pallet; } polymesh_runtime_common::runtime_apis! {} diff --git a/pallets/runtime/tests/Cargo.toml b/pallets/runtime/tests/Cargo.toml index d958f7bd82..ae3c3d205d 100644 --- a/pallets/runtime/tests/Cargo.toml +++ b/pallets/runtime/tests/Cargo.toml @@ -87,6 +87,7 @@ pallet-indices = { workspace = true, default-features = false } pallet-mmr = { workspace = true, default-features = false } pallet-offences = { workspace = true, default-features = false } pallet-preimage = { workspace = true, default-features = false } +pallet-revive = { workspace = true, default-features = false } pallet-scheduler = { workspace = true, default-features = false } pallet-session = { workspace = true, default-features = false, features = [ "historical", @@ -159,6 +160,7 @@ std = [ "pallet-pips/std", "pallet-portfolio/std", "pallet-relayer/std", + "pallet-revive/std", "pallet-scheduler/std", "pallet-session/std", "pallet-staking/std", diff --git a/pallets/runtime/tests/src/signed_extra.rs b/pallets/runtime/tests/src/signed_extra.rs index bae4c99a42..4557b48936 100644 --- a/pallets/runtime/tests/src/signed_extra.rs +++ b/pallets/runtime/tests/src/signed_extra.rs @@ -31,17 +31,20 @@ pub fn make_call() -> (::RuntimeCall, usize) { /// - `Normal` transactions have `priority` == 0, as `tip` == 0. fn make_signed_extra(current_block: u64, period: u64, nonce: Nonce, tip: u128) -> TxExtension { ( - frame_system::AuthorizeCall::new(), - frame_system::CheckNonZeroSender::new(), - CheckSpecVersion::::new(), - CheckTxVersion::::new(), - CheckGenesis::::new(), + ( + frame_system::AuthorizeCall::new(), + frame_system::CheckNonZeroSender::new(), + CheckSpecVersion::::new(), + CheckTxVersion::::new(), + CheckGenesis::::new(), + ), CheckEra::::from(generic::Era::mortal(period, current_block)), CheckNonce::::from(nonce), CheckWeight::::new(), polymesh_transaction_payment::ChargeTransactionPayment::::from(tip), pallet_permissions::StoreCallMetadata::::new(), frame_metadata_hash_extension::CheckMetadataHash::new(false), + pallet_revive::evm::tx_extension::SetOrigin::default(), frame_system::WeightReclaim::::new(), ) } @@ -194,7 +197,7 @@ fn operational_tx() -> Result<(), String> { TransactionSource::InBlock, ) .expect("Tx should be valid"); - assert_eq!(tx_validity.0.priority as u128, 162794569728); + assert_eq!(tx_validity.0.priority as u128, 162789326848); // Operational TX without any tip. let sign_extra = make_signed_extra(0, 10, 0, 0u128.into()); @@ -209,6 +212,6 @@ fn operational_tx() -> Result<(), String> { TransactionSource::InBlock, ) .expect("Tx should be valid"); - assert_eq!(tx_validity.0.priority, 162530328576); + assert_eq!(tx_validity.0.priority, 162525085696); Ok(()) } diff --git a/pallets/runtime/tests/src/storage.rs b/pallets/runtime/tests/src/storage.rs index 48ac9b5290..01868caec8 100644 --- a/pallets/runtime/tests/src/storage.rs +++ b/pallets/runtime/tests/src/storage.rs @@ -412,6 +412,9 @@ mod runtime { #[runtime::pallet_index(54)] pub type MmrLeaf = pallet_beefy_mmr::Pallet; + #[runtime::pallet_index(80)] + pub type Revive = pallet_revive::Pallet; + #[runtime::pallet_index(200)] pub type Example = example::Pallet; } @@ -527,7 +530,9 @@ impl OnUnbalanced> for DealWithFees { parameter_types! { pub const SS58Prefix: u8 = 12; + pub const EvmChainId: u64 = 1_641_818; pub const ExistentialDeposit: u64 = 0; + pub const BenchmarkEd: Balance = 1; pub const MaxLocks: u32 = 50; pub const MaxHolds: u32 = 32; pub const MaxFreezes: u32 = 32; @@ -1079,27 +1084,31 @@ fn sign(checked_extrinsic: CheckedExtrinsic) -> UncheckedExtrinsic { }; let function = checked_extrinsic.function; - UncheckedExtrinsic { + generic::UncheckedExtrinsic { preamble, function, encoded_call: None, } + .into() } /// Returns transaction extra. fn signed_extra(nonce: Nonce) -> TxExtension { ( - frame_system::AuthorizeCall::new(), - frame_system::CheckNonZeroSender::new(), - frame_system::CheckSpecVersion::new(), - frame_system::CheckTxVersion::new(), - frame_system::CheckGenesis::new(), + ( + frame_system::AuthorizeCall::new(), + frame_system::CheckNonZeroSender::new(), + frame_system::CheckSpecVersion::new(), + frame_system::CheckTxVersion::new(), + frame_system::CheckGenesis::new(), + ), frame_system::CheckEra::from(Era::mortal(256, 0)), frame_system::CheckNonce::from(nonce), frame_system::CheckWeight::new(), polymesh_transaction_payment::ChargeTransactionPayment::from(0), pallet_permissions::StoreCallMetadata::new(), frame_metadata_hash_extension::CheckMetadataHash::new(false), + pallet_revive::evm::tx_extension::SetOrigin::default(), frame_system::WeightReclaim::new(), ) } diff --git a/pallets/runtime/tests/src/transaction_payment_test.rs b/pallets/runtime/tests/src/transaction_payment_test.rs index 7f657e6ce0..38508fe368 100644 --- a/pallets/runtime/tests/src/transaction_payment_test.rs +++ b/pallets/runtime/tests/src/transaction_payment_test.rs @@ -96,7 +96,7 @@ fn signed_extension_transaction_payment_work() { let pre = ChargeTransactionPayment::::from(0) .prepare(val.1, &bob_origin, &call(), &info_from_weight(5), len) .unwrap(); - assert_eq!(Balances::free_balance(&bob), 1999969000); + assert_eq!(Balances::free_balance(&bob), 1999969001); assert!(ChargeTransactionPayment::::post_dispatch( pre, @@ -106,7 +106,7 @@ fn signed_extension_transaction_payment_work() { &Ok(()) ) .is_ok()); - assert_eq!(Balances::free_balance(&bob), 1999969000); + assert_eq!(Balances::free_balance(&bob), 1999969001); let alice_origin = RuntimeOrigin::signed(alice.clone()); @@ -125,7 +125,7 @@ fn signed_extension_transaction_payment_work() { let pre = ChargeTransactionPayment::::from(0 /* tipped */) .prepare(val.1, &alice_origin, &call(), &info_from_weight(100), len) .unwrap(); - assert_eq!(Balances::free_balance(&alice), 999969000); + assert_eq!(Balances::free_balance(&alice), 999969001); assert!(ChargeTransactionPayment::::post_dispatch( pre, @@ -135,7 +135,7 @@ fn signed_extension_transaction_payment_work() { &Ok(()) ) .is_ok()); - assert_eq!(Balances::free_balance(&alice), 999969000); + assert_eq!(Balances::free_balance(&alice), 999969001); }); } @@ -168,7 +168,7 @@ fn signed_extension_transaction_payment_multiplied_refund_works() { .prepare(val.1, &alice_origin, &call(), &info_from_weight(100), len) .unwrap(); // 5 base fee, 10 byte fee, 3/2 * 100 weight fee, 5 tip - assert_eq!(Balances::free_balance(&user), 999969000); + assert_eq!(Balances::free_balance(&user), 999969001); assert!(ChargeTransactionPayment::::post_dispatch( pre, @@ -179,7 +179,7 @@ fn signed_extension_transaction_payment_multiplied_refund_works() { ) .is_ok()); // 75 (3/2 of the returned 50 units of weight) is refunded - assert_eq!(Balances::free_balance(&user), 999969000); + assert_eq!(Balances::free_balance(&user), 999969001); }); } @@ -316,7 +316,7 @@ fn signed_ext_length_fee_is_also_updated_per_congestion() { len ) .is_ok()); - assert_eq!(Balances::free_balance(&user), 19999969000); + assert_eq!(Balances::free_balance(&user), 19999969001); }) } @@ -345,7 +345,7 @@ fn query_info_works() { RuntimeDispatchInfo { weight: info.call_weight, class: info.class, - partial_fee: 43700 + partial_fee: 65098 }, ); }); @@ -378,17 +378,17 @@ fn compute_fee_works_without_multiplier() { }; assert_eq!( TransactionPayment::compute_fee(0, &dispatch_info, 0), - 30_000 + 29_999 ); // Tip + base fee works assert_eq!( TransactionPayment::compute_fee(0, &dispatch_info, 69), - 30069 + 30_068 ); // Len (byte fee) + base fee works assert_eq!( TransactionPayment::compute_fee(42, &dispatch_info, 0), - 34200 + 34_199 ); // Weight fee + base fee works let dispatch_info = DispatchInfo { @@ -399,7 +399,7 @@ fn compute_fee_works_without_multiplier() { }; assert_eq!( TransactionPayment::compute_fee(0, &dispatch_info, 0), - 30_000 + 29_999 ); }); } @@ -422,7 +422,7 @@ fn compute_fee_works_with_multiplier() { }; assert_eq!( TransactionPayment::compute_fee(0, &dispatch_info, 0), - 30_000 + 29_999 ); // Everything works together :) @@ -435,7 +435,7 @@ fn compute_fee_works_with_multiplier() { // 123 weight, 456 length, 100 base assert_eq!( TransactionPayment::compute_fee(456, &dispatch_info, 789), - 76389, + 76_388, ); }); } @@ -459,7 +459,7 @@ fn compute_fee_works_with_negative_multiplier() { }; assert_eq!( TransactionPayment::compute_fee(0, &dispatch_info, 0), - 30_000 + 29_999 ); // Everything works together. @@ -472,7 +472,7 @@ fn compute_fee_works_with_negative_multiplier() { // 123 weight, 456 length, 100 base assert_eq!( TransactionPayment::compute_fee(456, &dispatch_info, 789), - 76389, + 76_388, ); }); } @@ -528,7 +528,7 @@ fn actual_weight_higher_than_max_refunds_nothing() { let pre = ChargeTransactionPayment::::from(0 /* tipped */) .prepare(val.1, &alice_origin, &call(), &info_from_weight(100), len) .unwrap(); - assert_eq!(Balances::free_balance(&user), 999969000); + assert_eq!(Balances::free_balance(&user), 999969001); ChargeTransactionPayment::::post_dispatch( pre, @@ -538,7 +538,7 @@ fn actual_weight_higher_than_max_refunds_nothing() { &Ok(()), ) .unwrap(); - assert_eq!(Balances::free_balance(&user), 999969000); + assert_eq!(Balances::free_balance(&user), 999969001); }); } @@ -641,7 +641,7 @@ fn refund_consistent_with_actual_weight() { TransactionPayment::compute_actual_fee(len as u32, &info, &post_info, tip); // 33 weight, 10 length, 7 base, 5 tip - assert_eq!(actual_fee, 31_000); + assert_eq!(actual_fee, 30_999); assert_eq!(refund_based_fee, actual_fee); }); } diff --git a/pallets/statistics/src/lib.rs b/pallets/statistics/src/lib.rs index 98738e48d6..f33be2fda3 100644 --- a/pallets/statistics/src/lib.rs +++ b/pallets/statistics/src/lib.rs @@ -26,7 +26,7 @@ use frame_support::traits::Get; use frame_support::weights::Weight; use frame_support::BoundedBTreeSet; use frame_system::pallet_prelude::*; -use sp_std::{collections::btree_set::BTreeSet, vec, vec::Vec}; +use sp_std::{collections::btree_set::BTreeSet, vec::Vec}; use pallet_external_agents::Config as EAConfig; use polymesh_primitives::asset::AssetId; diff --git a/pallets/sto/src/lib.rs b/pallets/sto/src/lib.rs index 3ea14d55c8..5b47b1c2d0 100644 --- a/pallets/sto/src/lib.rs +++ b/pallets/sto/src/lib.rs @@ -103,9 +103,8 @@ pub enum FundraiserStatus { } /// Funding method. On-chain asset or off-chain receipt. -#[derive(Decode, DecodeWithMemTracking, Encode, TypeInfo)] +#[derive(Decode, DecodeWithMemTracking, Debug, Encode, TypeInfo)] #[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Debug))] pub enum FundingMethod { /// On-chain asset. OnChain(PortfolioId), diff --git a/pallets/transaction-payment/src/lib.rs b/pallets/transaction-payment/src/lib.rs index 47678d9755..394bd83f9c 100644 --- a/pallets/transaction-payment/src/lib.rs +++ b/pallets/transaction-payment/src/lib.rs @@ -16,7 +16,7 @@ use frame_support::dispatch::PostDispatchInfo; use frame_support::dispatch::{DispatchClass, DispatchInfo, DispatchResult}; use frame_support::pallet_prelude::*; use frame_support::weights::Weight; -use frame_support::RuntimeDebugNoBound; +use frame_support::DebugNoBound; use frame_system::pallet_prelude::OriginFor; use scale_info::TypeInfo; use sp_runtime::traits::{DispatchInfoOf, Dispatchable, PostDispatchInfoOf}; @@ -306,7 +306,7 @@ where } /// The info passed between the validate and prepare steps for the `ChargeAssetTxPayment` extension. -#[derive(RuntimeDebugNoBound)] +#[derive(DebugNoBound)] pub enum Val { Charge { tip: BalanceOf, diff --git a/pallets/validators/src/lib.rs b/pallets/validators/src/lib.rs index 1753db981f..eb2c655a14 100644 --- a/pallets/validators/src/lib.rs +++ b/pallets/validators/src/lib.rs @@ -47,7 +47,6 @@ use sp_runtime::traits::Dispatchable; use sp_runtime::{curve::PiecewiseLinear, traits::AtLeast32BitUnsigned, Perbill, Permill}; use sp_staking::EraIndex; use sp_std::prelude::*; -use sp_std::vec; use polymesh_primitives::{IdentityId, GC_DID}; diff --git a/pallets/validators/src/mock.rs b/pallets/validators/src/mock.rs index 8a98ab73b3..ec2bb10567 100644 --- a/pallets/validators/src/mock.rs +++ b/pallets/validators/src/mock.rs @@ -42,6 +42,7 @@ use frame_support::{ }, weights::constants::RocksDbWeight, }; +use codec::Encode; use frame_system::{EnsureRoot, EnsureSignedBy}; use sp_core::ConstBool; use sp_io; @@ -614,7 +615,10 @@ pub(crate) fn bond_validator(who: AccountId, val: Balance) { assert_ok!(Session::set_keys( RuntimeOrigin::signed(who), SessionKeys { other: who.into() }, - vec![] + SessionKeys { other: who.into() } + .create_ownership_proof(&who.encode()) + .unwrap() + .encode(), )); } diff --git a/pallets/validators/src/tests.rs b/pallets/validators/src/tests.rs index cf92c77626..73b8537408 100644 --- a/pallets/validators/src/tests.rs +++ b/pallets/validators/src/tests.rs @@ -454,7 +454,10 @@ fn staking_should_work() { assert_ok!(Session::set_keys( RuntimeOrigin::signed(3), SessionKeys { other: 4.into() }, - vec![] + SessionKeys { other: 4.into() } + .create_ownership_proof(&AccountId::from(3u32).encode()) + .unwrap() + .encode(), )); // No effects will be seen so far. @@ -2060,7 +2063,10 @@ fn switching_roles() { assert_ok!(Session::set_keys( RuntimeOrigin::signed(5), SessionKeys { other: 6.into() }, - vec![] + SessionKeys { other: 6.into() } + .create_ownership_proof(&AccountId::from(5u32).encode()) + .unwrap() + .encode(), )); mock::start_active_era(1); @@ -2073,7 +2079,10 @@ fn switching_roles() { assert_ok!(Session::set_keys( RuntimeOrigin::signed(1), SessionKeys { other: 2.into() }, - vec![] + SessionKeys { other: 2.into() } + .create_ownership_proof(&AccountId::from(1u32).encode()) + .unwrap() + .encode(), )); // new stakes: // 11: 1000 self vote @@ -2182,7 +2191,10 @@ fn bond_with_little_staked_value_bounded() { assert_ok!(Session::set_keys( RuntimeOrigin::signed(1), SessionKeys { other: 1.into() }, - vec![] + SessionKeys { other: 1.into() } + .create_ownership_proof(&AccountId::from(1u32).encode()) + .unwrap() + .encode() )); // 1 era worth of reward. BUT, we set the timestamp after on_initialize, so outdated by diff --git a/pallets/validators/src/types.rs b/pallets/validators/src/types.rs index bc5012218a..de75bd380d 100644 --- a/pallets/validators/src/types.rs +++ b/pallets/validators/src/types.rs @@ -2,10 +2,9 @@ use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use pallet_staking::permissioned_staking::WhoToSlash; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; -use sp_runtime::RuntimeDebug; /// Preference of an identity regarding validation. -#[derive(Decode, Encode, MaxEncodedLen, RuntimeDebug, TypeInfo)] +#[derive(Decode, Encode, MaxEncodedLen, Debug, TypeInfo)] #[derive(Clone, Copy, Eq, PartialEq)] pub struct PermissionedIdentityPrefs { /// Intended number of validators an identity wants to run. @@ -39,7 +38,7 @@ impl PermissionedIdentityPrefs { /// Switch used to change the "victim" for slashing. Victims can be /// validators, both validators and nominators, or no-one. -#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, RuntimeDebug)] +#[derive(Decode, DecodeWithMemTracking, Encode, MaxEncodedLen, Debug)] #[derive(Clone, Copy, Default, Eq, PartialEq, TypeInfo)] #[derive(Serialize, Deserialize)] pub enum SlashingSwitch { diff --git a/primitives/src/lib.rs b/primitives/src/lib.rs index 84211451e8..ec0c281d5f 100644 --- a/primitives/src/lib.rs +++ b/primitives/src/lib.rs @@ -32,7 +32,6 @@ use frame_support::traits::Get; use polymesh_primitives_derive::{SliceU8StrongTyped, StringStrongTyped, VecU8StrongTyped}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; -use sp_debug_derive::RuntimeDebug; use sp_runtime::{generic, traits::BlakeTwo256, MultiSignature}; use sp_std::prelude::Vec; @@ -378,7 +377,7 @@ impl ExtrinsicName { Eq, Clone, Copy, - RuntimeDebug, + Debug, Default, MaxEncodedLen, TypeInfo diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 74b8b6c3a9..0edf8d85bc 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] -channel = "nightly-2025-09-01" +channel = "nightly-2025-12-01" targets = [ "wasm32v1-none" ] -components = [ "rustfmt" ] +components = [ "rustfmt", "rust-src" ] profile = "minimal" diff --git a/src/benchmarking.rs b/src/benchmarking.rs index ae70c6ef17..3e8800465b 100644 --- a/src/benchmarking.rs +++ b/src/benchmarking.rs @@ -125,11 +125,13 @@ pub fn create_benchmark_extrinsic( .map(|c| c / 2) .unwrap_or(2) as u64; let tx_ext: TxExtension = ( - frame_system::AuthorizeCall::new(), - frame_system::CheckNonZeroSender::new(), - frame_system::CheckSpecVersion::new(), - frame_system::CheckTxVersion::new(), - frame_system::CheckGenesis::new(), + ( + frame_system::AuthorizeCall::new(), + frame_system::CheckNonZeroSender::new(), + frame_system::CheckSpecVersion::new(), + frame_system::CheckTxVersion::new(), + frame_system::CheckGenesis::new(), + ), frame_system::CheckEra::from(sp_runtime::generic::Era::mortal( period, best_block.saturated_into(), @@ -139,6 +141,7 @@ pub fn create_benchmark_extrinsic( polymesh_transaction_payment::ChargeTransactionPayment::from(0), pallet_permissions::StoreCallMetadata::new(), frame_metadata_hash_extension::CheckMetadataHash::new(false), + pallet_revive::evm::tx_extension::SetOrigin::default(), frame_system::WeightReclaim::new(), ); @@ -146,11 +149,13 @@ pub fn create_benchmark_extrinsic( call.clone(), tx_ext.clone(), ( - (), - (), - VERSION.spec_version, - VERSION.transaction_version, - genesis_hash, + ( + (), + (), + VERSION.spec_version, + VERSION.transaction_version, + genesis_hash, + ), best_hash, (), (), @@ -158,16 +163,18 @@ pub fn create_benchmark_extrinsic( (), None, (), + (), ), ); let signature = raw_payload.using_encoded(|e| sender.sign(e)); - UncheckedExtrinsic::new_signed( + sp_runtime::generic::UncheckedExtrinsic::new_signed( call.clone(), sp_runtime::AccountId32::from(sender.public()).into(), Signature::Sr25519(signature.clone()), tx_ext.clone(), ) + .into() } /// Generates inherent data for the `benchmark overhead` command. diff --git a/src/chain_spec/develop_runtime.rs b/src/chain_spec/develop_runtime.rs index bfb7da4e70..c05225ec7f 100644 --- a/src/chain_spec/develop_runtime.rs +++ b/src/chain_spec/develop_runtime.rs @@ -39,6 +39,26 @@ fn dev_chain_spec(code: &[u8]) -> ChainSpec { seeded_acc_id("Charlie"), seeded_acc_id("Dave"), seeded_acc_id("Eve"), + // ETH dev alith + array_bytes::hex_n_into_unchecked( + "f24ff3a9cf04c71dbc94d0b566f7a27b94566caceeeeeeeeeeeeeeeeeeeeeeee", + ), + // ETH dev baltathar + array_bytes::hex_n_into_unchecked( + "3cd0a705a2dc65e5b1e1205896baa2be8a07c6e0eeeeeeeeeeeeeeeeeeeeeeee", + ), + // ETH dev charleth + array_bytes::hex_n_into_unchecked( + "798d4ba9baf0064ec19eb4f0a1a45785ae9d6dfceeeeeeeeeeeeeeeeeeeeeeee", + ), + // ETH dev dorothy + array_bytes::hex_n_into_unchecked( + "773539d4ac0e786233d90a233654ccee26a613d9eeeeeeeeeeeeeeeeeeeeeeee", + ), + // ETH dev ethan + array_bytes::hex_n_into_unchecked( + "ff64d3f6efe2317ee2807d223a0bdc4c0c49dfdbeeeeeeeeeeeeeeeeeeeeeeee", + ), ]; let root_key = seeded_acc_id("Alice"); diff --git a/src/command.rs b/src/command.rs index 4836ad6376..63d17fdc2c 100644 --- a/src/command.rs +++ b/src/command.rs @@ -21,7 +21,7 @@ use std::sync::Arc; use core::future::Future; use frame_benchmarking_cli::*; use log::info; -use sc_cli::{Result, SubstrateCli}; +use sc_cli::SubstrateCli; use sc_service::{Configuration, TaskManager}; use sp_keyring::Sr25519Keyring; use sp_runtime::traits::HashingFor; @@ -110,9 +110,18 @@ impl SubstrateCli for Cli { } } +/// Parse command line arguments into Polymesh-specific CLI struct and run the service. +pub fn run() -> sc_cli::Result<()> { + run_with_args(std::env::args_os()) +} + /// Parses Polymesh specific CLI arguments and run the service. -pub fn run() -> Result<()> { - let cli = Cli::from_args(); +pub fn run_with_args(args: I) -> sc_cli::Result<()> +where + I: IntoIterator, + I::Item: Into + Clone, +{ + let cli = Cli::from_iter(args); match &cli.subcommand { None => { diff --git a/src/service.rs b/src/service.rs index d4bf058502..34461ae3ef 100644 --- a/src/service.rs +++ b/src/service.rs @@ -199,17 +199,20 @@ pub fn create_extrinsic( .map(|c| c / 2) .unwrap_or(2) as u64; let tx_ext: polymesh_runtime_develop::TxExtension = ( - frame_system::AuthorizeCall::new(), - frame_system::CheckNonZeroSender::new(), - frame_system::CheckSpecVersion::new(), - frame_system::CheckTxVersion::new(), - frame_system::CheckGenesis::new(), + ( + frame_system::AuthorizeCall::new(), + frame_system::CheckNonZeroSender::new(), + frame_system::CheckSpecVersion::new(), + frame_system::CheckTxVersion::new(), + frame_system::CheckGenesis::new(), + ), frame_system::CheckEra::from(generic::Era::mortal(period, best_block.saturated_into())), frame_system::CheckNonce::from(nonce), frame_system::CheckWeight::new(), polymesh_transaction_payment::ChargeTransactionPayment::from(0), pallet_permissions::StoreCallMetadata::new(), frame_metadata_hash_extension::CheckMetadataHash::new(false), + pallet_revive::evm::tx_extension::SetOrigin::default(), frame_system::WeightReclaim::new(), ); @@ -217,11 +220,13 @@ pub fn create_extrinsic( function.clone(), tx_ext.clone(), ( - (), - (), - polymesh_runtime_develop::runtime::VERSION.spec_version, - polymesh_runtime_develop::runtime::VERSION.transaction_version, - genesis_hash, + ( + (), + (), + polymesh_runtime_develop::runtime::VERSION.spec_version, + polymesh_runtime_develop::runtime::VERSION.transaction_version, + genesis_hash, + ), best_hash, (), (), @@ -229,6 +234,7 @@ pub fn create_extrinsic( (), None, (), + (), ), ); let signature = raw_payload.using_encoded(|e| sender.sign(e)); @@ -305,6 +311,7 @@ where config, telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()), executor, + vec![Arc::new(grandpa::GrandpaPruningFilter)], )?; let client = Arc::new(client); @@ -585,6 +592,7 @@ where client: client.clone(), transaction_pool: transaction_pool.clone(), spawn_handle: task_manager.spawn_handle(), + spawn_essential_handle: task_manager.spawn_essential_handle(), import_queue, block_announce_validator_builder: None, warp_sync_config: Some(WarpSyncConfig::WithProvider(warp_sync)), @@ -644,7 +652,6 @@ where telemetry.as_ref().map(|x| x.handle()), ); - let client_clone = client.clone(); let slot_duration = babe_link.config().slot_duration(); let babe_config = sc_consensus_babe::BabeParams { keystore: keystore_container.keystore(), @@ -654,25 +661,16 @@ where block_import, sync_oracle: sync_service.clone(), justification_sync_link: sync_service.clone(), - create_inherent_data_providers: move |parent, ()| { - let client_clone = client_clone.clone(); - async move { - let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + create_inherent_data_providers: move |_parent, ()| async move { + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); - let slot = + let slot = sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration( *timestamp, slot_duration, ); - let storage_proof = - sp_transaction_storage_proof::registration::new_data_provider( - &*client_clone, - &parent, - )?; - - Ok((slot, timestamp, storage_proof)) - } + Ok((slot, timestamp)) }, force_authoring, backoff_authoring_blocks,