/heliosphere

Rust-idiomatic Tron API client library

Primary LanguageRustMIT LicenseMIT

Crates.io Crates.io

Description

Rust-idiomatic Tron API client library.

Supported features

Features Support
Transaction signing & broadcasting
Smart contract calls
Basic network querying
Staking TRX for energy and bandwidth
Offline transaction signing
Offline transaction encoding (without CreateTransaction API)
Voting & Proposals

Structure

Crate Description
heliosphere Main crate
heliosphere-core Core types, no_std compatible but alloc required
heliosphere-signer Transaction signing utils, no_std compatible but alloc required

TRC20 transfer example

let api = "https://api.shasta.trongrid.io";
let keypair = Keypair::from_hex_key(
    std::fs::read_to_string(".key")
        .expect("no ./.key found")
        .trim(),
)
.unwrap();
let client = RpcClient::new(api).unwrap();
let from = keypair.address();
let to: Address = "<transfer-to-address>".parse().unwrap();
let usdt: Address = "TG3XXyExBkPp9nzdajDZsozEu4BkaSJozs".parse().unwrap(); // shasta testnet USDT
let amount: u64 = 1; // 0.000001 USDT

// Fetch account balance
let method_call_balance = MethodCall {
    caller: &from,
    contract: &usdt,
    selector: "balanceOf(address)",
    parameter: &ethabi::encode(&[Token::Address(from.into())]),
};
let res = &ethabi::decode(
    &[ParamType::Uint(256)],
    &client
        .query_contract(&method_call_balance)
        .await
        .unwrap()
        .constant_result(0)
        .unwrap(),
)
.unwrap()[0];
let current_balance = match res {
    Token::Uint(x) => x,
    _ => panic!("Wrong type"),
};
println!("Balance: {}", current_balance);

// Transfer tokens
let method_call = MethodCall {
    caller: &from,
    contract: &usdt,
    selector: "transfer(address,uint256)",
    parameter: &ethabi::encode(&[Token::Address(to.into()), Token::Uint(U256::from(amount))]),
};
// Estimate energy usage
let estimated = client.estimate_energy(&method_call).await.unwrap();
println!("Estimated energy usage: {}", estimated);
// Send tx
let mut tx = client
    .trigger_contract(&method_call, 0, None)
    .await
    .unwrap();
keypair.sign_transaction(&mut tx).unwrap();
let txid = client.broadcast_transaction(&tx).await.unwrap();
println!("Txid: {}", txid);
println!("Confirming...");
client.await_confirmation(txid).await.unwrap();

License

This project is licensed under the MIT license.