alloy-rs中实现模拟主网交易

   let provider = ProviderBuilder::new()
    .connect_anvil_with_config(|a| a.fork("https://reth-ethereum.ithaca.xyz/rpc"));

// 使用 anvil_impersonate_account 执行 transfer 的方法
async fn transfer_with_impersonate<P: Provider>(
    provider: &P,
    from_addr: Address,
    token_addr: Address,
    to_addr: Address,
    amount: U256,
) -> Result<()> {
    // 1. 先查询转账前余额
    let token = ERC20::new(token_addr, provider);
    let balance_before = token.balanceOf(to_addr).call().await?;
    println!("转账前 {} 地址余额: {}", to_addr, balance_before);

    let eth_bal = provider.get_balance(from_addr).await?;
    println!("eth bal {}",eth_bal);
    provider.anvil_set_balance(from_addr, U256::from(1e18)).await?;

    let eth_bal = provider.get_balance(from_addr).await?;
    println!("eth bal after {}",eth_bal);

      let balance_set = token.balanceOf(from_addr).call().await?;
    println!("set balance {} 地址余额: {}", from_addr, balance_set);
    // 2. impersonate 账户
    provider.anvil_impersonate_account(from_addr).await?;
    println!("已 impersonate 账户: {}", from_addr);

    // 3. 执行转账
    let transfer_tx = token.transfer(to_addr, amount);
    let receipt = transfer_tx.send().await?;
    println!("转账交易成功: {:?}", receipt);

    // 4. 查询转账后余额
    let balance_after = token.balanceOf(to_addr).call().await?;
    println!("转账后 {} 地址余额: {}", to_addr, balance_after);
    println!("余额变化: {}", balance_after - balance_before);

    Ok(())
}

执行上面方法的时候报错

Error: local usage error: missing properties: [("NonceManager", ["from"])]

Caused by:
    missing properties: [("NonceManager", ["from"])]

是哪里没设置对吗

请先 登录 后评论

1 个回答

Meta - 风是自由的,你也是
请先 登录 后评论
  • 1 关注
  • 0 收藏,172 浏览
  • 孙三胖 提出于 1天前