Skip to content

Commit f21378c

Browse files
committed
added increase and decrease approval.
1 parent 4cc6325 commit f21378c

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

contracts/SRTToken.sol

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ contract StandardToken is ERC20 {
8181
// allowance to zero by calling `approve(_spender, 0)` if it is not
8282
// already 0 to mitigate the race condition described here:
8383
// https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
84-
require((_value == 0) || (allowed[msg.sender][_spender] == 0));
84+
require(allowed[msg.sender][_spender] == 0);
8585
allowed[msg.sender][_spender] = _value;
8686
Approval(msg.sender, _spender, _value);
8787
return true;
@@ -96,6 +96,29 @@ contract StandardToken is ERC20 {
9696
function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
9797
return allowed[_owner][_spender];
9898
}
99+
100+
/**
101+
* approve should be called when allowed[_spender] == 0. To increment
102+
* allowed value is better to use this function to avoid 2 calls (and wait until
103+
* the first transaction is mined)
104+
* From MonolithDAO Token.sol
105+
*/
106+
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
107+
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
108+
Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
109+
return true;
110+
}
111+
112+
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
113+
uint oldValue = allowed[msg.sender][_spender];
114+
if (_subtractedValue > oldValue) {
115+
allowed[msg.sender][_spender] = 0;
116+
} else {
117+
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
118+
}
119+
Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
120+
return true;
121+
}
99122
}
100123

101124
contract Ownable {

0 commit comments

Comments
 (0)