From a03cb1ef9f392f680de5f38df82f528529b9c7bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bogdan-=C8=98tefan=20Neac=C5=9Fu?= Date: Mon, 24 Jan 2022 18:48:44 +0200 Subject: [PATCH] Feature/wasm client (#1066) * Fix wasm client * Re-enable CI on wasm client There is an `unused-unit` lint that will fail for now, but this is regarded as a false positive and should eventualy get fixed: https://github.com/rustwasm/wasm-bindgen/issues/2774 * The wasm tests would be run under native arch --- .github/workflows/wasm_client_build.yml | 27 ++--- Cargo.lock | 104 +++++------------- Cargo.toml | 4 +- clients/webassembly/Cargo.toml | 2 +- clients/webassembly/src/client/mod.rs | 3 +- common/client-libs/gateway-client/Cargo.toml | 12 +- .../gateway-client/src/bandwidth.rs | 2 +- 7 files changed, 49 insertions(+), 105 deletions(-) diff --git a/.github/workflows/wasm_client_build.yml b/.github/workflows/wasm_client_build.yml index cd064c4748..2761aabcd2 100644 --- a/.github/workflows/wasm_client_build.yml +++ b/.github/workflows/wasm_client_build.yml @@ -19,30 +19,27 @@ jobs: override: true components: rustfmt, clippy -# token credentials (non-coconut) don't work for wasm right now -# - uses: actions-rs/cargo@v1 -# with: -# command: build -# args: --manifest-path clients/webassembly/Cargo.toml --target wasm32-unknown-unknown + - uses: actions-rs/cargo@v1 + with: + command: build + args: --manifest-path clients/webassembly/Cargo.toml --target wasm32-unknown-unknown - uses: actions-rs/cargo@v1 with: command: build args: --manifest-path clients/webassembly/Cargo.toml --target wasm32-unknown-unknown --features=coconut -# for some reason this does not seem to work correctly, leave it for later, building is good enough for now -# - uses: actions-rs/cargo@v1 -# with: -# command: test -# args: --manifest-path clients/webassembly/Cargo.toml --target wasm32-unknown-unknown + - uses: actions-rs/cargo@v1 + with: + command: test + args: --manifest-path clients/webassembly/Cargo.toml - uses: actions-rs/cargo@v1 with: command: fmt args: --manifest-path clients/webassembly/Cargo.toml -- --check -# for some reason this does not seem to work correctly, leave it for later, building is good enough for now -# - uses: actions-rs/cargo@v1 -# with: -# command: clippy -# args: --manifest-path clients/webassembly/Cargo.toml --target wasm32-unknown-unknown -- -D warnings + - uses: actions-rs/cargo@v1 + with: + command: clippy + args: --manifest-path clients/webassembly/Cargo.toml --target wasm32-unknown-unknown -- -D warnings diff --git a/Cargo.lock b/Cargo.lock index 21af33af57..82896d6281 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -806,16 +806,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "console_error_panic_hook" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211" -dependencies = [ - "cfg-if 0.1.10", - "wasm-bindgen", -] - [[package]] name = "const-oid" version = "0.6.1" @@ -2198,6 +2188,10 @@ name = "futures-timer" version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" +dependencies = [ + "gloo-timers", + "send_wrapper", +] [[package]] name = "futures-util" @@ -2534,6 +2528,19 @@ dependencies = [ "regex", ] +[[package]] +name = "gloo-timers" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f16c88aa13d2656ef20d1c042086b8767bbe2bdb62526894275a1b062161b2e" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "gobject-sys" version = "0.10.0" @@ -3414,12 +3421,6 @@ dependencies = [ "autocfg 1.0.1", ] -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - [[package]] name = "mime" version = "0.3.16" @@ -3790,30 +3791,6 @@ dependencies = [ "websocket-requests", ] -[[package]] -name = "nym-client-wasm" -version = "0.12.0" -dependencies = [ - "coconut-interface", - "console_error_panic_hook", - "credentials", - "crypto", - "futures", - "gateway-client", - "js-sys", - "nymsphinx", - "rand 0.7.3", - "serde", - "topology", - "url", - "validator-client", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "wasm-utils", - "wee_alloc", -] - [[package]] name = "nym-gateway" version = "0.12.1" @@ -5762,6 +5739,12 @@ dependencies = [ "pest", ] +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + [[package]] name = "serde" version = "1.0.130" @@ -7791,30 +7774,6 @@ version = "0.2.78" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" -[[package]] -name = "wasm-bindgen-test" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96f1aa7971fdf61ef0f353602102dbea75a56e225ed036c1e3740564b91e6b7e" -dependencies = [ - "console_error_panic_hook", - "js-sys", - "scoped-tls", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test-macro", -] - -[[package]] -name = "wasm-bindgen-test-macro" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6006f79628dfeb96a86d4db51fbf1344cd7fd8408f06fc9aa3c84913a4789688" -dependencies = [ - "proc-macro2", - "quote", -] - [[package]] name = "wasm-utils" version = "0.1.0" @@ -7851,12 +7810,15 @@ dependencies = [ "ethereum-types", "futures", "futures-timer", + "getrandom 0.2.3", "headers", "hex", + "js-sys", "jsonrpc-core", "log", "parking_lot", "pin-project", + "rand 0.8.4", "reqwest", "rlp", "secp256k1", @@ -7868,6 +7830,8 @@ dependencies = [ "tokio-stream", "tokio-util", "url", + "wasm-bindgen", + "wasm-bindgen-futures", "web3-async-native-tls", ] @@ -7980,18 +7944,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "wee_alloc" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "memory_units", - "winapi", -] - [[package]] name = "which" version = "4.2.2" diff --git a/Cargo.toml b/Cargo.toml index 90a214fe8b..674f32204b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,6 @@ members = [ "clients/native/websocket-requests", "clients/socks5", "clients/tauri-client/src-tauri", - "clients/webassembly", "common/client-libs/gateway-client", "common/client-libs/mixnet-client", "common/client-libs/validator-client", @@ -60,7 +59,6 @@ members = [ default-members = [ "clients/native", "clients/socks5", -# "clients/webassembly", "gateway", "service-providers/network-requester", "mixnode", @@ -68,4 +66,4 @@ default-members = [ "explorer-api", ] -exclude = ["explorer", "contracts", "tokenomics-py"] +exclude = ["explorer", "contracts", "tokenomics-py", "clients/webassembly"] diff --git a/clients/webassembly/Cargo.toml b/clients/webassembly/Cargo.toml index bfacaec629..7b2f5db6b1 100644 --- a/clients/webassembly/Cargo.toml +++ b/clients/webassembly/Cargo.toml @@ -32,7 +32,7 @@ credentials = { path = "../../common/credentials", optional = true } crypto = { path = "../../common/crypto" } nymsphinx = { path = "../../common/nymsphinx" } topology = { path = "../../common/topology" } -gateway-client = { path = "../../common/client-libs/gateway-client" } +gateway-client = { path = "../../common/client-libs/gateway-client", default-features = false, features = ["wasm"] } validator-client = { path = "../../common/client-libs/validator-client", default-features = false } wasm-utils = { path = "../../common/wasm-utils" } diff --git a/clients/webassembly/src/client/mod.rs b/clients/webassembly/src/client/mod.rs index c68c2f4d60..4bb0e4263b 100644 --- a/clients/webassembly/src/client/mod.rs +++ b/clients/webassembly/src/client/mod.rs @@ -3,7 +3,6 @@ use crypto::asymmetric::{encryption, identity}; use futures::channel::mpsc; -use gateway_client::bandwidth::BandwidthController; use gateway_client::GatewayClient; use nymsphinx::acknowledgements::AckKey; use nymsphinx::addressing::clients::Recipient; @@ -111,7 +110,7 @@ impl NymClient { let testnet_mode = self.testnet_mode; #[cfg(feature = "coconut")] - let bandwidth_controller = Some(BandwidthController::new( + let bandwidth_controller = Some(gateway_client::bandwidth::BandwidthController::new( vec![self.validator_server.clone()], *self.identity.public_key(), )); diff --git a/common/client-libs/gateway-client/Cargo.toml b/common/client-libs/gateway-client/Cargo.toml index 844191d8b6..c7a04fd23e 100644 --- a/common/client-libs/gateway-client/Cargo.toml +++ b/common/client-libs/gateway-client/Cargo.toml @@ -15,6 +15,8 @@ log = "0.4" thiserror = "1.0" url = "2.2" rand = { version = "0.7.3", features = ["wasm-bindgen"] } +secp256k1 = "0.20.3" +web3 = { version = "0.17.0", default-features = false } # internal credentials = { path = "../../credentials" } @@ -36,12 +38,6 @@ features = ["macros", "rt", "net", "sync", "time"] [target."cfg(not(target_arch = \"wasm32\"))".dependencies.tokio-tungstenite] version = "0.14" -[target."cfg(not(target_arch = \"wasm32\"))".dependencies.secp256k1] -version = "0.20.3" - -[target."cfg(not(target_arch = \"wasm32\"))".dependencies.web3] -version = "0.17.0" - # wasm-only dependencies [target."cfg(target_arch = \"wasm32\")".dependencies.wasm-bindgen] version = "0.2" @@ -70,4 +66,6 @@ features = ["js"] #url = "2.1" [features] -coconut = ["gateway-requests/coconut", "coconut-interface"] \ No newline at end of file +coconut = ["gateway-requests/coconut", "coconut-interface"] +wasm = ["web3/wasm", "web3/http", "web3/signing"] +default = ["web3/default"] \ No newline at end of file diff --git a/common/client-libs/gateway-client/src/bandwidth.rs b/common/client-libs/gateway-client/src/bandwidth.rs index a32a0091ae..5248b1de33 100644 --- a/common/client-libs/gateway-client/src/bandwidth.rs +++ b/common/client-libs/gateway-client/src/bandwidth.rs @@ -203,7 +203,7 @@ impl BandwidthController { &self.eth_private_key, ) .await?; - if Some(U64::from(0)) == recipt.status { + if Some(U64::from(0u64)) == recipt.status { Err(GatewayClientError::BurnTokenError( web3::Error::InvalidResponse(format!( "Transaction status is 0 (failure): {:?}",