Skip to main content

API Reference

Complete API reference for the Privacy Boost CLI library (Rust).

Generated Documentation

Full API documentation can be generated using cargo doc:
# From rust-sdk directory
make docs-rust

# CLI-specific docs
cargo doc --no-deps -p privacy-boost-cli

PrivacyBoostCLI

Main CLI SDK interface for Rust applications.

Constructor

pub fn new(config: CliConfig) -> Result<Self, CliError>
Creates a new CLI SDK instance. Parameters:
  • config - CLI configuration
Returns: Result<PrivacyBoostCLI, CliError> Example:
use privacy_boost_cli::{PrivacyBoostCLI, CliConfig};

let config = CliConfig::new(
    "https://test-api.privacy-boost.sunnyside.io/indexer".into(),
    "https://test-api.privacy-boost.sunnyside.io/prover".into(),
    11155420,
    "0xB22fD661b322F10d4B7cd0cFcb9578C485423119".into(),
    "https://eth.llamarpc.com".into(),
);

let sdk = PrivacyBoostCLI::new(config)?;

Connection Methods

connect

pub fn connect(&self, private_key: &str) -> Result<ConnectResult, CliError>
Connect wallet using a private key and derive privacy keys. Parameters:
  • private_key - Hex-encoded private key
Returns: Result<ConnectResult, CliError>

disconnect

pub fn disconnect(&self)
Disconnect the current wallet.

is_connected

pub fn is_connected(&self) -> bool
Check if wallet is connected.

Authentication Methods

login

pub fn login(&self) -> Result<LoginResult, CliError>
Authenticate with the Privacy Boost backend. Returns: Result<LoginResult, CliError>

logout

pub fn logout(&self)
Clear authentication state.

is_authenticated

pub fn is_authenticated(&self) -> bool
Check if authenticated.

State Accessors

pub fn get_privacy_address(&self) -> Option<String>
pub fn get_mpk(&self) -> Option<String>
pub fn get_wallet_address(&self) -> Option<String>
pub fn get_status(&self) -> StatusInfo

Balance Methods

get_balance

pub fn get_balance(&self, token_address: &str) -> Result<TokenBalance, CliError>
Get balance for a specific token.

get_all_balances

pub fn get_all_balances(&self) -> Result<Vec<TokenBalance>, CliError>
Get all token balances.

Vault Operations

deposit

pub fn deposit(
    &self,
    token_address: &str,
    amount: &str
) -> Result<DepositResult, CliError>
Deposit tokens into the shielded pool. Parameters:
  • token_address - Token contract address
  • amount - Amount in wei (as string)

withdraw

pub fn withdraw(
    &self,
    token_address: &str,
    amount: &str,
    recipient: &str
) -> Result<WithdrawResult, CliError>
Withdraw tokens from the shielded pool. Parameters:
  • token_address - Token contract address
  • amount - Amount in wei (as string)
  • recipient - Recipient Ethereum address

send

pub fn send(
    &self,
    token_address: &str,
    amount: &str,
    recipient_privacy_address: &str
) -> Result<TransferResult, CliError>
Send a private transfer. Parameters:
  • token_address - Token contract address
  • amount - Amount in wei (as string)
  • recipient_privacy_address - Recipient’s 194-char privacy address

Transaction History

pub fn get_transaction_history(
    &self,
    tx_type: Option<&str>,
    token_address: Option<&str>,
    limit: Option<u32>
) -> Result<Vec<Transaction>, CliError>
Get transaction history.

Session Persistence

export_session

pub fn export_session(&self) -> Option<ExportedSession>
Export session data for persistence.

import_session

pub fn import_session(&self, session: &ExportedSession) -> Result<bool, CliError>
Import session from persistence.

Utilities

pub fn is_valid_privacy_address(&self, address: &str) -> bool
pub fn is_valid_address(&self, address: &str) -> bool
pub fn parse_amount(&self, amount: &str, decimals: u8) -> Result<String, CliError>
pub fn format_amount(&self, wei: &str, decimals: u8) -> Result<String, CliError>

CliConfig

CLI configuration struct.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CliConfig {
    pub indexer_url: String,
    pub prover_url: String,
    pub chain_id: u64,
    pub shield_contract: String,
    pub weth_contract: Option<String>,
    pub rpc_url: String,
    pub timeout_secs: u64,
}

Constructor

pub fn new(
    indexer_url: String,
    prover_url: String,
    chain_id: u64,
    shield_contract: String,
    rpc_url: String,
) -> Self

Builder Methods

pub fn with_weth_contract(self, weth_contract: String) -> Self
pub fn with_timeout(self, timeout_secs: u64) -> Self

File Operations

pub fn default_config_path() -> Result<PathBuf, CliError>
pub fn load_from_file(path: &PathBuf) -> Result<Self, CliError>
pub fn load_from_default() -> Result<Option<Self>, CliError>
pub fn save_to_file(&self, path: &PathBuf) -> Result<(), CliError>
pub fn save_to_default(&self) -> Result<PathBuf, CliError>

Environment

pub fn from_environment() -> Self

NetworkPreset

Network preset enumeration.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum NetworkPreset {
    Local,
    OpSepolia,
}

Methods

pub fn config(&self) -> CliConfig
pub fn parse(s: &str) -> Option<Self>
Parse aliases:
  • Local: "local", "localhost", "dev"
  • OpSepolia: "op-sepolia", "optimism-sepolia", "opsepolia"
Example:
let preset = NetworkPreset::parse("op-sepolia").unwrap();
let config = preset.config();

Types

ConnectResult

pub struct ConnectResult {
    pub wallet_address: String,
    pub privacy_address: String,
    pub mpk: String,
}

LoginResult

pub struct LoginResult {
    pub wallet_address: String,
    pub privacy_address: String,
    pub mpk: String,
}

TokenBalance

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

DepositResult

pub struct DepositResult {
    pub tx_hash: String,
    pub commitment: String,
    pub fee: String,
}

WithdrawResult

pub struct WithdrawResult {
    pub tx_hash: String,
    pub amount: String,
}

TransferResult

pub struct TransferResult {
    pub tx_hash: String,
}

Transaction

pub struct Transaction {
    pub tx_hash: String,
    pub tx_type: String,
    pub token_address: String,
    pub amount: String,
    pub direction: String,
    pub sender_pub_key: String,
    pub receiver_pub_keys: Vec<String>,
    pub created_at: u64,
}

StatusInfo

pub struct StatusInfo {
    pub connected: bool,
    pub authenticated: bool,
    pub wallet_address: Option<String>,
    pub privacy_address: Option<String>,
    pub mpk: Option<String>,
}

ExportedSession

Re-exported from privacy_boost_core::sdk_state::ExportedSession:
pub struct ExportedSession {
    pub wallet_public_key_x: String,
    pub wallet_public_key_y: String,
    pub viewing_key: String,
    pub viewing_public_key_x: String,
    pub viewing_public_key_y: String,
    pub nullifying_key: String,
    pub nullifying_public_key_x: String,
    pub nullifying_public_key_y: String,
    pub mpk: String,
    pub jwt: String,
    pub jwt_expiry: u64,
    pub wallet_address: String,
}

CliError

pub enum CliError {
    NotConnected,
    NotAuthenticated,
    InvalidAmount,
    InvalidRecipient,
    InsufficientBalance,
    ConfigFileError { message: String },
    NetworkError { message: String },
    WalletError { message: String },
    ProofError { message: String },
    InternalError { message: String },
}

Default Values

pub mod defaults {
    pub const RPC_URL: &str = "http://localhost:8545";
    pub const CHAIN_ID: u64 = 31337;
    pub const INDEXER_URL: &str = "http://localhost:8081";
    pub const PROVER_URL: &str = "http://localhost:8080";
    pub const SHIELD_CONTRACT: &str = "0xa08d35a8996240b6f42213801100d592acdc096d";
    pub const WETH_CONTRACT: &str = "0x9824df7812db7bdfba67a76a065d6a29d5197193";
}

Complete Example

use privacy_boost_cli::{PrivacyBoostCLI, CliConfig, NetworkPreset};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Load configuration from preset
    let config = NetworkPreset::Mainnet.config();

    // Or load from file
    // let config = CliConfig::load_from_default()?.unwrap();

    // Create SDK
    let sdk = PrivacyBoostCLI::new(config)?;

    // Connect with private key
    let private_key = std::env::var("PRIVATE_KEY")?;
    let connect_result = sdk.connect(&private_key)?;
    println!("Connected: {}", connect_result.wallet_address);

    // Login
    let login_result = sdk.login()?;
    println!("Privacy Address: {}", login_result.privacy_address);

    // Check balance
    let token = "0x4200000000000000000000000000000000000006";
    let balance = sdk.get_balance(token)?;
    println!("Balance: {} wei", balance.shielded_balance);

    // Deposit
    let deposit_result = sdk.deposit(token, "1000000000000000000")?;
    println!("Deposit TX: {}", deposit_result.tx_hash);

    // Export session for later
    if let Some(session) = sdk.export_session() {
        let json = serde_json::to_string(&session)?;
        std::fs::write("session.json", json)?;
    }

    // Disconnect
    sdk.disconnect();

    Ok(())
}

See Also