diff --git a/src/client.rs b/src/client.rs index a01a0b153..113ed7569 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1,5 +1,5 @@ use async_std::sync::{Arc, Mutex}; -use incrementalmerkletree::Tree; +use incrementalmerkletree::{bridgetree::BridgeTree, Tree}; use log::{debug, info, trace, warn}; use smol::Executor; use url::Url; @@ -52,6 +52,8 @@ pub enum ClientFailed { ClientError(String), #[error("Verify error: {0}")] VerifyError(String), + #[error("Merkle tree already exists")] + TreeExists, } pub type ClientResult = std::result::Result; @@ -89,6 +91,11 @@ impl Client { wallet.key_gen().await?; } + // Generate merkle tree if we don't have one. + if wallet.get_tree().await.is_err() { + wallet.tree_gen().await?; + } + // TODO: Think about multiple keypairs let main_keypair = wallet.get_keypairs().await?[0]; info!("Main keypair: {}", bs58::encode(&serialize(&main_keypair.public)).into_string()); @@ -373,4 +380,8 @@ impl Client { pub async fn get_balances(&self) -> Result { self.wallet.get_balances().await } + + pub async fn get_tree(&self) -> Result> { + self.wallet.get_tree().await + } }