transfer_trx
Runnable example from the transfers package.
Run
git clone https://github.com/throgxyz/examples.git
cd examples
cargo run -p examples-transfers --example transfer_trxSource
//! Transfer TRX on the Nile testnet and wait for confirmation.
//!
//! Required env:
//! TRON_PRIVATE_KEY — hex private key (no 0x prefix)
//!
//! Optional env:
//! TRON_API_KEY — TronGrid API key
//! TRON_TO — recipient (defaults to a well-known Nile address)
//! TRON_AMOUNT_SUN — amount in sun (default: 1_000_000 = 1 TRX)
//!
//! ```
//! TRON_PRIVATE_KEY=<key> cargo run -p examples-transfers --example transfer_trx
//! ```
use tronz::{LocalSigner, ProviderBuilder, TRONGRID_NILE, TronProvider, Trx};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let key_hex = std::env::var("TRON_PRIVATE_KEY").expect("TRON_PRIVATE_KEY env var required");
let api_key = std::env::var("TRON_API_KEY").ok();
let amount_sun: i64 =
std::env::var("TRON_AMOUNT_SUN").ok().and_then(|s| s.parse().ok()).unwrap_or(1_000_000); // 1 TRX default
let signer = LocalSigner::from_hex(&key_hex)?;
let from = signer.address();
// Default to a well-known Nile address; TRON does not allow self-transfers.
let to: tronz::Address = std::env::var("TRON_TO")
.ok()
.map(|s| s.parse().expect("valid TRON_TO address"))
.unwrap_or_else(|| "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t".parse().unwrap());
let amount = Trx::from_sun(amount_sun)?;
let provider = ProviderBuilder::new()
.with_recommended_fillers()
.with_signer(signer)
.maybe_api_key(api_key)
.connect_grpc(TRONGRID_NILE)
.await?;
let before = provider.get_account(from).await?.balance;
println!("From : {from}");
println!("To : {to}");
println!("Amount : {amount}");
println!("Balance : {} TRX (before)", before);
println!("\nBroadcasting…");
let pending = provider.send_trx().to(to).amount(amount).send().await?;
let tx_id = pending.tx_id();
println!("tx_id : 0x{}", hex::encode(tx_id));
println!("Waiting for confirmation…");
let info = pending.get_receipt().await?;
println!("\n=== Confirmed ===");
println!(" block : {}", info.block_number);
println!(" status : {:?}", info.status);
println!(" energy used : {}", info.receipt.energy_usage);
println!(" net used : {}", info.net_usage);
println!(" net fee : {} sun", info.net_fee.as_sun());
let after = provider.get_account(from).await?.balance;
println!("\nBalance : {} TRX (after)", after);
Ok(())
}