2 unstable releases

0.2.0 Mar 11, 2023
0.1.1 Feb 17, 2023
0.1.0 Feb 10, 2023

#3 in #tron

Download history 28/week @ 2024-03-10 3/week @ 2024-03-17 1/week @ 2024-03-24 80/week @ 2024-03-31 11/week @ 2024-04-07 2/week @ 2024-04-28 7/week @ 2024-05-05 16/week @ 2024-05-19 89/week @ 2024-05-26 17/week @ 2024-06-02 12/week @ 2024-06-09 47/week @ 2024-06-16 26/week @ 2024-06-23

105 downloads per month

MIT license

47KB
951 lines

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.

Dependencies

~9–22MB
~322K SLoC