const ERC20_SELECTORS = {
TRANSFER: [0xa9, 0x05, 0x9c, 0xbb], // transfer(address,uint256)
APPROVE: [0x09, 0x5e, 0xa7, 0xb3], // approve(address,uint256)
TRANSFER_FROM: [0x23, 0xb8, 0x72, 0xdd], // transferFrom(address,address,uint256)
BALANCE_OF: [0x70, 0xa0, 0x82, 0x31], // balanceOf(address)
ALLOWANCE: [0xdd, 0x62, 0xed, 0x3e], // allowance(address,address)
} as const;
function matchERC20Function(calldata: CallDataType): string {
const selector = CallData.getSelector(calldata);
if (selectorEquals(selector, ERC20_SELECTORS.TRANSFER)) {
return "transfer";
} else if (selectorEquals(selector, ERC20_SELECTORS.APPROVE)) {
return "approve";
}
// ...
}