Commit d060d299 by AugustoL

Merge remote-tracking branch 'upstream/master' into add-smart-token

parents 7ddd66fb 0cdc5e13
*.sol linguist-language=Solidity
## The Problem
- [ ] 🐛 This is a bug report. - [ ] 🐛 This is a bug report.
- [ ] 📈 This is a feature request. - [ ] 📈 This is a feature request.
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
- [ ] 📘 I've reviewed the [OpenZeppelin Contributor Guidelines](/docs/CONTRIBUTING.md) - [ ] 📘 I've reviewed the [OpenZeppelin Contributor Guidelines](/docs/CONTRIBUTING.md)
- [ ] ✅ I've added tests where applicable to test my new functionality. - [ ] ✅ I've added tests where applicable to test my new functionality.
- [ ] 📖 I've made sure that my contracts are well-documented. - [ ] 📖 I've made sure that my contracts are well-documented.
- [ ] 🎨 I've run the JavaScript linter (`npm run lint:fix`) and fixed all issues. - [ ] 🎨 I've run the JS/Solidity linters (`npm run lint:all:fix`) and fixed any issues.
<!-- **Does this close any open issues?** If so, list them here. --> <!-- **Does this close any open issues?** If so, list them here. -->
......
{ {
"custom-rules-filename": null, "extends": "solium:all",
"plugins": ["security"],
"rules": { "rules": {
"imports-on-top": true, "quotes": ["error", "double"],
"variable-declarations": true, "indentation": ["error", 2],
"array-declarations": true, "arg-overflow": ["warning", 3],
"operator-whitespace": true, "security/enforce-explicit-visibility": ["error"],
"lbrace": true, "security/no-block-members": ["warning"],
"mixedcase": false, "security/no-inline-assembly": ["warning"]
"camelcase": true,
"uppercase": true,
"no-with": true,
"no-empty-blocks": true,
"no-unused-vars": true,
"double-quotes": true,
"blank-lines": true,
"indentation": true,
"whitespace": true,
"deprecated-suicide": true,
"pragma-on-top": true
} }
} }
...@@ -18,6 +18,7 @@ before_script: ...@@ -18,6 +18,7 @@ before_script:
- truffle version - truffle version
script: script:
- npm run lint - npm run lint
- npm run lint:sol
- npm run test - npm run test
notifications: notifications:
slack: slack:
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import './payment/PullPayment.sol'; import "./payment/PullPayment.sol";
import './lifecycle/Destructible.sol'; import "./lifecycle/Destructible.sol";
/** /**
...@@ -35,12 +35,6 @@ contract Bounty is PullPayment, Destructible { ...@@ -35,12 +35,6 @@ contract Bounty is PullPayment, Destructible {
} }
/** /**
* @dev Internal function to deploy the target contract.
* @return A target contract address
*/
function deployContract() internal returns(address);
/**
* @dev Sends the contract funds to the researcher that proved the contract is broken. * @dev Sends the contract funds to the researcher that proved the contract is broken.
* @param target contract * @param target contract
*/ */
...@@ -53,6 +47,12 @@ contract Bounty is PullPayment, Destructible { ...@@ -53,6 +47,12 @@ contract Bounty is PullPayment, Destructible {
claimed = true; claimed = true;
} }
/**
* @dev Internal function to deploy the target contract.
* @return A target contract address
*/
function deployContract() internal returns(address);
} }
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
/** /**
* @title DayLimit * @title DayLimit
* @dev Base contract that enables methods to be protected by placing a linear limit (specifiable) * @dev Base contract that enables methods to be protected by placing a linear limit (specifiable)
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
/* /*
* @title MerkleProof * @title MerkleProof
* @dev Merkle proof verification * @dev Merkle proof verification
...@@ -15,7 +16,9 @@ library MerkleProof { ...@@ -15,7 +16,9 @@ library MerkleProof {
*/ */
function verifyProof(bytes _proof, bytes32 _root, bytes32 _leaf) public pure returns (bool) { function verifyProof(bytes _proof, bytes32 _root, bytes32 _leaf) public pure returns (bool) {
// Check if proof length is a multiple of 32 // Check if proof length is a multiple of 32
if (_proof.length % 32 != 0) return false; if (_proof.length % 32 != 0) {
return false;
}
bytes32 proofElement; bytes32 proofElement;
bytes32 computedHash = _leaf; bytes32 computedHash = _leaf;
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
/** /**
* @title Helps contracts guard agains reentrancy attacks. * @title Helps contracts guard agains reentrancy attacks.
* @author Remco Bloemen <remco@2π.com> * @author Remco Bloemen <remco@2π.com>
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../math/SafeMath.sol'; import "../math/SafeMath.sol";
import './Crowdsale.sol'; import "./Crowdsale.sol";
/** /**
* @title CappedCrowdsale * @title CappedCrowdsale
...@@ -17,13 +18,6 @@ contract CappedCrowdsale is Crowdsale { ...@@ -17,13 +18,6 @@ contract CappedCrowdsale is Crowdsale {
cap = _cap; cap = _cap;
} }
// overriding Crowdsale#validPurchase to add extra cap logic
// @return true if investors can buy at the moment
function validPurchase() internal view returns (bool) {
bool withinCap = weiRaised.add(msg.value) <= cap;
return super.validPurchase() && withinCap;
}
// overriding Crowdsale#hasEnded to add cap logic // overriding Crowdsale#hasEnded to add cap logic
// @return true if crowdsale event has ended // @return true if crowdsale event has ended
function hasEnded() public view returns (bool) { function hasEnded() public view returns (bool) {
...@@ -31,4 +25,11 @@ contract CappedCrowdsale is Crowdsale { ...@@ -31,4 +25,11 @@ contract CappedCrowdsale is Crowdsale {
return super.hasEnded() || capReached; return super.hasEnded() || capReached;
} }
// overriding Crowdsale#validPurchase to add extra cap logic
// @return true if investors can buy at the moment
function validPurchase() internal view returns (bool) {
bool withinCap = weiRaised.add(msg.value) <= cap;
return super.validPurchase() && withinCap;
}
} }
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../token/MintableToken.sol'; import "../token/MintableToken.sol";
import '../math/SafeMath.sol'; import "../math/SafeMath.sol";
/** /**
* @title Crowdsale * @title Crowdsale
...@@ -53,13 +54,6 @@ contract Crowdsale { ...@@ -53,13 +54,6 @@ contract Crowdsale {
wallet = _wallet; wallet = _wallet;
} }
// creates the token to be sold.
// override this method to have crowdsale of a specific mintable token.
function createTokenContract() internal returns (MintableToken) {
return new MintableToken();
}
// fallback function can be used to buy tokens // fallback function can be used to buy tokens
function () external payable { function () external payable {
buyTokens(msg.sender); buyTokens(msg.sender);
...@@ -73,7 +67,7 @@ contract Crowdsale { ...@@ -73,7 +67,7 @@ contract Crowdsale {
uint256 weiAmount = msg.value; uint256 weiAmount = msg.value;
// calculate token amount to be created // calculate token amount to be created
uint256 tokens = weiAmount.mul(rate); uint256 tokens = getTokenAmount(weiAmount);
// update state // update state
weiRaised = weiRaised.add(weiAmount); weiRaised = weiRaised.add(weiAmount);
...@@ -84,6 +78,22 @@ contract Crowdsale { ...@@ -84,6 +78,22 @@ contract Crowdsale {
forwardFunds(); forwardFunds();
} }
// @return true if crowdsale event has ended
function hasEnded() public view returns (bool) {
return now > endTime;
}
// creates the token to be sold.
// override this method to have crowdsale of a specific mintable token.
function createTokenContract() internal returns (MintableToken) {
return new MintableToken();
}
// Override this method to have a way to add business logic to your crowdsale when buying
function getTokenAmount(uint256 weiAmount) internal view returns(uint256) {
return weiAmount.mul(rate);
}
// send ether to the fund collection wallet // send ether to the fund collection wallet
// override to create custom fund forwarding mechanisms // override to create custom fund forwarding mechanisms
function forwardFunds() internal { function forwardFunds() internal {
...@@ -97,10 +107,4 @@ contract Crowdsale { ...@@ -97,10 +107,4 @@ contract Crowdsale {
return withinPeriod && nonZeroPurchase; return withinPeriod && nonZeroPurchase;
} }
// @return true if crowdsale event has ended
function hasEnded() public view returns (bool) {
return now > endTime;
}
} }
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../math/SafeMath.sol'; import "../math/SafeMath.sol";
import '../ownership/Ownable.sol'; import "../ownership/Ownable.sol";
import './Crowdsale.sol'; import "./Crowdsale.sol";
/** /**
* @title FinalizableCrowdsale * @title FinalizableCrowdsale
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../math/SafeMath.sol'; import "../math/SafeMath.sol";
import '../ownership/Ownable.sol'; import "../ownership/Ownable.sol";
/** /**
* @title RefundVault * @title RefundVault
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../math/SafeMath.sol'; import "../math/SafeMath.sol";
import './FinalizableCrowdsale.sol'; import "./FinalizableCrowdsale.sol";
import './RefundVault.sol'; import "./RefundVault.sol";
/** /**
...@@ -27,13 +27,6 @@ contract RefundableCrowdsale is FinalizableCrowdsale { ...@@ -27,13 +27,6 @@ contract RefundableCrowdsale is FinalizableCrowdsale {
goal = _goal; goal = _goal;
} }
// We're overriding the fund forwarding from Crowdsale.
// In addition to sending the funds, we want to call
// the RefundVault deposit function
function forwardFunds() internal {
vault.deposit.value(msg.value)(msg.sender);
}
// if crowdsale is unsuccessful, investors can claim refunds here // if crowdsale is unsuccessful, investors can claim refunds here
function claimRefund() public { function claimRefund() public {
require(isFinalized); require(isFinalized);
...@@ -42,6 +35,10 @@ contract RefundableCrowdsale is FinalizableCrowdsale { ...@@ -42,6 +35,10 @@ contract RefundableCrowdsale is FinalizableCrowdsale {
vault.refund(msg.sender); vault.refund(msg.sender);
} }
function goalReached() public view returns (bool) {
return weiRaised >= goal;
}
// vault finalization task, called when owner calls finalize() // vault finalization task, called when owner calls finalize()
function finalization() internal { function finalization() internal {
if (goalReached()) { if (goalReached()) {
...@@ -53,8 +50,11 @@ contract RefundableCrowdsale is FinalizableCrowdsale { ...@@ -53,8 +50,11 @@ contract RefundableCrowdsale is FinalizableCrowdsale {
super.finalization(); super.finalization();
} }
function goalReached() public view returns (bool) { // We're overriding the fund forwarding from Crowdsale.
return weiRaised >= goal; // In addition to sending the funds, we want to call
// the RefundVault deposit function
function forwardFunds() internal {
vault.deposit.value(msg.value)(msg.sender);
} }
} }
...@@ -4,6 +4,7 @@ import "../crowdsale/CappedCrowdsale.sol"; ...@@ -4,6 +4,7 @@ import "../crowdsale/CappedCrowdsale.sol";
import "../crowdsale/RefundableCrowdsale.sol"; import "../crowdsale/RefundableCrowdsale.sol";
import "../token/MintableToken.sol"; import "../token/MintableToken.sol";
/** /**
* @title SampleCrowdsaleToken * @title SampleCrowdsaleToken
* @dev Very simple ERC20 Token that can be minted. * @dev Very simple ERC20 Token that can be minted.
...@@ -11,12 +12,13 @@ import "../token/MintableToken.sol"; ...@@ -11,12 +12,13 @@ import "../token/MintableToken.sol";
*/ */
contract SampleCrowdsaleToken is MintableToken { contract SampleCrowdsaleToken is MintableToken {
string public constant name = "Sample Crowdsale Token"; string public constant name = "Sample Crowdsale Token"; // solium-disable-line uppercase
string public constant symbol = "SCT"; string public constant symbol = "SCT"; // solium-disable-line uppercase
uint8 public constant decimals = 18; uint8 public constant decimals = 18; // solium-disable-line uppercase
} }
/** /**
* @title SampleCrowdsale * @title SampleCrowdsale
* @dev This is an example of a fully fledged crowdsale. * @dev This is an example of a fully fledged crowdsale.
......
...@@ -12,9 +12,9 @@ import "../token/StandardToken.sol"; ...@@ -12,9 +12,9 @@ import "../token/StandardToken.sol";
*/ */
contract SimpleToken is StandardToken { contract SimpleToken is StandardToken {
string public constant name = "SimpleToken"; string public constant name = "SimpleToken"; // solium-disable-line uppercase
string public constant symbol = "SIM"; string public constant symbol = "SIM"; // solium-disable-line uppercase
uint8 public constant decimals = 18; uint8 public constant decimals = 18; // solium-disable-line uppercase
uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(decimals)); uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(decimals));
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import "../ownership/Ownable.sol";
import '../ownership/Ownable.sol';
/** /**
* @title Migrations * @title Migrations
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import "../ownership/Ownable.sol"; import "../ownership/Ownable.sol";
import "../token/ERC20Basic.sol"; import "../token/ERC20Basic.sol";
/** /**
* @title TokenDestructible: * @title TokenDestructible:
* @author Remco Bloemen <remco@2π.com> * @author Remco Bloemen <remco@2π.com>
...@@ -24,7 +24,7 @@ contract TokenDestructible is Ownable { ...@@ -24,7 +24,7 @@ contract TokenDestructible is Ownable {
function destroy(address[] tokens) onlyOwner public { function destroy(address[] tokens) onlyOwner public {
// Transfer tokens to owner // Transfer tokens to owner
for(uint256 i = 0; i < tokens.length; i++) { for (uint256 i = 0; i < tokens.length; i++) {
ERC20Basic token = ERC20Basic(tokens[i]); ERC20Basic token = ERC20Basic(tokens[i]);
uint256 balance = token.balanceOf(this); uint256 balance = token.balanceOf(this);
token.transfer(owner, balance); token.transfer(owner, balance);
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
/** /**
* @title Math * @title Math
* @dev Assorted math operations * @dev Assorted math operations
*/ */
library Math { library Math {
function max64(uint64 a, uint64 b) internal pure returns (uint64) { function max64(uint64 a, uint64 b) internal pure returns (uint64) {
return a >= b ? a : b; return a >= b ? a : b;
......
...@@ -6,6 +6,10 @@ pragma solidity ^0.4.18; ...@@ -6,6 +6,10 @@ pragma solidity ^0.4.18;
* @dev Math operations with safety checks that throw on error * @dev Math operations with safety checks that throw on error
*/ */
library SafeMath { library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) { function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) { if (a == 0) {
return 0; return 0;
...@@ -15,6 +19,9 @@ library SafeMath { ...@@ -15,6 +19,9 @@ library SafeMath {
return c; return c;
} }
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) { function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0 // assert(b > 0); // Solidity automatically throws when dividing by 0
uint256 c = a / b; uint256 c = a / b;
...@@ -22,11 +29,17 @@ library SafeMath { ...@@ -22,11 +29,17 @@ library SafeMath {
return c; return c;
} }
/**
* @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) { function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a); assert(b <= a);
return a - b; return a - b;
} }
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) { function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b; uint256 c = a + b;
assert(c >= a); assert(c >= a);
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../token/BasicToken.sol'; import "../token/BasicToken.sol";
// mock class using BasicToken // mock class using BasicToken
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../token/BurnableToken.sol'; import "../token/BurnableToken.sol";
contract BurnableTokenMock is BurnableToken { contract BurnableTokenMock is BurnableToken {
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../crowdsale/CappedCrowdsale.sol'; import "../crowdsale/CappedCrowdsale.sol";
contract CappedCrowdsaleImpl is CappedCrowdsale { contract CappedCrowdsaleImpl is CappedCrowdsale {
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import "../../contracts/DayLimit.sol"; import "../../contracts/DayLimit.sol";
contract DayLimitMock is DayLimit { contract DayLimitMock is DayLimit {
uint256 public totalSpending; uint256 public totalSpending;
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../token/StandardToken.sol'; import "../token/StandardToken.sol";
import '../token/DetailedERC20.sol'; import "../token/DetailedERC20.sol";
contract DetailedERC20Mock is StandardToken, DetailedERC20 { contract DetailedERC20Mock is StandardToken, DetailedERC20 {
function DetailedERC20Mock(string _name, string _symbol, uint8 _decimals) DetailedERC20(_name, _symbol, _decimals) public {} function DetailedERC20Mock(string _name, string _symbol, uint8 _decimals) DetailedERC20(_name, _symbol, _decimals) public {}
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../ECRecovery.sol'; import "../ECRecovery.sol";
contract ECRecoveryMock { contract ECRecoveryMock {
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../token/BasicToken.sol'; import "../token/BasicToken.sol";
contract ERC23ContractInterface { contract ERC23ContractInterface {
function tokenFallback(address _from, uint256 _value, bytes _data) external; function tokenFallback(address _from, uint256 _value, bytes _data) external;
} }
contract ERC23TokenMock is BasicToken { contract ERC23TokenMock is BasicToken {
function ERC23TokenMock(address initialAccount, uint256 initialBalance) public { function ERC23TokenMock(address initialAccount, uint256 initialBalance) public {
...@@ -24,7 +25,7 @@ contract ERC23TokenMock is BasicToken { ...@@ -24,7 +25,7 @@ contract ERC23TokenMock is BasicToken {
assembly { assembly {
is_contract := not(iszero(extcodesize(_to))) is_contract := not(iszero(extcodesize(_to)))
} }
if(is_contract) { if (is_contract) {
ERC23ContractInterface receiver = ERC23ContractInterface(_to); ERC23ContractInterface receiver = ERC23ContractInterface(_to);
receiver.tokenFallback(msg.sender, _value, _data); receiver.tokenFallback(msg.sender, _value, _data);
} }
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../crowdsale/FinalizableCrowdsale.sol'; import "../crowdsale/FinalizableCrowdsale.sol";
contract FinalizableCrowdsaleImpl is FinalizableCrowdsale { contract FinalizableCrowdsaleImpl is FinalizableCrowdsale {
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
// @title Force Ether into a contract. // @title Force Ether into a contract.
// @notice even // @notice even
// if the contract is not payable. // if the contract is not payable.
......
...@@ -2,6 +2,7 @@ pragma solidity ^0.4.18; ...@@ -2,6 +2,7 @@ pragma solidity ^0.4.18;
import "../../contracts/ownership/HasNoEther.sol"; import "../../contracts/ownership/HasNoEther.sol";
contract HasNoEtherTest is HasNoEther { contract HasNoEtherTest is HasNoEther {
// Constructor with explicit payable — should still fail // Constructor with explicit payable — should still fail
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import {Bounty, Target} from "../../contracts/Bounty.sol"; import {Bounty, Target} from "../../contracts/Bounty.sol";
contract InsecureTargetMock is Target { contract InsecureTargetMock is Target {
function checkInvariant() public returns(bool){ function checkInvariant() public returns(bool) {
return false; return false;
} }
} }
contract InsecureTargetBounty is Bounty { contract InsecureTargetBounty is Bounty {
function deployContract() internal returns (address) { function deployContract() internal returns (address) {
return new InsecureTargetMock(); return new InsecureTargetMock();
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../LimitBalance.sol'; import "../LimitBalance.sol";
// mock class using LimitBalance // mock class using LimitBalance
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../lifecycle/Pausable.sol'; import "../lifecycle/Pausable.sol";
// mock class using Pausable // mock class using Pausable
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../token/PausableToken.sol'; import "../token/PausableToken.sol";
// mock class using PausableToken // mock class using PausableToken
contract PausableTokenMock is PausableToken { contract PausableTokenMock is PausableToken {
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../payment/PullPayment.sol'; import "../payment/PullPayment.sol";
// mock class using PullPayment // mock class using PullPayment
......
pragma solidity ^0.4.8; pragma solidity ^0.4.8;
import '../ownership/rbac/RBAC.sol'; import "../ownership/rbac/RBAC.sol";
contract RBACMock is RBAC { contract RBACMock is RBAC {
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
contract ReentrancyAttack { contract ReentrancyAttack {
function callSender(bytes4 data) public { function callSender(bytes4 data) public {
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../ReentrancyGuard.sol'; import "../ReentrancyGuard.sol";
import './ReentrancyAttack.sol'; import "./ReentrancyAttack.sol";
contract ReentrancyMock is ReentrancyGuard { contract ReentrancyMock is ReentrancyGuard {
...@@ -11,12 +12,12 @@ contract ReentrancyMock is ReentrancyGuard { ...@@ -11,12 +12,12 @@ contract ReentrancyMock is ReentrancyGuard {
counter = 0; counter = 0;
} }
function count() private { function callback() external nonReentrant {
counter += 1; count();
} }
function countLocalRecursive(uint256 n) public nonReentrant { function countLocalRecursive(uint256 n) public nonReentrant {
if(n > 0) { if (n > 0) {
count(); count();
countLocalRecursive(n - 1); countLocalRecursive(n - 1);
} }
...@@ -24,7 +25,7 @@ contract ReentrancyMock is ReentrancyGuard { ...@@ -24,7 +25,7 @@ contract ReentrancyMock is ReentrancyGuard {
function countThisRecursive(uint256 n) public nonReentrant { function countThisRecursive(uint256 n) public nonReentrant {
bytes4 func = bytes4(keccak256("countThisRecursive(uint256)")); bytes4 func = bytes4(keccak256("countThisRecursive(uint256)"));
if(n > 0) { if (n > 0) {
count(); count();
bool result = this.call(func, n - 1); bool result = this.call(func, n - 1);
require(result == true); require(result == true);
...@@ -37,8 +38,8 @@ contract ReentrancyMock is ReentrancyGuard { ...@@ -37,8 +38,8 @@ contract ReentrancyMock is ReentrancyGuard {
attacker.callSender(func); attacker.callSender(func);
} }
function callback() external nonReentrant { function count() private {
count(); counter += 1;
} }
} }
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../crowdsale/RefundableCrowdsale.sol'; import "../crowdsale/RefundableCrowdsale.sol";
contract RefundableCrowdsaleImpl is RefundableCrowdsale { contract RefundableCrowdsaleImpl is RefundableCrowdsale {
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../token/ERC20.sol'; import "../token/ERC20.sol";
import '../token/SafeERC20.sol'; import "../token/SafeERC20.sol";
contract ERC20FailingMock is ERC20 { contract ERC20FailingMock is ERC20 {
function transfer(address, uint256) public returns (bool) { function transfer(address, uint256) public returns (bool) {
...@@ -25,6 +26,7 @@ contract ERC20FailingMock is ERC20 { ...@@ -25,6 +26,7 @@ contract ERC20FailingMock is ERC20 {
} }
} }
contract ERC20SucceedingMock is ERC20 { contract ERC20SucceedingMock is ERC20 {
function transfer(address, uint256) public returns (bool) { function transfer(address, uint256) public returns (bool) {
return true; return true;
...@@ -47,6 +49,7 @@ contract ERC20SucceedingMock is ERC20 { ...@@ -47,6 +49,7 @@ contract ERC20SucceedingMock is ERC20 {
} }
} }
contract SafeERC20Helper { contract SafeERC20Helper {
using SafeERC20 for ERC20; using SafeERC20 for ERC20;
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../math/SafeMath.sol'; import "../math/SafeMath.sol";
contract SafeMathMock { contract SafeMathMock {
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import {Bounty, Target} from "../../contracts/Bounty.sol"; import {Bounty, Target} from "../../contracts/Bounty.sol";
...@@ -10,6 +9,7 @@ contract SecureTargetMock is Target { ...@@ -10,6 +9,7 @@ contract SecureTargetMock is Target {
} }
} }
contract SecureTargetBounty is Bounty { contract SecureTargetBounty is Bounty {
function deployContract() internal returns (address) { function deployContract() internal returns (address) {
return new SecureTargetMock(); return new SecureTargetMock();
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../token/StandardToken.sol'; import "../token/StandardToken.sol";
// mock class using StandardToken // mock class using StandardToken
......
...@@ -4,6 +4,7 @@ import "./Ownable.sol"; ...@@ -4,6 +4,7 @@ import "./Ownable.sol";
import "../token/ERC20Basic.sol"; import "../token/ERC20Basic.sol";
import "../token/SafeERC20.sol"; import "../token/SafeERC20.sol";
/** /**
* @title Contracts that should be able to recover tokens * @title Contracts that should be able to recover tokens
* @author SylTi * @author SylTi
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import './Ownable.sol'; import "./Ownable.sol";
/** /**
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import './Ownable.sol'; import "./Ownable.sol";
/** /**
* @title Contactable token * @title Contactable token
* @dev Basic version of a contactable contract, allowing the owner to provide a string with their * @dev Basic version of a contactable contract, allowing the owner to provide a string with their
* contact information. * contact information.
*/ */
contract Contactable is Ownable{ contract Contactable is Ownable {
string public contactInformation; string public contactInformation;
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import "./Claimable.sol";
import './Claimable.sol';
/** /**
...@@ -26,7 +25,6 @@ contract DelayedClaimable is Claimable { ...@@ -26,7 +25,6 @@ contract DelayedClaimable is Claimable {
start = _start; start = _start;
} }
/** /**
* @dev Allows the pendingOwner address to finalize the transfer, as long as it is called within * @dev Allows the pendingOwner address to finalize the transfer, as long as it is called within
* the specified start and end time. * the specified start and end time.
......
...@@ -2,6 +2,7 @@ pragma solidity ^0.4.18; ...@@ -2,6 +2,7 @@ pragma solidity ^0.4.18;
import "./Ownable.sol"; import "./Ownable.sol";
/** /**
* @title Contracts that should not own Contracts * @title Contracts that should not own Contracts
* @author Remco Bloemen <remco@2π.com> * @author Remco Bloemen <remco@2π.com>
......
...@@ -2,6 +2,7 @@ pragma solidity ^0.4.18; ...@@ -2,6 +2,7 @@ pragma solidity ^0.4.18;
import "./Ownable.sol"; import "./Ownable.sol";
/** /**
* @title Contracts that should not own Ether * @title Contracts that should not own Ether
* @author Remco Bloemen <remco@2π.com> * @author Remco Bloemen <remco@2π.com>
......
...@@ -2,6 +2,7 @@ pragma solidity ^0.4.18; ...@@ -2,6 +2,7 @@ pragma solidity ^0.4.18;
import "./CanReclaimToken.sol"; import "./CanReclaimToken.sol";
/** /**
* @title Contracts that should not own Tokens * @title Contracts that should not own Tokens
* @author Remco Bloemen <remco@2π.com> * @author Remco Bloemen <remco@2π.com>
......
...@@ -4,6 +4,7 @@ import "./HasNoEther.sol"; ...@@ -4,6 +4,7 @@ import "./HasNoEther.sol";
import "./HasNoTokens.sol"; import "./HasNoTokens.sol";
import "./HasNoContracts.sol"; import "./HasNoContracts.sol";
/** /**
* @title Base contract for contracts that should not own things. * @title Base contract for contracts that should not own things.
* @author Remco Bloemen <remco@2π.com> * @author Remco Bloemen <remco@2π.com>
......
...@@ -21,7 +21,6 @@ contract Ownable { ...@@ -21,7 +21,6 @@ contract Ownable {
owner = msg.sender; owner = msg.sender;
} }
/** /**
* @dev Throws if called by any account other than the owner. * @dev Throws if called by any account other than the owner.
*/ */
...@@ -30,7 +29,6 @@ contract Ownable { ...@@ -30,7 +29,6 @@ contract Ownable {
_; _;
} }
/** /**
* @dev Allows the current owner to transfer control of the contract to a newOwner. * @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to. * @param newOwner The address to transfer ownership to.
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import './Roles.sol'; import "./Roles.sol";
/** /**
...@@ -37,30 +37,6 @@ contract RBAC { ...@@ -37,30 +37,6 @@ contract RBAC {
} }
/** /**
* @dev add a role to an address
* @param addr address
* @param roleName the name of the role
*/
function addRole(address addr, string roleName)
internal
{
roles[roleName].add(addr);
RoleAdded(addr, roleName);
}
/**
* @dev remove a role from an address
* @param addr address
* @param roleName the name of the role
*/
function removeRole(address addr, string roleName)
internal
{
roles[roleName].remove(addr);
RoleRemoved(addr, roleName);
}
/**
* @dev reverts if addr does not have role * @dev reverts if addr does not have role
* @param addr address * @param addr address
* @param roleName the name of the role * @param roleName the name of the role
...@@ -111,6 +87,29 @@ contract RBAC { ...@@ -111,6 +87,29 @@ contract RBAC {
removeRole(addr, roleName); removeRole(addr, roleName);
} }
/**
* @dev add a role to an address
* @param addr address
* @param roleName the name of the role
*/
function addRole(address addr, string roleName)
internal
{
roles[roleName].add(addr);
RoleAdded(addr, roleName);
}
/**
* @dev remove a role from an address
* @param addr address
* @param roleName the name of the role
*/
function removeRole(address addr, string roleName)
internal
{
roles[roleName].remove(addr);
RoleRemoved(addr, roleName);
}
/** /**
* @dev modifier to scope access to a single role (uses msg.sender as addr) * @dev modifier to scope access to a single role (uses msg.sender as addr)
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../math/SafeMath.sol'; import "../math/SafeMath.sol";
/** /**
...@@ -16,16 +16,6 @@ contract PullPayment { ...@@ -16,16 +16,6 @@ contract PullPayment {
uint256 public totalPayments; uint256 public totalPayments;
/** /**
* @dev Called by the payer to store the sent amount as credit to be pulled.
* @param dest The destination address of the funds.
* @param amount The amount to transfer.
*/
function asyncSend(address dest, uint256 amount) internal {
payments[dest] = payments[dest].add(amount);
totalPayments = totalPayments.add(amount);
}
/**
* @dev withdraw accumulated balance, called by payee. * @dev withdraw accumulated balance, called by payee.
*/ */
function withdrawPayments() public { function withdrawPayments() public {
...@@ -40,4 +30,14 @@ contract PullPayment { ...@@ -40,4 +30,14 @@ contract PullPayment {
assert(payee.send(payment)); assert(payee.send(payment));
} }
/**
* @dev Called by the payer to store the sent amount as credit to be pulled.
* @param dest The destination address of the funds.
* @param amount The amount to transfer.
*/
function asyncSend(address dest, uint256 amount) internal {
payments[dest] = payments[dest].add(amount);
totalPayments = totalPayments.add(amount);
}
} }
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import '../math/SafeMath.sol'; import "../math/SafeMath.sol";
/** /**
* @title SplitPayment * @title SplitPayment
...@@ -29,19 +30,9 @@ contract SplitPayment { ...@@ -29,19 +30,9 @@ contract SplitPayment {
} }
/** /**
* @dev Add a new payee to the contract. * @dev payable fallback
* @param _payee The address of the payee to add.
* @param _shares The number of shares owned by the payee.
*/ */
function addPayee(address _payee, uint256 _shares) internal { function () public payable {}
require(_payee != address(0));
require(_shares > 0);
require(shares[_payee] == 0);
payees.push(_payee);
shares[_payee] = _shares;
totalShares = totalShares.add(_shares);
}
/** /**
* @dev Claim your share of the balance. * @dev Claim your share of the balance.
...@@ -64,7 +55,17 @@ contract SplitPayment { ...@@ -64,7 +55,17 @@ contract SplitPayment {
} }
/** /**
* @dev payable fallback * @dev Add a new payee to the contract.
* @param _payee The address of the payee to add.
* @param _shares The number of shares owned by the payee.
*/ */
function () public payable {} function addPayee(address _payee, uint256 _shares) internal {
require(_payee != address(0));
require(_shares > 0);
require(shares[_payee] == 0);
payees.push(_payee);
shares[_payee] = _shares;
totalShares = totalShares.add(_shares);
}
} }
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import './ERC20Basic.sol'; import "./ERC20Basic.sol";
import '../math/SafeMath.sol'; import "../math/SafeMath.sol";
/** /**
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import './BasicToken.sol'; import "./BasicToken.sol";
/** /**
* @title Burnable Token * @title Burnable Token
......
pragma solidity ^0.4.11; pragma solidity ^0.4.11;
import './MintableToken.sol'; import "./MintableToken.sol";
/** /**
* @title Capped token * @title Capped token
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import './ERC20.sol'; import "./ERC20.sol";
contract DetailedERC20 is ERC20 { contract DetailedERC20 is ERC20 {
string public name; string public name;
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import './ERC20Basic.sol'; import "./ERC20Basic.sol";
/** /**
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import './StandardToken.sol'; import "./StandardToken.sol";
import '../ownership/Ownable.sol'; import "../ownership/Ownable.sol";
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import './StandardToken.sol'; import "./StandardToken.sol";
import '../lifecycle/Pausable.sol'; import "../lifecycle/Pausable.sol";
/** /**
* @title Pausable token * @title Pausable token
* *
* @dev StandardToken modified with pausable transfers. * @dev StandardToken modified with pausable transfers.
**/ **/
contract PausableToken is StandardToken, Pausable { contract PausableToken is StandardToken, Pausable {
function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) {
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import './ERC20Basic.sol'; import "./ERC20Basic.sol";
import './ERC20.sol'; import "./ERC20.sol";
/** /**
* @title SafeERC20 * @title SafeERC20
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import './BasicToken.sol'; import "./BasicToken.sol";
import './ERC20.sol'; import "./ERC20.sol";
/** /**
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import "./ERC20Basic.sol";
import './ERC20Basic.sol';
import "../token/SafeERC20.sol"; import "../token/SafeERC20.sol";
/** /**
* @title TokenTimelock * @title TokenTimelock
* @dev TokenTimelock is a token holder contract that will allow a * @dev TokenTimelock is a token holder contract that will allow a
......
pragma solidity ^0.4.18; pragma solidity ^0.4.18;
import './ERC20Basic.sol'; import "./ERC20Basic.sol";
import './SafeERC20.sol'; import "./SafeERC20.sol";
import '../ownership/Ownable.sol'; import "../ownership/Ownable.sol";
import '../math/SafeMath.sol'; import "../math/SafeMath.sol";
/** /**
* @title TokenVesting * @title TokenVesting
......
{ {
"name": "zeppelin-solidity", "name": "zeppelin-solidity",
"version": "1.4.0", "version": "1.5.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
"anymatch": { "anymatch": {
"version": "1.3.2", "version": "1.3.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
"integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=",
"dev": true, "dev": true,
"requires": { "requires": {
"micromatch": "2.3.11", "micromatch": "2.3.11",
...@@ -165,7 +165,7 @@ ...@@ -165,7 +165,7 @@
"arr-flatten": { "arr-flatten": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
"dev": true "dev": true
}, },
"array-union": { "array-union": {
...@@ -1058,7 +1058,7 @@ ...@@ -1058,7 +1058,7 @@
"base64-js": { "base64-js": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
"integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", "integrity": "sha1-qRlH2h9KUW6jjltOwOw3c2deCIY=",
"dev": true "dev": true
}, },
"bcrypt-pbkdf": { "bcrypt-pbkdf": {
...@@ -1090,7 +1090,7 @@ ...@@ -1090,7 +1090,7 @@
"bindings": { "bindings": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz",
"integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==", "integrity": "sha1-s0b27PapX1qBXFg5/HzbIlAvHtc=",
"dev": true "dev": true
}, },
"bip39": { "bip39": {
...@@ -1126,7 +1126,7 @@ ...@@ -1126,7 +1126,7 @@
"bn.js": { "bn.js": {
"version": "4.11.8", "version": "4.11.8",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
"integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=",
"dev": true "dev": true
}, },
"boom": { "boom": {
...@@ -1351,7 +1351,7 @@ ...@@ -1351,7 +1351,7 @@
"chai-as-promised": { "chai-as-promised": {
"version": "7.1.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz",
"integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "integrity": "sha1-CGRdgl3rhpbuYXJdv1kMAS6wDKA=",
"dev": true, "dev": true,
"requires": { "requires": {
"check-error": "1.0.2" "check-error": "1.0.2"
...@@ -1405,6 +1405,7 @@ ...@@ -1405,6 +1405,7 @@
"requires": { "requires": {
"anymatch": "1.3.2", "anymatch": "1.3.2",
"async-each": "1.0.1", "async-each": "1.0.1",
"fsevents": "1.1.3",
"glob-parent": "2.0.0", "glob-parent": "2.0.0",
"inherits": "2.0.3", "inherits": "2.0.3",
"is-binary-path": "1.0.1", "is-binary-path": "1.0.1",
...@@ -1422,7 +1423,7 @@ ...@@ -1422,7 +1423,7 @@
"cipher-base": { "cipher-base": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
"dev": true, "dev": true,
"requires": { "requires": {
"inherits": "2.0.3", "inherits": "2.0.3",
...@@ -1512,6 +1513,12 @@ ...@@ -1512,6 +1513,12 @@
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true "dev": true
}, },
"colors": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
"dev": true
},
"combined-stream": { "combined-stream": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
...@@ -1793,7 +1800,7 @@ ...@@ -1793,7 +1800,7 @@
"deferred-leveldown": { "deferred-leveldown": {
"version": "1.2.2", "version": "1.2.2",
"resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz",
"integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", "integrity": "sha1-Os0uC3XRZpkkvApLZChRExFz4es=",
"dev": true, "dev": true,
"requires": { "requires": {
"abstract-leveldown": "2.6.2" "abstract-leveldown": "2.6.2"
...@@ -2999,219 +3006,1123 @@ ...@@ -2999,219 +3006,1123 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true "dev": true
}, },
"function-bind": { "fsevents": {
"version": "1.1.0", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz",
"integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==",
"dev": true "dev": true,
"optional": true,
"requires": {
"nan": "2.6.2",
"node-pre-gyp": "0.6.39"
}, },
"functional-red-black-tree": { "dependencies": {
"version": "1.0.1", "abbrev": {
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "version": "1.1.0",
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"gauge": { "ajv": {
"version": "2.7.4", "version": "4.11.8",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "bundled": true,
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"aproba": "1.1.2", "co": "4.6.0",
"console-control-strings": "1.1.0", "json-stable-stringify": "1.0.1"
"has-unicode": "2.0.1",
"object-assign": "4.1.1",
"signal-exit": "3.0.2",
"string-width": "1.0.2",
"strip-ansi": "3.0.1",
"wide-align": "1.1.2"
} }
}, },
"generate-function": { "ansi-regex": {
"version": "2.0.0", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", "bundled": true,
"integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
"dev": true "dev": true
}, },
"generate-object-property": { "aproba": {
"version": "1.2.0", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "bundled": true,
"integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "dev": true,
"optional": true
},
"are-we-there-yet": {
"version": "1.1.4",
"bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"is-property": "1.0.2" "delegates": "1.0.0",
"readable-stream": "2.2.9"
} }
}, },
"get-caller-file": { "asn1": {
"version": "1.0.2", "version": "0.2.3",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", "bundled": true,
"integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", "dev": true,
"dev": true "optional": true
}, },
"get-func-name": { "assert-plus": {
"version": "2.0.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "bundled": true,
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true,
"dev": true "optional": true
}, },
"get-stream": { "asynckit": {
"version": "3.0.0", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "bundled": true,
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true,
"dev": true "optional": true
}, },
"getpass": { "aws-sign2": {
"version": "0.1.7", "version": "0.6.0",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "bundled": true,
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true, "dev": true,
"requires": { "optional": true
"assert-plus": "1.0.0"
}, },
"dependencies": { "aws4": {
"assert-plus": { "version": "1.6.0",
"version": "1.0.0", "bundled": true,
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "dev": true,
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "optional": true
"dev": true
}
}
}, },
"github-from-package": { "balanced-match": {
"version": "0.0.0", "version": "0.4.2",
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", "bundled": true,
"integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
"dev": true "dev": true
}, },
"glob": { "bcrypt-pbkdf": {
"version": "7.1.2", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "bundled": true,
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"fs.realpath": "1.0.0", "tweetnacl": "0.14.5"
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
} }
}, },
"glob-base": { "block-stream": {
"version": "0.3.0", "version": "0.0.9",
"resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "bundled": true,
"integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
"dev": true, "dev": true,
"requires": { "requires": {
"glob-parent": "2.0.0", "inherits": "2.0.3"
"is-glob": "2.0.1"
} }
}, },
"glob-parent": { "boom": {
"version": "2.0.0", "version": "2.10.1",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "bundled": true,
"integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
"dev": true, "dev": true,
"requires": { "requires": {
"is-glob": "2.0.1" "hoek": "2.16.3"
} }
}, },
"global": { "brace-expansion": {
"version": "4.3.2", "version": "1.1.7",
"resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", "bundled": true,
"integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
"dev": true, "dev": true,
"requires": { "requires": {
"min-document": "2.19.0", "balanced-match": "0.4.2",
"process": "0.5.2" "concat-map": "0.0.1"
} }
}, },
"globals": { "buffer-shims": {
"version": "9.18.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", "bundled": true,
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
"dev": true "dev": true
}, },
"globby": { "caseless": {
"version": "5.0.0", "version": "0.12.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "bundled": true,
"integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true,
"optional": true
},
"co": {
"version": "4.6.0",
"bundled": true,
"dev": true,
"optional": true
},
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true
},
"combined-stream": {
"version": "1.0.5",
"bundled": true,
"dev": true, "dev": true,
"requires": { "requires": {
"array-union": "1.0.2", "delayed-stream": "1.0.0"
"arrify": "1.0.1",
"glob": "7.1.2",
"object-assign": "4.1.1",
"pify": "2.3.0",
"pinkie-promise": "2.0.1"
} }
}, },
"graceful-fs": { "concat-map": {
"version": "4.1.11", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "bundled": true,
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
"dev": true "dev": true
}, },
"graceful-readlink": { "console-control-strings": {
"version": "1.0.1", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", "bundled": true,
"integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
"dev": true "dev": true
}, },
"growl": { "core-util-is": {
"version": "1.9.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", "bundled": true,
"integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
"dev": true "dev": true
}, },
"handlebars": { "cryptiles": {
"version": "4.0.11", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", "bundled": true,
"integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
"dev": true, "dev": true,
"requires": { "requires": {
"async": "1.5.2", "boom": "2.10.1"
"optimist": "0.6.1", }
"source-map": "0.4.4",
"uglify-js": "2.8.29"
}, },
"dependencies": { "dashdash": {
"source-map": { "version": "1.14.1",
"version": "0.4.4", "bundled": true,
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"amdefine": "1.0.1" "assert-plus": "1.0.0"
}
}
}
}, },
"har-validator": { "dependencies": {
"version": "2.0.6", "assert-plus": {
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", "version": "1.0.0",
"integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", "bundled": true,
"dev": true, "dev": true,
"requires": { "optional": true
"chalk": "1.1.3", }
"commander": "2.11.0",
"is-my-json-valid": "2.16.0",
"pinkie-promise": "2.0.1"
} }
}, },
"has": { "debug": {
"version": "1.0.1", "version": "2.6.8",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", "bundled": true,
"integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"function-bind": "1.1.0" "ms": "2.0.0"
} }
}, },
"has-ansi": { "deep-extend": {
"version": "2.0.0", "version": "0.4.2",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "bundled": true,
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true,
"optional": true
},
"delayed-stream": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
"delegates": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"detect-libc": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"ecc-jsbn": {
"version": "0.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"jsbn": "0.1.1"
}
},
"extend": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"extsprintf": {
"version": "1.0.2",
"bundled": true,
"dev": true
},
"forever-agent": {
"version": "0.6.1",
"bundled": true,
"dev": true,
"optional": true
},
"form-data": {
"version": "2.1.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"asynckit": "0.4.0",
"combined-stream": "1.0.5",
"mime-types": "2.1.15"
}
},
"fs.realpath": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
"fstream": {
"version": "1.0.11",
"bundled": true,
"dev": true,
"requires": {
"graceful-fs": "4.1.11",
"inherits": "2.0.3",
"mkdirp": "0.5.1",
"rimraf": "2.6.1"
}
},
"fstream-ignore": {
"version": "1.0.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"fstream": "1.0.11",
"inherits": "2.0.3",
"minimatch": "3.0.4"
}
},
"gauge": {
"version": "2.7.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"aproba": "1.1.1",
"console-control-strings": "1.1.0",
"has-unicode": "2.0.1",
"object-assign": "4.1.1",
"signal-exit": "3.0.2",
"string-width": "1.0.2",
"strip-ansi": "3.0.1",
"wide-align": "1.1.2"
}
},
"getpass": {
"version": "0.1.7",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"assert-plus": "1.0.0"
},
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
}
}
},
"glob": {
"version": "7.1.2",
"bundled": true,
"dev": true,
"requires": {
"fs.realpath": "1.0.0",
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
},
"graceful-fs": {
"version": "4.1.11",
"bundled": true,
"dev": true
},
"har-schema": {
"version": "1.0.5",
"bundled": true,
"dev": true,
"optional": true
},
"har-validator": {
"version": "4.2.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ajv": "4.11.8",
"har-schema": "1.0.5"
}
},
"has-unicode": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"hawk": {
"version": "3.1.3",
"bundled": true,
"dev": true,
"requires": {
"boom": "2.10.1",
"cryptiles": "2.0.5",
"hoek": "2.16.3",
"sntp": "1.0.9"
}
},
"hoek": {
"version": "2.16.3",
"bundled": true,
"dev": true
},
"http-signature": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"assert-plus": "0.2.0",
"jsprim": "1.4.0",
"sshpk": "1.13.0"
}
},
"inflight": {
"version": "1.0.6",
"bundled": true,
"dev": true,
"requires": {
"once": "1.4.0",
"wrappy": "1.0.2"
}
},
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true
},
"ini": {
"version": "1.3.4",
"bundled": true,
"dev": true,
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"requires": {
"number-is-nan": "1.0.1"
}
},
"is-typedarray": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"isarray": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
"isstream": {
"version": "0.1.2",
"bundled": true,
"dev": true,
"optional": true
},
"jodid25519": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"jsbn": "0.1.1"
}
},
"jsbn": {
"version": "0.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"json-schema": {
"version": "0.2.3",
"bundled": true,
"dev": true,
"optional": true
},
"json-stable-stringify": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"jsonify": "0.0.0"
}
},
"json-stringify-safe": {
"version": "5.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"jsonify": {
"version": "0.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"jsprim": {
"version": "1.4.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.0.2",
"json-schema": "0.2.3",
"verror": "1.3.6"
},
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
}
}
},
"mime-db": {
"version": "1.27.0",
"bundled": true,
"dev": true
},
"mime-types": {
"version": "2.1.15",
"bundled": true,
"dev": true,
"requires": {
"mime-db": "1.27.0"
}
},
"minimatch": {
"version": "3.0.4",
"bundled": true,
"dev": true,
"requires": {
"brace-expansion": "1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"dev": true,
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"node-pre-gyp": {
"version": "0.6.39",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"detect-libc": "1.0.2",
"hawk": "3.1.3",
"mkdirp": "0.5.1",
"nopt": "4.0.1",
"npmlog": "4.1.0",
"rc": "1.2.1",
"request": "2.81.0",
"rimraf": "2.6.1",
"semver": "5.3.0",
"tar": "2.2.1",
"tar-pack": "3.4.0"
}
},
"nopt": {
"version": "4.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"abbrev": "1.1.0",
"osenv": "0.1.4"
}
},
"npmlog": {
"version": "4.1.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"are-we-there-yet": "1.1.4",
"console-control-strings": "1.1.0",
"gauge": "2.7.4",
"set-blocking": "2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true
},
"oauth-sign": {
"version": "0.8.2",
"bundled": true,
"dev": true,
"optional": true
},
"object-assign": {
"version": "4.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"once": {
"version": "1.4.0",
"bundled": true,
"dev": true,
"requires": {
"wrappy": "1.0.2"
}
},
"os-homedir": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"osenv": {
"version": "0.1.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"os-homedir": "1.0.2",
"os-tmpdir": "1.0.2"
}
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true,
"dev": true
},
"performance-now": {
"version": "0.2.0",
"bundled": true,
"dev": true,
"optional": true
},
"process-nextick-args": {
"version": "1.0.7",
"bundled": true,
"dev": true
},
"punycode": {
"version": "1.4.1",
"bundled": true,
"dev": true,
"optional": true
},
"qs": {
"version": "6.4.0",
"bundled": true,
"dev": true,
"optional": true
},
"rc": {
"version": "1.2.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"deep-extend": "0.4.2",
"ini": "1.3.4",
"minimist": "1.2.0",
"strip-json-comments": "2.0.1"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"bundled": true,
"dev": true,
"optional": true
}
}
},
"readable-stream": {
"version": "2.2.9",
"bundled": true,
"dev": true,
"requires": {
"buffer-shims": "1.0.0",
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "1.0.7",
"string_decoder": "1.0.1",
"util-deprecate": "1.0.2"
}
},
"request": {
"version": "2.81.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"aws-sign2": "0.6.0",
"aws4": "1.6.0",
"caseless": "0.12.0",
"combined-stream": "1.0.5",
"extend": "3.0.1",
"forever-agent": "0.6.1",
"form-data": "2.1.4",
"har-validator": "4.2.1",
"hawk": "3.1.3",
"http-signature": "1.1.1",
"is-typedarray": "1.0.0",
"isstream": "0.1.2",
"json-stringify-safe": "5.0.1",
"mime-types": "2.1.15",
"oauth-sign": "0.8.2",
"performance-now": "0.2.0",
"qs": "6.4.0",
"safe-buffer": "5.0.1",
"stringstream": "0.0.5",
"tough-cookie": "2.3.2",
"tunnel-agent": "0.6.0",
"uuid": "3.0.1"
}
},
"rimraf": {
"version": "2.6.1",
"bundled": true,
"dev": true,
"requires": {
"glob": "7.1.2"
}
},
"safe-buffer": {
"version": "5.0.1",
"bundled": true,
"dev": true
},
"semver": {
"version": "5.3.0",
"bundled": true,
"dev": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"sntp": {
"version": "1.0.9",
"bundled": true,
"dev": true,
"requires": {
"hoek": "2.16.3"
}
},
"sshpk": {
"version": "1.13.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"asn1": "0.2.3",
"assert-plus": "1.0.0",
"bcrypt-pbkdf": "1.0.1",
"dashdash": "1.14.1",
"ecc-jsbn": "0.1.1",
"getpass": "0.1.7",
"jodid25519": "1.0.2",
"jsbn": "0.1.1",
"tweetnacl": "0.14.5"
},
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
}
}
},
"string-width": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"requires": {
"code-point-at": "1.1.0",
"is-fullwidth-code-point": "1.0.0",
"strip-ansi": "3.0.1"
}
},
"string_decoder": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"requires": {
"safe-buffer": "5.0.1"
}
},
"stringstream": {
"version": "0.0.5",
"bundled": true,
"dev": true,
"optional": true
},
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"requires": {
"ansi-regex": "2.1.1"
}
},
"strip-json-comments": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"tar": {
"version": "2.2.1",
"bundled": true,
"dev": true,
"requires": {
"block-stream": "0.0.9",
"fstream": "1.0.11",
"inherits": "2.0.3"
}
},
"tar-pack": {
"version": "3.4.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"debug": "2.6.8",
"fstream": "1.0.11",
"fstream-ignore": "1.0.5",
"once": "1.4.0",
"readable-stream": "2.2.9",
"rimraf": "2.6.1",
"tar": "2.2.1",
"uid-number": "0.0.6"
}
},
"tough-cookie": {
"version": "2.3.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"punycode": "1.4.1"
}
},
"tunnel-agent": {
"version": "0.6.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "5.0.1"
}
},
"tweetnacl": {
"version": "0.14.5",
"bundled": true,
"dev": true,
"optional": true
},
"uid-number": {
"version": "0.0.6",
"bundled": true,
"dev": true,
"optional": true
},
"util-deprecate": {
"version": "1.0.2",
"bundled": true,
"dev": true
},
"uuid": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"verror": {
"version": "1.3.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"extsprintf": "1.0.2"
}
},
"wide-align": {
"version": "1.1.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"string-width": "1.0.2"
}
},
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true
}
}
},
"function-bind": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz",
"integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=",
"dev": true
},
"functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
"gauge": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"requires": {
"aproba": "1.1.2",
"console-control-strings": "1.1.0",
"has-unicode": "2.0.1",
"object-assign": "4.1.1",
"signal-exit": "3.0.2",
"string-width": "1.0.2",
"strip-ansi": "3.0.1",
"wide-align": "1.1.2"
}
},
"generate-function": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
"integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
"dev": true
},
"generate-object-property": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
"integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
"dev": true,
"requires": {
"is-property": "1.0.2"
}
},
"get-caller-file": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
"integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
"dev": true
},
"get-func-name": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
"dev": true
},
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
"dev": true
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"requires": {
"assert-plus": "1.0.0"
},
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
}
}
},
"github-from-package": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
"integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
"dev": true
},
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
"fs.realpath": "1.0.0",
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
},
"glob-base": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
"integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
"dev": true,
"requires": {
"glob-parent": "2.0.0",
"is-glob": "2.0.1"
}
},
"glob-parent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
"integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
"dev": true,
"requires": {
"is-glob": "2.0.1"
}
},
"global": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz",
"integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
"dev": true,
"requires": {
"min-document": "2.19.0",
"process": "0.5.2"
}
},
"globals": {
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
"integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=",
"dev": true
},
"globby": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
"integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
"dev": true,
"requires": {
"array-union": "1.0.2",
"arrify": "1.0.1",
"glob": "7.1.2",
"object-assign": "4.1.1",
"pify": "2.3.0",
"pinkie-promise": "2.0.1"
}
},
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
"dev": true
},
"graceful-readlink": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
"integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
"dev": true
},
"growl": {
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
"integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
"dev": true
},
"handlebars": {
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
"integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
"dev": true,
"requires": {
"async": "1.5.2",
"optimist": "0.6.1",
"source-map": "0.4.4",
"uglify-js": "2.8.29"
},
"dependencies": {
"source-map": {
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true,
"requires": {
"amdefine": "1.0.1"
}
}
}
},
"har-validator": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
"integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
"dev": true,
"requires": {
"chalk": "1.1.3",
"commander": "2.11.0",
"is-my-json-valid": "2.16.0",
"pinkie-promise": "2.0.1"
}
},
"has": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
"integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
"dev": true,
"requires": {
"function-bind": "1.1.0"
}
},
"has-ansi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"dev": true, "dev": true,
"requires": { "requires": {
"ansi-regex": "2.1.1" "ansi-regex": "2.1.1"
...@@ -3241,7 +4152,7 @@ ...@@ -3241,7 +4152,7 @@
"hash.js": { "hash.js": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
"integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "integrity": "sha1-NA3tvmKQGHFRweodd3o0SJNd+EY=",
"dev": true, "dev": true,
"requires": { "requires": {
"inherits": "2.0.3", "inherits": "2.0.3",
...@@ -3306,7 +4217,7 @@ ...@@ -3306,7 +4217,7 @@
"hosted-git-info": { "hosted-git-info": {
"version": "2.5.0", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
"integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=",
"dev": true "dev": true
}, },
"http-signature": { "http-signature": {
...@@ -3833,6 +4744,12 @@ ...@@ -3833,6 +4744,12 @@
"integrity": "sha1-hhIoAhQvCChQKg0d7h2V4lO7AkM=", "integrity": "sha1-hhIoAhQvCChQKg0d7h2V4lO7AkM=",
"dev": true "dev": true
}, },
"js-string-escape": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
"integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=",
"dev": true
},
"js-tokens": { "js-tokens": {
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
...@@ -3865,7 +4782,7 @@ ...@@ -3865,7 +4782,7 @@
"json-loader": { "json-loader": {
"version": "0.5.7", "version": "0.5.7",
"resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
"integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", "integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0=",
"dev": true "dev": true
}, },
"json-schema": { "json-schema": {
...@@ -3957,7 +4874,7 @@ ...@@ -3957,7 +4874,7 @@
"keccak": { "keccak": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/keccak/-/keccak-1.3.0.tgz", "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.3.0.tgz",
"integrity": "sha512-JgsKPxYhcJxKrV+TrCyg/GwZbOjhpRPrz2kG8xbAsUaIDelUlKjm08YcwBO9Fm8sqf/Kg8ZWkk6nWujhLykfvw==", "integrity": "sha1-NoG9ma09A1TdspuQQMG2VgzOCKw=",
"dev": true, "dev": true,
"requires": { "requires": {
"bindings": "1.3.0", "bindings": "1.3.0",
...@@ -4117,7 +5034,7 @@ ...@@ -4117,7 +5034,7 @@
"levelup": { "levelup": {
"version": "1.3.9", "version": "1.3.9",
"resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz",
"integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", "integrity": "sha1-LbyuhFsrsra+qE3zNMR1Uzu9gqs=",
"dev": true, "dev": true,
"requires": { "requires": {
"deferred-leveldown": "1.2.2", "deferred-leveldown": "1.2.2",
...@@ -4462,7 +5379,7 @@ ...@@ -4462,7 +5379,7 @@
"minimatch": { "minimatch": {
"version": "3.0.4", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
"dev": true, "dev": true,
"requires": { "requires": {
"brace-expansion": "1.1.8" "brace-expansion": "1.1.8"
...@@ -4665,7 +5582,7 @@ ...@@ -4665,7 +5582,7 @@
"normalize-package-data": { "normalize-package-data": {
"version": "2.4.0", "version": "2.4.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
"integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=",
"dev": true, "dev": true,
"requires": { "requires": {
"hosted-git-info": "2.5.0", "hosted-git-info": "2.5.0",
...@@ -4695,7 +5612,7 @@ ...@@ -4695,7 +5612,7 @@
"npmlog": { "npmlog": {
"version": "4.1.2", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=",
"dev": true, "dev": true,
"requires": { "requires": {
"are-we-there-yet": "1.1.4", "are-we-there-yet": "1.1.4",
...@@ -4725,7 +5642,7 @@ ...@@ -4725,7 +5642,7 @@
"object-inspect": { "object-inspect": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.3.0.tgz", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.3.0.tgz",
"integrity": "sha512-OHHnLgLNXpM++GnJRyyhbr2bwl3pPVm4YvaraHrRvDt/N3r+s/gDVHciA7EJBTkijKXj61ssgSAikq1fb0IBRg==", "integrity": "sha1-Wx645nQuLugzQqY3A02ESSi6L20=",
"dev": true "dev": true
}, },
"object-keys": { "object-keys": {
...@@ -5146,7 +6063,7 @@ ...@@ -5146,7 +6063,7 @@
"randomatic": { "randomatic": {
"version": "1.1.7", "version": "1.1.7",
"resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
"integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=",
"dev": true, "dev": true,
"requires": { "requires": {
"is-number": "3.0.0", "is-number": "3.0.0",
...@@ -5187,7 +6104,7 @@ ...@@ -5187,7 +6104,7 @@
"randombytes": { "randombytes": {
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz",
"integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", "integrity": "sha1-3ACaJGuNCaF3tLegrne8Vw9LG3k=",
"dev": true, "dev": true,
"requires": { "requires": {
"safe-buffer": "5.1.1" "safe-buffer": "5.1.1"
...@@ -5237,7 +6154,7 @@ ...@@ -5237,7 +6154,7 @@
"readable-stream": { "readable-stream": {
"version": "2.3.3", "version": "2.3.3",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
"integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=",
"dev": true, "dev": true,
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
...@@ -5533,7 +6450,7 @@ ...@@ -5533,7 +6450,7 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.1", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=",
"dev": true "dev": true
}, },
"scrypt": { "scrypt": {
...@@ -5584,13 +6501,13 @@ ...@@ -5584,13 +6501,13 @@
"semaphore": { "semaphore": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz",
"integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", "integrity": "sha1-qq2LhrIP6OmzKxbcLuaCqM0mqKo=",
"dev": true "dev": true
}, },
"semver": { "semver": {
"version": "5.4.1", "version": "5.4.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
"integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=",
"dev": true "dev": true
}, },
"set-blocking": { "set-blocking": {
...@@ -5710,6 +6627,12 @@ ...@@ -5710,6 +6627,12 @@
"hoek": "2.16.3" "hoek": "2.16.3"
} }
}, },
"sol-digger": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/sol-digger/-/sol-digger-0.0.2.tgz",
"integrity": "sha1-QGxKnTHiaef4jrHC6hATGOXgkCU=",
"dev": true
},
"sol-explore": { "sol-explore": {
"version": "1.6.2", "version": "1.6.2",
"resolved": "https://registry.npmjs.org/sol-explore/-/sol-explore-1.6.2.tgz", "resolved": "https://registry.npmjs.org/sol-explore/-/sol-explore-1.6.2.tgz",
...@@ -5781,10 +6704,211 @@ ...@@ -5781,10 +6704,211 @@
"yargs": "4.8.1" "yargs": "4.8.1"
} }
}, },
"solium": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/solium/-/solium-1.1.2.tgz",
"integrity": "sha512-2CvpbiU0msntDkK+X6y3qCcRqg+W7Bf237BrHPTP32zufK7OCaINK4ci7UEMnusbEW41njJwLitN0h32C3rVKA==",
"dev": true,
"requires": {
"ajv": "5.2.2",
"chokidar": "1.7.0",
"colors": "1.1.2",
"commander": "2.11.0",
"js-string-escape": "1.0.1",
"lodash": "4.17.4",
"sol-digger": "0.0.2",
"sol-explore": "1.6.1",
"solium-plugin-security": "0.1.1",
"solparse": "2.2.2",
"text-table": "0.2.0"
},
"dependencies": {
"ansi-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
"camelcase": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
"integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
"dev": true
},
"cliui": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz",
"integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==",
"dev": true,
"requires": {
"string-width": "2.1.1",
"strip-ansi": "4.0.0",
"wrap-ansi": "2.1.0"
}
},
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
"diff": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz",
"integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==",
"dev": true
},
"find-up": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"requires": {
"locate-path": "2.0.0"
}
},
"growl": {
"version": "1.10.3",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz",
"integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==",
"dev": true
},
"has-flag": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
"integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
"dev": true
},
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true
},
"mocha": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz",
"integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==",
"dev": true,
"requires": {
"browser-stdout": "1.3.0",
"commander": "2.11.0",
"debug": "3.1.0",
"diff": "3.3.1",
"escape-string-regexp": "1.0.5",
"glob": "7.1.2",
"growl": "1.10.3",
"he": "1.1.1",
"mkdirp": "0.5.1",
"supports-color": "4.4.0"
}
},
"os-locale": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
"integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
"dev": true,
"requires": {
"execa": "0.7.0",
"lcid": "1.0.0",
"mem": "1.1.0"
}
},
"sol-explore": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/sol-explore/-/sol-explore-1.6.1.tgz",
"integrity": "sha1-tZ8HPGn+MyVg1aEMMrqMp/KYbPs=",
"dev": true
},
"solparse": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/solparse/-/solparse-2.2.2.tgz",
"integrity": "sha512-TKX0Foi/N73nKco65+boo0YTtifFVEEXEPQkN4b1GkkEsXLXyV1TnvvIeT0qg9lEPLdi4Ri5WUWYVJipnSny+Q==",
"dev": true,
"requires": {
"mocha": "4.1.0",
"pegjs": "0.10.0",
"yargs": "10.1.1"
}
},
"string-width": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"dev": true,
"requires": {
"is-fullwidth-code-point": "2.0.0",
"strip-ansi": "4.0.0"
}
},
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
"ansi-regex": "3.0.0"
}
},
"supports-color": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
"integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==",
"dev": true,
"requires": {
"has-flag": "2.0.0"
}
},
"which-module": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
},
"yargs": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.1.tgz",
"integrity": "sha512-7uRL1HZdCbc1QTP+X8mehOPuCYKC/XTaqAPj7gABLfTt6pgLyVRn3QVte4qhtilZouWCvqd1kipgMKl5tKsFiw==",
"dev": true,
"requires": {
"cliui": "4.0.0",
"decamelize": "1.2.0",
"find-up": "2.1.0",
"get-caller-file": "1.0.2",
"os-locale": "2.1.0",
"require-directory": "2.1.1",
"require-main-filename": "1.0.1",
"set-blocking": "2.0.0",
"string-width": "2.1.1",
"which-module": "2.0.0",
"y18n": "3.2.1",
"yargs-parser": "8.1.0"
}
},
"yargs-parser": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz",
"integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==",
"dev": true,
"requires": {
"camelcase": "4.1.0"
}
}
}
},
"solium-plugin-security": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/solium-plugin-security/-/solium-plugin-security-0.1.1.tgz",
"integrity": "sha512-kpLirBwIq4mhxk0Y/nn5cQ6qdJTI+U1LO3gpoNIcqNaW+sI058moXBe2UiHs+9wvF9IzYD49jcKhFTxcR9u9SQ==",
"dev": true
},
"source-list-map": { "source-list-map": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
"integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", "integrity": "sha1-qqR0A/eyRakvvJfqCPJQ1gh+0IU=",
"dev": true "dev": true
}, },
"source-map": { "source-map": {
...@@ -5866,7 +6990,7 @@ ...@@ -5866,7 +6990,7 @@
"stream-http": { "stream-http": {
"version": "2.7.2", "version": "2.7.2",
"resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz",
"integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", "integrity": "sha1-QKBQ7I3DtTsz2ZCUFcAsC/Gr+60=",
"dev": true, "dev": true,
"requires": { "requires": {
"builtin-status-codes": "3.0.0", "builtin-status-codes": "3.0.0",
...@@ -5901,7 +7025,7 @@ ...@@ -5901,7 +7025,7 @@
"string_decoder": { "string_decoder": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
"dev": true, "dev": true,
"requires": { "requires": {
"safe-buffer": "5.1.1" "safe-buffer": "5.1.1"
...@@ -6061,7 +7185,7 @@ ...@@ -6061,7 +7185,7 @@
"tape": { "tape": {
"version": "4.8.0", "version": "4.8.0",
"resolved": "https://registry.npmjs.org/tape/-/tape-4.8.0.tgz", "resolved": "https://registry.npmjs.org/tape/-/tape-4.8.0.tgz",
"integrity": "sha512-TWILfEnvO7I8mFe35d98F6T5fbLaEtbFTG/lxWvid8qDfFTxt19EBijWmB4j3+Hoh5TfHE2faWs73ua+EphuBA==", "integrity": "sha1-9qn+xBzFCh3lD6M2A6tYCZH2Bo4=",
"dev": true, "dev": true,
"requires": { "requires": {
"deep-equal": "1.0.1", "deep-equal": "1.0.1",
...@@ -6541,7 +7665,7 @@ ...@@ -6541,7 +7665,7 @@
"uuid": { "uuid": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
"integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=",
"dev": true "dev": true
}, },
"validate-npm-package-license": { "validate-npm-package-license": {
...@@ -6833,7 +7957,7 @@ ...@@ -6833,7 +7957,7 @@
"which": { "which": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
"integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=",
"dev": true, "dev": true,
"requires": { "requires": {
"isexe": "2.0.0" "isexe": "2.0.0"
...@@ -6848,7 +7972,7 @@ ...@@ -6848,7 +7972,7 @@
"wide-align": { "wide-align": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
"integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "integrity": "sha1-Vx4PGwYEY268DfwhsDObvjE0FxA=",
"dev": true, "dev": true,
"requires": { "requires": {
"string-width": "1.0.2" "string-width": "1.0.2"
......
...@@ -6,6 +6,10 @@ ...@@ -6,6 +6,10 @@
"test": "scripts/test.sh", "test": "scripts/test.sh",
"lint": "eslint .", "lint": "eslint .",
"lint:fix": "eslint . --fix", "lint:fix": "eslint . --fix",
"lint:sol": "solium -d .",
"lint:sol:fix": "solium -d . --fix",
"lint:all": "npm run lint && npm run lint:sol",
"lint:all:fix": "npm run lint:fix && npm run lint:sol:fix",
"console": "truffle console", "console": "truffle console",
"coverage": "scripts/coverage.sh" "coverage": "scripts/coverage.sh"
}, },
...@@ -47,6 +51,7 @@ ...@@ -47,6 +51,7 @@
"ethereumjs-util": "^5.1.2", "ethereumjs-util": "^5.1.2",
"mocha-lcov-reporter": "^1.3.0", "mocha-lcov-reporter": "^1.3.0",
"solidity-coverage": "^0.4.3", "solidity-coverage": "^0.4.3",
"solium": "^1.1.2",
"truffle": "^4.0.0", "truffle": "^4.0.0",
"truffle-hdwallet-provider": "0.0.3" "truffle-hdwallet-provider": "0.0.3"
}, },
......
...@@ -74,7 +74,7 @@ contract('Bounty', function (accounts) { ...@@ -74,7 +74,7 @@ contract('Bounty', function (accounts) {
web3.eth.getBalance(bounty.address).toNumber()); web3.eth.getBalance(bounty.address).toNumber());
} }
}; };
bounty.createTarget({ from: researcher }); await bounty.createTarget({ from: researcher });
await awaitEvent(event, watcher); await awaitEvent(event, watcher);
}); });
}); });
...@@ -104,7 +104,7 @@ contract('Bounty', function (accounts) { ...@@ -104,7 +104,7 @@ contract('Bounty', function (accounts) {
assert.equal(0, web3.eth.getBalance(bounty.address).toNumber()); assert.equal(0, web3.eth.getBalance(bounty.address).toNumber());
}; };
bounty.createTarget({ from: researcher }); await bounty.createTarget({ from: researcher });
await awaitEvent(event, watcher); await awaitEvent(event, watcher);
}); });
}); });
......
var MathMock = artifacts.require('./mocks/MathMock.sol');
contract('Math', function (accounts) {
let math;
before(async function () {
math = await MathMock.new();
});
it('returns max correctly', async function () {
let a = 5678;
let b = 1234;
await math.max64(a, b);
let result = await math.result();
assert.equal(result, a);
});
it('returns min correctly', async function () {
let a = 5678;
let b = 1234;
await math.min64(a, b);
let result = await math.result();
assert.equal(result, b);
});
});
import ether from './helpers/ether'; import ether from '../helpers/ether';
import { advanceBlock } from './helpers/advanceToBlock'; import { advanceBlock } from '../helpers/advanceToBlock';
import { increaseTimeTo, duration } from './helpers/increaseTime'; import { increaseTimeTo, duration } from '../helpers/increaseTime';
import latestTime from './helpers/latestTime'; import latestTime from '../helpers/latestTime';
import EVMRevert from './helpers/EVMRevert'; import EVMRevert from '../helpers/EVMRevert';
const BigNumber = web3.BigNumber; const BigNumber = web3.BigNumber;
......
import ether from './helpers/ether'; import ether from '../helpers/ether';
import { advanceBlock } from './helpers/advanceToBlock'; import { advanceBlock } from '../helpers/advanceToBlock';
import { increaseTimeTo, duration } from './helpers/increaseTime'; import { increaseTimeTo, duration } from '../helpers/increaseTime';
import latestTime from './helpers/latestTime'; import latestTime from '../helpers/latestTime';
import EVMRevert from './helpers/EVMRevert'; import EVMRevert from '../helpers/EVMRevert';
const BigNumber = web3.BigNumber; const BigNumber = web3.BigNumber;
......
import { advanceBlock } from './helpers/advanceToBlock'; import { advanceBlock } from '../helpers/advanceToBlock';
import { increaseTimeTo, duration } from './helpers/increaseTime'; import { increaseTimeTo, duration } from '../helpers/increaseTime';
import latestTime from './helpers/latestTime'; import latestTime from '../helpers/latestTime';
import EVMRevert from './helpers/EVMRevert'; import EVMRevert from '../helpers/EVMRevert';
const BigNumber = web3.BigNumber; const BigNumber = web3.BigNumber;
......
import ether from './helpers/ether'; import ether from '../helpers/ether';
import EVMRevert from './helpers/EVMRevert'; import EVMRevert from '../helpers/EVMRevert';
const BigNumber = web3.BigNumber; const BigNumber = web3.BigNumber;
......
import ether from './helpers/ether'; import ether from '../helpers/ether';
import { advanceBlock } from './helpers/advanceToBlock'; import { advanceBlock } from '../helpers/advanceToBlock';
import { increaseTimeTo, duration } from './helpers/increaseTime'; import { increaseTimeTo, duration } from '../helpers/increaseTime';
import latestTime from './helpers/latestTime'; import latestTime from '../helpers/latestTime';
import EVMRevert from './helpers/EVMRevert'; import EVMRevert from '../helpers/EVMRevert';
const BigNumber = web3.BigNumber; const BigNumber = web3.BigNumber;
......
import ether from './helpers/ether'; import ether from '../helpers/ether';
import { advanceBlock } from './helpers/advanceToBlock'; import { advanceBlock } from '../helpers/advanceToBlock';
import { increaseTimeTo, duration } from './helpers/increaseTime'; import { increaseTimeTo, duration } from '../helpers/increaseTime';
import latestTime from './helpers/latestTime'; import latestTime from '../helpers/latestTime';
import EVMRevert from './helpers/EVMRevert'; import EVMRevert from '../helpers/EVMRevert';
const BigNumber = web3.BigNumber; const BigNumber = web3.BigNumber;
......
var Destructible = artifacts.require('../contracts/lifecycle/Destructible.sol'); var Destructible = artifacts.require('../contracts/lifecycle/Destructible.sol');
require('./helpers/transactionMined.js'); require('../helpers/transactionMined.js');
contract('Destructible', function (accounts) { contract('Destructible', function (accounts) {
it('should send balance to owner after destruction', async function () { it('should send balance to owner after destruction', async function () {
......
import assertRevert from './helpers/assertRevert'; import assertRevert from '../helpers/assertRevert';
const PausableMock = artifacts.require('mocks/PausableMock.sol'); const PausableMock = artifacts.require('mocks/PausableMock.sol');
contract('Pausable', function (accounts) { contract('Pausable', function (accounts) {
......
var TokenDestructible = artifacts.require('../contracts/lifecycle/TokenDestructible.sol'); var TokenDestructible = artifacts.require('../contracts/lifecycle/TokenDestructible.sol');
var StandardTokenMock = artifacts.require('mocks/StandardTokenMock.sol'); var StandardTokenMock = artifacts.require('mocks/StandardTokenMock.sol');
require('./helpers/transactionMined.js'); require('../helpers/transactionMined.js');
contract('TokenDestructible', function (accounts) { contract('TokenDestructible', function (accounts) {
let destructible; let destructible;
......
import assertRevert from './helpers/assertRevert'; import assertRevert from '../helpers/assertRevert';
const assertJump = require('./helpers/assertJump'); const assertJump = require('../helpers/assertJump');
var SafeMathMock = artifacts.require('mocks/SafeMathMock.sol'); var SafeMathMock = artifacts.require('mocks/SafeMathMock.sol');
contract('SafeMath', function (accounts) { contract('SafeMath', function (accounts) {
......
pragma solidity ^0.4.18;
import "../../contracts/math/Math.sol";
contract MathMock {
uint64 public result;
function max64(uint64 a, uint64 b) public {
result = Math.max64(a, b);
}
function min64(uint64 a, uint64 b) public {
result = Math.min64(a, b);
}
}
import expectThrow from './helpers/expectThrow'; import expectThrow from '../helpers/expectThrow';
const CanReclaimToken = artifacts.require('../contracts/ownership/CanReclaimToken.sol'); const CanReclaimToken = artifacts.require('../contracts/ownership/CanReclaimToken.sol');
const BasicTokenMock = artifacts.require('mocks/BasicTokenMock.sol'); const BasicTokenMock = artifacts.require('mocks/BasicTokenMock.sol');
......
import assertRevert from './helpers/assertRevert'; import assertRevert from '../helpers/assertRevert';
var Claimable = artifacts.require('../contracts/ownership/Claimable.sol'); var Claimable = artifacts.require('../contracts/ownership/Claimable.sol');
......
import assertRevert from '../helpers/assertRevert';
var DelayedClaimable = artifacts.require('../contracts/ownership/DelayedClaimable.sol'); var DelayedClaimable = artifacts.require('../contracts/ownership/DelayedClaimable.sol');
...@@ -42,25 +43,13 @@ contract('DelayedClaimable', function (accounts) { ...@@ -42,25 +43,13 @@ contract('DelayedClaimable', function (accounts) {
assert.equal(start, 100); assert.equal(start, 100);
let pendingOwner = await delayedClaimable.pendingOwner(); let pendingOwner = await delayedClaimable.pendingOwner();
assert.equal(pendingOwner, accounts[1]); assert.equal(pendingOwner, accounts[1]);
var err = null; await assertRevert(delayedClaimable.claimOwnership({ from: accounts[1] }));
try {
await delayedClaimable.claimOwnership({ from: accounts[1] });
} catch (error) {
err = error;
}
assert.isFalse(err.message.search('revert') === -1);
let owner = await delayedClaimable.owner(); let owner = await delayedClaimable.owner();
assert.isTrue(owner !== accounts[1]); assert.isTrue(owner !== accounts[1]);
}); });
it('set end and start invalid values fail', async function () { it('set end and start invalid values fail', async function () {
await delayedClaimable.transferOwnership(accounts[1]); await delayedClaimable.transferOwnership(accounts[1]);
var err = null; await assertRevert(delayedClaimable.setLimits(1001, 1000));
try {
await delayedClaimable.setLimits(1001, 1000);
} catch (error) {
err = error;
}
assert.isFalse(err.message.search('revert') === -1);
}); });
}); });
import expectThrow from './helpers/expectThrow'; import expectThrow from '../helpers/expectThrow';
const Ownable = artifacts.require('../contracts/ownership/Ownable.sol'); const Ownable = artifacts.require('../contracts/ownership/Ownable.sol');
const HasNoContracts = artifacts.require( const HasNoContracts = artifacts.require(
......
import expectThrow from './helpers/expectThrow'; import expectThrow from '../helpers/expectThrow';
import toPromise from './helpers/toPromise'; import toPromise from '../helpers/toPromise';
const HasNoEtherTest = artifacts.require('../mocks/HasNoEtherTest.sol'); const HasNoEtherTest = artifacts.require('../mocks/HasNoEtherTest.sol');
const ForceEther = artifacts.require('../mocks/ForceEther.sol'); const ForceEther = artifacts.require('../mocks/ForceEther.sol');
......
import expectThrow from './helpers/expectThrow'; import expectThrow from '../helpers/expectThrow';
const HasNoTokens = artifacts.require('../contracts/lifecycle/HasNoTokens.sol'); const HasNoTokens = artifacts.require('../contracts/lifecycle/HasNoTokens.sol');
const ERC23TokenMock = artifacts.require('mocks/ERC23TokenMock.sol'); const ERC23TokenMock = artifacts.require('mocks/ERC23TokenMock.sol');
......
import assertRevert from './helpers/assertRevert'; import assertRevert from '../helpers/assertRevert';
var Ownable = artifacts.require('../contracts/ownership/Ownable.sol'); var Ownable = artifacts.require('../contracts/ownership/Ownable.sol');
......
import expectThrow from './helpers/expectThrow'; import expectThrow from '../../helpers/expectThrow';
import expectEvent from './helpers/expectEvent'; import expectEvent from '../../helpers/expectEvent';
const RBACMock = artifacts.require('mocks/RBACMock.sol'); const RBACMock = artifacts.require('mocks/RBACMock.sol');
...@@ -45,17 +45,17 @@ contract('RBAC', function (accounts) { ...@@ -45,17 +45,17 @@ contract('RBAC', function (accounts) {
.should.be.fulfilled; .should.be.fulfilled;
}); });
it('does not allow admins to call #nobodyCanDoThis', async () => { it('does not allow admins to call #nobodyCanDoThis', async () => {
expectThrow( await expectThrow(
mock.nobodyCanDoThis({ from: admin }) mock.nobodyCanDoThis({ from: admin })
); );
}); });
it('does not allow advisors to call #nobodyCanDoThis', async () => { it('does not allow advisors to call #nobodyCanDoThis', async () => {
expectThrow( await expectThrow(
mock.nobodyCanDoThis({ from: advisors[0] }) mock.nobodyCanDoThis({ from: advisors[0] })
); );
}); });
it('does not allow anyone to call #nobodyCanDoThis', async () => { it('does not allow anyone to call #nobodyCanDoThis', async () => {
expectThrow( await expectThrow(
mock.nobodyCanDoThis({ from: anyone }) mock.nobodyCanDoThis({ from: anyone })
); );
}); });
...@@ -69,14 +69,14 @@ contract('RBAC', function (accounts) { ...@@ -69,14 +69,14 @@ contract('RBAC', function (accounts) {
}); });
it('announces a RoleAdded event on addRole', async () => { it('announces a RoleAdded event on addRole', async () => {
expectEvent.inTransaction( await expectEvent.inTransaction(
mock.adminAddRole(futureAdvisor, ROLE_ADVISOR, { from: admin }), mock.adminAddRole(futureAdvisor, ROLE_ADVISOR, { from: admin }),
'RoleAdded' 'RoleAdded'
); );
}); });
it('announces a RoleRemoved event on removeRole', async () => { it('announces a RoleRemoved event on removeRole', async () => {
expectEvent.inTransaction( await expectEvent.inTransaction(
mock.adminRemoveRole(futureAdvisor, ROLE_ADVISOR, { from: admin }), mock.adminRemoveRole(futureAdvisor, ROLE_ADVISOR, { from: admin }),
'RoleRemoved' 'RoleRemoved'
); );
...@@ -85,12 +85,12 @@ contract('RBAC', function (accounts) { ...@@ -85,12 +85,12 @@ contract('RBAC', function (accounts) {
context('in adversarial conditions', () => { context('in adversarial conditions', () => {
it('does not allow an advisor to remove another advisor', async () => { it('does not allow an advisor to remove another advisor', async () => {
expectThrow( await expectThrow(
mock.removeAdvisor(advisors[1], { from: advisors[0] }) mock.removeAdvisor(advisors[1], { from: advisors[0] })
); );
}); });
it('does not allow "anyone" to remove an advisor', async () => { it('does not allow "anyone" to remove an advisor', async () => {
expectThrow( await expectThrow(
mock.removeAdvisor(advisors[0], { from: anyone }) mock.removeAdvisor(advisors[0], { from: anyone })
); );
}); });
......
...@@ -5,7 +5,7 @@ require('chai') ...@@ -5,7 +5,7 @@ require('chai')
.use(require('chai-bignumber')(BigNumber)) .use(require('chai-bignumber')(BigNumber))
.should(); .should();
const EVMThrow = require('./helpers/EVMThrow.js'); const EVMThrow = require('../helpers/EVMThrow.js');
const SplitPayment = artifacts.require('../contracts/payment/SplitPayment.sol'); const SplitPayment = artifacts.require('../contracts/payment/SplitPayment.sol');
contract('SplitPayment', function ([owner, payee1, payee2, payee3, nonpayee1, payer1]) { contract('SplitPayment', function ([owner, payee1, payee2, payee3, nonpayee1, payer1]) {
......
import assertRevert from './helpers/assertRevert'; import assertRevert from '../helpers/assertRevert';
var BasicTokenMock = artifacts.require('mocks/BasicTokenMock.sol'); var BasicTokenMock = artifacts.require('mocks/BasicTokenMock.sol');
......
const EVMRevert = require('./helpers/EVMRevert.js'); const EVMRevert = require('../helpers/EVMRevert.js');
const BurnableTokenMock = artifacts.require('mocks/BurnableTokenMock.sol'); const BurnableTokenMock = artifacts.require('mocks/BurnableTokenMock.sol');
const BigNumber = web3.BigNumber; const BigNumber = web3.BigNumber;
......
import expectThrow from './helpers/expectThrow'; import expectThrow from '../helpers/expectThrow';
import ether from './helpers/ether'; import ether from '../helpers/ether';
var CappedToken = artifacts.require('../contracts/Tokens/CappedToken.sol'); var CappedToken = artifacts.require('../contracts/Tokens/CappedToken.sol');
......
import expectThrow from './helpers/expectThrow'; import expectThrow from '../helpers/expectThrow';
var MintableToken = artifacts.require('../contracts/Tokens/MintableToken.sol'); var MintableToken = artifacts.require('../contracts/Tokens/MintableToken.sol');
contract('Mintable', function (accounts) { contract('Mintable', function (accounts) {
......
'user strict'; 'user strict';
import assertRevert from './helpers/assertRevert'; import assertRevert from '../helpers/assertRevert';
var PausableTokenMock = artifacts.require('./mocks/PausableTokenMock.sol'); var PausableTokenMock = artifacts.require('./mocks/PausableTokenMock.sol');
contract('PausableToken', function (accounts) { contract('PausableToken', function (accounts) {
......
import EVMThrow from './helpers/EVMThrow'; import EVMThrow from '../helpers/EVMThrow';
require('chai') require('chai')
.use(require('chai-as-promised')) .use(require('chai-as-promised'))
......
import assertRevert from './helpers/assertRevert'; import assertRevert from '../helpers/assertRevert';
var StandardTokenMock = artifacts.require('mocks/StandardTokenMock.sol'); var StandardTokenMock = artifacts.require('mocks/StandardTokenMock.sol');
......
import latestTime from './helpers/latestTime'; import latestTime from '../helpers/latestTime';
import { increaseTimeTo, duration } from './helpers/increaseTime'; import { increaseTimeTo, duration } from '../helpers/increaseTime';
const BigNumber = web3.BigNumber; const BigNumber = web3.BigNumber;
......
import EVMRevert from './helpers/EVMRevert'; import EVMRevert from '../helpers/EVMRevert';
import latestTime from './helpers/latestTime'; import latestTime from '../helpers/latestTime';
import { increaseTimeTo, duration } from './helpers/increaseTime'; import { increaseTimeTo, duration } from '../helpers/increaseTime';
const BigNumber = web3.BigNumber; const BigNumber = web3.BigNumber;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment