Skip to main content

Balance Management

This guide covers querying and displaying token balances using the Privacy Boost CLI.

CLI Commands

Check Specific Token Balance

privacy-boost balance --token 0x4200000000000000000000000000000000000006
Output:
Token: 0x4200...0006 (WETH)
Shielded Balance: 1.5 ETH
Wallet Balance: 0.5 ETH

Check All Balances

privacy-boost balances
Output:
Token                                      Shielded    Wallet
0x4200...0006 (WETH)                       1.5 ETH     0.5 ETH
0xA0b8...4321 (USDC)                       100.0 USDC  50.0 USDC

Programmatic Usage (Rust)

Single Token

let balance = sdk.get_balance("0x4200000000000000000000000000000000000006")?;
println!("Shielded: {} wei", balance.shielded_balance);
println!("Wallet: {} wei", balance.wallet_balance);

// Format for display
let formatted = sdk.format_amount(&balance.shielded_balance, balance.decimals)?;
println!("Shielded: {} {}", formatted, balance.symbol.unwrap_or_default());

All Tokens

let balances = sdk.get_all_balances()?;
for balance in &balances {
    let formatted = sdk.format_amount(&balance.shielded_balance, balance.decimals)?;
    println!("{}: {} (shielded)", balance.symbol.as_deref().unwrap_or("???"), formatted);
}

TokenBalance

pub struct TokenBalance {
    pub token_address: String,
    pub shielded_balance: String,  // Amount in wei
    pub wallet_balance: String,    // Amount in wei
    pub symbol: Option<String>,
    pub decimals: u8,
}

Formatting Amounts

// Parse human-readable to wei
let wei = sdk.parse_amount("1.5", 18)?;   // "1500000000000000000"

// Format wei to human-readable
let eth = sdk.format_amount("1500000000000000000", 18)?;  // "1.5"

// For USDC (6 decimals)
let usdc_wei = sdk.parse_amount("100.0", 6)?;  // "100000000"

Error Handling

match sdk.get_balance(token_address) {
    Ok(balance) => {
        let formatted = sdk.format_amount(&balance.shielded_balance, balance.decimals)?;
        println!("Shielded: {}", formatted);
    }
    Err(CliError::NotAuthenticated) => println!("Please login first"),
    Err(CliError::NetworkError { message }) => println!("Network error: {}", message),
    Err(e) => println!("Balance error: {:?}", e),
}

Best Practices

1. Use Format Helpers

Always use sdk.format_amount() to convert wei strings for display.

2. Refresh After Operations

Check balances after deposits, withdrawals, or transfers.

Next Steps