Erc 20

- 1 min

transfer ERC20

function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
    
    bytes memory data = abi.encodeWithSelector(token.transfer.selector, to, value)
    address target = address(token)
    require(address(this).balance >= value, "Address: insufficient balance for call");
    (bool success, bytes memory returndata) = target.call{value: value}(data);

    if (success) {
        if (returndata.length == 0) {
            require(isContract(target), "Address: call to non-contract");
        }
    } else {
        if (returndata.length > 0) {
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }

    if (returndata.length > 0) {
        // Return data is optional
        require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
    }
}