Merge pull request #1647 from nventuro/safeerc20-bugfix
Fix SafeERC20.safeApprove bug
This commit is contained in:
@ -32,7 +32,7 @@ contract ERC20FailingMock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
contract ERC20SucceedingMock {
|
contract ERC20SucceedingMock {
|
||||||
uint256 private _allowance;
|
mapping (address => uint256) private _allowances;
|
||||||
|
|
||||||
// IERC20's functions are not pure, but these mock implementations are: to prevent Solidity from issuing warnings,
|
// IERC20's functions are not pure, but these mock implementations are: to prevent Solidity from issuing warnings,
|
||||||
// we write to a dummy state variable.
|
// we write to a dummy state variable.
|
||||||
@ -54,11 +54,11 @@ contract ERC20SucceedingMock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setAllowance(uint256 allowance_) public {
|
function setAllowance(uint256 allowance_) public {
|
||||||
_allowance = allowance_;
|
_allowances[msg.sender] = allowance_;
|
||||||
}
|
}
|
||||||
|
|
||||||
function allowance(address, address) public view returns (uint256) {
|
function allowance(address owner, address) public view returns (uint256) {
|
||||||
return _allowance;
|
return _allowances[owner];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -24,7 +24,7 @@ library SafeERC20 {
|
|||||||
// safeApprove should only be called when setting an initial allowance,
|
// safeApprove should only be called when setting an initial allowance,
|
||||||
// or when resetting it to zero. To increase and decrease it, use
|
// or when resetting it to zero. To increase and decrease it, use
|
||||||
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
|
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
|
||||||
require((value == 0) || (token.allowance(msg.sender, spender) == 0));
|
require((value == 0) || (token.allowance(address(this), spender) == 0));
|
||||||
require(token.approve(spender, value));
|
require(token.approve(spender, value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user