ore-cli 1.1.0-devnet

A command line interface for ORE cryptocurrency mining.
use std::str::FromStr;

use solana_program::pubkey::Pubkey;
use solana_sdk::signature::Signer;

use crate::{
    args::BalanceArgs,
    utils::{amount_u64_to_string, get_proof_with_authority},
    Miner,
};

impl Miner {
    pub async fn balance(&self, args: BalanceArgs) {
        let signer = self.signer();
        let address = if let Some(address) = args.address {
            if let Ok(address) = Pubkey::from_str(&address) {
                address
            } else {
                println!("Invalid address: {:?}", address);
                return;
            }
        } else {
            signer.pubkey()
        };
        let proof = get_proof_with_authority(&self.rpc_client, address).await;
        let token_account_address = spl_associated_token_account::get_associated_token_address(
            &address,
            &ore_api::consts::MINT_ADDRESS,
        );
        let token_balance = if let Ok(Some(token_account)) = self
            .rpc_client
            .get_token_account(&token_account_address)
            .await
        {
            token_account.token_amount.ui_amount_string
        } else {
            "0".to_string()
        };
        println!(
            "Balance: {} ORE\nStake: {} ORE",
            token_balance,
            amount_u64_to_string(proof.balance)
        )
    }
}