diff --git a/contracts/lifecycle/Pausable.sol b/contracts/lifecycle/Pausable.sol index 9ac044a7f..ad7d66089 100644 --- a/contracts/lifecycle/Pausable.sol +++ b/contracts/lifecycle/Pausable.sol @@ -13,15 +13,17 @@ contract Pausable is Ownable { bool public stopped; modifier stopInEmergency { - if (!stopped) { - _; + if (stopped) { + throw; } + _; } modifier onlyInEmergency { - if (stopped) { - _; + if (!stopped) { + throw; } + _; } // called by the owner on emergency, triggers stopped state diff --git a/contracts/ownership/Shareable.sol b/contracts/ownership/Shareable.sol index 62fbc2fee..0cbf7d37d 100644 --- a/contracts/ownership/Shareable.sol +++ b/contracts/ownership/Shareable.sol @@ -105,12 +105,13 @@ contract Shareable { return !(pending.ownersDone & ownerIndexBit == 0); } + // returns true when operation can be executed function confirmAndCheck(bytes32 _operation) internal returns (bool) { // determine what index the present sender is: uint index = ownerIndex[msg.sender]; // make sure they're an owner if (index == 0) { - return; + throw; } var pending = pendings[_operation]; @@ -140,6 +141,7 @@ contract Shareable { pending.ownersDone |= ownerIndexBit; } } + return false; } function clearPending() internal { diff --git a/contracts/token/ERC20.sol b/contracts/token/ERC20.sol index e89c66caa..6efe7b5d4 100644 --- a/contracts/token/ERC20.sol +++ b/contracts/token/ERC20.sol @@ -1,18 +1,17 @@ pragma solidity ^0.4.8; +import './ERC20Basic.sol'; + + /* * ERC20 interface * see https://github.com/ethereum/EIPs/issues/20 */ -contract ERC20 { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); +contract ERC20 is ERC20Basic { function allowance(address owner, address spender) constant returns (uint); - function transfer(address to, uint value) returns (bool ok); - function transferFrom(address from, address to, uint value) returns (bool ok); - function approve(address spender, uint value) returns (bool ok); - event Transfer(address indexed from, address indexed to, uint value); + function transferFrom(address from, address to, uint value); + function approve(address spender, uint value); event Approval(address indexed owner, address indexed spender, uint value); } diff --git a/contracts/token/StandardToken.sol b/contracts/token/StandardToken.sol index dbf1bb393..9be7d0eeb 100644 --- a/contracts/token/StandardToken.sol +++ b/contracts/token/StandardToken.sol @@ -1,8 +1,8 @@ pragma solidity ^0.4.8; +import './BasicToken.sol'; import './ERC20.sol'; -import '../SafeMath.sol'; /** @@ -12,19 +12,11 @@ import '../SafeMath.sol'; * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ -contract StandardToken is ERC20, SafeMath { +contract StandardToken is BasicToken, ERC20 { - mapping(address => uint) balances; mapping (address => mapping (address => uint)) allowed; - function transfer(address _to, uint _value) returns (bool success) { - balances[msg.sender] = safeSub(balances[msg.sender], _value); - balances[_to] = safeAdd(balances[_to], _value); - Transfer(msg.sender, _to, _value); - return true; - } - - function transferFrom(address _from, address _to, uint _value) returns (bool success) { + function transferFrom(address _from, address _to, uint _value) { var _allowance = allowed[_from][msg.sender]; // Check is not needed because safeSub(_allowance, _value) will already throw if this condition is not met @@ -34,17 +26,11 @@ contract StandardToken is ERC20, SafeMath { balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); - return true; - } - - function balanceOf(address _owner) constant returns (uint balance) { - return balances[_owner]; } - function approve(address _spender, uint _value) returns (bool success) { + function approve(address _spender, uint _value) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); - return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { diff --git a/test/Pausable.js b/test/Pausable.js index 1625871b0..3ac39e55a 100644 --- a/test/Pausable.js +++ b/test/Pausable.js @@ -1,6 +1,7 @@ 'use strict'; -var PausableMock = artifacts.require('helpers/PausableMock.sol'); +const assertJump = require('./helpers/assertJump'); +const PausableMock = artifacts.require('helpers/PausableMock.sol'); contract('Pausable', function(accounts) { @@ -20,7 +21,11 @@ contract('Pausable', function(accounts) { let count0 = await Pausable.count(); assert.equal(count0, 0); - await Pausable.normalProcess(); + try { + await Pausable.normalProcess(); + } catch(error) { + assertJump(error); + } let count1 = await Pausable.count(); assert.equal(count1, 0); }); @@ -28,9 +33,13 @@ contract('Pausable', function(accounts) { it('can not take drastic measure in non-emergency', async function() { let Pausable = await PausableMock.new(); - await Pausable.drasticMeasure(); - let drasticMeasureTaken = await Pausable.drasticMeasureTaken(); + try { + await Pausable.drasticMeasure(); + } catch(error) { + assertJump(error); + } + const drasticMeasureTaken = await Pausable.drasticMeasureTaken(); assert.isFalse(drasticMeasureTaken); });