1use alloy::{
2 primitives::{Address, Bytes, U256},
3 sol,
4 sol_types::SolCall,
5};
6
7sol! {
8 interface IERC20 {
9 function balanceOf(address owner) external view returns (uint256);
10 function transfer(address to, uint256 amount) external returns (bool);
11 }
12}
13
14pub fn encode_balance_of(owner: Address) -> Bytes {
15 let call = IERC20::balanceOfCall { owner };
16 Bytes::from(call.abi_encode())
17}
18
19pub fn decode_balance_of(data: Bytes) -> crate::Result<U256> {
20 Ok(IERC20::balanceOfCall::abi_decode_returns(&data)?)
21}
22
23pub fn encode_transfer(to: Address, amount: U256) -> Bytes {
24 let transfer_call = IERC20::transferCall { to, amount };
25 Bytes::from(transfer_call.abi_encode())
26}