diff --git a/contracts/gateway/EIP20CoGateway.sol b/contracts/gateway/EIP20CoGateway.sol index ca2b74ed..783d3ce2 100644 --- a/contracts/gateway/EIP20CoGateway.sol +++ b/contracts/gateway/EIP20CoGateway.sol @@ -1161,7 +1161,7 @@ contract EIP20CoGateway is GatewayBase { redeemer_ = message.sender; redeemAmount_ = redeems[_messageHash].amount; // Burn the redeem amount. - UtilityTokenInterface(utilityToken).burn(address(this), redeemAmount_); + UtilityTokenInterface(utilityToken).burn(redeemAmount_); // Transfer the bounty amount to the facilitator msg.sender.transfer(redeems[_messageHash].bounty); diff --git a/contracts/gateway/EIP20Interface.sol b/contracts/gateway/EIP20Interface.sol index 3a0241ef..b5533e37 100644 --- a/contracts/gateway/EIP20Interface.sol +++ b/contracts/gateway/EIP20Interface.sol @@ -26,28 +26,134 @@ pragma solidity ^0.5.0; // ---------------------------------------------------------------------------- /** - * @title EIP20Interface + * @title EIP20Interface. * - * @notice Provides EIP20 token interface + * @notice Provides EIP20 token interface. */ contract EIP20Interface { - /** Events */ - event Transfer(address indexed _from, address indexed _to, uint256 _value); - event Approval(address indexed _owner, address indexed _spender, uint256 _value); + /* Events */ + + event Transfer( + address indexed _from, + address indexed _to, + uint256 _value + ); + + event Approval( + address indexed _owner, + address indexed _spender, + uint256 _value + ); + /* Public functions */ - - function name() public view returns (string memory); - function symbol() public view returns (string memory); - function decimals() public view returns (uint8); - function totalSupply() public view returns (uint256); - - function balanceOf(address _owner) public view returns (uint256 balance); - function allowance(address _owner, address _spender) public view returns (uint256 remaining); - - function transfer(address _to, uint256 _value) public returns (bool success); - function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); - function approve(address _spender, uint256 _value) public returns (bool success); + + /** + * @notice Public function to get the name of the token. + * + * @return tokenName_ Name of the token. + */ + function name() public view returns (string memory tokenName_); + + /** + * @notice Public function to get the symbol of the token. + * + * @return tokenSymbol_ Symbol of the token. + */ + function symbol() public view returns (string memory tokenSymbol_); + + /** + * @notice Public function to get the decimals of the token. + * + * @return tokenDecimals Decimals of the token. + */ + function decimals() public view returns (uint8 tokenDecimals_); + + /** + * @notice Public function to get the total supply of the tokens. + * + * @return totalTokenSupply_ Total token supply. + */ + function totalSupply() + public + view + returns (uint256 totalTokenSupply_); + + /** + * @notice Get the balance of an account. + * + * @param _owner Address of the owner account. + * + * @return balance_ Account balance of the owner account. + */ + function balanceOf(address _owner) public view returns (uint256 balance_); + + /** + * @notice Public function to get the allowance. + * + * @param _owner Address of the owner account. + * @param _spender Address of the spender account. + * + * @return allowance_ Remaining allowance for the spender to spend from + * owner's account. + */ + function allowance( + address _owner, + address _spender + ) + public + view + returns (uint256 allowance_); + + + /** + * @notice Public function to transfer the token. + * + * @param _to Address to which tokens are transferred. + * @param _value Amount of tokens to be transferred. + * + * @return success_ `true` for a successful transfer, `false` otherwise. + */ + function transfer( + address _to, + uint256 _value + ) + public + returns (bool success_); + + /** + * @notice Public function transferFrom. + * + * @param _from Address from which tokens are transferred. + * @param _to Address to which tokens are transferred. + * @param _value Amount of tokens transferred. + * + * @return success_ `true` for a successful transfer, `false` otherwise. + */ + function transferFrom( + address _from, + address _to, + uint256 _value + ) + public + returns (bool success_); + + /** + * @notice Public function to approve an account for transfer. + * + * @param _spender Address authorized to spend from the function caller's + * address. + * @param _value Amount up to which spender is authorized to spend. + * + * @return bool `true` for a successful approval, `false` otherwise. + */ + function approve( + address _spender, + uint256 _value + ) + public + returns (bool success_); + } diff --git a/contracts/gateway/EIP20Token.sol b/contracts/gateway/EIP20Token.sol index 74f8968d..220256ba 100644 --- a/contracts/gateway/EIP20Token.sol +++ b/contracts/gateway/EIP20Token.sol @@ -15,7 +15,6 @@ pragma solidity ^0.5.0; // limitations under the License. // // ---------------------------------------------------------------------------- -// Utility chain: EIP20 Token Implementation // // http://www.simpletoken.org/ // @@ -25,27 +24,41 @@ import "./EIP20Interface.sol"; import "../lib/SafeMath.sol"; /** - * @title EIP20Token contract which implements EIP20Interface. + * @title EIP20Token contract. * - * @notice Implements EIP20 token. + * @notice EIP20Token implements EIP20Interface. */ contract EIP20Token is EIP20Interface { + using SafeMath for uint256; + /** Name of the token. */ string private tokenName; + + /** Symbol of the token. */ string private tokenSymbol; + + /** Decimals used by the token. */ uint8 private tokenDecimals; + + /** Total supply of the token. */ uint256 internal totalTokenSupply; + /** Stores the token balance of the accounts. */ mapping(address => uint256) balances; + + /** Stores the authorization information. */ mapping(address => mapping (address => uint256)) allowed; + + /* Constructor */ + /** - * @notice Contract constructor. + * @notice Contract constructor. * - * @param _symbol Symbol of the token. - * @param _name Name of the token. - * @param _decimals Decimal places of the token. + * @param _symbol Symbol of the token. + * @param _name Name of the token. + * @param _decimals Decimal places of the token. */ constructor( string memory _symbol, @@ -60,67 +73,71 @@ contract EIP20Token is EIP20Interface { totalTokenSupply = 0; } + + /* Public functions. */ + /** - * @notice Public view function name. + * @notice Public function to get the name of the token. * - * @return string Name of the token. + * @return tokenName_ Name of the token. */ - function name() public view returns (string memory) { - return tokenName; + function name() public view returns (string memory tokenName_) { + tokenName_ = tokenName; } /** - * @notice Public view function symbol. + * @notice Public function to get the symbol of the token. * - * @return string Symbol of the token. + * @return tokenSymbol_ Symbol of the token. */ - function symbol() public view returns (string memory) { - return tokenSymbol; + function symbol() public view returns (string memory tokenSymbol_) { + tokenSymbol_ = tokenSymbol; } /** - * @notice Public view function decimals. + * @notice Public function to get the decimals of the token. * - * @return uint8 Decimal places of the token. + * @return tokenDecimals Decimals of the token. */ - function decimals() public view returns (uint8) { - return tokenDecimals; + function decimals() public view returns (uint8 tokenDecimals_) { + tokenDecimals_ = tokenDecimals; } /** - * @notice Public view function balanceOf. + * @notice Get the balance of an account. * - * @param _owner Address of the owner account. + * @param _owner Address of the owner account. * - * @return uint256 Account balance of the owner account. + * @return balance_ Account balance of the owner account. */ - function balanceOf(address _owner) public view returns (uint256) { - return balances[_owner]; + function balanceOf(address _owner) public view returns (uint256 balance_) { + balance_ = balances[_owner]; } /** - * @notice Public view function totalSupply. + * @notice Public function to get the total supply of the tokens. * - * @dev Get totalTokenSupply as view so that child cannot edit. + * @dev Get totalTokenSupply as view so that child cannot edit. * - * @return uint256 Total token supply. + * @return totalTokenSupply_ Total token supply. */ function totalSupply() public view - returns (uint256) + returns (uint256 totalTokenSupply_) { - return totalTokenSupply; + totalTokenSupply_ = totalTokenSupply; } /** - * @notice Public view function allowance. + * @notice Public function to get the allowance. * - * @param _owner Address of the owner account. - * @param _spender Address of the spender account. + * @param _owner Address of the owner account. + * @param _spender Address of the spender account. * - * @return uint256 Remaining allowance for the spender to spend from owner's account. + * @return allowance_ Remaining allowance for the spender to spend from + * owner's account. */ function allowance( address _owner, @@ -128,56 +145,45 @@ contract EIP20Token is EIP20Interface { ) public view - returns (uint256 /* remaining */) + returns (uint256 allowance_) { - return allowed[_owner][_spender]; + allowance_ = allowed[_owner][_spender]; } /** - * @notice Public function transfer. + * @notice Public function to transfer the token. * - * @dev Fires the transfer event, throws if, _from account does not have - * enough tokens to spend. + * @dev Fires the transfer event, throws if, _from account does not have + * enough tokens to spend. * - * @param _to Address to which tokens are transferred. - * @param _value Amount of tokens to be transferred. + * @param _to Address to which tokens are transferred. + * @param _value Amount of tokens to be transferred. * - * @return bool True for a successful transfer, false otherwise. + * @return success_ `true` for a successful transfer, `false` otherwise. */ function transfer( address _to, uint256 _value ) public - returns (bool success) + returns (bool success_) { - /** - * According to the EIP20 spec, "transfers of 0 values MUST be treated - * as normal transfers and fire the Transfer event". - * Also, should throw if not enough balance. This is taken care of by - * SafeMath. - */ - balances[msg.sender] = balances[msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - - emit Transfer(msg.sender, _to, _value); - - return true; + success_ = transferBalance(msg.sender, _to, _value); } /** - * @notice Public function transferFrom. + * @notice Public function transferFrom. * - * @dev Allows a contract to transfer tokens on behalf of _from address - * to _to address, the function caller has to be pre-authorized - * for multiple transfers up to the total of _value amount by - * the _from address. + * @dev Allows a contract to transfer tokens on behalf of _from address + * to _to address, the function caller has to be pre-authorized for + * multiple transfers up to the total of _value amount by the _from + * address. * - * @param _from Address from which tokens are transferred. - * @param _to Address to which tokens are transferred. - * @param _value Amount of tokens transferred. + * @param _from Address from which tokens are transferred. + * @param _to Address to which tokens are transferred. + * @param _value Amount of tokens transferred. * - * @return bool True for a successful transfer, false otherwise. + * @return success_ `true` for a successful transfer, `false` otherwise. */ function transferFrom( address _from, @@ -185,43 +191,74 @@ contract EIP20Token is EIP20Interface { uint256 _value ) public - returns (bool success) + returns (bool success_) { - balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - balances[_to] = balances[_to].add(_value); - - emit Transfer(_from, _to, _value); - - return true; + success_ = transferBalance(_from, _to, _value); } /** - * @notice Public function approve. + * @notice Public function to approve an account for transfer. * - * @dev Allows _spender address to withdraw from function caller's - * account, multiple times up to the _value amount, if this - * function is called again it overwrites the current allowance - * with _value. + * @dev Allows _spender address to withdraw from function caller's account, + * multiple times up to the _value amount, if this function is called + * again it overwrites the current allowance with _value. * - * @param _spender Address authorized to spend from the function caller's + * @param _spender Address authorized to spend from the function caller's * address. - * @param _value Amount up to which spender is authorized to spend. + * @param _value Amount up to which spender is authorized to spend. * - * @return bool True for a successful approval, false otherwise. + * @return bool `true` for a successful approval, `false` otherwise. */ function approve( address _spender, uint256 _value ) public - returns (bool success) + returns (bool success_) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); - return true; + success_ = true; + } + + + /* Internal functions. */ + + /** + * @notice Internal function to transfer the tokens. + * + * @dev This is an internal functions that transfers the token. This + * function is called from transfer and transferFrom functions. + * + * @param _from Address from which tokens are transferred. + * @param _to Address to which tokens are transferred. + * @param _value Amount of tokens transferred. + * + * @return success_ `true` for a successful transfer, `false` otherwise. + */ + function transferBalance( + address _from, + address _to, + uint256 _value + ) + internal + returns (bool success_) + { + /** + * According to the EIP20 spec, "transfers of 0 values MUST be treated + * as normal transfers and fire the Transfer event". + * Also, should throw if not enough balance. This is taken care of by + * SafeMath. + */ + balances[_from] = balances[_from].sub(_value); + balances[_to] = balances[_to].add(_value); + + emit Transfer(_from, _to, _value); + + success_ = true; } } diff --git a/contracts/gateway/OSTPrime.sol b/contracts/gateway/OSTPrime.sol index 7a901a51..d3699576 100644 --- a/contracts/gateway/OSTPrime.sol +++ b/contracts/gateway/OSTPrime.sol @@ -16,153 +16,200 @@ pragma solidity ^0.5.0; // limitations under the License. // // ---------------------------------------------------------------------------- -// Auxiliary chain: OSTPrime // // http://www.simpletoken.org/ // // ---------------------------------------------------------------------------- -/// Simple Token Prime [OST'] is equivalently staked for with Simple Token -/// on the value chain and is the base token that pays for gas on the utility -/// chain. The gasprice on utility chains is set in [ST'-Wei/gas] (like -/// Ether pays for gas on Ethereum mainnet) when sending a transaction on -/// the auxiliary chain. - +/* + * Simple Token Prime [OST'] is equivalently staked for with Simple Token + * on the value chain and is the base token that pays for gas on the auxiliary + * chain. The gasprice on auxiliary chains is set in [OST'-Wei/gas] (like + * Ether pays for gas on Ethereum mainnet) when sending a transaction on + * the auxiliary chain. + */ import "../lib/SafeMath.sol"; import "./UtilityToken.sol"; import "./OSTPrimeConfig.sol"; /** - * @title OSTPrime contract which implements UtilityToken and + * @title OSTPrime contract implements UtilityToken and * OSTPrimeConfig. * - * @notice A freely tradable equivalent representation of Simple Token [ST] - * on Ethereum mainnet on the utility chain. + * @notice A freely tradable equivalent representation of Simple Token [OST] + * on Ethereum mainnet on the auxiliary chain. * * @dev OSTPrime functions as the base token to pay for gas consumption on the * utility chain. */ contract OSTPrime is UtilityToken, OSTPrimeConfig { + /* Usings */ + using SafeMath for uint256; - /** Emitted whenever OSTPrime base token is claimed. */ - event Claim( - address indexed _beneficiary, - uint256 _amount, - uint256 _totalSupply, - address _utilityToken + /** Emitted whenever OST Prime token is converted to OST Prime base token. */ + event TokenUnwrapped( + address indexed _account, + uint256 _amount ); - /** Emitted whenever basetoken is converted to OSTPrime */ - event Redeem( - address indexed _redeemer, - uint256 _amount, - uint256 _totalSupply, - address _utilityToken + /** Emitted whenever OST Prime base token is converted to OST Prime token. */ + event TokenWrapped( + address indexed _account, + uint256 _amount ); /** - * set when OST' has received TOKENS_MAX tokens; - * when uninitialised mint is not allowed + * Set when OST Prime has received TOKENS_MAX tokens; + * when uninitialized wrap and unwrap is not allowed. */ - bool private initialized; + bool public initialized; - /** Modifiers */ + + /* Modifiers */ /** * @notice Modifier onlyInitialized. * - * @dev Checks if initialized is set to True to proceed. + * @dev Checks if initialized is set to `true` to proceed. */ modifier onlyInitialized() { - require(initialized); + require( + initialized == true, + "Contract is not initialized." + ); _; } - /* Public functions */ + + /* Constructor */ /** * @notice Contract constructor. * - * @dev this contract should be deployed with zero gas + * @dev This contract should be deployed with zero gas. * - * @param _valueToken ERC20 token address in origin chain + * @param _valueToken ERC20 token address in origin chain. */ constructor(address _valueToken) public - UtilityToken(TOKEN_SYMBOL, TOKEN_NAME, TOKEN_DECIMALS, _valueToken) - { + UtilityToken( + TOKEN_SYMBOL, + TOKEN_NAME, + TOKEN_DECIMALS, + _valueToken + ) + {} - } + + /* Public functions. */ /** * @notice Public function initialize. * - * @dev it must verify that the genesis exactly specified TOKENS_MAX + * @dev It must verify that the genesis exactly specified TOKENS_MAX * so that all base tokens are held by OSTPrime. * On setup of the auxiliary chain the base tokens need to be * transferred in full to OSTPrime for the base tokens to be - * minted as OST' + * minted as OST Prime. + * + * @return success_ `true` if initialize was successful. */ function initialize() - public + external payable + returns (bool success_) { - require(msg.value == TOKENS_MAX); + require( + initialized == false, + "Contract is already initialized." + ); + + require( + msg.value == TOKENS_MAX, + "Payable amount must be equal to total supply of token." + ); + initialized = true; + + success_ = true; } + + /* External functions. */ + /** - * @notice convert the OST utility token to base token + * @notice Convert the OST Prime token to OST Prime base token. * - * @param _amount Amount of basetoken + * @param _amount Amount of OST Prime token to convert to base token. * - * @return `true` if claim was successfully progressed + * @return success_ `true` if unwrap was successful. */ - function claim( + function unwrap( uint256 _amount ) - public + external onlyInitialized - returns (bool /* success */) + returns (bool success_) { + require( + _amount > 0, + "Amount must not be zero." + ); + require( _amount <= balances[msg.sender], - "Insufficient balance" + "Insufficient balance." ); + /* + * The OST Prime base token balance of contract should always be + * greater than the amount if the above conditions are satisfied + * received payable amount. + */ assert(address(this).balance >= _amount); - transfer(address(this),_amount); + transferBalance(msg.sender, address(this), _amount); + msg.sender.transfer(_amount); - emit Claim(msg.sender, _amount, totalTokenSupply, address(this)); + emit TokenUnwrapped(msg.sender, _amount); - return true; + success_ = true; } /** - * @notice convert the base token to OST utility token - * - * @param _amount Amount of utility token + * @notice Convert OST Prime base token to OST Prime token. * - * @return `true` if claim was successfully progressed + * @return success_ `true` if claim was successfully progressed. */ - function redeem(uint256 _amount) - public + function wrap() + external onlyInitialized payable - returns (bool /** success */) + returns (bool success_) { - require(msg.value == _amount); - assert(address(this).balance >= _amount); + uint256 amount = msg.value; + address account = msg.sender; - allowed[address(this)][msg.sender] = _amount; - transferFrom(address(this), msg.sender, _amount); + require( + amount > 0, + "Payable amount should not be zero." + ); + + /* + * The OST Prime balance of contract should always be greater than the + * received payable amount. + */ + assert(balances[address(this)] >= amount); - emit Redeem(msg.sender, _amount, totalTokenSupply, address(this)); + transferBalance(address(this), account, amount); + emit TokenWrapped(account, amount); + + success_ = true; } + } diff --git a/contracts/gateway/UtilityToken.sol b/contracts/gateway/UtilityToken.sol index 3a020f29..fcc4750a 100644 --- a/contracts/gateway/UtilityToken.sol +++ b/contracts/gateway/UtilityToken.sol @@ -91,7 +91,7 @@ contract UtilityToken is { require( _valueToken != address(0), - "ERC20 token should not be zero" + "ERC20 token should not be zero." ); valueToken = _valueToken; diff --git a/contracts/gateway/UtilityTokenInterface.sol b/contracts/gateway/UtilityTokenInterface.sol index beda72da..9842ef77 100644 --- a/contracts/gateway/UtilityTokenInterface.sol +++ b/contracts/gateway/UtilityTokenInterface.sol @@ -73,13 +73,11 @@ contract UtilityTokenInterface { * @dev only burns the amount from CoGateway address, So to burn * transfer the amount to CoGateway. * - * @param _burner Burner address. * @param _amount Amount of tokens to burn. * * @return bool `true` if burn is successful, false otherwise. */ function burn( - address _burner, uint256 _amount ) external diff --git a/contracts/test/gateway/TestOSTPrime.sol b/contracts/test/gateway/TestOSTPrime.sol new file mode 100644 index 00000000..e638b938 --- /dev/null +++ b/contracts/test/gateway/TestOSTPrime.sol @@ -0,0 +1,65 @@ +/* solhint-disable-next-line compiler-fixed */ +pragma solidity ^0.5.0; + +// Copyright 2018 OpenST Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ---------------------------------------------------------------------------- +// +// http://www.simpletoken.org/ +// +// ---------------------------------------------------------------------------- + +// TestOSTPrime is used to test the OSTPrime contract. +import "../../gateway/OSTPrime.sol"; + +/** @title Test OST prime contract. */ +contract TestOSTPrime is OSTPrime { + + + /* Constructor */ + + /** + * @notice Contract constructor. + * + * @dev This contract is used only for testing. + * + * @param _valueToken ERC20 token address in origin chain. + */ + constructor(address _valueToken) + public + OSTPrime(_valueToken) + {} + + + /* Public functions. */ + + /** + * @notice Set the OST Prime token balance for the given account address. + * + * @dev This is used only for testing. + * + * @param _account Address for which the balance is to be set. + * @param _amount The amount of tokens to be set. + */ + function setTokenBalance( + address _account, + uint256 _amount + ) + public + { + balances[_account] = _amount; + } + +} diff --git a/package-lock.json b/package-lock.json index e94e176a..78747663 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "integrity": "sha512-y2OKSEW4gf2838Eavc56vQY9V46zaXkf3Jl1WpTfUBbzAVrXSr4JRZAAWv55Tv9s5WNz1rVgBgz5d2aJIL1QCg==", "dev": true, "requires": { - "web3": "^0.18.4" + "web3": "0.18.4" }, "dependencies": { "web3": { @@ -32,10 +32,10 @@ "dev": true, "requires": { "bignumber.js": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "crypto-js": "^3.1.4", - "utf8": "^2.1.1", - "xhr2": "*", - "xmlhttprequest": "*" + "crypto-js": "3.1.8", + "utf8": "2.1.2", + "xhr2": "0.1.4", + "xmlhttprequest": "1.8.0" } } } @@ -46,7 +46,7 @@ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "~2.1.18", + "mime-types": "2.1.20", "negotiator": "0.6.1" } }, @@ -62,10 +62,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "amdefine": { @@ -93,12 +93,12 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, @@ -108,7 +108,7 @@ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { - "safer-buffer": "~2.1.0" + "safer-buffer": "2.1.2" } }, "asn1.js": { @@ -117,9 +117,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "bn.js": "4.11.8", + "inherits": "2.0.1", + "minimalistic-assert": "1.0.1" } }, "assert": { @@ -139,7 +139,7 @@ }, "async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, @@ -186,12 +186,11 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "^0.14.3" + "tweetnacl": "0.14.5" } }, "bignumber.js": { "version": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "from": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", "dev": true }, "bindings": { @@ -202,12 +201,12 @@ }, "bl": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz", "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2" } }, "block-stream": { @@ -216,7 +215,7 @@ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "dev": true, "requires": { - "inherits": "~2.0.0" + "inherits": "2.0.1" } }, "bluebird": { @@ -238,15 +237,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "~1.0.4", + "content-type": "1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", + "depd": "1.1.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", + "on-finished": "2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "~1.6.16" + "type-is": "1.6.16" }, "dependencies": { "debug": { @@ -266,7 +265,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -288,12 +287,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.1", + "safe-buffer": "5.1.2" } }, "browserify-cipher": { @@ -302,9 +301,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" } }, "browserify-des": { @@ -313,10 +312,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.1", + "safe-buffer": "5.1.2" } }, "browserify-rsa": { @@ -325,8 +324,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "bn.js": "4.11.8", + "randombytes": "2.0.6" } }, "browserify-sha3": { @@ -335,7 +334,7 @@ "integrity": "sha1-P/NKMAbvFcD7NWflQbkaI0ASPRE=", "dev": true, "requires": { - "js-sha3": "^0.3.1" + "js-sha3": "0.3.1" } }, "browserify-sign": { @@ -344,13 +343,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "inherits": "2.0.1", + "parse-asn1": "5.1.1" } }, "buffer": { @@ -359,8 +358,8 @@ "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "1.3.0", + "ieee754": "1.1.12" } }, "buffer-alloc": { @@ -369,8 +368,8 @@ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" + "buffer-alloc-unsafe": "1.1.0", + "buffer-fill": "1.0.0" } }, "buffer-alloc-unsafe": { @@ -439,8 +438,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.1", + "safe-buffer": "5.1.2" } }, "cliui": { @@ -449,9 +448,9 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" } }, "co": { @@ -472,7 +471,7 @@ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "commander": { @@ -529,8 +528,8 @@ "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", "dev": true, "requires": { - "object-assign": "^4", - "vary": "^1" + "object-assign": "4.1.1", + "vary": "1.1.2" } }, "create-ecdh": { @@ -539,8 +538,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "bn.js": "4.11.8", + "elliptic": "6.4.1" } }, "create-hash": { @@ -549,11 +548,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "cipher-base": "1.0.4", + "inherits": "2.0.1", + "md5.js": "1.3.4", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" } }, "create-hmac": { @@ -562,12 +561,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.1", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "cross-spawn": { @@ -576,9 +575,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "lru-cache": "4.1.3", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, "crypto-browserify": { @@ -587,17 +586,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.1", + "pbkdf2": "3.0.16", + "public-encrypt": "4.0.2", + "randombytes": "2.0.6", + "randomfill": "1.0.4" } }, "crypto-js": { @@ -612,7 +611,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "death": { @@ -648,14 +647,14 @@ "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", "dev": true, "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" + "decompress-tar": "4.1.1", + "decompress-tarbz2": "4.1.1", + "decompress-targz": "4.1.1", + "decompress-unzip": "4.0.1", + "graceful-fs": "4.1.11", + "make-dir": "1.3.0", + "pify": "2.3.0", + "strip-dirs": "2.1.0" } }, "decompress-response": { @@ -664,7 +663,7 @@ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dev": true, "requires": { - "mimic-response": "^1.0.0" + "mimic-response": "1.0.1" } }, "decompress-tar": { @@ -673,9 +672,9 @@ "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "dev": true, "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" + "file-type": "5.2.0", + "is-stream": "1.1.0", + "tar-stream": "1.6.2" } }, "decompress-tarbz2": { @@ -684,11 +683,11 @@ "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "dev": true, "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" + "decompress-tar": "4.1.1", + "file-type": "6.2.0", + "is-stream": "1.1.0", + "seek-bzip": "1.0.5", + "unbzip2-stream": "1.3.0" }, "dependencies": { "file-type": { @@ -705,9 +704,9 @@ "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "dev": true, "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" + "decompress-tar": "4.1.1", + "file-type": "5.2.0", + "is-stream": "1.1.0" } }, "decompress-unzip": { @@ -716,26 +715,26 @@ "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", "dev": true, "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" + "file-type": "3.9.0", + "get-stream": "2.3.1", + "pify": "2.3.0", + "yauzl": "2.10.0" }, "dependencies": { "file-type": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "resolved": "http://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", "dev": true }, "get-stream": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", "dev": true, "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" } } } @@ -764,8 +763,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "inherits": "2.0.1", + "minimalistic-assert": "1.0.1" } }, "destroy": { @@ -786,9 +785,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" } }, "dom-walk": { @@ -810,8 +809,8 @@ "dev": true, "optional": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" } }, "ee-first": { @@ -826,13 +825,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.5", + "hmac-drbg": "1.0.1", + "inherits": "2.0.1", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "encodeurl": { @@ -847,7 +846,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "^1.4.0" + "once": "1.4.0" } }, "error-ex": { @@ -856,7 +855,7 @@ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "escape-html": { @@ -877,21 +876,21 @@ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" }, "dependencies": { "source-map": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", "dev": true, "optional": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -926,8 +925,8 @@ "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", "dev": true, "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" + "idna-uts46-hx": "2.3.1", + "js-sha3": "0.5.7" }, "dependencies": { "js-sha3": { @@ -944,13 +943,13 @@ "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", "dev": true, "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "keccakjs": "^0.2.1", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" + "bn.js": "4.11.8", + "elliptic": "6.4.1", + "keccakjs": "0.2.1", + "nano-json-stream-parser": "0.1.2", + "servify": "0.1.12", + "ws": "3.3.3", + "xhr-request-promise": "0.1.2" } }, "ethereumjs-testrpc-sc": { @@ -959,7 +958,7 @@ "integrity": "sha512-iv2qiGBFgk9mn5Nq2enX8dG5WQ7Lk+FCqpnxfPfH4Ns8KLPwttmNOy264nh3SXDJJvcQwz/XnlLteDQVILotbg==", "dev": true, "requires": { - "source-map-support": "^0.5.3" + "source-map-support": "0.5.9" } }, "ethers": { @@ -968,9 +967,9 @@ "integrity": "sha512-SoYhktEbLxf+fiux5SfCEwdzWENMvgIbMZD90I62s4GZD9nEjgEWy8ZboI3hck193Vs0bDoTohDISx84f2H2tw==", "dev": true, "requires": { - "@types/node": "^10.3.2", + "@types/node": "10.10.3", "aes-js": "3.0.0", - "bn.js": "^4.4.0", + "bn.js": "4.11.8", "elliptic": "6.3.3", "hash.js": "1.1.3", "js-sha3": "0.5.7", @@ -986,10 +985,10 @@ "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "inherits": "2.0.1" } }, "hash.js": { @@ -998,8 +997,8 @@ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" }, "dependencies": { "inherits": { @@ -1024,7 +1023,7 @@ }, "uuid": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=", "dev": true } @@ -1060,8 +1059,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "md5.js": "1.3.4", + "safe-buffer": "5.1.2" } }, "execa": { @@ -1070,13 +1069,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, "express": { @@ -1085,36 +1084,36 @@ "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "dev": true, "requires": { - "accepts": "~1.3.5", + "accepts": "1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "~1.0.4", + "content-type": "1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.3", + "proxy-addr": "2.0.4", "qs": "6.5.1", - "range-parser": "~1.2.0", + "range-parser": "1.2.0", "safe-buffer": "5.1.1", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "statuses": "1.4.0", + "type-is": "1.6.16", "utils-merge": "1.0.1", - "vary": "~1.1.2" + "vary": "1.1.2" }, "dependencies": { "body-parser": { @@ -1124,15 +1123,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "~1.0.4", + "content-type": "1.0.4", "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", + "depd": "1.1.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.19", - "on-finished": "~2.3.0", + "on-finished": "2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "~1.6.15" + "type-is": "1.6.16" } }, "debug": { @@ -1189,7 +1188,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" + "statuses": "1.4.0" } }, "setprototypeof": { @@ -1250,7 +1249,7 @@ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "requires": { - "pend": "~1.2.0" + "pend": "1.2.0" } }, "file-type": { @@ -1261,17 +1260,17 @@ }, "finalhandler": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" }, "dependencies": { "debug": { @@ -1297,8 +1296,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" } }, "for-each": { @@ -1307,7 +1306,7 @@ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "requires": { - "is-callable": "^1.1.3" + "is-callable": "1.1.4" } }, "forever-agent": { @@ -1322,9 +1321,9 @@ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "requires": { - "asynckit": "^0.4.0", + "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "mime-types": "2.1.20" }, "dependencies": { "combined-stream": { @@ -1333,7 +1332,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } } } @@ -1362,11 +1361,11 @@ "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" } }, "fs-promise": { @@ -1375,10 +1374,10 @@ "integrity": "sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=", "dev": true, "requires": { - "any-promise": "^1.3.0", - "fs-extra": "^2.0.0", - "mz": "^2.6.0", - "thenify-all": "^1.6.0" + "any-promise": "1.3.0", + "fs-extra": "2.1.2", + "mz": "2.7.0", + "thenify-all": "1.6.0" }, "dependencies": { "fs-extra": { @@ -1387,8 +1386,8 @@ "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0" } } } @@ -1405,10 +1404,10 @@ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" + "graceful-fs": "4.1.11", + "inherits": "2.0.1", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" } }, "ganache-cli": { @@ -1417,7 +1416,7 @@ "integrity": "sha512-yXzteu4SIgUL31mnpm9j+x6dpHUw0p/nsRVkcySKq0w+1vDxH9jMErP1QhZAJuTVE6ni4nfvGSNkaQx5cD3jfg==", "dev": true, "requires": { - "source-map-support": "^0.5.3" + "source-map-support": "0.5.9" } }, "get-caller-file": { @@ -1428,7 +1427,7 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, @@ -1438,7 +1437,7 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "glob": { @@ -1447,11 +1446,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "inflight": "1.0.6", + "inherits": "2.0.1", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "global": { @@ -1460,8 +1459,8 @@ "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", "dev": true, "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" + "min-document": "2.19.0", + "process": "0.5.2" } }, "got": { @@ -1470,20 +1469,20 @@ "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", "dev": true, "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-plain-obj": "1.1.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.1", + "p-cancelable": "0.3.0", + "p-timeout": "1.2.1", + "safe-buffer": "5.1.2", + "timed-out": "4.0.1", + "url-parse-lax": "1.0.0", + "url-to-options": "1.0.1" } }, "graceful-fs": { @@ -1510,10 +1509,10 @@ "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", "dev": true, "requires": { - "async": "^2.5.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" + "async": "2.6.1", + "optimist": "0.6.1", + "source-map": "0.6.1", + "uglify-js": "3.4.9" }, "dependencies": { "async": { @@ -1522,7 +1521,7 @@ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "4.17.11" } } } @@ -1539,8 +1538,8 @@ "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", "dev": true, "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" + "ajv": "5.5.2", + "har-schema": "2.0.0" } }, "has-flag": { @@ -1561,7 +1560,7 @@ "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "dev": true, "requires": { - "has-symbol-support-x": "^1.4.1" + "has-symbol-support-x": "1.4.2" } }, "hash-base": { @@ -1570,8 +1569,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.1", + "safe-buffer": "5.1.2" } }, "hash.js": { @@ -1580,8 +1579,8 @@ "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" }, "dependencies": { "inherits": { @@ -1604,9 +1603,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "hash.js": "1.1.5", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "hosted-git-info": { @@ -1621,10 +1620,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "~1.1.2", + "depd": "1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "statuses": "1.5.0" }, "dependencies": { "inherits": { @@ -1647,9 +1646,9 @@ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" } }, "iconv-lite": { @@ -1658,7 +1657,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "idna-uts46-hx": { @@ -1690,8 +1689,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -1730,7 +1729,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "^1.0.0" + "builtin-modules": "1.1.1" } }, "is-callable": { @@ -1745,7 +1744,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-function": { @@ -1826,20 +1825,20 @@ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.0.12", + "js-yaml": "3.12.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.3.1", + "wordwrap": "1.0.0" } }, "isurl": { @@ -1848,8 +1847,8 @@ "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dev": true, "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "has-to-string-tag-x": "1.4.1", + "is-object": "1.0.1" } }, "js-sha3": { @@ -1864,8 +1863,8 @@ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.1" }, "dependencies": { "esprima": { @@ -1907,7 +1906,7 @@ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "4.1.11" } }, "jsprim": { @@ -1928,10 +1927,10 @@ "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", "dev": true, "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" + "bindings": "1.3.0", + "inherits": "2.0.3", + "nan": "2.11.0", + "safe-buffer": "5.1.2" }, "dependencies": { "inherits": { @@ -1948,8 +1947,8 @@ "integrity": "sha1-HWM6+QfvMFu/ny+mFtVsRFYd+k0=", "dev": true, "requires": { - "browserify-sha3": "^0.0.1", - "sha3": "^1.1.0" + "browserify-sha3": "0.0.1", + "sha3": "1.2.2" } }, "klaw": { @@ -1958,7 +1957,7 @@ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "dev": true, "requires": { - "graceful-fs": "^4.1.9" + "graceful-fs": "4.1.11" } }, "lcid": { @@ -1967,7 +1966,7 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "^1.0.0" + "invert-kv": "1.0.0" } }, "levn": { @@ -1976,8 +1975,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "1.1.2", + "type-check": "0.3.2" } }, "load-json-file": { @@ -1986,11 +1985,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" } }, "locate-path": { @@ -1999,8 +1998,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "2.0.0", + "path-exists": "3.0.0" }, "dependencies": { "path-exists": { @@ -2035,8 +2034,8 @@ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "pseudomap": "1.0.2", + "yallist": "2.1.2" } }, "make-dir": { @@ -2045,7 +2044,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "3.0.0" }, "dependencies": { "pify": { @@ -2062,13 +2061,13 @@ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "hash-base": "3.0.4", + "inherits": "2.0.1" } }, "media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, @@ -2078,7 +2077,7 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "1.2.0" } }, "memorystream": { @@ -2105,8 +2104,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "bn.js": "4.11.8", + "brorand": "1.1.0" } }, "mime": { @@ -2127,7 +2126,7 @@ "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", "dev": true, "requires": { - "mime-db": "~1.36.0" + "mime-db": "1.36.0" } }, "mimic-fn": { @@ -2148,7 +2147,7 @@ "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", "dev": true, "requires": { - "dom-walk": "^0.1.0" + "dom-walk": "0.1.1" } }, "minimalistic-assert": { @@ -2169,7 +2168,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -2201,7 +2200,7 @@ "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", "dev": true, "requires": { - "mkdirp": "*" + "mkdirp": "0.5.1" } }, "mocha": { @@ -2234,12 +2233,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.1", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "has-flag": { @@ -2254,7 +2253,7 @@ "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "2.0.0" } } } @@ -2283,9 +2282,9 @@ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "any-promise": "1.3.0", + "object-assign": "4.1.1", + "thenify-all": "1.6.0" } }, "nan": { @@ -2312,7 +2311,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1" + "abbrev": "1.0.9" } }, "normalize-package-data": { @@ -2321,10 +2320,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "2.7.1", + "is-builtin-module": "1.0.0", + "semver": "5.5.1", + "validate-npm-package-license": "3.0.4" } }, "npm-run-path": { @@ -2333,7 +2332,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "^2.0.0" + "path-key": "2.0.1" } }, "number-is-nan": { @@ -2378,7 +2377,7 @@ "integrity": "sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=", "dev": true, "requires": { - "http-https": "^1.0.0" + "http-https": "1.0.0" } }, "on-finished": { @@ -2396,7 +2395,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "optimist": { @@ -2405,8 +2404,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "minimist": "0.0.10", + "wordwrap": "0.0.3" }, "dependencies": { "wordwrap": { @@ -2423,12 +2422,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" } }, "original-require": { @@ -2443,7 +2442,7 @@ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { - "lcid": "^1.0.0" + "lcid": "1.0.0" } }, "p-cancelable": { @@ -2464,7 +2463,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "1.0.0" } }, "p-locate": { @@ -2473,7 +2472,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "1.3.0" } }, "p-timeout": { @@ -2482,7 +2481,7 @@ "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", "dev": true, "requires": { - "p-finally": "^1.0.0" + "p-finally": "1.0.0" } }, "p-try": { @@ -2497,11 +2496,11 @@ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.16" } }, "parse-headers": { @@ -2510,7 +2509,7 @@ "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", "dev": true, "requires": { - "for-each": "^0.3.2", + "for-each": "0.3.3", "trim": "0.0.1" } }, @@ -2520,7 +2519,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "^1.2.0" + "error-ex": "1.3.2" } }, "parseurl": { @@ -2535,12 +2534,12 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "pinkie-promise": "2.0.1" } }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -2562,9 +2561,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" } }, "pbkdf2": { @@ -2573,11 +2572,11 @@ "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "dev": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "pegjs": { @@ -2600,7 +2599,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -2616,7 +2615,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "^2.0.0" + "pinkie": "2.0.4" } }, "prelude-ls": { @@ -2649,7 +2648,7 @@ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.1.2", "ipaddr.js": "1.8.0" } }, @@ -2671,11 +2670,11 @@ "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", + "randombytes": "2.0.6" } }, "punycode": { @@ -2692,13 +2691,13 @@ }, "query-string": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "resolved": "http://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dev": true, "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "decode-uri-component": "0.2.0", + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" } }, "randombytes": { @@ -2707,7 +2706,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "^5.1.0" + "safe-buffer": "5.1.2" } }, "randomfill": { @@ -2716,8 +2715,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" } }, "randomhex": { @@ -2750,9 +2749,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" } }, "read-pkg-up": { @@ -2761,8 +2760,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "find-up": "1.1.2", + "read-pkg": "1.1.0" } }, "readable-stream": { @@ -2771,13 +2770,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" }, "dependencies": { "inherits": { @@ -2794,25 +2793,25 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "^1.1.6" + "resolve": "1.1.7" } }, "req-cwd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/req-cwd/-/req-cwd-1.0.1.tgz", "integrity": "sha1-DXOurpJm5penj3l2AZZ352rPD/8=", "dev": true, "requires": { - "req-from": "^1.0.1" + "req-from": "1.0.1" } }, "req-from": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/req-from/-/req-from-1.0.1.tgz", "integrity": "sha1-v4HaUUeUfTLRO5R9wSpYrUWHNQ4=", "dev": true, "requires": { - "resolve-from": "^2.0.0" + "resolve-from": "2.0.0" } }, "request": { @@ -2821,26 +2820,26 @@ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.1.0", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.20", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" } }, "require-directory": { @@ -2879,7 +2878,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "7.1.3" }, "dependencies": { "glob": { @@ -2888,12 +2887,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.1", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } } } @@ -2904,8 +2903,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "hash-base": "3.0.4", + "inherits": "2.0.1" } }, "rlp": { @@ -2914,7 +2913,7 @@ "integrity": "sha512-93U7IKH5j7nmXFVg19MeNBGzQW5uXW1pmCuKY8veeKIhYTE32C2d0mOegfiIAfXcHOKJjjPlJisn8iHDF5AezA==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "safe-buffer": "5.1.2" } }, "safe-buffer": { @@ -2935,12 +2934,12 @@ "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", "dev": true, "requires": { - "nan": "^2.0.8" + "nan": "2.11.0" } }, "scrypt-js": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", + "resolved": "http://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=", "dev": true }, @@ -2950,8 +2949,8 @@ "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", "dev": true, "requires": { - "scrypt": "^6.0.2", - "scryptsy": "^1.2.1" + "scrypt": "6.0.3", + "scryptsy": "1.2.1" } }, "scryptsy": { @@ -2960,7 +2959,7 @@ "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", "dev": true, "requires": { - "pbkdf2": "^3.0.3" + "pbkdf2": "3.0.16" } }, "seek-bzip": { @@ -2969,7 +2968,7 @@ "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", "dev": true, "requires": { - "commander": "~2.8.1" + "commander": "2.8.1" }, "dependencies": { "commander": { @@ -2978,7 +2977,7 @@ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "dev": true, "requires": { - "graceful-readlink": ">= 1.0.0" + "graceful-readlink": "1.0.1" } } } @@ -2996,18 +2995,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", + "http-errors": "1.6.3", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" }, "dependencies": { "debug": { @@ -3033,9 +3032,9 @@ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", "send": "0.16.2" } }, @@ -3045,11 +3044,11 @@ "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", "dev": true, "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" + "body-parser": "1.18.3", + "cors": "2.8.4", + "express": "4.16.3", + "request": "2.88.0", + "xhr": "2.5.0" } }, "set-blocking": { @@ -3076,8 +3075,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.1", + "safe-buffer": "5.1.2" } }, "sha3": { @@ -3091,7 +3090,7 @@ "dependencies": { "nan": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "resolved": "http://registry.npmjs.org/nan/-/nan-2.10.0.tgz", "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", "dev": true } @@ -3103,7 +3102,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -3118,9 +3117,9 @@ "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", "dev": true, "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "glob": "7.1.3", + "interpret": "1.1.0", + "rechoir": "0.6.2" }, "dependencies": { "glob": { @@ -3129,12 +3128,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.1", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } } } @@ -3157,9 +3156,9 @@ "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", "dev": true, "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "decompress-response": "3.3.0", + "once": "1.4.0", + "simple-concat": "1.0.0" } }, "sol-explore": { @@ -3174,12 +3173,12 @@ "integrity": "sha512-mdLHDl9WeYrN+FIKcMc9PlPfnA9DG9ur5QpCDKcv6VC4RINAsTF4EMuXMZMKoQTvZhtLyJIVH/BZ+KU830Z8Xg==", "dev": true, "requires": { - "fs-extra": "^0.30.0", - "keccak": "^1.0.2", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "yargs": "^11.0.0" + "fs-extra": "0.30.0", + "keccak": "1.4.0", + "memorystream": "0.3.1", + "require-from-string": "2.0.2", + "semver": "5.5.1", + "yargs": "11.1.0" }, "dependencies": { "ansi-regex": { @@ -3200,9 +3199,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" } }, "find-up": { @@ -3211,7 +3210,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "is-fullwidth-code-point": { @@ -3226,9 +3225,9 @@ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" } }, "string-width": { @@ -3237,8 +3236,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "strip-ansi": { @@ -3247,7 +3246,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } }, "which-module": { @@ -3262,18 +3261,18 @@ "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.3", + "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": "9.0.2" } }, "yargs-parser": { @@ -3282,7 +3281,7 @@ "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "4.1.0" } } } @@ -3293,16 +3292,16 @@ "integrity": "sha512-qikdsSi6+9XbfvwA0aI7HUVpF9fIFNqRWTw23M89GMDY+b6Gj0wWU9IngJS0fimoZIAdEp3bfChxvpfVcrUesg==", "dev": true, "requires": { - "death": "^1.1.0", + "death": "1.1.0", "ethereumjs-testrpc-sc": "6.1.6", - "istanbul": "^0.4.5", - "keccakjs": "^0.2.1", - "req-cwd": "^1.0.1", - "shelljs": "^0.7.4", - "sol-explore": "^1.6.2", + "istanbul": "0.4.5", + "keccakjs": "0.2.1", + "req-cwd": "1.0.1", + "shelljs": "0.7.8", + "sol-explore": "1.6.2", "solidity-parser-sc": "0.4.11", - "tree-kill": "^1.2.0", - "web3": "^0.18.4" + "tree-kill": "1.2.0", + "web3": "0.18.4" }, "dependencies": { "solidity-parser-sc": { @@ -3311,9 +3310,9 @@ "integrity": "sha512-1kV5iC7m3CtMDfmHaVNwz2saSGQVIuF16rIxU417Al38MVCWHMQQ5vT6cmLsNwDe60S74auobWij9vNawSeOyw==", "dev": true, "requires": { - "mocha": "^4.1.0", - "pegjs": "^0.10.0", - "yargs": "^4.6.0" + "mocha": "4.1.0", + "pegjs": "0.10.0", + "yargs": "4.8.1" } }, "web3": { @@ -3323,10 +3322,10 @@ "dev": true, "requires": { "bignumber.js": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "crypto-js": "^3.1.4", - "utf8": "^2.1.1", - "xhr2": "*", - "xmlhttprequest": "*" + "crypto-js": "3.1.8", + "utf8": "2.1.2", + "xhr2": "0.1.4", + "xmlhttprequest": "1.8.0" } } } @@ -3337,9 +3336,9 @@ "integrity": "sha512-t7tvtR6KU6QfPYLMv1nlCh9DA8HYIu5tbjHpKu0fhGFZ1NuSp0KKDHfFHv07g6v1xgcuUY3rVqNFjZt5b9+5qA==", "dev": true, "requires": { - "mocha": "^4.0.1", - "pegjs": "^0.10.0", - "yargs": "^10.0.3" + "mocha": "4.1.0", + "pegjs": "0.10.0", + "yargs": "10.1.2" }, "dependencies": { "ansi-regex": { @@ -3360,9 +3359,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" } }, "find-up": { @@ -3371,7 +3370,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "is-fullwidth-code-point": { @@ -3386,9 +3385,9 @@ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" } }, "string-width": { @@ -3397,8 +3396,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "strip-ansi": { @@ -3407,7 +3406,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } }, "which-module": { @@ -3422,18 +3421,18 @@ "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^8.1.0" + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.3", + "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": { @@ -3442,7 +3441,7 @@ "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "4.1.0" } } } @@ -3459,8 +3458,8 @@ "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "buffer-from": "1.1.1", + "source-map": "0.6.1" } }, "spdx-correct": { @@ -3469,8 +3468,8 @@ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.1" } }, "spdx-exceptions": { @@ -3485,8 +3484,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.1" } }, "spdx-license-ids": { @@ -3507,15 +3506,15 @@ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "dev": true, "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" } }, "statuses": { @@ -3536,27 +3535,27 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-bom": { @@ -3565,7 +3564,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "^0.2.0" + "is-utf8": "0.2.1" } }, "strip-dirs": { @@ -3574,12 +3573,12 @@ "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "dev": true, "requires": { - "is-natural-number": "^4.0.1" + "is-natural-number": "4.0.1" } }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, @@ -3598,7 +3597,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "1.0.0" } }, "swarm-js": { @@ -3607,19 +3606,19 @@ "integrity": "sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==", "dev": true, "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "decompress": "^4.0.0", - "eth-lib": "^0.1.26", - "fs-extra": "^2.1.2", - "fs-promise": "^2.0.0", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar.gz": "^1.0.5", - "xhr-request-promise": "^0.1.2" + "bluebird": "3.5.2", + "buffer": "5.2.1", + "decompress": "4.2.0", + "eth-lib": "0.1.27", + "fs-extra": "2.1.2", + "fs-promise": "2.0.3", + "got": "7.1.0", + "mime-types": "2.1.20", + "mkdirp-promise": "5.0.1", + "mock-fs": "4.7.0", + "setimmediate": "1.0.5", + "tar.gz": "1.0.7", + "xhr-request-promise": "0.1.2" }, "dependencies": { "fs-extra": { @@ -3628,21 +3627,21 @@ "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0" } } } }, "tar": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.1" } }, "tar-stream": { @@ -3651,13 +3650,13 @@ "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" + "bl": "1.2.2", + "buffer-alloc": "1.2.0", + "end-of-stream": "1.4.1", + "fs-constants": "1.0.0", + "readable-stream": "2.3.6", + "to-buffer": "1.1.1", + "xtend": "4.0.1" } }, "tar.gz": { @@ -3666,11 +3665,11 @@ "integrity": "sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==", "dev": true, "requires": { - "bluebird": "^2.9.34", - "commander": "^2.8.1", - "fstream": "^1.0.8", - "mout": "^0.11.0", - "tar": "^2.1.1" + "bluebird": "2.11.0", + "commander": "2.17.1", + "fstream": "1.0.11", + "mout": "0.11.1", + "tar": "2.2.1" }, "dependencies": { "bluebird": { @@ -3687,7 +3686,7 @@ "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", "dev": true, "requires": { - "any-promise": "^1.0.0" + "any-promise": "1.3.0" } }, "thenify-all": { @@ -3696,7 +3695,7 @@ "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", "dev": true, "requires": { - "thenify": ">= 3.1.0 < 4" + "thenify": "3.3.0" } }, "through": { @@ -3723,8 +3722,8 @@ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "psl": "1.1.29", + "punycode": "1.4.1" } }, "tree-kill": { @@ -3745,9 +3744,9 @@ "integrity": "sha512-D15MsJeKWRNxbx2Vmy50gH8z4gjBYecJIUADBBBL593hkVnhZ1ADgkIujCvvrbD6Pj69Vg5Ky/nJXl7M9TCjsg==", "dev": true, "requires": { - "mocha": "^4.1.0", + "mocha": "4.1.0", "original-require": "1.0.1", - "solc": "^0.5.0" + "solc": "0.5.0" } }, "tunnel-agent": { @@ -3756,7 +3755,7 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.2" } }, "tweetnacl": { @@ -3772,7 +3771,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "1.1.2" } }, "type-is": { @@ -3782,7 +3781,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "2.1.20" } }, "typedarray-to-buffer": { @@ -3791,7 +3790,7 @@ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { - "is-typedarray": "^1.0.0" + "is-typedarray": "1.0.0" } }, "uglify-js": { @@ -3801,8 +3800,8 @@ "dev": true, "optional": true, "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1" + "commander": "2.17.1", + "source-map": "0.6.1" } }, "ultron": { @@ -3817,8 +3816,8 @@ "integrity": "sha512-kE2WkurNnPUMcryNioS68DDbhoPB8Qxsd8btHSj+sd5Pjh2GsjmeHLzMSqV9HHziAo8FzVxVCJl9ZYhk7yY1pA==", "dev": true, "requires": { - "buffer": "^3.0.1", - "through": "^2.3.6" + "buffer": "3.6.0", + "through": "2.3.8" }, "dependencies": { "base64-js": { @@ -3834,8 +3833,8 @@ "dev": true, "requires": { "base64-js": "0.0.8", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "ieee754": "1.1.12", + "isarray": "1.0.0" } } } @@ -3858,7 +3857,7 @@ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "requires": { - "prepend-http": "^1.0.1" + "prepend-http": "1.0.4" } }, "url-set-query": { @@ -3875,13 +3874,13 @@ }, "utf8": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "resolved": "http://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=", "dev": true }, "util": { "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { @@ -3912,8 +3911,8 @@ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" } }, "vary": { @@ -3928,9 +3927,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "^1.0.0", + "assert-plus": "1.0.0", "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "extsprintf": "1.3.0" } }, "web3": { @@ -4085,14 +4084,14 @@ "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", "dev": true, "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" + "bn.js": "4.11.8", + "elliptic": "6.4.1", + "xhr-request-promise": "0.1.2" } }, "uuid": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=", "dev": true } @@ -4239,7 +4238,7 @@ }, "utf8": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", + "resolved": "http://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", "dev": true } @@ -4247,13 +4246,12 @@ }, "websocket": { "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "from": "websocket@git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", "dev": true, "requires": { - "debug": "^2.2.0", - "nan": "^2.3.3", - "typedarray-to-buffer": "^3.1.2", - "yaeti": "^0.0.6" + "debug": "2.6.9", + "nan": "2.11.0", + "typedarray-to-buffer": "3.1.5", + "yaeti": "0.0.6" }, "dependencies": { "debug": { @@ -4273,7 +4271,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "which-module": { @@ -4300,8 +4298,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "1.0.2", + "strip-ansi": "3.0.1" } }, "wrappy": { @@ -4316,9 +4314,9 @@ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2", + "ultron": "1.1.1" } }, "xhr": { @@ -4327,10 +4325,10 @@ "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", "dev": true, "requires": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" + "global": "4.3.2", + "is-function": "1.0.1", + "parse-headers": "2.0.1", + "xtend": "4.0.1" } }, "xhr-request": { @@ -4339,13 +4337,13 @@ "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", "dev": true, "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" + "buffer-to-arraybuffer": "0.0.5", + "object-assign": "4.1.1", + "query-string": "5.1.1", + "simple-get": "2.8.1", + "timed-out": "4.0.1", + "url-set-query": "1.0.0", + "xhr": "2.5.0" } }, "xhr-request-promise": { @@ -4354,7 +4352,7 @@ "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", "dev": true, "requires": { - "xhr-request": "^1.0.1" + "xhr-request": "1.1.0" } }, "xhr2": { @@ -4369,7 +4367,7 @@ "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", "dev": true, "requires": { - "cookiejar": "^2.1.1" + "cookiejar": "2.1.2" } }, "xmlhttprequest": { @@ -4408,30 +4406,30 @@ "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", "dev": true, "requires": { - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.1", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.3", + "lodash.assign": "4.2.0", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "window-size": "0.2.0", + "y18n": "3.2.1", + "yargs-parser": "2.4.1" } }, "yargs-parser": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "resolved": "http://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", "dev": true, "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" + "camelcase": "3.0.0", + "lodash.assign": "4.2.0" } }, "yauzl": { @@ -4440,8 +4438,8 @@ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "buffer-crc32": "0.2.13", + "fd-slicer": "1.1.0" } } } diff --git a/test/gateway/ost_prime/constructor.js b/test/gateway/ost_prime/constructor.js new file mode 100644 index 00000000..4f7f0c2e --- /dev/null +++ b/test/gateway/ost_prime/constructor.js @@ -0,0 +1,90 @@ +// Copyright 2018 OpenST Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ---------------------------------------------------------------------------- +// +// http://www.simpletoken.org/ +// +// ---------------------------------------------------------------------------- + +const OSTPrime = artifacts.require("OSTPrime") + , BN = require('bn.js'); + +const Utils = require('../../../test/test_lib/utils'); + +const NullAddress = "0x0000000000000000000000000000000000000000"; +contract('OSTPrime.constructor()', function (accounts) { + + const TOKEN_SYMBOL = "ST"; + const TOKEN_NAME = "Simple Token"; + const TOKEN_DECIMALS = new BN(18); + + let brandedTokenAddress, ostPrime; + + beforeEach(async function () { + brandedTokenAddress = accounts[2]; + }); + + it('should pass with right set of parameters', async function () { + + ostPrime = await OSTPrime.new(brandedTokenAddress); + + let tokenAddress = await ostPrime.valueToken.call(); + assert.strictEqual( + tokenAddress, + brandedTokenAddress, + `Branded token address from contract must be ${brandedTokenAddress}.`, + ); + + let name = await ostPrime.name.call(); + assert.strictEqual( + name, + TOKEN_NAME, + `Token name from contract must be ${TOKEN_NAME}.`, + ); + + let symbol = await ostPrime.symbol.call(); + assert.strictEqual( + symbol, + TOKEN_SYMBOL, + `Token symbol from contract must be ${TOKEN_SYMBOL}.`, + ); + + let decimals = await ostPrime.decimals.call(); + assert.strictEqual( + TOKEN_DECIMALS.eq(decimals), + true, + `Token decimals from contract must be ${TOKEN_DECIMALS}.`, + ); + + let initialized = await ostPrime.initialized.call(); + assert.strictEqual( + initialized, + false, + `Contract should not be initialized.`, + ); + + }); + + it('should fail if branded token address is zero', async function () { + + brandedTokenAddress = NullAddress; + await Utils.expectRevert( + OSTPrime.new(brandedTokenAddress), + 'ERC20 token should not be zero.', + ); + + }); + +}); diff --git a/test/gateway/ost_prime/initialize.js b/test/gateway/ost_prime/initialize.js new file mode 100644 index 00000000..deba35af --- /dev/null +++ b/test/gateway/ost_prime/initialize.js @@ -0,0 +1,115 @@ +// Copyright 2018 OpenST Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ---------------------------------------------------------------------------- +// +// http://www.simpletoken.org/ +// +// ---------------------------------------------------------------------------- + +const OSTPrime = artifacts.require("OSTPrime") + , BN = require('bn.js'); + +const Utils = require('../../../test/test_lib/utils'); + +contract('OSTPrime.initialize()', function (accounts) { + + const DECIMAL = new BN(10); + const POW = new BN(18); + const DECIMAL_FACTOR = DECIMAL.pow(POW); + const TOKENS_MAX = new BN(800000000).mul(DECIMAL_FACTOR); + + let brandedTokenAddress, ostPrime; + + beforeEach(async function () { + brandedTokenAddress = accounts[2]; + ostPrime = await OSTPrime.new(brandedTokenAddress); + }); + + it('The balance of OST prime contract must be zero', async function () { + + let balance = await Utils.getBalance(ostPrime.address); + assert.strictEqual( + balance, + '0', + `The balance of contract must be zero.`, + ); + + }); + + it('should fail if initialize is called with payable amount not equal ' + + 'to TOKENS_MAX ost prime base token', async function () { + + let tokenAmount = new BN(1); + + let result = ostPrime.initialize.call( + {from: accounts[2], value: tokenAmount} + ); + + await Utils.expectRevert( + result, + 'Payable amount must be equal to total supply of token.', + ); + + }); + + it('should pass if initialize is called with value equal to ' + + 'TOKENS_MAX ost prime base token', async function () { + + let result = await ostPrime.initialize.call( + {from: accounts[2], value: TOKENS_MAX} + ); + + assert.strictEqual( + result, + true, + `The result should be true.`, + ); + + await ostPrime.initialize( + {from: accounts[2], value: TOKENS_MAX} + ); + + let balance = new BN(await Utils.getBalance(ostPrime.address)); + assert.strictEqual( + TOKENS_MAX.eq(balance), + true, + `The balance of contract must be ${TOKENS_MAX}.`, + ); + + let initialized = await ostPrime.initialized.call(); + assert.strictEqual( + initialized, + true, + `Contract should be initialized.`, + ); + + }); + + it('should fail if already initialized', async function () { + + await ostPrime.initialize( + {from: accounts[2], value: TOKENS_MAX} + ); + + await Utils.expectRevert( + ostPrime.initialize( + {from: accounts[3], value: TOKENS_MAX} + ), + 'Contract is already initialized.', + ); + + }); + +}); diff --git a/test/gateway/ost_prime/unwrap.js b/test/gateway/ost_prime/unwrap.js new file mode 100644 index 00000000..0f090995 --- /dev/null +++ b/test/gateway/ost_prime/unwrap.js @@ -0,0 +1,222 @@ +// Copyright 2018 OpenST Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ---------------------------------------------------------------------------- +// +// http://www.simpletoken.org/ +// +// ---------------------------------------------------------------------------- + +const OSTPrime = artifacts.require("TestOSTPrime") + , BN = require('bn.js'); + +const Utils = require('../../../test/test_lib/utils'); +const EventDecoder = require('../../test_lib/event_decoder.js'); + +contract('OSTPrime.unwrap()', function (accounts) { + + const DECIMAL = new BN(10); + const POW = new BN(18); + const DECIMAL_FACTOR = DECIMAL.pow(POW); + const TOKENS_MAX = new BN(800000000).mul(DECIMAL_FACTOR); + + let brandedTokenAddress, ostPrime, callerAddress, amount; + + async function initialize(){ + await ostPrime.initialize( + {from: accounts[2], value:TOKENS_MAX} + ); + }; + + beforeEach(async function () { + + brandedTokenAddress = accounts[2]; + ostPrime = await OSTPrime.new(brandedTokenAddress); + + callerAddress = accounts[3]; + amount = new BN(500); + + await ostPrime.setTokenBalance(callerAddress, amount); + + }); + + it('should fail when the amount is zero', async function () { + await initialize(); + + let amount = 0; + await Utils.expectRevert( + ostPrime.unwrap(amount, { from: callerAddress }), + 'Amount must not be zero.' + ); + + }); + + it('should fail when contract is not initialized', async function () { + + await Utils.expectRevert( + ostPrime.unwrap(amount, { from: callerAddress }), + 'Contract is not initialized.' + ); + + }); + + it('should fail when amount is greater than the account balance', + async function () { + + await initialize(); + + let amount = new BN(501); + await Utils.expectRevert( + ostPrime.unwrap(amount, { from: callerAddress }), + 'Insufficient balance.' + ); + + }); + + it('should fail when the amount is greater than the contract\'s base ' + + 'token balance', async function () { + + await initialize(); + + let amount = TOKENS_MAX.addn(1); + await ostPrime.setTokenBalance(callerAddress, amount); + await Utils.expectFailedAssert( + ostPrime.unwrap(amount, { from: callerAddress }), + 'invalid opcode', + ); + + }); + + it('should pass with correct parameters', async function () { + await initialize(); + + let initialContractBalance = new BN( + await Utils.getBalance(ostPrime.address) + ); + + let initialCallerBalance = new BN( + await Utils.getBalance(callerAddress) + ); + + amount = new BN(400); + + let result = await ostPrime.unwrap.call(amount, { from: callerAddress }); + assert.strictEqual( + result, + true, + `The contract should return true.` + ); + + let tx = await ostPrime.unwrap(amount, { from: callerAddress }); + let gasUsed = new BN(tx.receipt.gasUsed); + + let callerEIP20Tokenbalance = await ostPrime.balanceOf.call(callerAddress); + assert.strictEqual( + callerEIP20Tokenbalance.eqn(100), + true, + `The balance of ${callerAddress} should be 100.` + ); + + let contractEIP20Tokenbalance = await ostPrime.balanceOf.call(ostPrime.address); + assert.strictEqual( + contractEIP20Tokenbalance.eq(amount), + true, + `The balance of OST prime contract should increase by ${amount}.` + ); + + let finalContractBalance = new BN( + await Utils.getBalance(ostPrime.address) + ); + + let finalCallerBalance = new BN( + await Utils.getBalance(callerAddress) + ); + + assert.strictEqual( + finalContractBalance.eq(initialContractBalance.sub(amount)), + true, + `Contract base token balance should decrease by ${amount}` + ); + + assert.strictEqual( + finalCallerBalance.eq(initialCallerBalance.add(amount).sub(gasUsed)), + true, + `Caller's base token balance should change by ${amount.sub(gasUsed)}` + ); + + }); + + it('should emit transfer event', async function () { + await initialize(); + + let tx = await ostPrime.unwrap(amount, { from: callerAddress }); + + let event = EventDecoder.getEvents(tx, ostPrime); + + assert.isDefined( + event.Transfer, + 'Event `Transfer` must be emitted.', + ); + + let eventData = event.Transfer; + + assert.strictEqual( + eventData._from, + callerAddress, + `The _from address in the event should be equal to ${callerAddress}` + ); + + assert.strictEqual( + eventData._to, + ostPrime.address, + `The _to address in the event should be equal to ${ostPrime.address}` + ); + + assert.strictEqual( + amount.eq(eventData._value), + true, + `The _value in the event should be equal to ${amount}` + ); + + }); + + it('should emit token unwrapped event', async function () { + await initialize(); + + let tx = await ostPrime.unwrap(amount, { from: callerAddress }); + + let event = EventDecoder.getEvents(tx, ostPrime); + + assert.isDefined( + event.TokenUnwrapped, + 'Event `TokenUnwrapped` must be emitted.', + ); + + let eventData = event.TokenUnwrapped; + + assert.strictEqual( + eventData._account, + callerAddress, + `The _account address in the event should be equal to ${callerAddress}` + ); + + assert.strictEqual( + amount.eq(eventData._amount), + true, + `The _amount in the event should be equal to ${amount}` + ); + + }); + +}); diff --git a/test/gateway/ost_prime/wrap.js b/test/gateway/ost_prime/wrap.js new file mode 100644 index 00000000..de53638e --- /dev/null +++ b/test/gateway/ost_prime/wrap.js @@ -0,0 +1,235 @@ +// Copyright 2018 OpenST Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ---------------------------------------------------------------------------- +// +// http://www.simpletoken.org/ +// +// ---------------------------------------------------------------------------- + +const OSTPrime = artifacts.require("TestOSTPrime") + , BN = require('bn.js'); + +const web3 = require('../../test_lib/web3.js'); +const Utils = require('../../../test/test_lib/utils'); +const EventDecoder = require('../../test_lib/event_decoder.js'); + +contract('OSTPrime.wrap()', function (accounts) { + + const DECIMAL = new BN(10); + const POW = new BN(18); + const DECIMAL_FACTOR = DECIMAL.pow(POW); + const TOKENS_MAX = new BN(800000000).mul(DECIMAL_FACTOR); + + let brandedTokenAddress, ostPrime, callerAddress, amount; + + async function initialize(){ + await ostPrime.initialize( + {from: accounts[5], value: TOKENS_MAX} + ); + }; + + beforeEach(async function () { + + brandedTokenAddress = accounts[2]; + ostPrime = await OSTPrime.new(brandedTokenAddress); + + callerAddress = accounts[3]; + amount = new BN(500); + + await ostPrime.setTokenBalance(ostPrime.address, amount); + + }); + + it('should fail when the payable amount is zero', async function () { + + await initialize(); + + let amount = 0; + await Utils.expectRevert( + ostPrime.wrap({from: callerAddress, value: amount }), + 'Payable amount should not be zero.', + ); + + }); + + it('should fail when the contract is not initialized', async function () { + + await Utils.expectRevert( + ostPrime.wrap({from: callerAddress, value: amount }), + 'Contract is not initialized.', + ); + + }); + + it('should fail when the payable amount sent is less than the available ' + + 'balance', async function () { + + await initialize(); + + /* + * Create a new account for this testing. This will just contain the + * sufficient amount of gas that is required for this testing. We are not + * using the existing account as it is used by other test cases. There will + * an overhead to manage the gas for the account if used. + */ + let newAccount = await web3.eth.personal.newAccount("password"); + await web3.eth.personal.unlockAccount(newAccount, "password",15000); + + await web3.eth.sendTransaction( + {to:newAccount, from:accounts[0], value: new BN(12000000)} + ); + + await Utils.expectFailedAssert( + ostPrime.wrap({from: newAccount, value: new BN(120005000) }), + 'sender doesn\'t have enough funds to send tx', + ); + + }); + + it('should fail when OST Prime balance is insufficient', async function () { + + await initialize(); + + await Utils.expectFailedAssert( + ostPrime.wrap({from: callerAddress, value: new BN(1000) }), + "invalid opcode", + ); + + }); + + it('should pass with correct parameters ', async function () { + + await initialize(); + + let initialContractBalance = new BN( + await Utils.getBalance(ostPrime.address) + ); + + let initialCallerBalance = new BN( + await Utils.getBalance(callerAddress) + ); + + let result = await ostPrime.wrap.call( + {from: callerAddress, value: amount} + ); + + assert.strictEqual( + result, + true, + `The contract should return true.`, + ); + + let tx = await ostPrime.wrap({from: callerAddress, value: amount}); + let gasUsed = new BN(tx.receipt.gasUsed); + + let callerEIP20Tokenbalance = await ostPrime.balanceOf.call(callerAddress); + assert.strictEqual( + callerEIP20Tokenbalance.eq(amount), + true, + `The balance of ${callerAddress} should increase by ${amount}.`, + ); + + let contractEIP20Tokenbalance = await ostPrime.balanceOf.call(ostPrime.address); + assert.strictEqual( + contractEIP20Tokenbalance.eq(new BN(0)), + true, + `The balance of OST prime contract should be zero.`, + ); + + let finalContractBalance = new BN( + await Utils.getBalance(ostPrime.address) + ); + + let finalCallerBalance = new BN( + await Utils.getBalance(callerAddress) + ); + + assert.strictEqual( + finalContractBalance.eq(initialContractBalance.add(amount)), + true, + `Contract base token balance should increase by ${amount}`, + ); + + assert.strictEqual( + finalCallerBalance.eq(initialCallerBalance.sub(amount).sub(gasUsed)), + true, + `Caller's base token balance should decrease by ${amount.sub(gasUsed)}`, + ); + + }); + + it('should emit transfer event', async function () { + await initialize(); + + let tx = await ostPrime.wrap({from: callerAddress, value: amount}); + + let event = EventDecoder.getEvents(tx, ostPrime); + + assert.isDefined( + event.Transfer, + 'Event `Transfer` must be emitted.', + ); + + let eventData = event.Transfer; + + assert.strictEqual( + eventData._from, + ostPrime.address, + `The _from address in the event should be equal to ${ostPrime.address}`, + ); + + assert.strictEqual( + eventData._to, + callerAddress, + `The _to address in the event should be equal to ${callerAddress}`, + ); + + assert.strictEqual( + amount.eq(eventData._value), + true, + `The _value in the event should be equal to ${amount}`, + ); + + }); + + it('should emit token wrapped event', async function () { + await initialize(); + + let tx = await ostPrime.wrap({from: callerAddress, value: amount}); + + let event = EventDecoder.getEvents(tx, ostPrime); + + assert.isDefined( + event.TokenWrapped, + "Event `TokenWrapped` must be emitted.", + ); + + let eventData = event.TokenWrapped; + + assert.strictEqual( + eventData._account, + callerAddress, + `The _account address in the event should be equal to ${callerAddress}`, + ); + + assert.strictEqual( + amount.eq(eventData._amount), + true, + `The _amount in the event should be equal to ${amount}`, + ); + + }); + +}); diff --git a/test/test_lib/utils.js b/test/test_lib/utils.js index ff5a1799..8bc24803 100644 --- a/test/test_lib/utils.js +++ b/test/test_lib/utils.js @@ -166,16 +166,24 @@ Utils.prototype = { assert(false, "Did not revert as expected."); }, - /// @dev Expect failure from assert, but returns error instead - expectFailedAssert: async (promise) => { + /** + * Asserts that a given ethereum call/transaction leads to a assert failure. + * The call/transaction is given as a promise. + * + * @param {promise} promise Awaiting this promise must lead to a error. + * @param {string} expectedMessage If given, the returned error message must + * include this string (optional). + */ + expectFailedAssert: async (promise, expectedMessage) => { try { await promise; } catch (error) { assert( - error.message.search('invalid opcode') > -1, + error.message.search('Returned error:') > -1, 'The contract should fail an assert. Instead: ' + error.message ); + assertExpectedMessage(expectedMessage, error); return; }