diff --git a/nym-wallet/src-tauri/src/config/mod.rs b/nym-wallet/src-tauri/src/config/mod.rs index 090ac65ba6..5f0ff79043 100644 --- a/nym-wallet/src-tauri/src/config/mod.rs +++ b/nym-wallet/src-tauri/src/config/mod.rs @@ -112,4 +112,8 @@ impl Config { .parse() .expect("stored vesting contract address is not a valid account address") } + + pub fn get_mnemonic(&self) -> &str { + &self.base.mnemonic + } } diff --git a/nym-wallet/src-tauri/src/main.rs b/nym-wallet/src-tauri/src/main.rs index 0dd0de1166..00aeb2fd7f 100644 --- a/nym-wallet/src-tauri/src/main.rs +++ b/nym-wallet/src-tauri/src/main.rs @@ -31,6 +31,7 @@ fn main() { .invoke_handler(tauri::generate_handler![ mixnet::account::connect_with_mnemonic, mixnet::account::create_new_account, + mixnet::account::switch_network, mixnet::account::get_balance, mixnet::admin::get_contract_settings, mixnet::admin::update_contract_settings, diff --git a/nym-wallet/src-tauri/src/operations/mixnet/account.rs b/nym-wallet/src-tauri/src/operations/mixnet/account.rs index e9e4c7ff43..2bac7053fa 100644 --- a/nym-wallet/src-tauri/src/operations/mixnet/account.rs +++ b/nym-wallet/src-tauri/src/operations/mixnet/account.rs @@ -1,5 +1,4 @@ use crate::coin::{Coin, Denom}; -use crate::config::Config; use crate::error::BackendError; use crate::network::Network; use crate::nymd_client; @@ -10,8 +9,6 @@ use std::convert::{TryFrom, TryInto}; use std::str::FromStr; use std::sync::Arc; use tokio::sync::RwLock; -use validator_client::nymd::SigningNymdClient; -use validator_client::Client; #[cfg_attr(test, derive(ts_rs::TS))] #[derive(Serialize, Deserialize)] @@ -35,30 +32,12 @@ pub async fn connect_with_mnemonic( state: tauri::State<'_, Arc>>, ) -> Result { let mnemonic = Mnemonic::from_str(&mnemonic)?; - let client = { - let r_state = state.read().await; - _connect_with_mnemonic( - mnemonic, - Network::try_from(config::defaults::default_network())?, - &r_state.config(), - ) - }; - - let contract_address = client.nymd.mixnet_contract_address()?.to_string(); - let client_address = client.nymd.address().to_string(); - let denom = client.nymd.denom()?; - - let account = Account { - contract_address, - client_address, - denom: denom.try_into()?, - mnemonic: None, - }; - - let mut w_state = state.write().await; - w_state.set_client(client); - - Ok(account) + _connect_with_mnemonic( + mnemonic, + Network::try_from(config::defaults::default_network())?, + state, + ) + .await } #[tauri::command] @@ -96,26 +75,57 @@ pub async fn create_new_account( Ok(client) } +#[tauri::command] +pub async fn switch_network( + state: tauri::State<'_, Arc>>, + network: Network, +) -> Result { + let mnemonic = { + let r_state = state.read().await; + Mnemonic::from_str(r_state.config().get_mnemonic())? + }; + _connect_with_mnemonic(mnemonic, network, state).await +} + fn random_mnemonic() -> Mnemonic { let mut rng = rand::thread_rng(); Mnemonic::generate_in_with(&mut rng, Language::English, 24).unwrap() } -fn _connect_with_mnemonic( +async fn _connect_with_mnemonic( mnemonic: Mnemonic, network: Network, - config: &Config, -) -> Client { - match validator_client::Client::new_signing( - validator_client::Config::new( - config.get_nymd_validator_url(network), - config.get_validator_api_url(network), - Some(config.get_mixnet_contract_address(network)), - Some(config.get_vesting_contract_address(network)), - ), - mnemonic, - ) { - Ok(client) => client, - Err(e) => panic!("{}", e), - } + state: tauri::State<'_, Arc>>, +) -> Result { + let client = { + let config = state.read().await.config(); + match validator_client::Client::new_signing( + validator_client::Config::new( + config.get_nymd_validator_url(network), + config.get_validator_api_url(network), + Some(config.get_mixnet_contract_address(network)), + Some(config.get_vesting_contract_address(network)), + ), + mnemonic, + ) { + Ok(client) => client, + Err(e) => panic!("{}", e), + } + }; + + let contract_address = client.nymd.mixnet_contract_address()?.to_string(); + let client_address = client.nymd.address().to_string(); + let denom = client.nymd.denom()?; + + let account = Account { + contract_address, + client_address, + denom: denom.try_into()?, + mnemonic: None, + }; + + let mut w_state = state.write().await; + w_state.set_client(client); + + Ok(account) }