diff --git a/nym-connect/Cargo.lock b/nym-connect/Cargo.lock index b6953b39a3..33c4434c63 100644 --- a/nym-connect/Cargo.lock +++ b/nym-connect/Cargo.lock @@ -897,6 +897,7 @@ dependencies = [ "network-defaults", "thiserror", "url", + "validator-api-requests", "validator-client", ] @@ -6298,6 +6299,10 @@ dependencies = [ name = "validator-api-requests" version = "0.1.0" dependencies = [ + "bs58", + "coconut-interface", + "cosmrs", + "getset", "mixnet-contract-common", "schemars", "serde", @@ -6401,7 +6406,7 @@ checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" [[package]] name = "vesting-contract" -version = "1.0.0" +version = "1.0.1" dependencies = [ "config", "cosmwasm-std", diff --git a/nym-connect/src-tauri/src/config/mod.rs b/nym-connect/src-tauri/src/config/mod.rs index 92b337122a..f51a92ab12 100644 --- a/nym-connect/src-tauri/src/config/mod.rs +++ b/nym-connect/src-tauri/src/config/mod.rs @@ -16,6 +16,8 @@ pub static SOCKS5_CONFIG_ID: Lazy = Lazy::new(|| { }); // TODO: make this configurable from the UI +// TODO: once we can set this is the UI, consider just removing it, and put in guards to halt if +// user hasn't chosen the provider pub static PROVIDER_ADDRESS: &str = "EWa8DgePKfuWSjqPo6NEdavBK6gpnK4TKb2npi2HWuC2.6PGVT9y83UMGbFrPKDnCvTP2jJjpXYpD87ZpiRsLo1YR@CgQrYP8etksSBf4nALNqp93SHPpgFwEUyTsjBNNLj5WM"; const DEFAULT_ETH_ENDPOINT: &str = "https://rinkeby.infura.io/v3/00000000000000000000000000000000"; @@ -50,9 +52,10 @@ impl Config { self.socks5.get_base_mut() } - pub async fn init() { + pub async fn init(service_provider: Option<&String>) { + let service_provider = service_provider.map_or(PROVIDER_ADDRESS, String::as_str); info!("Initialising..."); - init_socks5(PROVIDER_ADDRESS, None).await; + init_socks5(service_provider, None).await; info!("Configuration saved 🚀"); } } diff --git a/nym-connect/src-tauri/src/error.rs b/nym-connect/src-tauri/src/error.rs index 4b913311c8..e6e756f50e 100644 --- a/nym-connect/src-tauri/src/error.rs +++ b/nym-connect/src-tauri/src/error.rs @@ -10,6 +10,8 @@ pub enum BackendError { CouldNotConnect, #[error("Could not disconnect")] CouldNotDisconnect, + #[error("No serverice provider set")] + NoServiceProviderSet, } impl Serialize for BackendError { diff --git a/nym-connect/src-tauri/src/main.rs b/nym-connect/src-tauri/src/main.rs index 1611bb1919..4515dbe529 100644 --- a/nym-connect/src-tauri/src/main.rs +++ b/nym-connect/src-tauri/src/main.rs @@ -34,6 +34,8 @@ fn main() { tauri::Builder::default() .manage(Arc::new(RwLock::new(State::new()))) .invoke_handler(tauri::generate_handler![ + crate::operations::connection::connect::get_service_provider, + crate::operations::connection::connect::set_service_provider, crate::operations::connection::connect::start_connecting, crate::operations::connection::disconnect::start_disconnecting, crate::operations::window::hide_window, diff --git a/nym-connect/src-tauri/src/operations/connection/connect.rs b/nym-connect/src-tauri/src/operations/connection/connect.rs index 4fab2f5354..e05d9e8260 100644 --- a/nym-connect/src-tauri/src/operations/connection/connect.rs +++ b/nym-connect/src-tauri/src/operations/connection/connect.rs @@ -18,3 +18,24 @@ pub async fn start_connecting( address: "Test".to_string(), }) } + +#[tauri::command] +pub async fn get_service_provider( + state: tauri::State<'_, Arc>>, +) -> Result { + let guard = state.read().await; + guard + .get_service_provider() + .clone() + .ok_or(BackendError::NoServiceProviderSet) +} + +#[tauri::command] +pub async fn set_service_provider( + service_provider: String, + state: tauri::State<'_, Arc>>, +) -> Result<(), BackendError> { + let mut guard = state.write().await; + guard.set_service_provider(service_provider); + Ok(()) +} diff --git a/nym-connect/src-tauri/src/state.rs b/nym-connect/src-tauri/src/state.rs index 6299954aab..80a288954b 100644 --- a/nym-connect/src-tauri/src/state.rs +++ b/nym-connect/src-tauri/src/state.rs @@ -16,6 +16,7 @@ use tauri::Manager; pub struct State { status: ConnectionStatusKind, + service_provider: Option, socks5_client_sender: Option, } @@ -23,6 +24,7 @@ impl State { pub fn new() -> Self { State { status: ConnectionStatusKind::Disconnected, + service_provider: None, socks5_client_sender: None, } } @@ -42,8 +44,16 @@ impl State { .unwrap(); } - pub async fn init_config() { - crate::config::Config::init().await; + pub fn get_service_provider(&self) -> &Option { + &self.service_provider + } + + pub fn set_service_provider(&mut self, provider: String) { + self.service_provider = Some(provider); + } + + pub async fn init_config(&self) { + crate::config::Config::init(self.service_provider.as_ref()).await; } pub async fn start_connecting(&mut self, window: &tauri::Window) { @@ -52,7 +62,7 @@ impl State { self.status = ConnectionStatusKind::Connecting; // Setup configuration by writing to file - Self::init_config().await; + self.init_config().await; // Kick of the main task and get the channel for controlling it let sender = start_nym_socks5_client();