use ethers::providers::{Provider, Http}; use ethers::{utils, prelude::*}; type Client = SignerMiddleware, Wallet>; #[tokio::main] async fn main() -> Result<(), Box> { let provider: Provider = Provider::::try_from("https://rpc.api.moonbase.moonbeam.network")?; // Change to correct network // Do not include the private key in plain text in any production code. This is just for demonstration purposes let wallet: LocalWallet = "INSERT_PRIVATE_KEY" .parse::()? .with_chain_id(Chain::Moonbase); // Change to correct network let client = SignerMiddleware::new(provider.clone(), wallet.clone()); let address_from = "INSERT_FROM_ADDRESS".parse::
()?; let address_to = "INSERT_TO_ADDRESS".parse::
()?; send_transaction(&client, &address_from, &address_to).await?; print_balances(&provider, &address_from, &address_to).await?; Ok(()) } // Print the balance of a wallet async fn print_balances(provider: &Provider, address_from: &Address, address_to: &Address) -> Result<(), Box> { let balance_from = provider.get_balance(address_from.clone(), None).await?; let balance_to = provider.get_balance(address_to.clone(), None).await?; println!("{} has {}", address_from, balance_from); println!("{} has {}", address_to, balance_to); Ok(()) } // Sends some native currency async fn send_transaction(client: &Client, address_from: &Address, address_to: &Address) -> Result<(), Box> { println!( "Beginning transfer of 1 native currency {} to {}.", address_from, address_to ); let tx = TransactionRequest::new() .to(address_to.clone()) .value(U256::from(utils::parse_ether(1)?)) .from(address_from.clone()); let tx = client.send_transaction(tx, None).await?.await?; println!("Transaction Receipt: {}", serde_json::to_string(&tx)?); Ok(()) }