#![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};
#[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(())
}