Codificação ABI
WEB3DEV Team   
# Codificação ABI
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IERC20 {
    function transfer(address, uint) external;
}
contract AbiEncode {
    function encodeWithSignature(address to, uint amount)
        external
        pure
        returns (bytes memory)
    {
        // Erro de digitação não é verificado - "transfer(address, uint)"
        return abi.encodeWithSignature("transfer(address,uint256)", to, amount);
    }
    function encodeWithSelector(address to, uint amount)
        external
        pure
        returns (bytes memory)
    {
        // Tipo não está marcado - (IERC20.transfer.selector, true, amount)
        return abi.encodeWithSelector(IERC20.transfer.selector, to, amount);
    }
    function encodeCall(address to, uint amount) external pure returns (bytes memory) {
        // Erros de digitação e tipo não serão compilados
        return abi.encodeCall(IERC20.transfer, (to, amount));
    }
}