🏗️ Depend
cargo add evm-sdk
📦 Example
Basic usage
use evm_client::{Evm, EvmType};
use ethers::types::Address;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let evm = Evm::new(EvmType::Ethereum).await?;
let address: Address = "0x742d35Cc6634C0532925a3b8D6B6f7C93D5A7A7A".parse()?;
let balance = evm.get_balance(address).await?;
println!("Balance: {}", balance);
let analyzer = evm_client::contract::ContractAnalyzer::new(Arc::new(evm));
let contract_info = analyzer.get_contract_info(address).await?;
println!("Contract bytecode length: {}", contract_info.bytecode.len());
Ok(())
}
Get the actual number and amount of tokens decreased and increased in a specified transaction.
#[cfg(test)]
mod test {
use crate::{Evm, trade::Trade};
use std::sync::Arc;
#[tokio::test]
async fn test_get_transaction_by_tx() {
let evm = Evm::new(evm_client::EvmType::ETHEREUM_MAINNET)
.await
.unwrap();
let trade = Trade::new(Arc::new(evm));
let t = trade
.get_transactions_by_tx(
"0x2c632c004c7a2c5daedf54f53a7ab424756b383bfc477bfc802e3a1d5a930a2e",
)
.await
.unwrap();
let received = t.get_received_token_eth();
let spent = t.get_spent_token_eth();
println!("Actual Received {:?}", received);
println!("Actual Spent {:?}", spent);
}
}
Monitoring large transactions
use evm_client::{Evm, EvmType, TradeEventListener};
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let evm = Arc::new(Evm::new(EvmType::Ethereum).await?);
let event_listener = TradeEventListener::new(evm.clone());
let min_value = ethers::types::U256::from(10u64.pow(18));
let mut receiver = event_listener.watch_large_transactions(min_value, 3).await?;
while let Some(tx_with_receipt) = receiver.recv().await {
println!("Large transaction detected: {:?}", tx_with_receipt.transaction.hash);
println!("Value: {}", tx_with_receipt.transaction.value);
println!("From: {:?}", tx_with_receipt.transaction.from);
if let Some(to) = tx_with_receipt.transaction.to {
println!("To: {:?}", to);
}
}
Ok(())
}