wallet_backup/
wallet_backup.rs

1use std::error::Error;
2
3use algosdk::{mnemonic, KmdClient};
4
5fn main() -> Result<(), Box<dyn Error>> {
6    let kmd_address = "http://localhost:8080";
7    let kmd_token = "contents-of-kmd.token";
8
9    let kmd_client = KmdClient::new(kmd_address, kmd_token);
10
11    let list_response = kmd_client.list_wallets()?;
12
13    let wallet_id = match list_response
14        .wallets
15        .into_iter()
16        .find(|wallet| wallet.name == "testwallet")
17    {
18        Some(wallet) => wallet.id,
19        None => return Err("Wallet not found".into()),
20    };
21
22    let init_response = kmd_client.init_wallet_handle(&wallet_id, "testpassword")?;
23    let wallet_handle_token = init_response.wallet_handle_token;
24
25    let export_response =
26        kmd_client.export_master_derivation_key(&wallet_handle_token, "testpassword")?;
27    let mdk = export_response.master_derivation_key;
28
29    // String representation of the mdk, keep in safe place and don't share it
30    let string_to_save = mnemonic::from_key(&mdk.0)?;
31
32    println!("Backup phrase: {}", string_to_save);
33
34    Ok(())
35}