Codificação ABI

# 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));
    }
}

# Teste no Remix

Last Updated: 22/01/2024 22:26:13