ソースを参照

Merge pull request #1647 from nventuro/safeerc20-bugfix

Fix SafeERC20.safeApprove bug
Nicolás Venturo 6 年 前
コミット
3111291b4a

+ 4 - 4
contracts/mocks/SafeERC20Helper.sol

@@ -32,7 +32,7 @@ contract ERC20FailingMock {
 }
 
 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,
     // we write to a dummy state variable.
@@ -54,11 +54,11 @@ contract ERC20SucceedingMock {
     }
 
     function setAllowance(uint256 allowance_) public {
-        _allowance = allowance_;
+        _allowances[msg.sender] = allowance_;
     }
 
-    function allowance(address, address) public view returns (uint256) {
-        return _allowance;
+    function allowance(address owner, address) public view returns (uint256) {
+        return _allowances[owner];
     }
 }
 

+ 1 - 1
contracts/token/ERC20/SafeERC20.sol

@@ -24,7 +24,7 @@ library SafeERC20 {
         // 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((value == 0) || (token.allowance(address(this), spender) == 0));
         require(token.approve(spender, value));
     }