seedelf-cli 0.4.5

Seedelf: A Cardano Stealth Wallet
Documentation
use blstrs::Scalar;
use colored::Colorize;
use reqwest::Error;
use seedelf_cli::address;
use seedelf_cli::convert;
use seedelf_cli::display;
use seedelf_cli::koios::UtxoResponse;
use seedelf_cli::setup;
use seedelf_cli::utxos;

pub async fn run(network_flag: bool) -> Result<(), Error> {
    display::preprod_text(network_flag);
    display::block_number_and_time(network_flag).await;

    println!(
        "{}: {} {}",
        "\nThe dApp Wallet".bright_white(),
        "This wallet should only receive funds from smart contracts.".bright_yellow(),
        "This address should not be public.".bright_red()
    );

    let scalar: Scalar = setup::load_wallet();

    let vkey = convert::secret_key_to_public_key(scalar);
    println!("Public Key Hash: {}", vkey.bright_blue());
    println!(
        "Stake Key Hash: {}",
        address::stake_key(network_flag).bright_blue()
    );
    let addr = address::dapp_address(vkey, network_flag);
    let addr_bech32 = addr.to_bech32().unwrap();
    println!("\nAddress: {}", addr_bech32.bright_blue());

    let all_utxos: Vec<UtxoResponse> =
        utxos::collect_all_address_utxos(&addr_bech32, network_flag).await;
    let (total_lovelace, tokens) = utxos::assets_of(all_utxos.clone());

    println!(
        "\nWallet Has {} UTxOs",
        all_utxos.len().to_string().bright_yellow()
    );
    println!(
        "\nBalance: {}",
        format!("{:.6}", total_lovelace as f64 / 1_000_000.0).bright_yellow()
    );

    if !tokens.items.is_empty() {
        println!("{}", "\nTokens:\n".bright_magenta());
        for asset in tokens.items.clone() {
            println!(
                "{} {}.{}",
                asset.amount.to_string().white(),
                hex::encode(asset.policy_id.as_ref()).white(),
                hex::encode(asset.token_name).white()
            );
        }
    }

    Ok(())
}