use iota_sdk::{
client::{
constants::SHIMMER_COIN_TYPE,
secret::{stronghold::StrongholdSecretManager, SecretManager},
},
wallet::{ClientOptions, Result, Wallet},
};
#[tokio::main]
async fn main() -> Result<()> {
dotenvy::dotenv().ok();
let secret_manager = StrongholdSecretManager::builder()
.password(std::env::var("STRONGHOLD_PASSWORD").unwrap())
.build(std::env::var("STRONGHOLD_SNAPSHOT_PATH").unwrap())?;
let client_options = ClientOptions::new().with_node(&std::env::var("NODE_URL").unwrap())?;
let wallet = Wallet::builder()
.with_secret_manager(SecretManager::Stronghold(secret_manager))
.with_storage_path(&std::env::var("WALLET_DB_PATH").unwrap())
.with_client_options(client_options)
.with_coin_type(SHIMMER_COIN_TYPE)
.finish()
.await?;
let mnemonic = wallet.generate_mnemonic()?;
wallet.store_mnemonic(mnemonic.clone()).await?;
println!("Created a wallet from the mnemonic:\n'{}'", mnemonic.as_ref());
let alias = "Alice";
let account = wallet.create_account().with_alias(alias).finish().await?;
println!("Created account '{alias}'");
let addresses = account.addresses().await?;
println!(
"{alias}'s addresses:\n{:#?}",
addresses
.iter()
.map(|addr| addr.address().to_string())
.collect::<Vec<_>>()
);
Ok(())
}