use evm_client::{EvmClient, EvmProvider, Signer}; // Dummy signer that returns a known Ethereum address (Vitalik's address) struct DummySigner; // --- IMPORTANT --- // The Signer trait's async methods require different trait bounds on native vs WASM: // - Native Rust: futures must be Send, so use #[async_trait::async_trait] // - WASM (wasm32): futures do NOT require Send, so use #[async_trait::async_trait(?Send)] // This split is required for cross-platform test compatibility. DO NOT merge these impls! #[cfg(not(target_arch = "wasm32"))] #[async_trait::async_trait] impl Signer for DummySigner { async fn sign(&self, _message: &[u8]) -> Result, evm_client::EvmError> { Err(evm_client::EvmError::Vault("sign not implemented".to_string())) } fn address(&self) -> String { // Vitalik's main address (has funds on mainnet) "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045".to_string() } } #[cfg(not(target_arch = "wasm32"))] #[tokio::test] async fn test_get_balance_vitalik() { // Use a public Ethereum mainnet RPC let provider = EvmProvider::Http { name: "mainnet".to_string(), url: "https://eth.drpc.org".to_string(), chain_id: 1, }; let signer = DummySigner; let mut client = EvmClient::new(signer); client.add_provider("mainnet".to_string(), provider); client.set_current("mainnet").unwrap(); let balance = client.get_balance("0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045").await.unwrap(); assert!(balance > 0, "Vitalik's balance should be greater than zero"); } #[cfg(target_arch = "wasm32")] use wasm_bindgen_test::*; // See explanation above for why this impl uses ?Send #[cfg(target_arch = "wasm32")] #[async_trait::async_trait(?Send)] impl Signer for DummySigner { async fn sign(&self, _message: &[u8]) -> Result, evm_client::EvmError> { Err(evm_client::EvmError::Vault("sign not implemented".to_string())) } fn address(&self) -> String { // Vitalik's main address (has funds on mainnet) "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045".to_string() } } #[cfg(target_arch = "wasm32")] wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser); #[cfg(target_arch = "wasm32")] #[wasm_bindgen_test(async)] async fn test_get_balance_vitalik_browser() { let provider = EvmProvider::Http { name: "mainnet".to_string(), url: "https://eth.drpc.org".to_string(), chain_id: 1, }; let signer = DummySigner; let mut client = EvmClient::new(signer); client.add_provider("mainnet".to_string(), provider); client.set_current("mainnet").unwrap(); let balance = client.get_balance("0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045").await; assert!(balance.is_ok(), "Balance query should succeed in browser"); let balance = balance.unwrap(); assert!(balance > 0u128, "Vitalik's balance should be greater than zero"); }