interface IERC20 {
    //Events
    event Approval(
        address indexed owner,
        address indexed spender,
        uint value
    );

    event Transfer(
        address indexed from,
        address indexed to,
        uint value
    );

    //External functions
    function approve(
        address spender,
        uint value
    )
        external 
        returns (bool);
    
    function transfer(
        address to,
        uint value
    )
        external
        returns (bool);

    function transferFrom(
        address from,
        address to,
        uint value
    )
        external
        returns (bool);
    
    // External functions that are view        
    function allowance(
        address owner,
        address spender
    )
        external 
        view 
        returns (uint);

    function balanceOf(address owner) external view returns (uint);
    function decimals() external view returns (uint8);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function totalSupply() external view returns (uint);
}
function approve(
        address spender,
        uint value
    )
        external 
        returns (bool);
//External functions