From 143e31f02580603a111669cfb5b973a00b80ceaf Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Thu, 2 Feb 2023 14:46:23 +0000 Subject: [PATCH] XXX: Backup v15 show md via metadata_at_version Signed-off-by: Alexandru Vasile --- cli/Cargo.toml | 2 +- codegen/Cargo.toml | 2 +- codegen/src/api/mod.rs | 6 ++- examples/examples/fetch_staking_details.rs | 54 +++++++++++----------- metadata/Cargo.toml | 2 +- metadata/src/lib.rs | 4 +- subxt/Cargo.toml | 2 +- subxt/src/client/online_client.rs | 30 +++++++++--- subxt/src/metadata/metadata_type.rs | 2 +- testing/integration-tests/Cargo.toml | 2 +- testing/ui-tests/Cargo.toml | 2 +- 11 files changed, 64 insertions(+), 44 deletions(-) diff --git a/cli/Cargo.toml b/cli/Cargo.toml index b331ee76ad..f5cd03c309 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -31,7 +31,7 @@ serde_json = "1.0.68" # hex encoded metadata to bytes hex = "0.4.3" # actual metadata types -frame-metadata = { version = "15.0.0", path = "/home/lexnv/remote-builds/frame-metadata/frame-metadata", features = ["v15", "std"] } +frame-metadata = { version = "15.0.0", path = "/home/lexnv/remote-builds/frame-metadata/frame-metadata", features = ["v14", "v15-unstable", "std"] } # decode bytes into the metadata types scale = { package = "parity-scale-codec", version = "3.0.0", default-features = false } # generate the item mod for codegen diff --git a/codegen/Cargo.toml b/codegen/Cargo.toml index 0d617af02b..53e236c7ea 100644 --- a/codegen/Cargo.toml +++ b/codegen/Cargo.toml @@ -14,7 +14,7 @@ description = "Generate an API for interacting with a substrate node from FRAME [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "full"] } darling = "0.14.0" -frame-metadata = { version = "15.0.0", path = "/home/lexnv/remote-builds/frame-metadata/frame-metadata", features = ["v15", "std"] } +frame-metadata = { version = "15.0.0", path = "/home/lexnv/remote-builds/frame-metadata/frame-metadata", features = ["v14", "v15-unstable", "std"] } heck = "0.4.0" proc-macro2 = "1.0.24" proc-macro-error = "1.0.4" diff --git a/codegen/src/api/mod.rs b/codegen/src/api/mod.rs index e54a361a80..6e61b567e1 100644 --- a/codegen/src/api/mod.rs +++ b/codegen/src/api/mod.rs @@ -29,10 +29,12 @@ use crate::{ }; use codec::Decode; use frame_metadata::{ - v15::RuntimeMetadataV15, + v15::{ + RuntimeMetadataV15, + TraitMetadata, + }, RuntimeMetadata, RuntimeMetadataPrefixed, - TraitMetadata, }; use heck::ToSnakeCase as _; use proc_macro2::TokenStream as TokenStream2; diff --git a/examples/examples/fetch_staking_details.rs b/examples/examples/fetch_staking_details.rs index cd1f5efdf6..4147ac4742 100644 --- a/examples/examples/fetch_staking_details.rs +++ b/examples/examples/fetch_staking_details.rs @@ -21,8 +21,8 @@ use subxt::{ PolkadotConfig, }; -#[subxt::subxt(runtime_metadata_path = "../artifacts/polkadot_metadata.scale")] -pub mod polkadot {} +// #[subxt::subxt(runtime_metadata_path = "../artifacts/polkadot_metadata.scale")] +// pub mod polkadot {} #[tokio::main] async fn main() -> Result<(), Box> { @@ -31,35 +31,35 @@ async fn main() -> Result<(), Box> { // Create a client to use: let api = OnlineClient::::new().await?; - let active_era_addr = polkadot::storage().staking().active_era(); - let era = api.storage().fetch(&active_era_addr, None).await?.unwrap(); - println!( - "Staking active era: index: {:?}, start: {:?}", - era.index, era.start - ); + // let active_era_addr = polkadot::storage().staking().active_era(); + // let era = api.storage().fetch(&active_era_addr, None).await?.unwrap(); + // println!( + // "Staking active era: index: {:?}, start: {:?}", + // era.index, era.start + // ); - let alice_id = AccountKeyring::Alice.to_account_id(); - println!(" Alice account id: {:?}", alice_id); + // let alice_id = AccountKeyring::Alice.to_account_id(); + // println!(" Alice account id: {:?}", alice_id); - // Get Alice' Stash account ID - let alice_stash_id: AccountId32 = sr25519::Pair::from_string("//Alice//stash", None) - .expect("Could not obtain stash signer pair") - .public() - .into(); - println!(" Alice//stash account id: {:?}", alice_stash_id); + // // Get Alice' Stash account ID + // let alice_stash_id: AccountId32 = sr25519::Pair::from_string("//Alice//stash", None) + // .expect("Could not obtain stash signer pair") + // .public() + // .into(); + // println!(" Alice//stash account id: {:?}", alice_stash_id); - // Map from all locked "stash" accounts to the controller account. - let controller_acc_addr = polkadot::storage().staking().bonded(&alice_stash_id); - let controller_acc = api - .storage() - .fetch(&controller_acc_addr, None) - .await? - .unwrap(); - println!(" account controlled by: {:?}", controller_acc); + // // Map from all locked "stash" accounts to the controller account. + // let controller_acc_addr = polkadot::storage().staking().bonded(&alice_stash_id); + // let controller_acc = api + // .storage() + // .fetch(&controller_acc_addr, None) + // .await? + // .unwrap(); + // println!(" account controlled by: {:?}", controller_acc); - let era_reward_addr = polkadot::storage().staking().eras_reward_points(era.index); - let era_result = api.storage().fetch(&era_reward_addr, None).await?; - println!("Era reward points: {:?}", era_result); + // let era_reward_addr = polkadot::storage().staking().eras_reward_points(era.index); + // let era_result = api.storage().fetch(&era_reward_addr, None).await?; + // println!("Era reward points: {:?}", era_result); Ok(()) } diff --git a/metadata/Cargo.toml b/metadata/Cargo.toml index a3cabe6dff..e4ccf07ad3 100644 --- a/metadata/Cargo.toml +++ b/metadata/Cargo.toml @@ -14,7 +14,7 @@ description = "Command line utilities for checking metadata compatibility betwee [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "full"] } -frame-metadata = { version = "15.0.0", path = "/home/lexnv/remote-builds/frame-metadata/frame-metadata", features = ["v15", "std"] } +frame-metadata = { version = "15.0.0", path = "/home/lexnv/remote-builds/frame-metadata/frame-metadata", features = ["v14", "v15-unstable", "std"] } scale-info = "2.0.0" sp-core-hashing = "6.0.0" diff --git a/metadata/src/lib.rs b/metadata/src/lib.rs index b5dfd7ad8c..f90e5ec577 100644 --- a/metadata/src/lib.rs +++ b/metadata/src/lib.rs @@ -3,8 +3,8 @@ // see LICENSE for license details. use frame_metadata::{ + v15::RuntimeMetadataV15, ExtrinsicMetadata, - RuntimeMetadataV15, StorageEntryMetadata, StorageEntryType, }; @@ -247,7 +247,7 @@ fn get_storage_entry_hash( /// Obtain the hash for a specific storage item, or an error if it's not found. pub fn get_storage_hash( - metadata: &RuntimeMetadataV15, + metadata: &frame_metadata::v15::RuntimeMetadataV15, pallet_name: &str, storage_name: &str, ) -> Result<[u8; 32], NotFound> { diff --git a/subxt/Cargo.toml b/subxt/Cargo.toml index cab00472c7..9dd7d133e6 100644 --- a/subxt/Cargo.toml +++ b/subxt/Cargo.toml @@ -47,7 +47,7 @@ serde_json = { version = "1.0.64", features = ["raw_value"] } thiserror = "1.0.24" tracing = "0.1.34" parking_lot = "0.12.0" -frame-metadata = { version = "15.0.0", path = "/home/lexnv/remote-builds/frame-metadata/frame-metadata", features = ["v15", "std"] } +frame-metadata = { version = "15.0.0", path = "/home/lexnv/remote-builds/frame-metadata/frame-metadata", features = ["v14", "v15-unstable", "std"] } derivative = "2.2.0" subxt-macro = { version = "0.25.0", path = "../macro" } diff --git a/subxt/src/client/online_client.rs b/subxt/src/client/online_client.rs index f1a934d1b2..7c7e6d2b98 100644 --- a/subxt/src/client/online_client.rs +++ b/subxt/src/client/online_client.rs @@ -109,6 +109,8 @@ impl OnlineClient { pub async fn from_rpc_client( rpc_client: Arc, ) -> Result, Error> { + println!("CONSTRUCT CLIENT"); + let rpc = Rpc::::new(rpc_client.clone()); let (genesis_hash, runtime_version, metadata) = future::join3( rpc.genesis_hash(), @@ -155,20 +157,36 @@ impl OnlineClient { /// Fetch the metadata from substrate using the runtime API. async fn fetch_metadata(rpc: &Rpc) -> Result { - let bytes = rpc.state_call("Metadata_metadata", None, None).await?; + use codec::Encode; - let decoded: (Vec, OpaqueMetadata) = Decode::decode(&mut &*bytes)?; - let bytes = decoded.1 .0; + let param = 15u32.encode(); + let bytes = rpc + .state_call("Metadata_metadata_at_version", Some(¶m), None) + .await?; + + // println!("GOT BYTES: {:?}", bytes); + + let decoded: Option = Decode::decode(&mut &*bytes)?; + + println!("Decoded opaque"); + + let decoded = decoded.unwrap(); + let bytes = &decoded.0; let meta: RuntimeMetadataPrefixed = Decode::decode(&mut &bytes[..])?; - let metadata: Metadata = meta.try_into()?; + // let metadata: Metadata = meta.try_into()?; - println!("Availb methods {:?}", decoded.0); + // println!("Availb methods {:?}", decoded.0); // let cursor = &mut &*bytes; // let _ = >::decode(cursor)?; - // let meta: RuntimeMetadataPrefixed = Decode::decode(cursor)?; + // let meta: frame_metadata::RuntimeMetadataPrefixed = Decode::decode(cursor)?; + + println!("METADATA {:#?}", meta); + + let metadata: Metadata = meta.try_into()?; + Ok(metadata) } diff --git a/subxt/src/metadata/metadata_type.rs b/subxt/src/metadata/metadata_type.rs index be42e8bb77..cc944513b4 100644 --- a/subxt/src/metadata/metadata_type.rs +++ b/subxt/src/metadata/metadata_type.rs @@ -5,10 +5,10 @@ use super::hash_cache::HashCache; use codec::Error as CodecError; use frame_metadata::{ + v15::RuntimeMetadataV15, PalletConstantMetadata, RuntimeMetadata, RuntimeMetadataPrefixed, - RuntimeMetadataV15, StorageEntryMetadata, META_RESERVED, }; diff --git a/testing/integration-tests/Cargo.toml b/testing/integration-tests/Cargo.toml index a16054c124..26a82db35d 100644 --- a/testing/integration-tests/Cargo.toml +++ b/testing/integration-tests/Cargo.toml @@ -18,7 +18,7 @@ default = ["subxt/integration-tests"] [dev-dependencies] assert_matches = "1.5.0" codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "full", "bit-vec"] } -frame-metadata = { version = "15.0.0", path = "/home/lexnv/remote-builds/frame-metadata/frame-metadata", features = ["v15", "std"] } +frame-metadata = { version = "15.0.0", path = "/home/lexnv/remote-builds/frame-metadata/frame-metadata", features = ["v14", "v15-unstable", "std"] } futures = "0.3.13" hex = "0.4.3" regex = "1.5.0" diff --git a/testing/ui-tests/Cargo.toml b/testing/ui-tests/Cargo.toml index 608603e76f..a1b6e07aa2 100644 --- a/testing/ui-tests/Cargo.toml +++ b/testing/ui-tests/Cargo.toml @@ -11,6 +11,6 @@ publish = false [dev-dependencies] trybuild = "1.0.76" scale-info = { version = "2.3.0", features = ["bit-vec"] } -frame-metadata = { version = "15.0.0", path = "/home/lexnv/remote-builds/frame-metadata/frame-metadata", features = ["v15", "std"] } +frame-metadata = { version = "15.0.0", path = "/home/lexnv/remote-builds/frame-metadata/frame-metadata", features = ["v14", "v15-unstable", "std"] } codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive", "full", "bit-vec"] } subxt = { path = "../../subxt" }