本文仅记录一种兼容 ETH 与 ERC20 资产的库合约;
1. 库合约源码(0.6.12)
本合约来自网络;
pragma solidity ^0.6.12;
import "../utils/math/SafeMath.sol";
import "../token/ERC20/IERC20.sol";
import "../token/ERC20/utils/SafeERC20.sol";
library UniversalERC20 {
using SafeMath for uint256;
using SafeERC20 for IERC20;
IERC20 private constant ZERO_ADDRESS =
IERC20(0x0000000000000000000000000000000000000000);
IERC20 private constant ETH_ADDRESS =
IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
function universalTransfer(
IERC20 token,
address to,
uint256 amount
) internal returns (bool) {
if (amount == 0) {
return false;
}
if (isETH(token)) {
address(uint160(to)).transfer(amount);
} else {
token.safeTransfer(to, amount);
}
return true;
}
function universalTrans