Expose switch_network to frontend

This commit is contained in:
Bogdan-Ștefan Neacșu
2022-01-17 14:13:15 +02:00
parent 72485cacd3
commit 9c569cbb62
3 changed files with 57 additions and 42 deletions
+4
View File
@@ -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
}
}
+1
View File
@@ -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,
@@ -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<RwLock<State>>>,
) -> Result<Account, BackendError> {
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<RwLock<State>>>,
network: Network,
) -> Result<Account, BackendError> {
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<SigningNymdClient> {
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<RwLock<State>>>,
) -> Result<Account, BackendError> {
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)
}