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