From 94e4da8e4c9839570a5cf49bb00a19fa33bb0938 Mon Sep 17 00:00:00 2001 From: monomadic Date: Fri, 8 Jul 2022 18:51:19 +0700 Subject: [PATCH 1/2] Add the wallet_switchEthereumChain method to the eip1193 transport --- src/transports/eip_1193.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/transports/eip_1193.rs b/src/transports/eip_1193.rs index 55b18abc..305cea97 100644 --- a/src/transports/eip_1193.rs +++ b/src/transports/eip_1193.rs @@ -132,6 +132,24 @@ impl Eip1193 { .into_deserializer(); O::deserialize(deserializer).expect(&format!("couldn't deserialize {}", name)) } + + /// EIP-3326: Switch a wallet to another chain + pub async fn switch_chain(&self, chain_id: &str) -> Result { + let js_params = JsValue::from_serde(&vec![&ChainId { chain_id: chain_id.to_string() }]) + .expect("couldn't send method params via JSON"); + + self.provider_and_listeners.borrow().provider.request_wrapped(RequestArguments { + method: String::from("wallet_switchEthereumChain"), + params: js_sys::Array::from(&js_params), + }) + .await + } +} + +#[derive(serde::Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ChainId { + pub chain_id: String, } /// Event data sent from the JavaScript side to our callback. From 9f3069e4f1fc89c53f5f890fc11737c641325449 Mon Sep 17 00:00:00 2001 From: monomadic Date: Fri, 8 Jul 2022 22:31:58 +0700 Subject: [PATCH 2/2] rustfmt --- src/transports/eip_1193.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/transports/eip_1193.rs b/src/transports/eip_1193.rs index 305cea97..7775f00e 100644 --- a/src/transports/eip_1193.rs +++ b/src/transports/eip_1193.rs @@ -135,14 +135,19 @@ impl Eip1193 { /// EIP-3326: Switch a wallet to another chain pub async fn switch_chain(&self, chain_id: &str) -> Result { - let js_params = JsValue::from_serde(&vec![&ChainId { chain_id: chain_id.to_string() }]) - .expect("couldn't send method params via JSON"); - - self.provider_and_listeners.borrow().provider.request_wrapped(RequestArguments { - method: String::from("wallet_switchEthereumChain"), - params: js_sys::Array::from(&js_params), - }) - .await + let js_params = JsValue::from_serde(&vec![&ChainId { + chain_id: chain_id.to_string(), + }]) + .expect("couldn't send method params via JSON"); + + self.provider_and_listeners + .borrow() + .provider + .request_wrapped(RequestArguments { + method: String::from("wallet_switchEthereumChain"), + params: js_sys::Array::from(&js_params), + }) + .await } }