trident-sdk 0.2.0

End-user SDK for Trident deposits and cross-chain spends
Documentation
#![allow(clippy::print_stdout)]

mod common;

use alloy_primitives::Address;
use trident_sdk::TridentClientBuilder;
use trident_sdk::evm::abi::TridentDeposits;

use common::{
    ExampleResult, deposit_contract_for_domain, env_parse, grpc_endpoint, provider_from_env,
    signer_from_env,
};

// Required environment variables:
// - TRIDENT_GRPC_URL
// - TRIDENT_DOMAIN
// - TRIDENT_RPC_URL
// - TRIDENT_PRIVATE_KEY
// - TRIDENT_TOKEN
#[tokio::main(flavor = "current_thread")]
async fn main() -> ExampleResult {
    let domain: u32 = env_parse("TRIDENT_DOMAIN")?;
    let token: Address = env_parse("TRIDENT_TOKEN")?;

    let signer = signer_from_env()?;
    let address = signer.address();
    let provider = provider_from_env("TRIDENT_RPC_URL", &signer).await?;

    let mut client = TridentClientBuilder::new(grpc_endpoint()?)
        .with_evm_chain(domain, provider.clone(), signer)
        .connect()
        .await?;

    let delivery_balance = client.get_balance(domain, address, token).await?;

    let deposit_contract = deposit_contract_for_domain(domain).await?;
    let deposits = TridentDeposits::new(deposit_contract, &provider);
    let onchain_deposited_amount = deposits.depositedAmount(address, token).call().await?;

    println!(
        "delivery-service available balance: {}",
        delivery_balance.available_balance
    );
    println!("TridentDeposits::depositedAmount: {onchain_deposited_amount}");
    println!(
        "these values come from different systems and should not be treated as interchangeable"
    );

    Ok(())
}