feeless 0.1.11

A Nano (cryptocurrency) node and utilities such as nano addresses, hashing blocks, signing, etc.
Documentation
use crate::Test;
use cmd_lib::run_fun;

pub fn keys(test: &mut Test, feeless: &str) -> anyhow::Result<()> {
    test.run(
        "A new phrase piped through several stages into an address.",
        || {
            Ok(run_fun!(
                $feeless phrase new |
                $feeless phrase to-private - |
                $feeless private to-public - |
                $feeless public to-address -
            )?)
        },
    )
    .contains("nano_");

    // Example from https://docs.nano.org/integration-guides/key-management/#test-vectors
    test.run("A phrase with a passphrase converted to an address.", || {
        Ok(run_fun!(
            $feeless phrase to-address -p "some password"
            "edge defense waste choose enrich upon flee junk siren film clown finish luggage leader kid quick brick print evidence swap drill paddle truly occur"
        )?)
    })
    .contains("nano_1pu7p5n3ghq1i1p4rhmek41f5add1uh34xpb94nkbxe8g4a6x1p69emk8y1d");

    // A zh-hant phrase
    let phrase = "讓 步 械 遞 窮 針 柳 擾 逃 湯 附 剛";

    // This is address 5 from the phrase.
    let addr = "nano_3tr7wk6ebc6ujptdnf471d8knnfaz1r469u83biws5s5jntb3hpe8oh65ogi";

    test.run("A phrase converted directly to an address.", || {
        Ok(run_fun!(
            $feeless phrase to-address -l zh-hant -a 5 "$phrase"
        )?)
    })
    .contains(addr);

    test.run(
        "A phrase piped through several stages into an address.",
        || {
            Ok(run_fun!(
                $feeless phrase to-private -l zh-hant -a 5 "$phrase" |
                $feeless private to-public - |
                $feeless public to-address -
            )?)
        },
    )
    .contains(addr);

    test.run("A seed directly converted to a public key.", || {
        let zeros = "0000000000000000000000000000000000000000000000000000000000000000";
        Ok(run_fun!(
            $feeless seed to-public $zeros -i 0
        )?)
    })
    .contains("C008B814A7D269A1FA3C6528B19201A24D797912DB9996FF02A1FF356E45552B");

    test.run("A seed directly converted to an address.", || {
        let zeros = "0000000000000000000000000000000000000000000000000000000000000000";
        Ok(run_fun!(
            $feeless seed to-address $zeros -i 0
        )?)
    })
    .contains("nano_3i1aq1cchnmbn9x5rsbap8b15akfh7wj7pwskuzi7ahz8oq6cobd99d4r3b7");

    test.run("A seed piped through to convert it to an address.", || {
        let zeros = "0000000000000000000000000000000000000000000000000000000000000000";
        Ok(run_fun!(
            $feeless seed to-private $zeros -i 0 | $feeless private to-address -
        )?)
    })
    .contains("nano_3i1aq1cchnmbn9x5rsbap8b15akfh7wj7pwskuzi7ahz8oq6cobd99d4r3b7");

    test.run("A random private key into an address.", || {
        Ok(run_fun!(
            $feeless private new | $feeless private to-address -
        )?)
    })
    .contains("nano_");

    Ok(())
}