#![allow(clippy::print_stdout)]
use alloy_network::{AnyNetwork, ReceiptResponse};
use alloy_primitives::{Address, U256, address};
use alloy_provider::ProviderBuilder;
use alloy_signer_local::PrivateKeySigner;
use alloy_sol_types::sol;
use trident_evm_aa::call_builder::MulticallBuilder;
sol! {
interface IWETH9 {
function deposit() external payable;
function transfer(address to, uint256 amount) external returns (bool);
}
}
const WETH9: Address = address!("C02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2");
const BOB: Address = address!("00000000000000000000000000000000000000bb");
const CAROL: Address = address!("00000000000000000000000000000000000000cc");
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let rpc_url = std::env::var("RPC_URL")?;
let signer: PrivateKeySigner = std::env::var("PRIVATE_KEY")?.parse()?;
let provider = ProviderBuilder::new()
.network::<AnyNetwork>()
.wallet(signer)
.connect_http(rpc_url.parse()?);
let receipt = MulticallBuilder::new()
.call_with_value(
WETH9,
&IWETH9::depositCall {},
U256::from(500_000_000_000_000_000u128),
)
.call(
WETH9,
&IWETH9::transferCall {
to: BOB,
amount: U256::from(100_000_000_000_000_000u128),
},
)
.send_value(CAROL, U256::from(300_000_000_000_000_000u128))
.send_with_wallet_provider(provider)
.await?
.get_receipt()
.await?;
println!("batch tx: {}", receipt.transaction_hash());
Ok(())
}