use std::env;
use std::process::exit;
use hex::decode;
use reba_client::client::RelayClient;
use secp256k1::SecretKey;
use web3::signing::{Key,
SecretKeyRef};
use web3::transports::Http;
use web3::types::TransactionParameters;
use web3::Web3;
const AVAX_API_URL: &str = "https://api.avax.network/ext/bc/C/rpc";
fn get_env(key: &str) -> String
{
match env::var(key)
{
Ok(val) => val,
Err(_e) => String::new()
}
}
#[tokio::main]
async fn main()
{
let provider = Http::new(AVAX_API_URL).unwrap();
let web3 = Web3::new(provider);
let pk_str = get_env("PK");
let private_key_bytes: &[u8] = pk_str.as_bytes();
let sk = SecretKey::from_slice(&decode(private_key_bytes).unwrap()).unwrap();
let pk = SecretKeyRef::new(&sk);
let address = pk.address();
let mut client = RelayClient::new(address, &pk).unwrap();
let tx = TransactionParameters { value: 0.into(),
nonce: None,
to: Some(address),
chain_id: 43114.into(), ..Default::default() };
let signed_tx = match web3.accounts().sign_transaction(tx, &sk).await
{
Ok(signed_tx) => signed_tx,
Err(e) =>
{
println!("Error signing transaction: {:?}", e);
exit(1);
}
};
println!("Signed tx hash: {:x?}", signed_tx.transaction_hash);
match client.send_tx(signed_tx)
{
Ok(_) => println!("Sent transaction successfully."),
Err(e) =>
{
println!("Error sending transaction: {:?}", e);
exit(1);
}
};
}