常规转账是这样:
bool success = token.transfer(addr, amount);
但是有一些 token 的 transfer 没有返回值(例如 USDT ),上面语句就会执行不了。
而使用下面的safeTransfer,就可以避免上述问题。
function safeTransfer(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
}