Skip to main content

gm_lib/utils/
erc20.rs

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}