1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
use alloy::primitives::address;
use alloy::providers::ProviderBuilder;
use alloy_erc20::LazyTokenSigner;
use dotenvy::dotenv;
use std::env;
#[tokio::main(flavor = "current_thread")]
async fn main() {
dotenv().ok();
let eth_rpc = env::var("ETH_RPC").unwrap();
// Note: This example requires a provider with signing capabilities
// You would need to add a wallet to the provider builder:
//
// let provider = ProviderBuilder::new()
// .with_recommended_fillers()
// .wallet(your_wallet)
// .connect_http(eth_rpc.parse().unwrap());
// For demonstration purposes, we'll just show the API usage
let provider = ProviderBuilder::new().connect_http(eth_rpc.parse().unwrap());
let dai = LazyTokenSigner::new(
address!("6B175474E89094C44Da98b954EedeAC495271d0F"), // DAI on mainnet
provider,
);
// Get token information (read operations work the same as LazyToken)
println!("Token: {}", dai.symbol().await.unwrap());
println!("Decimals: {}", dai.decimals().await.unwrap());
// Example: Transfer tokens
// Uncomment when using a provider with signing capabilities
/*
let recipient = address!("0x0000000000000000000000000000000000000000");
let amount = U256::from(1000000000000000000u64); // 1 token with 18 decimals
println!("Transferring {} tokens to {}", amount, recipient);
let pending_tx = dai.transfer(recipient, amount).await.unwrap();
println!("Transaction sent, waiting for confirmation...");
let receipt = pending_tx.watch().await.unwrap();
println!("Transfer confirmed in block {}", receipt.block_number.unwrap());
*/
// Example: Approve spender
/*
let spender = address!("0x0000000000000000000000000000000000000000");
let amount = U256::from(1000000000000000000u64);
println!("Approving {} to spend {} tokens", spender, amount);
let pending_tx = dai.approve(spender, amount).await.unwrap();
let receipt = pending_tx.watch().await.unwrap();
println!("Approval confirmed in block {}", receipt.block_number.unwrap());
*/
// Example: Transfer from (requires prior approval)
/*
let from = address!("0x0000000000000000000000000000000000000000");
let to = address!("0x0000000000000000000000000000000000000000");
let amount = U256::from(1000000000000000000u64);
println!("Transferring {} tokens from {} to {}", amount, from, to);
let pending_tx = dai.transfer_from(from, to, amount).await.unwrap();
let receipt = pending_tx.watch().await.unwrap();
println!("TransferFrom confirmed in block {}", receipt.block_number.unwrap());
*/
println!("\nNote: Uncomment the write operation examples above when using a");
println!("provider with signing capabilities (e.g., with a wallet attached).");
}