|
@@ -63,5 +63,30 @@ contract StandardToken is ERC20, BasicToken {
|
|
|
function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
|
|
|
return allowed[_owner][_spender];
|
|
|
}
|
|
|
+
|
|
|
+ /*
|
|
|
+ * approve should be called when allowed[_spender] == 0. To increment
|
|
|
+ * allowed value is better to use this function to avoid 2 calls (and wait until
|
|
|
+ * the first transaction is mined)
|
|
|
+ * From MonolithDAO Token.sol
|
|
|
+ */
|
|
|
+ function increaseApproval (address _spender, uint _addedValue)
|
|
|
+ returns (bool success) {
|
|
|
+ allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
|
|
|
+ Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ function decreaseApproval (address _spender, uint _subtractedValue)
|
|
|
+ returns (bool success) {
|
|
|
+ uint oldValue = allowed[msg.sender][_spender];
|
|
|
+ if (_subtractedValue > oldValue) {
|
|
|
+ allowed[msg.sender][_spender] = 0;
|
|
|
+ } else {
|
|
|
+ allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
|
|
|
+ }
|
|
|
+ Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
|
|
|
}
|