Skip to main content

signer/
signer.rs

1use ethers_abirpc::prelude::*;
2
3abigen!(Erc20Token, "./tests/abi/Erc20Token.json");
4abirpc!(Erc20Token);
5
6const WETH_ADDRESS: &str = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2";
7const LOCAL_WALLET: &str = "380eb0f3d505f087e438eca80bc4df9a7faa24f868e69fc0440261a0fc0567dc";
8
9#[tokio::main]
10async fn main() -> Result<(), Box<dyn std::error::Error>> {
11    let registry = Erc20TokenRegistry::<MockProvider>::mock();
12
13    let weth_address = address_from!(WETH_ADDRESS)?;
14
15    let provider = registry.provider().await?;
16    let instance = registry.register(provider.clone(), weth_address);
17
18    let wallet: LocalWallet = LOCAL_WALLET.parse()?;
19    let weth_amount = U256::from(10u64.pow(15));
20    let tx = instance
21        .approve(wallet.address(), weth_amount)
22        .value(0_u64)
23        .tx;
24
25    let signer = SignerMiddleware::new(provider, wallet);
26    let signed_tx = signer.sign_transaction(&tx, weth_address).await?;
27
28    println!("{:?}", tx);
29    println!("{:?}", signed_tx);
30
31    Ok(())
32}