forked from sherlock-audit/2023-04-splits
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TokenUtils.sol
33 lines (25 loc) · 1.07 KB
/
TokenUtils.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.17;
import {SafeTransferLib} from "solady/utils/SafeTransferLib.sol";
/// Library to handle basic token functions for ERC20s & ETH (represented by 0x0)
library TokenUtils {
using SafeTransferLib for address;
address internal constant ETH_ADDRESS = address(0);
function _isETH(address token) internal pure returns (bool) {
return (token == ETH_ADDRESS);
}
function _decimals(address token) internal view returns (uint8) {
return _isETH(token) ? 18 : ERC20(token).decimals();
}
function _balanceOf(address token, address addr) internal view returns (uint256) {
return _isETH(token) ? addr.balance : ERC20(token).balanceOf(addr);
}
function _safeTransfer(address token, address addr, uint256 amount) internal {
if (_isETH(token)) addr.safeTransferETH(amount);
else token.safeTransfer(addr, amount);
}
}
interface ERC20 {
function decimals() external view returns (uint8);
function balanceOf(address addr) external view returns (uint256);
}