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, U256};
use trident_sdk::{SpendRequestBuilder, TridentClientBuilder};

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

// Required environment variables:
// - TRIDENT_GRPC_URL
// - TRIDENT_SRC_DOMAIN
// - TRIDENT_SRC_RPC_URL
// - TRIDENT_DST_DOMAIN
// - TRIDENT_DST_RPC_URL
// - TRIDENT_PRIVATE_KEY
// - TRIDENT_SRC_TOKEN
// - TRIDENT_DST_TOKEN
// - TRIDENT_DST_RECIPIENT
// - TRIDENT_AMOUNT
#[tokio::main(flavor = "current_thread")]
async fn main() -> ExampleResult {
    let src_domain: u32 = env_parse("TRIDENT_SRC_DOMAIN")?;
    let dst_domain: u32 = env_parse("TRIDENT_DST_DOMAIN")?;
    let src_token: Address = env_parse("TRIDENT_SRC_TOKEN")?;
    let dst_token: Address = env_parse("TRIDENT_DST_TOKEN")?;
    let dst_recipient: Address = env_parse("TRIDENT_DST_RECIPIENT")?;
    let amount: U256 = env_parse("TRIDENT_AMOUNT")?;

    let signer = signer_from_env()?;
    let src_provider = provider_from_env("TRIDENT_SRC_RPC_URL", &signer).await?;
    let dst_provider = provider_from_env("TRIDENT_DST_RPC_URL", &signer).await?;

    let mut client = TridentClientBuilder::new(grpc_endpoint()?)
        .with_evm_chain(src_domain, src_provider, signer.clone())
        .with_evm_chain(dst_domain, dst_provider, signer)
        .connect()
        .await?;

    let request = SpendRequestBuilder::new(
        src_domain,
        src_token,
        dst_domain,
        dst_token,
        dst_recipient,
        amount,
    );

    let attestation = client.spend(request).await?;
    println!(
        "accepted spend spec hash: {:?}",
        attestation.spend_spec_hash()
    );

    let pending = attestation.send().await?;
    let receipt = pending.get_receipt().await?;
    println!(
        "submitted destination transaction: {:?}",
        receipt.transaction_hash
    );
    Ok(())
}