algonaut_sandbox/
lib.rs

1mod error;
2use algonaut::{algod::v2::Algod, kmd::v1::Kmd, transaction::account::Account};
3use error::SandboxError;
4
5pub async fn get_unencrypted_default_wallet(
6    algod: &Algod,
7    kmd: &Kmd,
8) -> Result<Account, SandboxError> {
9    let list_response = kmd.list_wallets().await?;
10
11    let wallet_id = list_response
12        .wallets
13        .into_iter()
14        .find(|wallet| wallet.name == "unencrypted-default-wallet")
15        .unwrap()
16        .id;
17
18    let handle = kmd
19        .init_wallet_handle(&wallet_id, "")
20        .await?
21        .wallet_handle_token;
22
23    let keys = kmd.list_keys(handle.as_str()).await?.addresses;
24
25    for addr in keys {
26        let info = algod.account_information(&addr.parse().unwrap()).await?;
27
28        if info.status == "Online" {
29            let pk = kmd
30                .export_key(handle.as_str(), "", &info.address)
31                .await?
32                .private_key;
33            let seed = pk[0..32].try_into().unwrap();
34
35            return Ok(Account::from_seed(seed));
36        }
37    }
38
39    Err(SandboxError::General("could not find wallet".into()))
40}