From 9b68c0a1b25166674282febfd244e224326be921 Mon Sep 17 00:00:00 2001 From: Niklas Adolfsson Date: Fri, 11 Oct 2024 16:14:38 +0200 Subject: [PATCH 1/4] fetch-metadata: remove tokio --- Cargo.lock | 2 +- codegen/Cargo.toml | 5 ++--- codegen/src/fetch_metadata.rs | 33 ++++----------------------------- macro/Cargo.toml | 1 + macro/src/lib.rs | 13 ++++++++----- 5 files changed, 16 insertions(+), 38 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3b6987d36c..cdc27bf4b9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10635,7 +10635,6 @@ dependencies = [ "subxt-metadata", "syn 2.0.77", "thiserror", - "tokio", ] [[package]] @@ -10699,6 +10698,7 @@ name = "subxt-macro" version = "0.37.0" dependencies = [ "darling 0.20.10", + "futures", "parity-scale-codec", "polkadot-sdk", "proc-macro-error2", diff --git a/codegen/Cargo.toml b/codegen/Cargo.toml index ba94a826fc..4485b2d3b2 100644 --- a/codegen/Cargo.toml +++ b/codegen/Cargo.toml @@ -13,7 +13,7 @@ description = "Generate an API for interacting with a substrate node from FRAME [features] default = [] -fetch-metadata = ["dep:jsonrpsee", "dep:tokio", "dep:frame-metadata"] +fetch-metadata = ["dep:jsonrpsee", "dep:frame-metadata"] web = ["jsonrpsee?/async-wasm-client", "jsonrpsee?/client-web-transport", "getrandom/js"] [dependencies] @@ -25,9 +25,8 @@ quote = { workspace = true } syn = { workspace = true } scale-info = { workspace = true } subxt-metadata = { workspace = true } -jsonrpsee = { workspace = true, features = ["async-client", "client-ws-transport-tls", "http-client"], optional = true } +jsonrpsee = { workspace = true, features = ["ws-client", "http-client"], optional = true } hex = { workspace = true, features = ["std"] } -tokio = { workspace = true, features = ["rt-multi-thread"], optional = true } thiserror = { workspace = true } scale-typegen = { workspace = true } diff --git a/codegen/src/fetch_metadata.rs b/codegen/src/fetch_metadata.rs index ee7c554013..3276170a60 100644 --- a/codegen/src/fetch_metadata.rs +++ b/codegen/src/fetch_metadata.rs @@ -7,11 +7,7 @@ use crate::error::FetchMetadataError; use codec::{Decode, Encode}; use jsonrpsee::{ - async_client::ClientBuilder, - client_transport::ws::WsTransportClientBuilder, - core::client::{ClientT, Error}, - http_client::HttpClientBuilder, - rpc_params, + core::client::ClientT, http_client::HttpClientBuilder, rpc_params, ws_client::WsClientBuilder, }; use std::time::Duration; @@ -60,23 +56,6 @@ pub fn fetch_metadata_from_file_blocking( Ok(bytes) } -/// Returns the metadata bytes from the provided URL, blocking the current thread. -pub fn fetch_metadata_from_url_blocking( - url: Url, - version: MetadataVersion, -) -> Result, FetchMetadataError> { - tokio_block_on(fetch_metadata_from_url(url, version)) -} - -// Block on some tokio runtime for sync contexts -fn tokio_block_on>(fut: Fut) -> T { - tokio::runtime::Builder::new_multi_thread() - .enable_all() - .build() - .unwrap() - .block_on(fut) -} - /// Returns the metadata bytes from the provided URL. pub async fn fetch_metadata_from_url( url: Url, @@ -95,15 +74,11 @@ async fn fetch_metadata_ws( url: Url, version: MetadataVersion, ) -> Result, FetchMetadataError> { - let (sender, receiver) = WsTransportClientBuilder::default() - .build(url) - .await - .map_err(|e| Error::Transport(e.into()))?; - - let client = ClientBuilder::default() + let client = WsClientBuilder::new() .request_timeout(Duration::from_secs(180)) .max_buffer_capacity_per_subscription(4096) - .build_with_tokio(sender, receiver); + .build(url) + .await?; fetch_metadata(client, version).await } diff --git a/macro/Cargo.toml b/macro/Cargo.toml index 2902b680ce..659b791414 100644 --- a/macro/Cargo.toml +++ b/macro/Cargo.toml @@ -29,6 +29,7 @@ quote = { workspace = true } subxt-codegen = { workspace = true, features = ["fetch-metadata"] } scale-typegen = { workspace = true } polkadot-sdk = { workspace = true, optional = true, features = ["sp-io", "sc-executor-common", "sp-state-machine", "sp-maybe-compressed-blob", "sc-executor"] } +futures = { workspace = true, features = ["executor"] } [lints] workspace = true \ No newline at end of file diff --git a/macro/src/lib.rs b/macro/src/lib.rs index fd224b268e..c772d69ddb 100644 --- a/macro/src/lib.rs +++ b/macro/src/lib.rs @@ -17,7 +17,7 @@ use scale_typegen::typegen::{ }; use subxt_codegen::{ fetch_metadata::{ - fetch_metadata_from_file_blocking, fetch_metadata_from_url_blocking, MetadataVersion, Url, + fetch_metadata_from_file_blocking, fetch_metadata_from_url, MetadataVersion, Url, }, CodegenBuilder, CodegenError, Metadata, }; @@ -256,10 +256,13 @@ fn fetch_metadata(args: &RuntimeMetadataArgs) -> Result MetadataVersion::Latest, }; - fetch_metadata_from_url_blocking(url, version) - .map_err(CodegenError::from) - .and_then(|b| subxt_codegen::Metadata::decode(&mut &*b).map_err(Into::into)) - .map_err(|e| e.into_compile_error())? + futures::executor::block_on(async { + fetch_metadata_from_url(url, version) + .await + .map_err(CodegenError::from) + .and_then(|b| subxt_codegen::Metadata::decode(&mut &*b).map_err(Into::into)) + .map_err(|e| e.into_compile_error()) + })? } #[cfg(feature = "runtime-path")] (None, None) => { From 22c6d7274dbfcc102e70323ecfbfe69863fc0a98 Mon Sep 17 00:00:00 2001 From: Niklas Adolfsson Date: Fri, 11 Oct 2024 17:14:22 +0200 Subject: [PATCH 2/4] fix build --- Cargo.lock | 1 + codegen/Cargo.toml | 6 ++++-- codegen/src/fetch_metadata.rs | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cdc27bf4b9..1123c4a10a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10635,6 +10635,7 @@ dependencies = [ "subxt-metadata", "syn 2.0.77", "thiserror", + "url", ] [[package]] diff --git a/codegen/Cargo.toml b/codegen/Cargo.toml index 4485b2d3b2..475938c524 100644 --- a/codegen/Cargo.toml +++ b/codegen/Cargo.toml @@ -13,8 +13,9 @@ description = "Generate an API for interacting with a substrate node from FRAME [features] default = [] -fetch-metadata = ["dep:jsonrpsee", "dep:frame-metadata"] -web = ["jsonrpsee?/async-wasm-client", "jsonrpsee?/client-web-transport", "getrandom/js"] +fetch-metadata = ["dep:jsonrpsee", "dep:frame-metadata", "dep:url"] +# NOTE: This is just hack that only enables `getrandom/js` and doesn't do anything else. +web = ["getrandom/js"] [dependencies] codec = { package = "parity-scale-codec", workspace = true, features = ["derive"] } @@ -29,6 +30,7 @@ jsonrpsee = { workspace = true, features = ["ws-client", "http-client"], optiona hex = { workspace = true, features = ["std"] } thiserror = { workspace = true } scale-typegen = { workspace = true } +url = { workspace = true, optional = true } # Included if "web" feature is enabled, to enable its js feature. getrandom = { workspace = true, optional = true } diff --git a/codegen/src/fetch_metadata.rs b/codegen/src/fetch_metadata.rs index 3276170a60..2317d3f1fe 100644 --- a/codegen/src/fetch_metadata.rs +++ b/codegen/src/fetch_metadata.rs @@ -11,7 +11,7 @@ use jsonrpsee::{ }; use std::time::Duration; -pub use jsonrpsee::client_transport::ws::Url; +pub use url::Url; /// The metadata version that is fetched from the node. #[derive(Default, Debug, Clone, Copy)] From adb7fce01019eca9223fa96298a66eb52d465209 Mon Sep 17 00:00:00 2001 From: Niklas Adolfsson Date: Mon, 14 Oct 2024 16:51:01 +0200 Subject: [PATCH 3/4] Update macro/Cargo.toml --- macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macro/Cargo.toml b/macro/Cargo.toml index 659b791414..d6ed56087e 100644 --- a/macro/Cargo.toml +++ b/macro/Cargo.toml @@ -29,7 +29,7 @@ quote = { workspace = true } subxt-codegen = { workspace = true, features = ["fetch-metadata"] } scale-typegen = { workspace = true } polkadot-sdk = { workspace = true, optional = true, features = ["sp-io", "sc-executor-common", "sp-state-machine", "sp-maybe-compressed-blob", "sc-executor"] } -futures = { workspace = true, features = ["executor"] } +futures = { workspace = true } [lints] workspace = true \ No newline at end of file From 40c58bbfd09df531cc31121e6813927e82b5cb2f Mon Sep 17 00:00:00 2001 From: Niklas Adolfsson Date: Mon, 14 Oct 2024 16:56:52 +0200 Subject: [PATCH 4/4] Update macro/Cargo.toml --- macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macro/Cargo.toml b/macro/Cargo.toml index d6ed56087e..659b791414 100644 --- a/macro/Cargo.toml +++ b/macro/Cargo.toml @@ -29,7 +29,7 @@ quote = { workspace = true } subxt-codegen = { workspace = true, features = ["fetch-metadata"] } scale-typegen = { workspace = true } polkadot-sdk = { workspace = true, optional = true, features = ["sp-io", "sc-executor-common", "sp-state-machine", "sp-maybe-compressed-blob", "sc-executor"] } -futures = { workspace = true } +futures = { workspace = true, features = ["executor"] } [lints] workspace = true \ No newline at end of file