Skip to content
Logo

Local signer

LocalSigner holds a secp256k1 private key in memory, backed by a k256 signing key. It is the signer you'll use for most development and server-side scenarios.

use tronz::LocalSigner;

Constructing

use tronz::LocalSigner;
 
// From a hex string (with or without the `0x` prefix).
let signer = LocalSigner::from_hex("0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80")?;
 
// From raw 32 bytes.
let bytes = [1u8; 32];
let signer = LocalSigner::from_bytes(&bytes)?;

The TRON address is derived from the key's public key automatically:

use tronz::{LocalSigner, TronSigner};
 
let signer = LocalSigner::from_hex(&std::env::var("TRON_PRIVATE_KEY")?)?;
println!("address: {}", signer.address());

Signing

You typically let the provider sign for you, but you can sign a hash directly:

use tronz::{LocalSigner, TronSigner};
use tronz::primitives::B256;
 
let signer = LocalSigner::from_hex("PRIVATE_KEY_HEX")?;
let hash = B256::repeat_byte(0xab);
let sig = signer.sign_hash(&hash).await?;
 
sig.to_bytes();  // [u8; 65] recoverable signature
sig.v();         // recovery id: 0 or 1

Accessing the key material

If you need the underlying k256 key (for interop or custom crypto), it is exposed — along with the k256 crate itself:

use tronz::signers::k256;
 
let key: &k256::ecdsa::SigningKey = signer.signing_key();

Use with a provider

use tronz::{LocalSigner, ProviderBuilder, TRONGRID_NILE};
 
let signer = LocalSigner::from_hex(&std::env::var("TRON_PRIVATE_KEY")?)?;
 
let provider = ProviderBuilder::new()
    .with_signer(signer)
    .connect_grpc(TRONGRID_NILE)
    .await?;