feat: expand non-evm relay and route planning support
This commit is contained in:
29
contracts/vendor/sushiswap-v2/libraries/TransferHelper.sol
vendored
Normal file
29
contracts/vendor/sushiswap-v2/libraries/TransferHelper.sol
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
|
||||
pragma solidity >=0.6.0;
|
||||
|
||||
// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
|
||||
library TransferHelper {
|
||||
function safeApprove(address token, address to, uint value) internal {
|
||||
// bytes4(keccak256(bytes('approve(address,uint256)')));
|
||||
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
|
||||
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
|
||||
}
|
||||
|
||||
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');
|
||||
}
|
||||
|
||||
function safeTransferFrom(address token, address from, address to, uint value) internal {
|
||||
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
|
||||
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
|
||||
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
|
||||
}
|
||||
|
||||
function safeTransferETH(address to, uint value) internal {
|
||||
(bool success,) = to.call{value:value}(new bytes(0));
|
||||
require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user