From 78e957481315efbcb7358d0876a5a30cd511a1fe Mon Sep 17 00:00:00 2001 From: Tadeo Hepperle <62739623+tadeohepperle@users.noreply.github.com> Date: Wed, 14 Feb 2024 16:02:51 +0100 Subject: [PATCH 1/3] [Fix] Auto-generated PR: delete polkadot binaries from working directory. (#1431) * delete substrate and polkadot binaries * use nodes should move instead of copy and remove the archive --- .github/workflows/actions/use-nodes/action.yml | 9 +++++---- .github/workflows/update-artifacts.yml | 3 --- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/.github/workflows/actions/use-nodes/action.yml b/.github/workflows/actions/use-nodes/action.yml index b1785f9067..bb2b9723d4 100644 --- a/.github/workflows/actions/use-nodes/action.yml +++ b/.github/workflows/actions/use-nodes/action.yml @@ -33,7 +33,8 @@ runs: ./substrate-node --version ./polkadot --version mkdir -p ~/.local/bin - cp ./substrate-node ~/.local/bin - cp ./polkadot ~/.local/bin - cp ./polkadot-execute-worker ~/.local/bin - cp ./polkadot-prepare-worker ~/.local/bin + mv ./substrate-node ~/.local/bin + mv ./polkadot ~/.local/bin + mv ./polkadot-execute-worker ~/.local/bin + mv ./polkadot-prepare-worker ~/.local/bin + rm ./polkadot.tar.gz diff --git a/.github/workflows/update-artifacts.yml b/.github/workflows/update-artifacts.yml index 49c2a86d18..491f8d4099 100644 --- a/.github/workflows/update-artifacts.yml +++ b/.github/workflows/update-artifacts.yml @@ -41,9 +41,6 @@ jobs: - name: Fetch Artifacts run: cargo run --bin artifacts - - name: Delete substrate node binary - run: rm ./substrate-node - - uses: actions/create-github-app-token@v1 id: app-token with: From e39791a5bc42aeb192cdd38d08ebf57569566c4b Mon Sep 17 00:00:00 2001 From: Tadeo Hepperle <62739623+tadeohepperle@users.noreply.github.com> Date: Wed, 14 Feb 2024 17:17:08 +0100 Subject: [PATCH 2/3] Add missing codegen mod in integration tests (#1418) * add codgen mod to the module tree * port codegen tests to scale-typegen * remove test flag --- .../src/full_client/codegen/codegen_tests.rs | 214 ------------------ .../src/full_client/codegen/documentation.rs | 2 +- .../src/full_client/codegen/mod.rs | 1 - .../integration-tests/src/full_client/mod.rs | 7 +- 4 files changed, 2 insertions(+), 222 deletions(-) delete mode 100644 testing/integration-tests/src/full_client/codegen/codegen_tests.rs diff --git a/testing/integration-tests/src/full_client/codegen/codegen_tests.rs b/testing/integration-tests/src/full_client/codegen/codegen_tests.rs deleted file mode 100644 index 5722270e24..0000000000 --- a/testing/integration-tests/src/full_client/codegen/codegen_tests.rs +++ /dev/null @@ -1,214 +0,0 @@ -// Copyright 2019-2023 Parity Technologies (UK) Ltd. -// This file is dual-licensed as Apache-2.0 or GPL-3.0. -// see LICENSE for license details. - -use frame_metadata::{ - v15::{ExtrinsicMetadata, RuntimeMetadataV15}, - RuntimeMetadataPrefixed, -}; -use scale_info::{meta_type, IntoPortable, PortableRegistry, Registry, TypeInfo}; -use subxt_codegen::CodegenBuilder; -use syn::__private::quote; - -fn generate_runtime_interface_from_metadata(metadata: RuntimeMetadataPrefixed) -> String { - // Generate a runtime interface from the provided metadata. - let metadata = metadata - .try_into() - .expect("frame_metadata should be convertible into Metadata"); - - CodegenBuilder::new() - .no_docs() - .generate(metadata) - .expect("API generation must be valid") - .to_string() -} - -fn generate_runtime_interface_with_type_registry(f: F) -> String -where - F: Fn(&mut scale_info::Registry), -{ - #[derive(TypeInfo)] - struct Runtime; - #[derive(TypeInfo)] - enum RuntimeCall {} - #[derive(TypeInfo)] - enum RuntimeEvent {} - #[derive(TypeInfo)] - pub enum DispatchError {} - - // We need these types for codegen to work: - let mut registry = scale_info::Registry::new(); - let ty = registry.register_type(&meta_type::()); - registry.register_type(&meta_type::()); - registry.register_type(&meta_type::()); - registry.register_type(&meta_type::()); - - // Allow custom types to be added for testing: - f(&mut registry); - - let extrinsic = ExtrinsicMetadata { - ty: meta_type::<()>(), - version: 0, - signed_extensions: vec![], - } - .into_portable(&mut registry); - let metadata = RuntimeMetadataV15 { - types: registry.into(), - pallets: Vec::new(), - extrinsic, - ty, - apis: vec![], - }; - - let metadata = RuntimeMetadataPrefixed::from(metadata); - generate_runtime_interface_from_metadata(metadata) -} - -#[test] -fn dupe_types_do_not_overwrite_each_other() { - let interface = generate_runtime_interface_with_type_registry(|registry| { - // Now we duplicate some types with same type info. We need two unique types here, - // and can't just add one type to the registry twice, because the registry knows if - // type IDs are the same. - enum Foo {} - impl TypeInfo for Foo { - type Identity = Self; - fn type_info() -> scale_info::Type { - scale_info::Type::builder() - .path(scale_info::Path::new("DuplicateType", "dupe_mod")) - .variant( - scale_info::build::Variants::new() - .variant("FirstDupeTypeVariant", |builder| builder.index(0)), - ) - } - } - enum Bar {} - impl TypeInfo for Bar { - type Identity = Self; - fn type_info() -> scale_info::Type { - scale_info::Type::builder() - .path(scale_info::Path::new("DuplicateType", "dupe_mod")) - .variant( - scale_info::build::Variants::new() - .variant("SecondDupeTypeVariant", |builder| builder.index(0)), - ) - } - } - - registry.register_type(&meta_type::()); - registry.register_type(&meta_type::()); - }); - - assert!(interface.contains("DuplicateType")); - assert!(interface.contains("FirstDupeTypeVariant")); - - assert!(interface.contains("DuplicateType2")); - assert!(interface.contains("SecondDupeTypeVariant")); -} - -#[test] -fn generic_types_overwrite_each_other() { - let interface = generate_runtime_interface_with_type_registry(|registry| { - // If we have two types mentioned in the registry that have generic params, - // only one type will be output (the codegen assumes that the generic param will disambiguate) - enum Foo {} - impl TypeInfo for Foo { - type Identity = Self; - fn type_info() -> scale_info::Type { - scale_info::Type::builder() - .path(scale_info::Path::new("DuplicateType", "dupe_mod")) - .type_params([scale_info::TypeParameter::new("T", Some(meta_type::()))]) - .variant(scale_info::build::Variants::new()) - } - } - enum Bar {} - impl TypeInfo for Bar { - type Identity = Self; - fn type_info() -> scale_info::Type { - scale_info::Type::builder() - .path(scale_info::Path::new("DuplicateType", "dupe_mod")) - .type_params([scale_info::TypeParameter::new("T", Some(meta_type::()))]) - .variant(scale_info::build::Variants::new()) - } - } - - registry.register_type(&meta_type::()); - registry.register_type(&meta_type::()); - }); - - assert!(interface.contains("DuplicateType")); - // We do _not_ expect this to exist, since a generic is present on the type: - assert!(!interface.contains("DuplicateType2")); -} - -#[test] -fn more_than_1_generic_parameters_work() { - #[allow(unused)] - #[derive(TypeInfo)] - struct Foo { - a: T, - b: U, - c: V, - d: W, - } - - #[allow(unused)] - #[derive(TypeInfo)] - struct Bar { - p: Foo, - q: Foo, - } - - let mut registry = Registry::new(); - registry.register_type(&meta_type::()); - let portable_types: PortableRegistry = registry.into(); - - let type_gen = subxt_codegen::TypeGenerator::new( - &portable_types, - "root", - Default::default(), - Default::default(), - CratePath::default(), - false, - ); - - let types = type_gen.generate_types_mod().unwrap(); - let generated_mod = quote::quote!( #types); - - let expected_mod = quote::quote! { - pub mod root { - use super::root; - pub mod integration_tests { - use super::root; - pub mod codegen { - use super::root; - pub mod codegen_tests { - use super::root; - pub struct Bar { - pub p: root::integration_tests::codegen::codegen_tests::Foo< - ::core::primitive::u32, - ::core::primitive::u32, - ::core::primitive::u64, - ::core::primitive::u128 - >, - pub q: root::integration_tests::codegen::codegen_tests::Foo< - ::core::primitive::u8, - ::core::primitive::u8, - ::core::primitive::u8, - ::core::primitive::u8 - >, - } - pub struct Foo<_0, _1, _2, _3> { - pub a: _0, - pub b: _1, - pub c: _2, - pub d: _3, - } - } - } - } - } - }; - - assert_eq!(generated_mod.to_string(), expected_mod.to_string()); -} diff --git a/testing/integration-tests/src/full_client/codegen/documentation.rs b/testing/integration-tests/src/full_client/codegen/documentation.rs index 8eead47760..fea4e78f64 100644 --- a/testing/integration-tests/src/full_client/codegen/documentation.rs +++ b/testing/integration-tests/src/full_client/codegen/documentation.rs @@ -4,7 +4,7 @@ use codec::Decode; use regex::Regex; -use subxt_codegen::{ syn, CodegenBuilder }; +use subxt_codegen::{syn, CodegenBuilder}; use subxt_metadata::Metadata; fn load_test_metadata() -> Metadata { diff --git a/testing/integration-tests/src/full_client/codegen/mod.rs b/testing/integration-tests/src/full_client/codegen/mod.rs index f2b3a97658..e17b92a0b7 100644 --- a/testing/integration-tests/src/full_client/codegen/mod.rs +++ b/testing/integration-tests/src/full_client/codegen/mod.rs @@ -14,5 +14,4 @@ #[allow(clippy::all)] mod polkadot; -mod codegen_tests; mod documentation; diff --git a/testing/integration-tests/src/full_client/mod.rs b/testing/integration-tests/src/full_client/mod.rs index 5b496ccea3..f5e0a72510 100644 --- a/testing/integration-tests/src/full_client/mod.rs +++ b/testing/integration-tests/src/full_client/mod.rs @@ -2,15 +2,10 @@ // This file is dual-licensed as Apache-2.0 or GPL-3.0. // see LICENSE for license details. -#[cfg(test)] mod blocks; -#[cfg(test)] mod client; -#[cfg(test)] +mod codegen; mod frame; -#[cfg(test)] mod metadata; -#[cfg(test)] mod runtime_api; -#[cfg(test)] mod storage; From 54470357165c08fd703373678f38dcc633465cec Mon Sep 17 00:00:00 2001 From: Tadeo Hepperle <62739623+tadeohepperle@users.noreply.github.com> Date: Thu, 15 Feb 2024 10:49:15 +0100 Subject: [PATCH 3/3] Subxt Metadata: `#[no_std]` compatibility (#1401) * no-std tests and porting of subxt-metadata * update pipeline * fix generate custom metadata test * fix cargo run command * adjust pipeline * remove prelude from subxt-metadata * revert autoformatting of Cargo.toml * remove alloc::format! again, still causes linker errors * add no-std-build for thumbv7em-none-eabi target * remove std feature flag * remove libc and add small readme with test instructions * change ci for nightly no std --- .github/workflows/rust.yml | 34 ++ Cargo.lock | 287 ++++++----- Cargo.toml | 10 +- metadata/Cargo.toml | 13 +- metadata/src/from_into/mod.rs | 18 +- metadata/src/from_into/v14.rs | 31 +- metadata/src/from_into/v15.rs | 4 +- metadata/src/lib.rs | 11 +- metadata/src/utils/ordered_map.rs | 16 +- metadata/src/utils/retain.rs | 3 +- metadata/src/utils/validation.rs | 3 +- .../src/utils/validation/outer_enum_hashes.rs | 2 +- metadata/src/utils/variant_index.rs | 8 +- subxt/Cargo.toml | 16 +- testing/generate-custom-metadata/Cargo.toml | 6 +- testing/no-std-tests/.gitignore | 1 + testing/no-std-tests/Cargo.lock | 487 ++++++++++++++++++ testing/no-std-tests/Cargo.toml | 21 + testing/no-std-tests/README.md | 7 + testing/no-std-tests/rust-toolchain | 1 + testing/no-std-tests/src/main.rs | 47 ++ 21 files changed, 851 insertions(+), 175 deletions(-) create mode 100644 testing/no-std-tests/.gitignore create mode 100644 testing/no-std-tests/Cargo.lock create mode 100644 testing/no-std-tests/Cargo.toml create mode 100644 testing/no-std-tests/README.md create mode 100644 testing/no-std-tests/rust-toolchain create mode 100644 testing/no-std-tests/src/main.rs diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index ac5c82e3e4..327a77bd31 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -419,3 +419,37 @@ jobs: - if: "failure()" uses: "andymckay/cancel-action@271cfbfa11ca9222f7be99a47e8f929574549e0a" # v0.4 + + no-std-tests: + name: "Test (no_std)" + runs-on: ubuntu-latest + needs: [machete, docs] + timeout-minutes: 30 + steps: + - name: Checkout sources + uses: actions/checkout@v4 + + # Note: needs nighly toolchain because otherwise we cannot define custom lang-items. + - name: Install Rust nightly toolchain + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: nightly + override: true + target: thumbv7em-none-eabi + + - name: Install the gcc-arm-none-eabi linker + run: sudo apt install gcc-arm-none-eabi + + - name: Rust Cache + uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2.7.3 + + # Note: We currently do not have a way to run real tests in a `no_std` environment. + # We can only make sure that they compile to ARM thumb ISA. + # Running the binary and inspecting the output would require an actual machine with matching ISA or some sort of emulator. + - name: Compile `no-std-tests` crate to `thumbv7em-none-eabi` target. + run: cargo build --target thumbv7em-none-eabi + working-directory: testing/no-std-tests + + - if: "failure()" + uses: "andymckay/cancel-action@271cfbfa11ca9222f7be99a47e8f929574549e0a" # v0.4 diff --git a/Cargo.lock b/Cargo.lock index f082ecbe3d..6fe5bf2575 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -48,9 +48,9 @@ dependencies = [ [[package]] name = "ahash" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ "getrandom", "once_cell", @@ -59,9 +59,9 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +checksum = "42cd52102d3df161c77a887b608d7a4897d7cc112886a9537b738a887a03aaff" dependencies = [ "cfg-if", "getrandom", @@ -131,9 +131,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" [[package]] name = "anstyle-parse" @@ -346,13 +346,13 @@ checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] name = "async-channel" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c" +checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" dependencies = [ "concurrent-queue", - "event-listener 4.0.3", - "event-listener-strategy", + "event-listener 5.0.0", + "event-listener-strategy 0.5.0", "futures-core", "pin-project-lite", ] @@ -373,9 +373,9 @@ dependencies = [ [[package]] name = "async-fs" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd1f344136bad34df1f83a47f3fd7f2ab85d75cb8a940af4ccf6d482a84ea01b" +checksum = "bc19683171f287921f2405677dd2ed2549c3b3bda697a563ebc3a121ace2aba1" dependencies = [ "async-lock 3.3.0", "blocking", @@ -384,9 +384,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb41eb19024a91746eba0773aa5e16036045bbf45733766661099e182ea6a744" +checksum = "8f97ab0c5b00a7cdbe5a371b9a782ee7be1316095885c8a4ea1daf490eb0ef65" dependencies = [ "async-lock 3.3.0", "cfg-if", @@ -395,7 +395,7 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix 0.38.30", + "rustix 0.38.31", "slab", "tracing", "windows-sys 0.52.0", @@ -417,7 +417,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" dependencies = [ "event-listener 4.0.3", - "event-listener-strategy", + "event-listener-strategy 0.4.0", "pin-project-lite", ] @@ -446,7 +446,7 @@ dependencies = [ "cfg-if", "event-listener 4.0.3", "futures-lite", - "rustix 0.38.30", + "rustix 0.38.31", "windows-sys 0.52.0", ] @@ -462,7 +462,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 0.38.30", + "rustix 0.38.31", "signal-hook-registry", "slab", "windows-sys 0.48.0", @@ -793,9 +793,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.32" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41daef31d7a747c5c847246f36de49ced6f7403b4cdabc807a97b5cc184cda7a" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" dependencies = [ "android-tzdata", "iana-time-zone", @@ -805,9 +805,9 @@ dependencies = [ [[package]] name = "ciborium" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" dependencies = [ "ciborium-io", "ciborium-ll", @@ -816,15 +816,15 @@ dependencies = [ [[package]] name = "ciborium-io" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" [[package]] name = "ciborium-ll" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ "ciborium-io", "half", @@ -1033,9 +1033,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" dependencies = [ "cfg-if", ] @@ -1175,9 +1175,9 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.1.1" +version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c" +checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" dependencies = [ "cfg-if", "cpufeatures", @@ -1213,12 +1213,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.5" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc5d6b04b3fd0ba9926f945895de7d806260a2d7431ba82e7edaecb043c4c6b8" +checksum = "c376d08ea6aa96aafe61237c7200d1241cb177b7d3a542d791f2d118e9cbb955" dependencies = [ - "darling_core 0.20.5", - "darling_macro 0.20.5", + "darling_core 0.20.6", + "darling_macro 0.20.6", ] [[package]] @@ -1237,9 +1237,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.5" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e48a959bcd5c761246f5d090ebc2fbf7b9cd527a492b07a67510c108f1e7e3" +checksum = "33043dcd19068b8192064c704b3f83eb464f91f1ff527b44a4e2b08d9cdb8855" dependencies = [ "fnv", "ident_case", @@ -1262,11 +1262,11 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.5" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1545d67a2149e1d93b7e5c7752dce5a7426eb5d1357ddcfd89336b94444f77" +checksum = "c5a91391accf613803c2a9bf9abccdbaa07c54b4244a5b64883f9c3c137c86be" dependencies = [ - "darling_core 0.20.5", + "darling_core 0.20.6", "quote", "syn 2.0.48", ] @@ -1423,11 +1423,11 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f628eaec48bfd21b865dc2950cfa014450c01d2fa2b69a86c2fd5844ec523c0" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ - "curve25519-dalek 4.1.1", + "curve25519-dalek 4.1.2", "ed25519", "serde", "sha2 0.10.8", @@ -1455,7 +1455,7 @@ version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" dependencies = [ - "curve25519-dalek 4.1.1", + "curve25519-dalek 4.1.2", "ed25519", "hashbrown 0.14.3", "hex", @@ -1509,6 +1509,17 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "event-listener" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b72557800024fabbaa2449dd4bf24e37b93702d457a4d4f2b0dd1f0f039f20c1" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + [[package]] name = "event-listener-strategy" version = "0.4.0" @@ -1519,6 +1530,16 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "event-listener-strategy" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feedafcaa9b749175d5ac357452a9d41ea2911da598fde46ce1fe02c37751291" +dependencies = [ + "event-listener 5.0.0", + "pin-project-lite", +] + [[package]] name = "expander" version = "2.0.0" @@ -1534,9 +1555,9 @@ dependencies = [ [[package]] name = "eyre" -version = "0.6.11" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" dependencies = [ "indenter", "once_cell", @@ -1562,9 +1583,9 @@ checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fiat-crypto" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" +checksum = "1676f435fc1dadde4d03e43f5d62b259e1ce5f40bd4ffb21db2b42ebe59c1382" [[package]] name = "fixed-hash" @@ -1882,7 +1903,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.1.0", + "indexmap 2.2.3", "slab", "tokio", "tokio-util", @@ -1891,9 +1912,13 @@ dependencies = [ [[package]] name = "half" -version = "1.8.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" +checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" +dependencies = [ + "cfg-if", + "crunchy", +] [[package]] name = "hash-db" @@ -1916,7 +1941,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.7", + "ahash 0.7.8", ] [[package]] @@ -1925,7 +1950,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.7", + "ahash 0.8.8", ] [[package]] @@ -1934,7 +1959,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ - "ahash 0.8.7", + "ahash 0.8.8", "allocator-api2", "serde", ] @@ -1956,9 +1981,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" +checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd" [[package]] name = "hex" @@ -2091,9 +2116,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.59" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2176,9 +2201,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.1.0" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", "hashbrown 0.14.3", @@ -2258,7 +2283,7 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.4", + "hermit-abi 0.3.6", "libc", "windows-sys 0.48.0", ] @@ -2274,9 +2299,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] @@ -2420,9 +2445,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.152" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libm" @@ -2508,9 +2533,9 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "lru" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2994eeba8ed550fd9b47a0b38f0242bc3344e496483c6180b69139cc2fa5d1d7" +checksum = "db2c024b41519440580066ba82aab04092b333e09066a5eb86c7c4890df31f22" dependencies = [ "hashbrown 0.14.3", ] @@ -2545,7 +2570,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" dependencies = [ - "rustix 0.38.30", + "rustix 0.38.31", ] [[package]] @@ -2598,9 +2623,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ "adler", ] @@ -2677,11 +2702,10 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] @@ -2699,9 +2723,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", ] @@ -2712,7 +2736,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.4", + "hermit-abi 0.3.6", "libc", ] @@ -2966,14 +2990,14 @@ dependencies = [ [[package]] name = "polling" -version = "3.3.2" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "545c980a3880efd47b2e262f6a4bb6daad6555cf3367aa9c4e52895f69537a41" +checksum = "30054e72317ab98eddd8561db0f6524df3367636884b7b21b703e4b280a84a14" dependencies = [ "cfg-if", "concurrent-queue", "pin-project-lite", - "rustix 0.38.30", + "rustix 0.38.31", "tracing", "windows-sys 0.52.0", ] @@ -3043,7 +3067,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "toml_edit 0.21.0", + "toml_edit 0.21.1", ] [[package]] @@ -3212,7 +3236,7 @@ checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.4", + "regex-automata 0.4.5", "regex-syntax 0.8.2", ] @@ -3227,9 +3251,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b7fa1134405e2ec9353fd416b17f8dacd46c473d7d3fd1cf202706a14eb792a" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" dependencies = [ "aho-corasick", "memchr", @@ -3305,9 +3329,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.30" +version = "0.38.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ "bitflags 2.4.2", "errno", @@ -3337,7 +3361,7 @@ dependencies = [ "log", "ring", "rustls-pki-types", - "rustls-webpki 0.102.1", + "rustls-webpki 0.102.2", "subtle", "zeroize", ] @@ -3388,9 +3412,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e9d979b3ce68192e42760c7810125eb6cf2ea10efae545a156063e61f314e2a" +checksum = "048a63e5b3ac996d78d402940b5fa47973d2d080c6c6fffa1d0f19c4445310b7" [[package]] name = "rustls-webpki" @@ -3404,9 +3428,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.1" +version = "0.102.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4ca26037c909dedb327b48c3327d0ba91d3dd3c4e05dad328f210ffb68e95b" +checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" dependencies = [ "ring", "rustls-pki-types", @@ -3604,7 +3628,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" dependencies = [ - "ahash 0.8.7", + "ahash 0.8.8", "cfg-if", "hashbrown 0.13.2", ] @@ -3634,7 +3658,7 @@ dependencies = [ "aead", "arrayref", "arrayvec 0.7.4", - "curve25519-dalek 4.1.1", + "curve25519-dalek 4.1.2", "getrandom_or_panic", "merlin 3.0.0", "rand_core 0.6.4", @@ -3932,7 +3956,7 @@ dependencies = [ "hashbrown 0.14.3", "hex", "hmac 0.12.1", - "itertools 0.12.0", + "itertools 0.12.1", "libm", "libsecp256k1", "merlin 3.0.0", @@ -3981,7 +4005,7 @@ dependencies = [ "futures-util", "hashbrown 0.14.3", "hex", - "itertools 0.12.0", + "itertools 0.12.1", "log", "lru", "no-std-net", @@ -4314,7 +4338,7 @@ version = "29.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e4d24d84a0beb44a71dcac1b41980e1edf7fb722c7f3046710136a283cd479b" dependencies = [ - "ahash 0.8.7", + "ahash 0.8.8", "hash-db", "lazy_static", "memory-db", @@ -4596,7 +4620,7 @@ dependencies = [ name = "subxt-macro" version = "0.34.0" dependencies = [ - "darling 0.20.5", + "darling 0.20.6", "parity-scale-codec", "proc-macro-error", "quote", @@ -4612,11 +4636,12 @@ dependencies = [ "assert_matches", "bitvec", "criterion", + "derive_more", "frame-metadata 16.0.0", + "hashbrown 0.14.3", "parity-scale-codec", "scale-info", "sp-core-hashing", - "thiserror", ] [[package]] @@ -4850,14 +4875,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" +checksum = "9a9aad4a3066010876e8dcf5a8a06e70a558751117a145c6ce2b82c2e2054290" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.21.0", + "toml_edit 0.22.5", ] [[package]] @@ -4875,9 +4900,9 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.1.0", + "indexmap 2.2.3", "toml_datetime", - "winnow", + "winnow 0.5.40", ] [[package]] @@ -4886,22 +4911,33 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.1.0", + "indexmap 2.2.3", "toml_datetime", - "winnow", + "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap 2.1.0", + "indexmap 2.2.3", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99e68c159e8f5ba8a28c4eb7b0c0c190d77bb479047ca713270048145a9ad28a" +dependencies = [ + "indexmap 2.2.3", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.6.1", ] [[package]] @@ -5320,9 +5356,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" dependencies = [ "cfg-if", "js-sys", @@ -5361,9 +5397,9 @@ checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" [[package]] name = "wasmi" -version = "0.31.1" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acfc1e384a36ca532d070a315925887247f3c7e23567e23e0ac9b1c5d6b8bf76" +checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" dependencies = [ "smallvec", "spin", @@ -5374,9 +5410,9 @@ dependencies = [ [[package]] name = "wasmi_arena" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "401c1f35e413fac1846d4843745589d9ec678977ab35a384db8ae7830525d468" +checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" [[package]] name = "wasmi_core" @@ -5543,9 +5579,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.67" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" dependencies = [ "js-sys", "wasm-bindgen", @@ -5560,7 +5596,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.30", + "rustix 0.38.31", "windows-sys 0.48.0", ] @@ -5804,9 +5840,18 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.34" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d90f4e0f530c4c69f62b80d839e9ef3855edc9cba471a160c4d692deed62b401" dependencies = [ "memchr", ] @@ -5822,11 +5867,11 @@ dependencies = [ [[package]] name = "x25519-dalek" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb66477291e7e8d2b0ff1bcb900bf29489a9692816d79874bea351e7a8b6de96" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ - "curve25519-dalek 4.1.1", + "curve25519-dalek 4.1.2", "rand_core 0.6.4", "serde", "zeroize", diff --git a/Cargo.toml b/Cargo.toml index 1bc484aca6..7ba4afe8a2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ members = [ # We exclude any crates that would depend on non mutually # exclusive feature flags and thus can't compile with the # workspace: -exclude = ["testing/wasm-rpc-tests", "testing/wasm-lightclient-tests", "signer/wasm-tests", "examples/wasm-example", "examples/parachain-example"] +exclude = ["testing/no-std-tests", "testing/wasm-rpc-tests", "testing/wasm-lightclient-tests", "signer/wasm-tests", "examples/wasm-example", "examples/parachain-example"] resolver = "2" [workspace.package] @@ -58,15 +58,17 @@ bitvec = { version = "1", default-features = false } blake2 = { version = "0.10.6", default-features = false } clap = { version = "4.5.0", features = ["derive", "cargo"] } criterion = "0.4" -codec = { package = "parity-scale-codec", version = "3.4.0", default-features = false } +codec = { package = "parity-scale-codec", version = "3.6.9", default-features = false } color-eyre = "0.6.1" console_error_panic_hook = "0.1.7" darling = "0.20.5" derivative = "2.2.0" +derive_more = "0.99.17" either = "1.10.0" -frame-metadata = { version = "16.0.0", default-features = false, features = ["current", "std"] } +frame-metadata = { version = "16.0.0", default-features = false } futures = { version = "0.3.30", default-features = false, features = ["std"] } getrandom = { version = "0.2", default-features = false } +hashbrown = "0.14.3" hex = "0.4.3" heck = "0.4.1" impl-serde = { version = "0.4.0" } @@ -78,7 +80,7 @@ proc-macro-error = "1.0.4" proc-macro2 = "1.0.78" quote = "1.0.35" regex = "1.10.3" -scale-info = "2.10.0" +scale-info = { version = "2.10.0", default-features = false } scale-value = "0.13.0" scale-bits = "0.4.0" scale-decode = "0.10.0" diff --git a/metadata/Cargo.toml b/metadata/Cargo.toml index 6e3669278d..a6e15de0aa 100644 --- a/metadata/Cargo.toml +++ b/metadata/Cargo.toml @@ -13,12 +13,17 @@ documentation.workspace = true homepage.workspace = true description = "Command line utilities for checking metadata compatibility between nodes." +[features] +default = ["std"] +std = ["scale-info/std", "frame-metadata/std"] + [dependencies] -codec = { package = "parity-scale-codec", workspace = true, features = ["derive"] } -frame-metadata = { workspace = true } -scale-info = { workspace = true } +scale-info = { workspace = true, default-features = false } +frame-metadata = { workspace = true, default-features = false, features = ["current", "decode"] } +codec = { package = "parity-scale-codec", workspace = true, default-features = false, features = ["derive"] } sp-core-hashing = { workspace = true } -thiserror = { workspace = true } +hashbrown = { workspace = true } +derive_more = { workspace = true } [dev-dependencies] bitvec = { workspace = true, features = ["alloc"] } diff --git a/metadata/src/from_into/mod.rs b/metadata/src/from_into/mod.rs index 8170bc6133..1a950e1d5a 100644 --- a/metadata/src/from_into/mod.rs +++ b/metadata/src/from_into/mod.rs @@ -2,31 +2,37 @@ // This file is dual-licensed as Apache-2.0 or GPL-3.0. // see LICENSE for license details. +use alloc::string::String; +use derive_more::Display; + mod v14; mod v15; /// An error emitted if something goes wrong converting [`frame_metadata`] /// types into [`crate::Metadata`]. -#[derive(Debug, thiserror::Error, PartialEq, Eq)] +#[derive(Debug, Display, PartialEq, Eq)] #[non_exhaustive] pub enum TryFromError { /// Type missing from type registry - #[error("Type id {0} is expected but not found in the type registry")] + #[display(fmt = "Type id {_0} is expected but not found in the type registry")] TypeNotFound(u32), /// Type was not a variant/enum type - #[error("Type {0} was not a variant/enum type, but is expected to be one")] + #[display(fmt = "Type {_0} was not a variant/enum type, but is expected to be one")] VariantExpected(u32), /// An unsupported metadata version was provided. - #[error("Cannot convert v{0} metadata into Metadata type")] + #[display(fmt = "Cannot convert v{_0} metadata into Metadata type")] UnsupportedMetadataVersion(u32), /// Type name missing from type registry - #[error("Type name {0} is expected but not found in the type registry")] + #[display(fmt = "Type name {_0} is expected but not found in the type registry")] TypeNameNotFound(String), /// Invalid type path. - #[error("Type has an invalid path {0}")] + #[display(fmt = "Type has an invalid path {_0}")] InvalidTypePath(String), } +#[cfg(feature = "std")] +impl std::error::Error for TryFromError {} + impl From for frame_metadata::RuntimeMetadataPrefixed { fn from(value: crate::Metadata) -> Self { let m: frame_metadata::v15::RuntimeMetadataV15 = value.into(); diff --git a/metadata/src/from_into/v14.rs b/metadata/src/from_into/v14.rs index 7df5e95347..b9b13cf681 100644 --- a/metadata/src/from_into/v14.rs +++ b/metadata/src/from_into/v14.rs @@ -2,11 +2,15 @@ // This file is dual-licensed as Apache-2.0 or GPL-3.0. // see LICENSE for license details. -use std::collections::HashMap; - use super::TryFromError; use crate::Metadata; +use alloc::borrow::ToOwned; +use alloc::string::String; +use alloc::vec; +use alloc::vec::Vec; +use core::fmt::Write; use frame_metadata::{v14, v15}; +use hashbrown::HashMap; use scale_info::TypeDef; impl TryFrom for Metadata { @@ -31,27 +35,27 @@ fn v15_to_v14(mut metadata: v15::RuntimeMetadataV15) -> v14::RuntimeMetadataV14 let extrinsic_type = scale_info::Type { path: scale_info::Path { segments: vec![ - "primitives".to_string(), - "runtime".to_string(), - "generic".to_string(), - "UncheckedExtrinsic".to_string(), + "primitives".to_owned(), + "runtime".to_owned(), + "generic".to_owned(), + "UncheckedExtrinsic".to_owned(), ], }, type_params: vec![ scale_info::TypeParameter:: { - name: "Address".to_string(), + name: "Address".to_owned(), ty: Some(metadata.extrinsic.address_ty), }, scale_info::TypeParameter:: { - name: "Call".to_string(), + name: "Call".to_owned(), ty: Some(metadata.extrinsic.call_ty), }, scale_info::TypeParameter:: { - name: "Signature".to_string(), + name: "Signature".to_owned(), ty: Some(metadata.extrinsic.signature_ty), }, scale_info::TypeParameter:: { - name: "Extra".to_string(), + name: "Extra".to_owned(), ty: Some(metadata.extrinsic.extra_ty), }, ], @@ -342,7 +346,7 @@ fn generate_outer_enums( let Some(last) = call_path.last_mut() else { return Err(TryFromError::InvalidTypePath("RuntimeCall".into())); }; - *last = "RuntimeError".to_string(); + *last = "RuntimeError".to_owned(); generate_outer_error_enum_type(metadata, call_path) }; @@ -368,7 +372,10 @@ fn generate_outer_error_enum_type( return None; }; - let path = format!("{}Error", pallet.name); + // Note: using the `alloc::format!` macro like in `let path = format!("{}Error", pallet.name);` + // leads to linker errors about extern function `_Unwind_Resume` not being defined. + let mut path = String::new(); + write!(path, "{}Error", pallet.name).expect("Cannot panic, qed;"); let ty = error.ty.id.into(); Some(scale_info::Variant { diff --git a/metadata/src/from_into/v15.rs b/metadata/src/from_into/v15.rs index f210089dce..37e4336543 100644 --- a/metadata/src/from_into/v15.rs +++ b/metadata/src/from_into/v15.rs @@ -3,6 +3,7 @@ // see LICENSE for license details. use super::TryFromError; + use crate::utils::variant_index::VariantIndex; use crate::{ utils::ordered_map::OrderedMap, ArcStr, ConstantMetadata, ExtrinsicMetadata, Metadata, @@ -10,9 +11,10 @@ use crate::{ RuntimeApiMethodParamMetadata, SignedExtensionMetadata, StorageEntryMetadata, StorageEntryModifier, StorageEntryType, StorageHasher, StorageMetadata, }; +use alloc::borrow::ToOwned; use frame_metadata::v15; +use hashbrown::HashMap; use scale_info::form::PortableForm; -use std::collections::HashMap; // Converting from V15 metadata into our Subxt repr. mod from_v15 { diff --git a/metadata/src/lib.rs b/metadata/src/lib.rs index 4ebc68a44e..59a3ba484b 100644 --- a/metadata/src/lib.rs +++ b/metadata/src/lib.rs @@ -14,14 +14,19 @@ //! 2. Obtaining [`frame_metadata::RuntimeMetadataPrefixed`], and then //! using `.try_into()` to convert it into [`Metadata`]. +#![cfg_attr(not(feature = "std"), no_std)] #![deny(missing_docs)] +extern crate alloc; + mod from_into; mod utils; +use alloc::string::String; +use alloc::sync::Arc; +use alloc::vec::Vec; +use hashbrown::HashMap; use scale_info::{form::PortableForm, PortableRegistry, Variant}; -use std::collections::HashMap; -use std::sync::Arc; use utils::variant_index::VariantIndex; use utils::{ordered_map::OrderedMap, validation::outer_enum_hashes::OuterEnumHashes}; @@ -200,7 +205,7 @@ impl Metadata { // its name to ensure that every unique type has a unique path, too. if *visited_count > 1 { if let Some(name) = ty.ty.path.segments.last_mut() { - *name = format!("{name}{visited_count}"); + *name = alloc::format!("{name}{visited_count}"); } } } diff --git a/metadata/src/utils/ordered_map.rs b/metadata/src/utils/ordered_map.rs index c9a9a40f46..614c25cf65 100644 --- a/metadata/src/utils/ordered_map.rs +++ b/metadata/src/utils/ordered_map.rs @@ -2,7 +2,9 @@ // This file is dual-licensed as Apache-2.0 or GPL-3.0. // see LICENSE for license details. -use std::collections::HashMap; +use alloc::vec::Vec; +use core::mem; +use hashbrown::HashMap; /// A minimal ordered map to let one search for /// things by key or get the values in insert order. @@ -23,7 +25,7 @@ impl Default for OrderedMap { impl OrderedMap where - K: PartialEq + Eq + std::hash::Hash, + K: PartialEq + Eq + core::hash::Hash, { /// Create a new, empty [`OrderedMap`]. pub fn new() -> Self { @@ -47,8 +49,8 @@ where where F: FnMut(&V) -> bool, { - let values = std::mem::take(&mut self.values); - let map = std::mem::take(&mut self.map); + let values = mem::take(&mut self.values); + let map = mem::take(&mut self.map); // Filter the values, storing a map from old to new positions: let mut new_values = Vec::new(); @@ -78,8 +80,8 @@ where /// Get an item by its key. pub fn get_by_key(&self, key: &Q) -> Option<&V> where - K: std::borrow::Borrow, - Q: std::hash::Hash + Eq + ?Sized, + K: alloc::borrow::Borrow, + Q: core::hash::Hash + Eq + ?Sized, { self.map.get(key).and_then(|&v| self.values.get(v)) } @@ -107,7 +109,7 @@ where impl FromIterator<(K, V)> for OrderedMap where - K: PartialEq + Eq + std::hash::Hash, + K: PartialEq + Eq + core::hash::Hash, { fn from_iter>(iter: T) -> Self { let mut map = OrderedMap::new(); diff --git a/metadata/src/utils/retain.rs b/metadata/src/utils/retain.rs index d33315c2aa..a160609597 100644 --- a/metadata/src/utils/retain.rs +++ b/metadata/src/utils/retain.rs @@ -8,8 +8,9 @@ use crate::{ ExtrinsicMetadata, Metadata, OuterEnumsMetadata, PalletMetadataInner, RuntimeApiMetadataInner, StorageEntryType, }; +use alloc::collections::BTreeMap; +use hashbrown::HashSet; use scale_info::TypeDef; -use std::collections::{BTreeMap, HashSet}; /// Collect all type IDs needed to represent the provided pallet. fn collect_pallet_types(pallet: &PalletMetadataInner, type_ids: &mut HashSet) { diff --git a/metadata/src/utils/validation.rs b/metadata/src/utils/validation.rs index 81c50b4593..2b1b1f5e33 100644 --- a/metadata/src/utils/validation.rs +++ b/metadata/src/utils/validation.rs @@ -8,9 +8,10 @@ use crate::{ CustomMetadata, CustomValueMetadata, ExtrinsicMetadata, Metadata, PalletMetadata, RuntimeApiMetadata, RuntimeApiMethodMetadata, StorageEntryMetadata, StorageEntryType, }; +use alloc::vec::Vec; +use hashbrown::HashMap; use outer_enum_hashes::OuterEnumHashes; use scale_info::{form::PortableForm, Field, PortableRegistry, TypeDef, TypeDefVariant, Variant}; -use std::collections::HashMap; pub mod outer_enum_hashes; diff --git a/metadata/src/utils/validation/outer_enum_hashes.rs b/metadata/src/utils/validation/outer_enum_hashes.rs index 33bd4f52c1..5e50fcb40e 100644 --- a/metadata/src/utils/validation/outer_enum_hashes.rs +++ b/metadata/src/utils/validation/outer_enum_hashes.rs @@ -1,6 +1,6 @@ //! Hash representations of the `frame_metadata::v15::OuterEnums`. -use std::collections::HashMap; +use hashbrown::HashMap; use scale_info::{PortableRegistry, TypeDef}; diff --git a/metadata/src/utils/variant_index.rs b/metadata/src/utils/variant_index.rs index bcc8a78902..9019aee3ab 100644 --- a/metadata/src/utils/variant_index.rs +++ b/metadata/src/utils/variant_index.rs @@ -2,8 +2,10 @@ // This file is dual-licensed as Apache-2.0 or GPL-3.0. // see LICENSE for license details. +use alloc::borrow::ToOwned; +use alloc::string::String; +use hashbrown::HashMap; use scale_info::{form::PortableForm, PortableRegistry, TypeDef, Variant}; -use std::collections::HashMap; /// Given some type ID and type registry, build a couple of /// indexes to look up variants by index or name. If the ID provided @@ -62,8 +64,8 @@ impl VariantIndex { types: &'a PortableRegistry, ) -> Option<&'a Variant> where - String: std::borrow::Borrow, - K: std::hash::Hash + Eq + ?Sized, + String: alloc::borrow::Borrow, + K: core::hash::Hash + Eq + ?Sized, { let pos = *self.by_name.get(name)?; let variants = Self::get(variant_id, types)?; diff --git a/subxt/Cargo.toml b/subxt/Cargo.toml index 5ff125d191..4a18bb2b41 100644 --- a/subxt/Cargo.toml +++ b/subxt/Cargo.toml @@ -25,20 +25,20 @@ default = ["jsonrpsee", "native"] # Enable this for native (ie non web/wasm builds). # Exactly 1 of "web" and "native" is expected. native = [ - "jsonrpsee?/async-client", - "jsonrpsee?/client-ws-transport-native-tls", - "subxt-lightclient?/native", + "jsonrpsee?/async-client", + "jsonrpsee?/client-ws-transport-native-tls", + "subxt-lightclient?/native", "tokio-util" ] # Enable this for web/wasm builds. # Exactly 1 of "web" and "native" is expected. web = [ - "jsonrpsee?/async-wasm-client", - "jsonrpsee?/client-web-transport", - "getrandom/js", - "subxt-lightclient?/web", - "subxt-macro/web", + "jsonrpsee?/async-wasm-client", + "jsonrpsee?/client-web-transport", + "getrandom/js", + "subxt-lightclient?/web", + "subxt-macro/web", "instant/wasm-bindgen" ] diff --git a/testing/generate-custom-metadata/Cargo.toml b/testing/generate-custom-metadata/Cargo.toml index 9ebff6bb13..14da285a13 100644 --- a/testing/generate-custom-metadata/Cargo.toml +++ b/testing/generate-custom-metadata/Cargo.toml @@ -12,6 +12,6 @@ homepage.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -scale-info = { workspace = true, features = ["bit-vec"] } -frame-metadata = { workspace = true } -codec = { package = "parity-scale-codec", workspace = true, features = ["derive", "bit-vec"] } +scale-info = { workspace = true, features = ["std", "bit-vec"] } +frame-metadata = { workspace = true, features = ["decode", "current"] } +codec = { package = "parity-scale-codec", workspace = true, features = ["std", "derive", "bit-vec"] } diff --git a/testing/no-std-tests/.gitignore b/testing/no-std-tests/.gitignore new file mode 100644 index 0000000000..c41cc9e35e --- /dev/null +++ b/testing/no-std-tests/.gitignore @@ -0,0 +1 @@ +/target \ No newline at end of file diff --git a/testing/no-std-tests/Cargo.lock b/testing/no-std-tests/Cargo.lock new file mode 100644 index 0000000000..ee4afadfe7 --- /dev/null +++ b/testing/no-std-tests/Cargo.lock @@ -0,0 +1,487 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "frame-metadata" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "libc" +version = "0.2.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" + +[[package]] +name = "libc_alloc" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a835c038b748123287f9fb1743d565e7c635879997f43c345a18a026690364e" + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "parity-scale-codec" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +dependencies = [ + "arrayvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +dependencies = [ + "proc-macro-crate 2.0.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "scale-info" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60" +dependencies = [ + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "semver" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest", + "keccak", +] + +[[package]] +name = "sp-core-hashing" +version = "15.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0f4990add7b2cefdeca883c0efa99bb4d912cb2196120e1500c0cc099553b0" +dependencies = [ + "blake2b_simd", + "byteorder", + "digest", + "sha2", + "sha3", + "twox-hash", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subxt-core-no-std-tests" +version = "0.0.0" +dependencies = [ + "libc_alloc", + "parity-scale-codec", + "subxt-metadata", +] + +[[package]] +name = "subxt-metadata" +version = "0.34.0" +dependencies = [ + "derive_more", + "frame-metadata", + "hashbrown", + "parity-scale-codec", + "scale-info", + "sp-core-hashing", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "digest", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "winnow" +version = "0.5.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" +dependencies = [ + "memchr", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] diff --git a/testing/no-std-tests/Cargo.toml b/testing/no-std-tests/Cargo.toml new file mode 100644 index 0000000000..503326d5b5 --- /dev/null +++ b/testing/no-std-tests/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "subxt-core-no-std-tests" +edition = "2021" +publish = false +version = "0.0.0" +resolver = "2" + +[dependencies] +subxt-metadata = { path = "../../metadata", default-features = false } +codec = { package = "parity-scale-codec", version = "3.6.9", default-features = false, features = ["derive"] } +libc_alloc = { version = "1.0.6" } + +[profile.dev] +panic = "abort" + +[profile.release] +panic = "abort" + +# this shouldn't be needed, it's in workspace.exclude, but still +# I get the complaint unless I add it... +[workspace] diff --git a/testing/no-std-tests/README.md b/testing/no-std-tests/README.md new file mode 100644 index 0000000000..2b662bb455 --- /dev/null +++ b/testing/no-std-tests/README.md @@ -0,0 +1,7 @@ +# No-Std Testing Crate + +To test the no-std compatibility of various subxt-* crates, please run: + +```bash +cargo build --target thumbv7em-none-eabi +``` \ No newline at end of file diff --git a/testing/no-std-tests/rust-toolchain b/testing/no-std-tests/rust-toolchain new file mode 100644 index 0000000000..07ade694b1 --- /dev/null +++ b/testing/no-std-tests/rust-toolchain @@ -0,0 +1 @@ +nightly \ No newline at end of file diff --git a/testing/no-std-tests/src/main.rs b/testing/no-std-tests/src/main.rs new file mode 100644 index 0000000000..09d8775fc5 --- /dev/null +++ b/testing/no-std-tests/src/main.rs @@ -0,0 +1,47 @@ +// Copyright 2019-2023 Parity Technologies (UK) Ltd. +// This file is dual-licensed as Apache-2.0 or GPL-3.0. +// see LICENSE for license details. + +#![allow(internal_features)] +#![feature(lang_items, start)] +#![feature(alloc_error_handler)] +#![no_std] + +#[start] +fn start(_argc: isize, _argv: *const *const u8) -> isize { + compile_test(); + 0 +} + +#[lang = "eh_personality"] +#[no_mangle] +pub extern "C" fn rust_eh_personality() {} + +#[panic_handler] +fn panic(_info: &core::panic::PanicInfo) -> ! { + loop {} +} + +use libc_alloc::LibcAlloc; + +#[global_allocator] +static ALLOCATOR: LibcAlloc = LibcAlloc; + +////////////////////////////////////////////////////////////////////////////// + +extern crate alloc; + +/// Including code here makes sure it is not pruned. +/// We want all code included to compile fine for the `thumbv7em-none-eabi` target. +fn compile_test() { + subxt_metadata_compiles(); +} + +fn subxt_metadata_compiles() { + use codec::Decode; + let bytes: alloc::vec::Vec = alloc::vec![0, 1, 2, 3, 4]; + subxt_metadata::Metadata::decode(&mut &bytes[..]).expect_err("invalid byte sequence"); + + const METADATA: &[u8] = include_bytes!("../../../artifacts/polkadot_metadata_small.scale"); + subxt_metadata::Metadata::decode(&mut &METADATA[..]).expect("should be valid metadata"); +}