diff --git a/Cargo.lock b/Cargo.lock index 8c54e1b9a5..829298bd6b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -212,17 +212,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" -[[package]] -name = "async-channel" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" -dependencies = [ - "concurrent-queue", - "event-listener", - "futures-core", -] - [[package]] name = "async-executor" version = "1.5.1" @@ -237,41 +226,6 @@ dependencies = [ "slab", ] -[[package]] -name = "async-global-executor" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" -dependencies = [ - "async-channel", - "async-executor", - "async-io", - "async-lock", - "blocking", - "futures-lite", - "once_cell", -] - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite", - "log", - "parking", - "polling", - "rustix 0.37.19", - "slab", - "socket2", - "waker-fn", -] - [[package]] name = "async-lock" version = "2.7.0" @@ -281,32 +235,6 @@ dependencies = [ "event-listener", ] -[[package]] -name = "async-std" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" -dependencies = [ - "async-channel", - "async-global-executor", - "async-io", - "async-lock", - "crossbeam-utils", - "futures-channel", - "futures-core", - "futures-io", - "futures-lite", - "gloo-timers", - "kv-log-macro", - "log", - "memchr", - "once_cell", - "pin-project-lite", - "pin-utils", - "slab", - "wasm-bindgen-futures", -] - [[package]] name = "async-task" version = "4.4.0" @@ -330,12 +258,6 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" -[[package]] -name = "atomic-waker" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" - [[package]] name = "atty" version = "0.2.14" @@ -515,21 +437,6 @@ dependencies = [ "byte-tools", ] -[[package]] -name = "blocking" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" -dependencies = [ - "async-channel", - "async-lock", - "async-task", - "atomic-waker", - "fastrand", - "futures-lite", - "log", -] - [[package]] name = "bounded-collections" version = "0.1.7" @@ -836,50 +743,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cranelift-bforest" -version = "0.95.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1277fbfa94bc82c8ec4af2ded3e639d49ca5f7f3c7eeab2c66accd135ece4e70" -dependencies = [ - "cranelift-entity", -] - -[[package]] -name = "cranelift-codegen" -version = "0.95.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e8c31ad3b2270e9aeec38723888fe1b0ace3bea2b06b3f749ccf46661d3220" -dependencies = [ - "bumpalo", - "cranelift-bforest", - "cranelift-codegen-meta", - "cranelift-codegen-shared", - "cranelift-entity", - "cranelift-isle", - "gimli", - "hashbrown 0.13.2", - "log", - "regalloc2", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-codegen-meta" -version = "0.95.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ac5ac30d62b2d66f12651f6b606dbdfd9c2cfd0908de6b387560a277c5c9da" -dependencies = [ - "cranelift-codegen-shared", -] - -[[package]] -name = "cranelift-codegen-shared" -version = "0.95.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd82b8b376247834b59ed9bdc0ddeb50f517452827d4a11bccf5937b213748b8" - [[package]] name = "cranelift-entity" version = "0.95.1" @@ -889,51 +752,6 @@ dependencies = [ "serde", ] -[[package]] -name = "cranelift-frontend" -version = "0.95.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a25d9d0a0ae3079c463c34115ec59507b4707175454f0eee0891e83e30e82d" -dependencies = [ - "cranelift-codegen", - "log", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-isle" -version = "0.95.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80de6a7d0486e4acbd5f9f87ec49912bf4c8fb6aea00087b989685460d4469ba" - -[[package]] -name = "cranelift-native" -version = "0.95.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6b03e0e03801c4b3fd8ce0758a94750c07a44e7944cc0ffbf0d3f2e7c79b00" -dependencies = [ - "cranelift-codegen", - "libc", - "target-lexicon", -] - -[[package]] -name = "cranelift-wasm" -version = "0.95.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff3220489a3d928ad91e59dd7aeaa8b3de18afb554a6211213673a71c90737ac" -dependencies = [ - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "itertools", - "log", - "smallvec", - "wasmparser", - "wasmtime-types", -] - [[package]] name = "crc32fast" version = "1.3.2" @@ -1573,15 +1391,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - [[package]] name = "generic-array" version = "0.12.4" @@ -1935,12 +1744,6 @@ dependencies = [ "cc", ] -[[package]] -name = "id-arena" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" - [[package]] name = "ident_case" version = "1.0.1" @@ -2204,15 +2007,6 @@ dependencies = [ "cpufeatures", ] -[[package]] -name = "kv-log-macro" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" -dependencies = [ - "log", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -2312,9 +2106,6 @@ name = "log" version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" -dependencies = [ - "value-bag", -] [[package]] name = "lru" @@ -2770,22 +2561,6 @@ dependencies = [ "plotters-backend", ] -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - [[package]] name = "poly1305" version = "0.7.2" @@ -2892,17 +2667,6 @@ dependencies = [ "cc", ] -[[package]] -name = "pulldown-cmark" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8" -dependencies = [ - "bitflags", - "memchr", - "unicase", -] - [[package]] name = "quote" version = "1.0.28" @@ -3040,18 +2804,6 @@ dependencies = [ "syn 2.0.16", ] -[[package]] -name = "regalloc2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" -dependencies = [ - "fxhash", - "log", - "slice-group-by", - "smallvec", -] - [[package]] name = "regex" version = "1.8.3" @@ -3580,12 +3332,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "slice-group-by" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" - [[package]] name = "smallvec" version = "1.10.0" @@ -3598,7 +3344,6 @@ version = "0.6.0" dependencies = [ "arrayvec 0.7.2", "async-lock", - "async-std", "atomic", "base64 0.21.2", "bip39", @@ -3625,7 +3370,6 @@ dependencies = [ "num-traits", "parity-scale-codec", "pbkdf2 0.12.1", - "pin-project", "rand 0.8.5", "rand_chacha 0.3.1", "ruzstd", @@ -3637,11 +3381,9 @@ dependencies = [ "slab", "smallvec", "snow", - "soketto", "tiny-keccak", "twox-hash", "wasmi", - "wasmtime", ] [[package]] @@ -3649,7 +3391,6 @@ name = "smoldot-light" version = "0.4.0" dependencies = [ "async-lock", - "async-std", "blake2-rfc", "derive_more", "either", @@ -3662,7 +3403,6 @@ dependencies = [ "itertools", "log", "lru", - "parking_lot", "rand 0.8.5", "serde", "serde_json", @@ -4220,6 +3960,7 @@ dependencies = [ "either", "frame-metadata", "futures", + "futures-executor", "futures-timer", "futures-util", "getrandom 0.2.9", @@ -4487,7 +4228,6 @@ dependencies = [ "bytes", "libc", "mio", - "num_cpus", "pin-project-lite", "socket2", "tokio-macros", @@ -4750,15 +4490,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" version = "0.3.13" @@ -4825,12 +4556,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "value-bag" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4d330786735ea358f3bc09eea4caa098569c1c93f342d9aca0514915022fe7e" - [[package]] name = "version_check" version = "0.9.4" @@ -5021,7 +4746,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f907fdead3153cb9bfb7a93bbd5b62629472dc06dee83605358c64c52ed3dda9" dependencies = [ "anyhow", - "async-trait", "bincode", "cfg-if", "indexmap", @@ -5034,10 +4758,7 @@ dependencies = [ "serde", "target-lexicon", "wasmparser", - "wasmtime-component-macro", - "wasmtime-cranelift", "wasmtime-environ", - "wasmtime-fiber", "wasmtime-jit", "wasmtime-runtime", "windows-sys 0.45.0", @@ -5052,64 +4773,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "wasmtime-component-macro" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267096ed7cc93b4ab15d3daa4f195e04dbb7e71c7e5c6457ae7d52e9dd9c3607" -dependencies = [ - "anyhow", - "proc-macro2", - "quote", - "syn 1.0.109", - "wasmtime-component-util", - "wasmtime-wit-bindgen", - "wit-parser", -] - -[[package]] -name = "wasmtime-component-util" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e02ca7a4a3c69d72b88f26f0192e333958df6892415ac9ab84dcc42c9000c2" - -[[package]] -name = "wasmtime-cranelift" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1cefde0cce8cb700b1b21b6298a3837dba46521affd7b8c38a9ee2c869eee04" -dependencies = [ - "anyhow", - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "cranelift-native", - "cranelift-wasm", - "gimli", - "log", - "object", - "target-lexicon", - "thiserror", - "wasmparser", - "wasmtime-cranelift-shared", - "wasmtime-environ", -] - -[[package]] -name = "wasmtime-cranelift-shared" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd041e382ef5aea1b9fc78442394f1a4f6d676ce457e7076ca4cb3f397882f8b" -dependencies = [ - "anyhow", - "cranelift-codegen", - "cranelift-native", - "gimli", - "object", - "target-lexicon", - "wasmtime-environ", -] - [[package]] name = "wasmtime-environ" version = "8.0.1" @@ -5129,19 +4792,6 @@ dependencies = [ "wasmtime-types", ] -[[package]] -name = "wasmtime-fiber" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab182d5ab6273a133ab88db94d8ca86dc3e57e43d70baaa4d98f94ddbd7d10a" -dependencies = [ - "cc", - "cfg-if", - "rustix 0.36.14", - "wasmtime-asm-macros", - "windows-sys 0.45.0", -] - [[package]] name = "wasmtime-jit" version = "8.0.1" @@ -5205,7 +4855,6 @@ dependencies = [ "rustix 0.36.14", "wasmtime-asm-macros", "wasmtime-environ", - "wasmtime-fiber", "wasmtime-jit-debug", "windows-sys 0.45.0", ] @@ -5222,17 +4871,6 @@ dependencies = [ "wasmparser", ] -[[package]] -name = "wasmtime-wit-bindgen" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "983db9cc294d1adaa892a53ff6a0dc6605fc0ab1a4da5d8a2d2d4bde871ff7dd" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - [[package]] name = "web-sys" version = "0.3.63" @@ -5469,21 +5107,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "wit-parser" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f887c3da527a51b321076ebe6a7513026a4757b6d4d144259946552d6fc728b3" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "pulldown-cmark", - "unicode-xid", - "url", -] - [[package]] name = "wyz" version = "0.5.1" diff --git a/Cargo.toml b/Cargo.toml index ffb67b32d9..9353111361 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -63,7 +63,7 @@ serde = { version = "1.0.163" } serde_json = { version = "1.0.96" } syn = { version = "2.0.15", features = ["full", "extra-traits"] } thiserror = "1.0.40" -tokio = { version = "1.28", features = ["macros", "time", "rt-multi-thread"] } +tokio = { version = "1.28", default-features = false, features = ["macros", "time", "rt"] } tracing = "0.1.34" tracing-wasm = "0.2.1" tracing-subscriber = "0.3.17" @@ -79,7 +79,7 @@ smoldot-light-wasm = { path = "/home/lexnv/workspace/smoldot/wasm-node/rust", de wasm-bindgen-futures = { version = "0.4.19" } futures-timer = { version = "3" } gloo-net = { version = "0.2.6", default-features = false, features = ["json", "websocket"] } - +futures-executor = { version = "0.3.28", default-features = false } tokio-stream = "0.1.14" futures-util = "0.3.28" diff --git a/codegen/src/utils/fetch_metadata.rs b/codegen/src/utils/fetch_metadata.rs index 9d49e35ac4..3953d0971f 100644 --- a/codegen/src/utils/fetch_metadata.rs +++ b/codegen/src/utils/fetch_metadata.rs @@ -62,7 +62,7 @@ pub fn fetch_metadata_hex_blocking( // Block on some tokio runtime for sync contexts fn tokio_block_on>(fut: Fut) -> T { - tokio::runtime::Builder::new_multi_thread() + tokio::runtime::Builder::new_current_thread() .enable_all() .build() .unwrap() diff --git a/subxt/Cargo.toml b/subxt/Cargo.toml index 1d0b2ebdcf..15d400ba48 100644 --- a/subxt/Cargo.toml +++ b/subxt/Cargo.toml @@ -42,10 +42,14 @@ unstable-metadata = [] # Activate this to expose the Light Client functionality. # Note that this feature is experimental and things may break or not work as expected. + +# TODO: WE NEED smoldot-light/std to build in non-wasm environments!! unstable-light-client = [ "smoldot", - "smoldot-light/std", - "smoldot-light-wasm", + # "smoldot-light/std", + "smoldot-light", + # "futures-executor", + # "smoldot-light-wasm", "tokio-stream", "tokio/sync", "tokio/rt", @@ -62,7 +66,7 @@ scale-value = { workspace = true } scale-bits = { workspace = true } scale-decode = { workspace = true } scale-encode = { workspace = true } -futures = { workspace = true } +futures = { workspace = true, features = ["executor"] } hex = { workspace = true } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true, features = ["raw_value"] } @@ -99,6 +103,7 @@ smoldot-light-wasm = { workspace = true, optional = true } wasm-bindgen-futures = { workspace = true, optional = true } futures-timer = { workspace = true, optional = true } gloo-net = { workspace = true, optional = true } +futures-executor = { workspace = true, optional = true } tokio = { workspace = true, optional = true } @@ -112,7 +117,7 @@ getrandom = { workspace = true, features = ["js"] } bitvec = { workspace = true } codec = { workspace = true, features = ["derive", "bit-vec"] } scale-info = { workspace = true, features = ["bit-vec"] } -tokio = { workspace = true, features = ["macros", "time", "rt-multi-thread"] } +tokio = { workspace = true, features = ["macros", "time", "rt"] } sp-core = { workspace = true } sp-runtime = { workspace = true } sp-keyring = { workspace = true } diff --git a/subxt/src/rpc/lightclient/client.rs b/subxt/src/rpc/lightclient/client.rs index cd8b8894d0..61dcb7605b 100644 --- a/subxt/src/rpc/lightclient/client.rs +++ b/subxt/src/rpc/lightclient/client.rs @@ -11,6 +11,7 @@ use crate::{ }; use core::time::Duration; use futures::{lock::Mutex as AsyncMutex, stream::StreamExt, Stream}; + #[cfg(feature = "jsonrpsee-ws")] use jsonrpsee::{ async_client::ClientBuilder, @@ -19,7 +20,8 @@ use jsonrpsee::{ rpc_params, }; use serde_json::value::RawValue; -use smoldot_light::{platform::async_std::AsyncStdTcpWebSocket, ChainId}; +// use smoldot_light::{platform::async_std::AsyncStdTcpWebSocket, ChainId}; +use smoldot_light::ChainId; use std::{ iter, num::NonZeroU32, @@ -32,7 +34,9 @@ use std::{ use tokio::sync::{mpsc, oneshot}; use tokio_stream::wrappers::ReceiverStream; -use smoldot_light_wasm::platform::Platform as WasmPlatform; +// use smoldot_light_wasm::platform::Platform as WasmPlatform; + +use super::platform::Platform as MyPlatform; const LOG_TARGET: &str = "light-client"; @@ -41,7 +45,7 @@ struct LightClientInner { /// Smoldot light client implementation that leverages the `AsyncStdTcpWebSocket`. /// /// Note: `AsyncStdTcpWebSocket` is not wasm compatible. - client: smoldot_light::Client, + client: smoldot_light::Client, /// The ID of the chain used to identify the chain protocol (ie. substrate). /// /// Note: A single chain is supported for a client. This aligns with the subxt's @@ -443,7 +447,7 @@ impl LightClient { // env!("CARGO_PKG_VERSION").into(), // ); - let platform = WasmPlatform::new(); + let platform = MyPlatform::new(); let mut client = smoldot_light::Client::new(platform); @@ -496,7 +500,8 @@ impl LightClient { // `json_rpc_responses` can only be `None` if we had passed `json_rpc: Disabled`. let rpc_responses = json_rpc_responses.expect("Light client RPC configured; qed"); - tokio::spawn(async move { + wasm_bindgen_futures::spawn_local(async move { + // tokio::spawn(async move { let mut task = BackgroundTask::new(); task.start_task(backend, rpc_responses).await; }); diff --git a/subxt/src/rpc/lightclient/platform.rs b/subxt/src/rpc/lightclient/platform.rs index 8a8b927fb3..f05690fe57 100644 --- a/subxt/src/rpc/lightclient/platform.rs +++ b/subxt/src/rpc/lightclient/platform.rs @@ -4,10 +4,15 @@ use futures_util::{future, FutureExt}; use gloo_net::websocket::{futures::WebSocket, Message, WebSocketError}; use smoldot::libp2p::multiaddr::{Multiaddr, ProtocolRef}; +use futures::SinkExt; use futures_util::stream::{SplitSink, SplitStream, StreamExt}; -use futures_util::lock::Mutex; +use smoldot_light::platform::ConnectError; +use smoldot_light::platform::PlatformConnection; +use smoldot_light::platform::PlatformSubstreamDirection; + use std::sync::Arc; +use std::sync::Mutex; use std::{ io::IoSlice, net::{IpAddr, SocketAddr}, @@ -34,13 +39,25 @@ impl smoldot_light::platform::PlatformRef for Platform { type Connection = std::convert::Infallible; - type Stream = ConnectionSocket; + type Stream = ConnectionStream; - type ConnectFuture = future::BoxFuture<'static, Result>; + type ConnectFuture = future::BoxFuture< + 'static, + Result, ConnectError>, + >; + + // type ConnectFuture = future::BoxFuture< + // 'static, + // Result< + // smoldot_light::platform::PlatformConnection, + // ConnectError, + // >, + // >; type StreamUpdateFuture<'a> = future::BoxFuture<'a, ()>; - type NextSubstreamFuture<'a> = future::Pending<()>; + type NextSubstreamFuture<'a> = + future::Pending>; fn now_from_unix_epoch(&self) -> std::time::Duration { std::time::UNIX_EPOCH @@ -82,7 +99,11 @@ impl smoldot_light::platform::PlatformRef for Platform { } fn connect(&self, url: &str) -> Self::ConnectFuture { + let url = url.to_string(); + Box::pin(async move { + // let url = url.to_string(); + let multiaddr = url.parse::().map_err(|_| ConnectError { message: format!("Address {url} is not a valid multiaddress"), is_bad_addr: true, @@ -142,122 +163,195 @@ impl smoldot_light::platform::PlatformRef for Platform { message: "Cannot stablish WebSocket connection".to_string(), })?; - let (to_sender, from_sender) = mpsc::channel(1024); - let (to_receiver, from_receiver) = mpsc::channel(1024); + // let (to_sender, from_sender) = mpsc::channel(1024); + // let (to_receiver, from_receiver) = mpsc::channel(1024); + + // TODO: Spawn a task: + // enun Protocol + /* + + enum Protocol { + Send(String), + Recv(String), + } + + bg_task { + while .. + Future: + A: if Send() .. self.send(); + B: self.next() -> recv_end.send("Msg"); + + } + + from fn send(&self, stream: &mut Self::Stream, data: &[u8]) { + let str: String = data.into(); + sender.send(str); + } + + from fn read_buffer<'a> { + + + } + + * + */ // Note: WebSocket is not `Send`, work around that with a spawned task. - wasm_bindgen_futures::spawn_local(async move { - let backend_event = tokio_stream::wrappers::ReceiverStream::new(from_sender); - - let rpc_responses_event = - futures_util::stream::unfold(rpc_responses, |mut rpc_responses| async { - rpc_responses - .next() - .await - .map(|result| (result, rpc_responses)) - }); + // wasm_bindgen_futures::spawn_local(async move { + // let sender = tokio_stream::wrappers::ReceiverStream::new(from_sender); + // let receiver = tokio_stream::wrappers::ReceiverStream::new(from_receiver); - tokio::pin!(backend_event, rpc_responses_event); + // // let rpc_responses_event = + // // futures_util::stream::unfold(rpc_responses, |mut rpc_responses| async { + // // rpc_responses + // // .next() + // // .await + // // .map(|result| (result, rpc_responses)) + // // }); - let mut backend_event_fut = backend_event.next(); - let mut rpc_responses_fut = rpc_responses_event.next(); + // tokio::pin!(backend_event, rpc_responses_event); - loop { - match future::select(backend_event_fut, rpc_responses_fut).await { - // Message received from the backend: user registered. - Either::Left((backend_value, previous_fut)) => { - let Some(message) = backend_value else { - tracing::trace!(target: LOG_TARGET, "Frontend channel closed"); - break; - }; - tracing::trace!( - target: LOG_TARGET, - "Received register message {:?}", - message - ); + // let mut backend_event_fut = backend_event.next(); + // let mut rpc_responses_fut = rpc_responses_event.next(); - self.handle_register(message).await; + // loop { + // match future::select(backend_event_fut, rpc_responses_fut).await { + // // Message received from the backend: user registered. + // Either::Left((backend_value, previous_fut)) => { + // let Some(message) = backend_value else { + // println!("Frontend channel closed"); + // break; + // }; + // tracing::trace!( + // target: LOG_TARGET, + // "Received register message {:?}", + // message + // ); - backend_event_fut = backend_event.next(); - rpc_responses_fut = previous_fut; - } - // Message received from rpc handler: lightclient response. - Either::Right((response, previous_fut)) => { - // Smoldot returns `None` if the chain has been removed (which subxt does not remove). - let Some(response) = response else { - tracing::trace!(target: LOG_TARGET, "Smoldot RPC responses channel closed"); - break; - }; - tracing::trace!( - target: LOG_TARGET, - "Received smoldot RPC result {:?}", - response - ); + // self.handle_register(message).await; - self.handle_rpc_response(response).await; + // backend_event_fut = backend_event.next(); + // rpc_responses_fut = previous_fut; + // } + // // Message received from rpc handler: lightclient response. + // Either::Right((response, previous_fut)) => { + // // Smoldot returns `None` if the chain has been removed (which subxt does not remove). + // let Some(response) = response else { + // println!("Smoldot RPC responses channel closed"); + // break; + // }; + // println!("Received smoldot RPC result {:?}", response); - // Advance backend, save frontend. - backend_event_fut = previous_fut; - rpc_responses_fut = rpc_responses_event.next(); - } - } - } - }); + // self.handle_rpc_response(response).await; + + // // Advance backend, save frontend. + // backend_event_fut = previous_fut; + // rpc_responses_fut = rpc_responses_event.next(); + // } + // } + // } + // }); let (sender, receiver) = websocket.split(); - Ok(ConnectionSocket { sender, receiver }) + let conn = ConnectionStream { + inner: Arc::new(Mutex::new(ConnectionInner { sender, receiver })), + }; + + Ok(PlatformConnection::SingleStreamMultistreamSelectNoiseYamux( + conn, + )) }) } fn open_out_substream(&self, _connection: &mut Self::Connection) { - // Called from MultiStream connections that are not supported. + // Called from MultiStream connections that are never opened for this implementation. } fn next_substream<'a>( &self, connection: &'a mut Self::Connection, ) -> Self::NextSubstreamFuture<'a> { - // Called from MultiStream connections that are not supported. + // Called from MultiStream connections that are never opened for this implementation. + // futures::future::pending::>() + futures::future::pending() } fn update_stream<'a>(&self, stream: &'a mut Self::Stream) -> Self::StreamUpdateFuture<'a> { - todo!() + Box::pin(async move {}) } fn read_buffer<'a>( &self, stream: &'a mut Self::Stream, ) -> smoldot_light::platform::ReadBuffer<'a> { - todo!() + let mut locked = stream + .inner + .lock() + .expect("Mutex should not be poised; qed"); + + // let fut = locked.receiver.next(); + + // let msg = futures_executor::block_on(async { + let msg = futures::executor::block_on(async { + match locked.receiver.next().await { + Some(Ok(msg)) => Some(msg), + _ => None, + } + }); + + match msg { + Some(msg) => { + let msg = Box::leak(Box::new(msg)); + + match msg { + Message::Text(text) => { + smoldot_light::platform::ReadBuffer::Open(text.as_bytes()) + } + Message::Bytes(bytes) => smoldot_light::platform::ReadBuffer::Open(bytes), + } + } + None => smoldot_light::platform::ReadBuffer::Closed, + } } - fn advance_read_cursor(&self, stream: &mut Self::Stream, bytes: usize) { - todo!() - } + fn advance_read_cursor(&self, stream: &mut Self::Stream, bytes: usize) {} fn writable_bytes(&self, stream: &mut Self::Stream) -> usize { - todo!() + 1024 } fn send(&self, stream: &mut Self::Stream, data: &[u8]) { - todo!() + let mut locked = stream + .inner + .lock() + .expect("Mutex should not be poised; qed"); + + if let Ok(message) = String::from_utf8(data.into()) { + let _ = locked.sender.send(Message::Text(message)); + } } - fn close_send(&self, stream: &mut Self::Stream) { - todo!() - } + fn close_send(&self, stream: &mut Self::Stream) {} } /// Error potentially returned by [`PlatformRef::connect`]. -pub struct ConnectError { - /// Human-readable error message. - pub message: String, - /// `true` if the error is caused by the address to connect to being forbidden or unsupported. - pub is_bad_addr: bool, +// pub struct ConnectError { +// /// Human-readable error message. +// pub message: String, +// /// `true` if the error is caused by the address to connect to being forbidden or unsupported. +// pub is_bad_addr: bool, +// } + +pub struct ConnectionInner { + sender: SplitSink, + receiver: SplitStream, } -pub struct ConnectionSocket { - sender: SplitSink, - receiver: SSplitStream, +unsafe impl Send for ConnectionInner {} + +pub struct ConnectionStream { + inner: Arc>, } + +unsafe impl Send for ConnectionStream {} diff --git a/testing/wasm-tests/Cargo.lock b/testing/wasm-tests/Cargo.lock index 578113e7b7..6c97e3d2c6 100644 --- a/testing/wasm-tests/Cargo.lock +++ b/testing/wasm-tests/Cargo.lock @@ -2,6 +2,52 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array", +] + +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", + "opaque-debug", +] + +[[package]] +name = "aes-gcm" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc3be92e19a7ef47457b8e6f90707e12b6ac5d20c6f3866584fa3be0787d839f" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + [[package]] name = "anyhow" version = "1.0.71" @@ -14,6 +60,15 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + [[package]] name = "arrayvec" version = "0.7.2" @@ -40,6 +95,12 @@ dependencies = [ "syn 2.0.16", ] +[[package]] +name = "atomic" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" + [[package]] name = "autocfg" version = "1.1.0" @@ -73,6 +134,21 @@ dependencies = [ "serde", ] +[[package]] +name = "bip39" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" +dependencies = [ + "bitcoin_hashes", +] + +[[package]] +name = "bitcoin_hashes" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" + [[package]] name = "bitflags" version = "1.3.2" @@ -100,6 +176,16 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +dependencies = [ + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", +] + [[package]] name = "blake2b_simd" version = "1.0.1" @@ -107,8 +193,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" dependencies = [ "arrayref", - "arrayvec", - "constant_time_eq", + "arrayvec 0.7.2", + "constant_time_eq 0.2.5", ] [[package]] @@ -129,6 +215,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + [[package]] name = "bumpalo" version = "3.13.0" @@ -165,6 +257,40 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chacha20" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", + "zeroize", +] + +[[package]] +name = "chacha20poly1305" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -175,12 +301,24 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + [[package]] name = "constant_time_eq" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + [[package]] name = "core-foundation" version = "0.9.3" @@ -206,6 +344,25 @@ dependencies = [ "libc", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +dependencies = [ + "cfg-if", +] + [[package]] name = "crunchy" version = "0.2.2" @@ -222,6 +379,65 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "ctr" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a232f92a03f37dd7d7dd2adc67166c77e9cd88de5b019b9a9eecfaeaf7bfd481" +dependencies = [ + "cipher", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "4.0.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16" +dependencies = [ + "cfg-if", + "fiat-crypto", + "packed_simd_2", + "platforms", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.6.4", + "subtle-ng", + "zeroize", +] + [[package]] name = "darling" version = "0.14.4" @@ -309,8 +525,10 @@ 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", ] @@ -334,6 +552,26 @@ dependencies = [ "subtle", ] +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +dependencies = [ + "curve25519-dalek 3.2.0", + "hashbrown 0.12.3", + "hex", + "rand_core 0.6.4", + "sha2 0.9.9", + "zeroize", +] + [[package]] name = "either" version = "1.8.1" @@ -346,6 +584,12 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +[[package]] +name = "fiat-crypto" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" + [[package]] name = "fixed-hash" version = "0.8.0" @@ -390,6 +634,7 @@ checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", + "futures-executor", "futures-io", "futures-sink", "futures-task", @@ -412,12 +657,34 @@ version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +[[package]] +name = "futures-executor" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + [[package]] name = "futures-io" version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +[[package]] +name = "futures-macro" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.16", +] + [[package]] name = "futures-sink" version = "0.3.28" @@ -449,6 +716,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-io", + "futures-macro", "futures-sink", "futures-task", "memchr", @@ -480,6 +748,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "ghash" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +dependencies = [ + "opaque-debug", + "polyval", +] + [[package]] name = "gloo-net" version = "0.2.6" @@ -549,6 +827,18 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "serde", +] [[package]] name = "heck" @@ -556,21 +846,42 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", +] + [[package]] name = "http" version = "0.2.9" @@ -687,7 +998,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap-nostd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", ] [[package]] @@ -820,6 +1146,66 @@ version = "0.2.144" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" +[[package]] +name = "libm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" + +[[package]] +name = "libm" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" + +[[package]] +name = "libsecp256k1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +dependencies = [ + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + [[package]] name = "log" version = "0.4.17" @@ -829,12 +1215,36 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "lru" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03f1160296536f10c833a82dca22267d5486734230d47bf00bf435885814ba1e" + [[package]] name = "memchr" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "mio" version = "0.8.6" @@ -848,13 +1258,67 @@ dependencies = [ ] [[package]] -name = "num_cpus" -version = "1.15.0" +name = "no-std-net" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "hermit-abi", - "libc", + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", ] [[package]] @@ -875,13 +1339,23 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "packed_simd_2" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" +dependencies = [ + "cfg-if", + "libm 0.1.4", +] + [[package]] name = "parity-scale-codec" version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ddb756ca205bd108aee3c62c6d3c994e1df84a59b9d6d4a5ea42ee1fd5a9a28" dependencies = [ - "arrayvec", + "arrayvec 0.7.2", "bitvec", "byte-slice-cast", "impl-trait-for-tuples", @@ -901,6 +1375,21 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "paste" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" + +[[package]] +name = "pbkdf2" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0ca0b5a68607598bf3bad68f32227a8164f6254833f84eafaac409cd6746c31" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "pin-project" version = "1.1.0" @@ -933,6 +1422,35 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "platforms" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" + +[[package]] +name = "poly1305" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "polyval" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1018,7 +1536,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -1028,9 +1546,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", ] +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" + [[package]] name = "rand_core" version = "0.6.4" @@ -1049,7 +1573,7 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", + "spin 0.5.2", "untrusted", "web-sys", "winapi", @@ -1067,6 +1591,15 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + [[package]] name = "rustls" version = "0.20.8" @@ -1100,6 +1633,17 @@ dependencies = [ "base64 0.21.1", ] +[[package]] +name = "ruzstd" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a15e661f0f9dac21f3494fe5d23a6338c0ac116a2d22c2b63010acd89467ffe" +dependencies = [ + "byteorder", + "thiserror", + "twox-hash", +] + [[package]] name = "ryu" version = "1.0.13" @@ -1224,6 +1768,22 @@ dependencies = [ "windows-sys 0.42.0", ] +[[package]] +name = "schnorrkel" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28d" +dependencies = [ + "arrayref", + "arrayvec 0.7.2", + "curve25519-dalek-ng", + "merlin", + "rand_core 0.6.4", + "sha2 0.9.9", + "subtle-ng", + "zeroize", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -1263,6 +1823,12 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" + [[package]] name = "send_wrapper" version = "0.4.0" @@ -1313,6 +1879,19 @@ dependencies = [ "opaque-debug", ] +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + [[package]] name = "sha2" version = "0.10.6" @@ -1343,6 +1922,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + [[package]] name = "slab" version = "0.4.8" @@ -1352,6 +1937,100 @@ dependencies = [ "autocfg", ] +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "smoldot" +version = "0.6.0" +dependencies = [ + "arrayvec 0.7.2", + "async-lock", + "atomic", + "base64 0.21.1", + "bip39", + "blake2-rfc", + "bs58", + "crossbeam-queue", + "derive_more", + "ed25519-zebra", + "either", + "event-listener", + "fnv", + "futures-channel", + "futures-util", + "hashbrown 0.13.2", + "hex", + "hmac 0.12.1", + "itertools", + "libsecp256k1", + "merlin", + "no-std-net", + "nom", + "num-bigint", + "num-rational", + "num-traits", + "parity-scale-codec", + "pbkdf2", + "rand", + "rand_chacha", + "ruzstd", + "schnorrkel", + "serde", + "serde_json", + "sha2 0.10.6", + "siphasher", + "slab", + "smallvec", + "snow", + "tiny-keccak", + "twox-hash", + "wasmi", +] + +[[package]] +name = "smoldot-light" +version = "0.4.0" +dependencies = [ + "async-lock", + "blake2-rfc", + "derive_more", + "either", + "event-listener", + "fnv", + "futures-channel", + "futures-util", + "hashbrown 0.13.2", + "hex", + "itertools", + "log", + "lru", + "rand", + "serde", + "serde_json", + "slab", + "smoldot", +] + +[[package]] +name = "snow" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ccba027ba85743e09d15c03296797cad56395089b832b48b5a5217880f57733" +dependencies = [ + "aes-gcm", + "blake2", + "chacha20poly1305", + "curve25519-dalek 4.0.0-rc.1", + "rand_core 0.6.4", + "rustc_version", + "sha2 0.10.6", + "subtle", +] + [[package]] name = "socket2" version = "0.4.9" @@ -1386,7 +2065,7 @@ dependencies = [ "blake2b_simd", "byteorder", "digest 0.10.7", - "sha2", + "sha2 0.10.6", "sha3", "sp-std", "twox-hash", @@ -1404,6 +2083,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "static_assertions" version = "1.1.0" @@ -1422,6 +2107,12 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + [[package]] name = "subxt" version = "0.28.0" @@ -1432,7 +2123,10 @@ dependencies = [ "either", "frame-metadata", "futures", + "futures-timer", + "futures-util", "getrandom", + "gloo-net", "hex", "impl-serde", "jsonrpsee", @@ -1445,11 +2139,16 @@ dependencies = [ "scale-value", "serde", "serde_json", + "smoldot", + "smoldot-light", "sp-core-hashing", "subxt-macro", "subxt-metadata", "thiserror", + "tokio", + "tokio-stream", "tracing", + "wasm-bindgen-futures", ] [[package]] @@ -1549,6 +2248,15 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tokio" version = "1.28.1" @@ -1559,7 +2267,6 @@ dependencies = [ "bytes", "libc", "mio", - "num_cpus", "pin-project-lite", "socket2", "tokio-macros", @@ -1588,6 +2295,17 @@ dependencies = [ "webpki", ] +[[package]] +name = "tokio-stream" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-util" version = "0.7.8" @@ -1722,6 +2440,16 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +[[package]] +name = "universal-hash" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" +dependencies = [ + "generic-array", + "subtle", +] + [[package]] name = "untrusted" version = "0.7.1" @@ -1851,6 +2579,46 @@ dependencies = [ "wasm-bindgen-test", ] +[[package]] +name = "wasmi" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677160b1166881badada1137afc6457777126f328ae63a18058b504f546f0828" +dependencies = [ + "smallvec", + "spin 0.9.8", + "wasmi_arena", + "wasmi_core", + "wasmparser-nostd", +] + +[[package]] +name = "wasmi_arena" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "401c1f35e413fac1846d4843745589d9ec678977ab35a384db8ae7830525d468" + +[[package]] +name = "wasmi_core" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624e6333e861ef49095d2d678b76ebf30b06bf37effca845be7e5b87c90071b7" +dependencies = [ + "downcast-rs", + "libm 0.2.7", + "num-traits", + "paste", +] + +[[package]] +name = "wasmparser-nostd" +version = "0.100.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9157cab83003221bfd385833ab587a039f5d6fa7304854042ba358a3b09e0724" +dependencies = [ + "indexmap-nostd", +] + [[package]] name = "web-sys" version = "0.3.63" @@ -2072,3 +2840,23 @@ name = "yap" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2a7eb6d82a11e4d0b8e6bda8347169aff4ccd8235d039bba7c47482d977dcf7" + +[[package]] +name = "zeroize" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.16", +] diff --git a/testing/wasm-tests/Cargo.toml b/testing/wasm-tests/Cargo.toml index 9d5a5e34be..55a087dc1c 100644 --- a/testing/wasm-tests/Cargo.toml +++ b/testing/wasm-tests/Cargo.toml @@ -13,3 +13,6 @@ tracing-wasm = "0.2.1" console_error_panic_hook = "0.1.7" serde_json = "1" subxt = { path = "../../subxt", default-features = false, features = ["jsonrpsee-web", "unstable-light-client"] } + +[profile.release] +debug = true diff --git a/testing/wasm-tests/tests/wasm.rs b/testing/wasm-tests/tests/wasm.rs index 025bc1d086..b828d0462c 100644 --- a/testing/wasm-tests/tests/wasm.rs +++ b/testing/wasm-tests/tests/wasm.rs @@ -21,9 +21,12 @@ async fn wasm_ws_transport_works() { #[wasm_bindgen_test] async fn light_client_transport_works() { - let light_client = LightClient::new(include_str!("../../artifacts/dev_spec.json")).unwrap(); - let client = subxt::client::OnlineClient::::from_rpc_client(Arc::new(light_client)).await.unwrap(); - let chain = client.rpc().system_chain().await.unwrap(); - assert_eq!(&chain, "Development"); + println!("Creating lightclient"); + + let light_client = LightClient::new(include_str!("../../../artifacts/dev_spec.json")).unwrap(); + // let client = subxt::client::OnlineClient::::from_rpc_client(Arc::new(light_client)).await.unwrap(); + + // let chain = client.rpc().system_chain().await.unwrap(); + // assert_eq!(&chain, "Development"); }