Files
openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol
2018-12-21 14:04:41 +05:30

68 lines
1.4 KiB
Solidity

pragma solidity ^0.4.24;
import "./ERC20.sol";
import "./IERC20.sol";
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure.
* To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
function safeTransfer(
IERC20 token,
address to,
uint256 value
)
internal
{
require(token.transfer(to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
)
internal
{
require(token.transferFrom(from, to, value));
}
function safeApprove(
IERC20 token,
address spender,
uint256 value
)
internal
{
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require((value == 0) || (token.allowance(msg.sender, spender) == 0));
require(token.approve(spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 addedValue
)
internal
{
require(token.increaseAllowance(spender, addedValue));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 subtractedValue
)
internal
{
require(token.decreaseAllowance(spender, subtractedValue));
}
}