diff --git a/.circleci/config.yml b/.circleci/config.yml index ba06e497..823d147e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,7 @@ version: 2.0 jobs: build: docker: - - image: circleci/node:7.10.0 + - image: circleci/node:8.15.0 steps: - checkout - run: @@ -13,6 +13,10 @@ jobs: name: Install dependencies command: | npm install + - run: + name: Get submodules + command: | + git submodule update --init - run: name: Run tests command: | diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..b67b6a9d --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "test/sources/openzeppelin-solidity"] + path = test/sources/zeppelin + url = https://github.com/OpenZeppelin/openzeppelin-solidity diff --git a/README.md b/README.md index 0550c439..ee934e81 100644 --- a/README.md +++ b/README.md @@ -156,3 +156,5 @@ also lint your submission with `npm run lint`. Bugs can be reported in the + [@DimitarSD](https://github.com/DimitarSD) + [@sohkai](https://github.com/sohkai) + [@bingen](https://github.com/bingen) ++ [@pinkiebell](https://github.com/pinkiebell) ++ [@obernardovieira](https://github.com/obernardovieira) diff --git a/lib/app.js b/lib/app.js index 9b19455c..6a1e922c 100644 --- a/lib/app.js +++ b/lib/app.js @@ -209,11 +209,11 @@ class App { return new Promise((resolve, reject) => { if (!this.norpc) { const defaultRpcOptions = `--accounts ${this.accounts} --port ${this.port}`; - const options = (this.testrpcOptions || defaultRpcOptions) + ` --gasLimit ${gasLimitHex}`; - const command = require.resolve('ethereumjs-testrpc-sc/build/cli.node.js'); + const options = (this.testrpcOptions || defaultRpcOptions) + ` --gasLimit ${gasLimitHex} --allowUnlimitedContractSize`; + const command = require.resolve('ethereumjs-testrpc-sc/cli.js'); // Launch - const execOpts = {maxBuffer: 1024 * 1024 * 10}; + const execOpts = {maxBuffer: 1024 * 1024 * 100}; this.testrpcProcess = childprocess.exec(`node ${command} ${options}`, execOpts, (err, stdout, stderr) => { if (err) { if (stdout) this.log(`testRpc stdout:\n${stdout}`); @@ -272,6 +272,7 @@ class App { const defaultCommand = `truffle compile ${this.network} ${this.silence}`; const command = this.compileCommand || defaultCommand; this.log(`Running: ${command}\n(this can take a few seconds)...`); + shell.cd(this.coverageDir); shell.exec(command); this.testsErrored = shell.error(); diff --git a/lib/coverageMap.js b/lib/coverageMap.js index 89d994cf..1fc4deed 100644 --- a/lib/coverageMap.js +++ b/lib/coverageMap.js @@ -3,7 +3,8 @@ * This file contains methods that produce a coverage map to pass to instanbul * from data generated by `instrumentSolidity.js` */ -const SolidityCoder = require('web3/lib/solidity/coder.js'); +const { AbiCoder } = require('web3-eth-abi'); +const SolidityCoder = AbiCoder(); const path = require('path'); const keccak = require('keccakjs'); const fs = require('fs'); @@ -103,29 +104,29 @@ module.exports = class CoverageMap { const event = JSON.parse(events[idx]); if (event.topics.filter(t => this.lineTopics.indexOf(t) >= 0).length > 0) { - const data = SolidityCoder.decodeParams(['string', 'uint256'], event.data.replace('0x', '')); + const data = SolidityCoder.decodeParameters(['string', 'uint256'], `0x${event.data}`); const canonicalContractPath = data[0]; - this.coverage[canonicalContractPath].l[data[1].toNumber()] += 1; + this.coverage[canonicalContractPath].l[parseInt(data[1], 10)] += 1; } else if (event.topics.filter(t => this.functionTopics.indexOf(t) >= 0).length > 0) { - const data = SolidityCoder.decodeParams(['string', 'uint256'], event.data.replace('0x', '')); + const data = SolidityCoder.decodeParameters(['string', 'uint256'], `0x${event.data}`); const canonicalContractPath = data[0]; - this.coverage[canonicalContractPath].f[data[1].toNumber()] += 1; + this.coverage[canonicalContractPath].f[parseInt(data[1], 10)] += 1; } else if (event.topics.filter(t => this.branchTopics.indexOf(t) >= 0).length > 0) { - const data = SolidityCoder.decodeParams(['string', 'uint256', 'uint256'], event.data.replace('0x', '')); + const data = SolidityCoder.decodeParameters(['string', 'uint256', 'uint256'], `0x${event.data}`); const canonicalContractPath = data[0]; - this.coverage[canonicalContractPath].b[data[1].toNumber()][data[2].toNumber()] += 1; + this.coverage[canonicalContractPath].b[parseInt(data[1], 10)][parseInt(data[2], 10)] += 1; } else if (event.topics.filter(t => this.statementTopics.indexOf(t) >= 0).length > 0) { - const data = SolidityCoder.decodeParams(['string', 'uint256'], event.data.replace('0x', '')); + const data = SolidityCoder.decodeParameters(['string', 'uint256'], `0x${event.data}`); const canonicalContractPath = data[0]; - this.coverage[canonicalContractPath].s[data[1].toNumber()] += 1; + this.coverage[canonicalContractPath].s[parseInt(data[1], 10)] += 1; } else if (event.topics.filter(t => this.assertPreTopics.indexOf(t) >= 0).length > 0) { - const data = SolidityCoder.decodeParams(['string', 'uint256'], event.data.replace('0x', '')); + const data = SolidityCoder.decodeParameters(['string', 'uint256'], `0x${event.data}`); const canonicalContractPath = data[0]; - this.assertCoverage[canonicalContractPath][data[1].toNumber()].preEvents += 1; + this.assertCoverage[canonicalContractPath][parseInt(data[1], 10)].preEvents += 1; } else if (event.topics.filter(t => this.assertPostTopics.indexOf(t) >= 0).length > 0) { - const data = SolidityCoder.decodeParams(['string', 'uint256'], event.data.replace('0x', '')); + const data = SolidityCoder.decodeParameters(['string', 'uint256'], `0x${event.data}`); const canonicalContractPath = data[0]; - this.assertCoverage[canonicalContractPath][data[1].toNumber()].postEvents += 1; + this.assertCoverage[canonicalContractPath][parseInt(data[1], 10)].postEvents += 1; } } // Finally, interpret the assert pre/post events diff --git a/lib/instrumentSolidity.js b/lib/instrumentSolidity.js index 120ac77b..eae7ff88 100644 --- a/lib/instrumentSolidity.js +++ b/lib/instrumentSolidity.js @@ -1,4 +1,4 @@ -const SolidityParser = require('solidity-parser-sc'); +const SolidityParser = require('solidity-parser-antlr'); const preprocessor = require('./preprocessor'); const injector = require('./injector'); const parse = require('./parse'); @@ -20,7 +20,7 @@ module.exports = function instrumentSolidity(contractSource, fileName) { contract.injectionPoints = {}; // First, we run over the original contract to get the source mapping. - let ast = SolidityParser.parse(contract.source); + let ast = SolidityParser.parse(contract.source, {range: true}); parse[ast.type](contract, ast); const retValue = JSON.parse(JSON.stringify(contract)); @@ -36,12 +36,10 @@ module.exports = function instrumentSolidity(contractSource, fileName) { contract.preprocessed = preprocessor.run(contract.source); contract.instrumented = contract.preprocessed; - - ast = SolidityParser.parse(contract.preprocessed); - - const contractStatement = ast.body.filter(node => (node.type === 'ContractStatement' || - node.type === 'LibraryStatement' || - node.type === 'InterfaceStatement')); + ast = SolidityParser.parse(contract.preprocessed, {range: true}); + const contractStatement = ast.children.filter(node => (node.type === 'ContractDefinition' || + node.type === 'LibraryDefinition' || + node.type === 'InterfaceDefinition')); contract.contractName = contractStatement[0].name; parse[ast.type](contract, ast); diff --git a/lib/instrumenter.js b/lib/instrumenter.js index eafc8977..93c98674 100644 --- a/lib/instrumenter.js +++ b/lib/instrumenter.js @@ -14,7 +14,7 @@ function createOrAppendInjectionPoint(contract, key, value) { instrumenter.prePosition = function prePosition(expression) { if (expression.right.type === 'ConditionalExpression' && expression.left.type === 'MemberExpression') { - expression.start -= 2; + expression.range[0] -= 2; } }; @@ -31,15 +31,15 @@ instrumenter.instrumentAssignmentExpression = function instrumentAssignmentExpre if (expression.left.type === 'DeclarativeExpression' || expression.left.type === 'Identifier') { // Then we need to go from bytes32 varname = (conditional expression) // to bytes32 varname; (,varname) = (conditional expression) - createOrAppendInjectionPoint(contract, expression.left.end, { + createOrAppendInjectionPoint(contract, expression.left.range[1], { type: 'literal', string: '; (,' + expression.left.name + ')', }); instrumenter.instrumentConditionalExpression(contract, expression.right); } else if (expression.left.type === 'MemberExpression') { - createOrAppendInjectionPoint(contract, expression.left.start, { + createOrAppendInjectionPoint(contract, expression.left.range[0], { type: 'literal', string: '(,', }); - createOrAppendInjectionPoint(contract, expression.left.end, { + createOrAppendInjectionPoint(contract, expression.left.range[1], { type: 'literal', string: ')', }); instrumenter.instrumentConditionalExpression(contract, expression.right); @@ -61,12 +61,12 @@ instrumenter.instrumentConditionalExpression = function instrumentConditionalExp /*contract.branchId += 1; - const startline = (contract.instrumented.slice(0, expression.start).match(/\n/g) || []).length + 1; - const startcol = expression.start - contract.instrumented.slice(0, expression.start).lastIndexOf('\n') - 1; - const consequentStartCol = startcol + (contract, expression.consequent.start - expression.start); - const consequentEndCol = consequentStartCol + (contract, expression.consequent.end - expression.consequent.start); - const alternateStartCol = startcol + (contract, expression.alternate.start - expression.start); - const alternateEndCol = alternateStartCol + (contract, expression.alternate.end - expression.alternate.start); + const startline = (contract.instrumented.slice(0, expression.range[0]).match(/\n/g) || []).length + 1; + const startcol = expression.range[0] - contract.instrumented.slice(0, expression.range[0]).lastIndexOf('\n') - 1; + const consequentStartCol = startcol + (contract, expression.trueBody.range[0] - expression.range[0]); + const consequentEndCol = consequentStartCol + (contract, expression.trueBody.range[1] - expression.trueBody.range[0]); + const alternateStartCol = startcol + (contract, expression.falseBody.range[0] - expression.range[0]); + const alternateEndCol = alternateStartCol + (contract, expression.falseBody.range[1] - expression.falseBody.range[0]); // NB locations for conditional branches in istanbul are length 1 and associated with the : and ?. contract.branchMap[contract.branchId] = { line: startline, @@ -95,24 +95,24 @@ instrumenter.instrumentConditionalExpression = function instrumentConditionalExp // Wrap the consequent - createOrAppendInjectionPoint(contract, expression.consequent.start, { + createOrAppendInjectionPoint(contract, expression.trueBody.range[0], { type: 'openParen', }); - createOrAppendInjectionPoint(contract, expression.consequent.start, { + createOrAppendInjectionPoint(contract, expression.trueBody.range[0], { type: 'callBranchEvent', comma: true, branchId: contract.branchId, locationIdx: 0, }); - createOrAppendInjectionPoint(contract, expression.consequent.end, { + createOrAppendInjectionPoint(contract, expression.trueBody.range[1], { type: 'closeParen', }); // Wrap the alternate - createOrAppendInjectionPoint(contract, expression.alternate.start, { + createOrAppendInjectionPoint(contract, expression.falseBody.range[0], { type: 'openParen', }); - createOrAppendInjectionPoint(contract, expression.alternate.start, { + createOrAppendInjectionPoint(contract, expression.falseBody.range[0], { type: 'callBranchEvent', comma: true, branchId: contract.branchId, locationIdx: 1, }); - createOrAppendInjectionPoint(contract, expression.alternate.end, { + createOrAppendInjectionPoint(contract, expression.falseBody.range[1], { type: 'closeParen', });*/ }; @@ -120,14 +120,14 @@ instrumenter.instrumentConditionalExpression = function instrumentConditionalExp instrumenter.instrumentStatement = function instrumentStatement(contract, expression) { contract.statementId += 1; // We need to work out the lines and columns the expression starts and ends - const startline = (contract.instrumented.slice(0, expression.start).match(/\n/g) || []).length + 1; - const startcol = expression.start - contract.instrumented.slice(0, expression.start).lastIndexOf('\n') - 1; - const expressionContent = contract.instrumented.slice(expression.start, expression.end); + const startline = (contract.instrumented.slice(0, expression.range[0]).match(/\n/g) || []).length + 1; + const startcol = expression.range[0] - contract.instrumented.slice(0, expression.range[0]).lastIndexOf('\n') - 1; + const expressionContent = contract.instrumented.slice(expression.range[0], expression.range[1] + 1); const endline = startline + (contract, expressionContent.match('/\n/g') || []).length; let endcol; if (expressionContent.lastIndexOf('\n') >= 0) { - endcol = contract.instrumented.slice(expressionContent.lastIndexOf('\n'), expression.end).length - 1; + endcol = contract.instrumented.slice(expressionContent.lastIndexOf('\n'), expression.range[1]).length; } else { endcol = startcol + (contract, expressionContent.length - 1); } @@ -139,15 +139,15 @@ instrumenter.instrumentStatement = function instrumentStatement(contract, expres line: endline, column: endcol, }, }; - createOrAppendInjectionPoint(contract, expression.start, { + createOrAppendInjectionPoint(contract, expression.range[0], { type: 'statement', statementId: contract.statementId, }); }; instrumenter.instrumentLine = function instrumentLine(contract, expression) { // what's the position of the most recent newline? - const startchar = expression.start; - const endchar = expression.end; + const startchar = expression.range[0]; + const endchar = expression.range[1] + 1; const lastNewLine = contract.instrumented.slice(0, startchar).lastIndexOf('\n'); const nextNewLine = startchar + contract.instrumented.slice(startchar).indexOf('\n'); const contractSnipped = contract.instrumented.slice(lastNewLine, nextNewLine); @@ -160,7 +160,7 @@ instrumenter.instrumentLine = function instrumentLine(contract, expression) { }); } else if (contract.instrumented.slice(lastNewLine, startchar).replace('{', '').trim().length === 0 && contract.instrumented.slice(endchar, nextNewLine).replace(/[;}]/g, '').trim().length === 0) { - createOrAppendInjectionPoint(contract, expression.start, { + createOrAppendInjectionPoint(contract, expression.range[0], { type: 'callEvent', }); } @@ -169,15 +169,15 @@ instrumenter.instrumentLine = function instrumentLine(contract, expression) { instrumenter.instrumentFunctionDeclaration = function instrumentFunctionDeclaration(contract, expression) { contract.fnId += 1; - const startline = (contract.instrumented.slice(0, expression.start).match(/\n/g) || []).length + 1; + const startline = (contract.instrumented.slice(0, expression.range[0]).match(/\n/g) || []).length + 1; // We need to work out the lines and columns the function declaration starts and ends - const startcol = expression.start - contract.instrumented.slice(0, expression.start).lastIndexOf('\n') - 1; - const endlineDelta = contract.instrumented.slice(expression.start).indexOf('{'); - const functionDefinition = contract.instrumented.slice(expression.start, expression.start + endlineDelta); + const startcol = expression.range[0] - contract.instrumented.slice(0, expression.range[0]).lastIndexOf('\n') - 1; + const endlineDelta = contract.instrumented.slice(expression.range[0]).indexOf('{'); + const functionDefinition = contract.instrumented.slice(expression.range[0], expression.range[0] + endlineDelta); const endline = startline + (functionDefinition.match(/\n/g) || []).length; const endcol = functionDefinition.length - functionDefinition.lastIndexOf('\n'); contract.fnMap[contract.fnId] = { - name: expression.name, + name: expression.isConstructor ? 'constructor' : expression.name, line: startline, loc: { start: { @@ -188,15 +188,15 @@ instrumenter.instrumentFunctionDeclaration = function instrumentFunctionDeclarat }, }, }; - createOrAppendInjectionPoint(contract, expression.start + endlineDelta + 1, { + createOrAppendInjectionPoint(contract, expression.range[0] + endlineDelta + 1, { type: 'callFunctionEvent', fnId: contract.fnId, }); }; instrumenter.addNewBranch = function addNewBranch(contract, expression) { contract.branchId += 1; - const startline = (contract.instrumented.slice(0, expression.start).match(/\n/g) || []).length + 1; - const startcol = expression.start - contract.instrumented.slice(0, expression.start).lastIndexOf('\n') - 1; + const startline = (contract.instrumented.slice(0, expression.range[0]).match(/\n/g) || []).length + 1; + const startcol = expression.range[0] - contract.instrumented.slice(0, expression.range[0]).lastIndexOf('\n') - 1; // NB locations for if branches in istanbul are zero length and associated with the start of the if. contract.branchMap[contract.branchId] = { line: startline, @@ -221,31 +221,31 @@ instrumenter.addNewBranch = function addNewBranch(contract, expression) { instrumenter.instrumentAssertOrRequire = function instrumentAssertOrRequire(contract, expression) { instrumenter.addNewBranch(contract, expression); - createOrAppendInjectionPoint(contract, expression.start, { + createOrAppendInjectionPoint(contract, expression.range[0], { type: 'callAssertPreEvent', branchId: contract.branchId, }); - createOrAppendInjectionPoint(contract, expression.end + 1, { + createOrAppendInjectionPoint(contract, expression.range[1] + 2, { type: 'callAssertPostEvent', branchId: contract.branchId, }); }; instrumenter.instrumentIfStatement = function instrumentIfStatement(contract, expression) { instrumenter.addNewBranch(contract, expression); - if (expression.consequent.type === 'BlockStatement') { - createOrAppendInjectionPoint(contract, expression.consequent.start + 1, { + if (expression.trueBody.type === 'Block') { + createOrAppendInjectionPoint(contract, expression.trueBody.range[0] + 1, { type: 'callBranchEvent', branchId: contract.branchId, locationIdx: 0, }); } - if (expression.alternate && expression.alternate.type === 'IfStatement') { + if (expression.falseBody && expression.falseBody.type === 'IfStatement') { // Do nothing - we must be pre-preprocessor, so don't bother instrumenting - // when we're actually instrumenting, this will never happen (we've wrapped it in // a block statement) - } else if (expression.alternate && expression.alternate.type === 'BlockStatement') { - createOrAppendInjectionPoint(contract, expression.alternate.start + 1, { + } else if (expression.falseBody && expression.falseBody.type === 'Block') { + createOrAppendInjectionPoint(contract, expression.falseBody.range[0] + 1, { type: 'callBranchEvent', branchId: contract.branchId, locationIdx: 1, }); } else { - createOrAppendInjectionPoint(contract, expression.consequent.end, { + createOrAppendInjectionPoint(contract, expression.trueBody.range[1] + 1, { type: 'callEmptyBranchEvent', branchId: contract.branchId, locationIdx: 1, }); } diff --git a/lib/parse.js b/lib/parse.js index 55cc831c..8b9feb3c 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -15,26 +15,31 @@ parse.AssignmentExpression = function parseAssignmentExpression(contract, expres instrumenter.instrumentAssignmentExpression(contract, expression); }; -parse.BlockStatement = function parseBlockStatement(contract, expression) { - for (let x = 0; x < expression.body.length; x++) { - instrumenter.instrumentLine(contract, expression.body[x]); - parse[expression.body[x].type] && - parse[expression.body[x].type](contract, expression.body[x]); +parse.Block = function parseBlock(contract, expression) { + for (let x = 0; x < expression.statements.length; x++) { + instrumenter.instrumentLine(contract, expression.statements[x]); + parse[expression.statements[x].type] && + parse[expression.statements[x].type](contract, expression.statements[x]); } }; -parse.CallExpression = function parseCallExpression(contract, expression) { - // In any given chain of call expressions, only the head callee is an Identifier node - if (expression.callee.type === 'Identifier') { +parse.BinaryOperation = function parseBinaryOperation(contract, expression) { + instrumenter.instrumentStatement(contract, expression); +} + +parse.FunctionCall = function parseCallExpression(contract, expression) { + // In any given chain of call expressions, only the last one will fail this check. This makes sure + // we don't instrument a chain of expressions multiple times. + if (expression.expression.type !== 'FunctionCall') { instrumenter.instrumentStatement(contract, expression); - if (expression.callee.name === 'assert' || expression.callee.name === 'require') { + if (expression.expression.name === 'assert' || expression.expression.name === 'require') { instrumenter.instrumentAssertOrRequire(contract, expression); } - parse[expression.callee.type] && - parse[expression.callee.type](contract, expression.callee); + parse[expression.expression.type] && + parse[expression.expression.type](contract, expression.expression); } else { - parse[expression.callee.type] && - parse[expression.callee.type](contract, expression.callee); + parse[expression.expression.type] && + parse[expression.expression.type](contract, expression.expression); } }; @@ -43,25 +48,25 @@ parse.ConditionalExpression = function parseConditionalExpression(contract, expr instrumenter.instrumentConditionalExpression(contract, expression); }; -parse.ContractStatement = function ParseContractStatement(contract, expression) { +parse.ContractDefinition = function ParseContractStatement(contract, expression) { parse.ContractOrLibraryStatement(contract, expression); }; parse.ContractOrLibraryStatement = function parseContractOrLibraryStatement(contract, expression) { // From the start of this contract statement, find the first '{', and inject there. - const injectionPoint = expression.start + contract.instrumented.slice(expression.start).indexOf('{') + 1; + const injectionPoint = expression.range[0] + contract.instrumented.slice(expression.range[0]).indexOf('{') + 1; if (contract.injectionPoints[injectionPoint]) { - contract.injectionPoints[expression.start + contract.instrumented.slice(expression.start).indexOf('{') + 1].push({ + contract.injectionPoints[expression.range[0] + contract.instrumented.slice(expression.range[0]).indexOf('{') + 1].push({ type: 'eventDefinition', }); } else { - contract.injectionPoints[expression.start + contract.instrumented.slice(expression.start).indexOf('{') + 1] = [{ + contract.injectionPoints[expression.range[0] + contract.instrumented.slice(expression.range[0]).indexOf('{') + 1] = [{ type: 'eventDefinition', }]; } - if (expression.body) { - expression.body.forEach(construct => { + if (expression.subNodes) { + expression.subNodes.forEach(construct => { parse[construct.type] && parse[construct.type](contract, construct); }); @@ -83,11 +88,10 @@ parse.ForStatement = function parseForStatement(contract, expression) { parse[expression.body.type](contract, expression.body); }; -parse.FunctionDeclaration = function parseFunctionDeclaration(contract, expression) { +parse.FunctionDefinition = function parseFunctionDefinition(contract, expression) { parse.Modifiers(contract, expression.modifiers); if (expression.body) { instrumenter.instrumentFunctionDeclaration(contract, expression); - parse[expression.body.type] && parse[expression.body.type](contract, expression.body); } @@ -96,13 +100,12 @@ parse.FunctionDeclaration = function parseFunctionDeclaration(contract, expressi parse.IfStatement = function parseIfStatement(contract, expression) { instrumenter.instrumentStatement(contract, expression); instrumenter.instrumentIfStatement(contract, expression); + parse[expression.trueBody.type] && + parse[expression.trueBody.type](contract, expression.trueBody); - parse[expression.consequent.type] && - parse[expression.consequent.type](contract, expression.consequent); - - if (expression.alternate) { - parse[expression.alternate.type] && - parse[expression.alternate.type](contract, expression.alternate); + if (expression.falseBody) { + parse[expression.falseBody.type] && + parse[expression.falseBody.type](contract, expression.falseBody); } }; @@ -127,19 +130,19 @@ parse.Modifiers = function parseModifier(contract, modifiers) { } }; -parse.ModifierDeclaration = function parseModifierDeclaration(contract, expression) { +parse.ModifierDefinition = function parseModifierDefinition(contract, expression) { instrumenter.instrumentFunctionDeclaration(contract, expression); parse[expression.body.type] && parse[expression.body.type](contract, expression.body); }; parse.NewExpression = function parseNewExpression(contract, expression) { - parse[expression.callee.type] && - parse[expression.callee.type](contract, expression.callee); + parse[expression.typeName.type] && + parse[expression.typeName.type](contract, expression.typeName); }; -parse.Program = function parseProgram(contract, expression) { - expression.body.forEach(construct => { +parse.SourceUnit = function parseSourceUnit(contract, expression) { + expression.children.forEach(construct => { parse[construct.type] && parse[construct.type](contract, construct); }); @@ -149,10 +152,6 @@ parse.ReturnStatement = function parseReturnStatement(contract, expression) { instrumenter.instrumentStatement(contract, expression); }; -parse.ThrowStatement = function parseThrowStatement(contract, expression) { - instrumenter.instrumentStatement(contract, expression); -}; - parse.UnaryExpression = function parseUnaryExpression(contract, expression) { parse[expression.argument.type] && parse[expression.argument.type](contract, expression.argument); @@ -163,10 +162,10 @@ parse.UsingStatement = function parseUsingStatement(contract, expression) { parse[expression.for.type](contract, expression.for); }; -parse.VariableDeclaration = function parseVariableDeclaration(contract, expression) { +parse.VariableDeclarationStatement = function parseVariableDeclarationStatement(contract, expression) { instrumenter.instrumentStatement(contract, expression); - parse[expression.declarations[0].id.type] && - parse[expression.declarations[0].id.type](contract, expression.declarations[0].id); + // parse[expression.declarations[0].id.type] && + // parse[expression.declarations[0].id.type](contract, expression.declarations[0].id); }; parse.VariableDeclarationTuple = function parseVariableDeclarationTuple(contract, expression) { diff --git a/lib/preprocessor.js b/lib/preprocessor.js index c584748d..9624f3ca 100644 --- a/lib/preprocessor.js +++ b/lib/preprocessor.js @@ -1,5 +1,5 @@ const SolExplore = require('sol-explore'); -const SolidityParser = require('solidity-parser-sc'); +const SolidityParser = require('solidity-parser-antlr'); const crRegex = /[\r\n ]+$/g; /** @@ -9,21 +9,27 @@ const crRegex = /[\r\n ]+$/g; * @return {String} contract */ function blockWrap(contract, expression) { - return contract.slice(0, expression.start) + '{' + contract.slice(expression.start, expression.end) + '}' + contract.slice(expression.end); + return contract.slice(0, expression.range[0]) + '{' + contract.slice(expression.range[0], expression.range[1] + 1) + '}' + contract.slice(expression.range[1] + 1); } - -/** - * Captures carriage returns at modifiers we'll remove. These need to be re-injected into the - * source to keep line report alignments accurate. +/** Remove 'pure' and 'view' from the function declaration. * @param {String} contract solidity source - * @param {Object} modifier AST node - * @return {String} whitespace around the modifier - */ -function getModifierWhitespace(contract, modifier){ - const source = contract.slice(modifier.start, modifier.end); - const whitespace = source.match(crRegex) || []; - return whitespace.join(''); + * @param {Object} function AST node + * @return {String} contract with the modifiers removed from the given function. +*/ +function removePureView(contract, node){ + let fDefStart = node.range[0]; + if (node.body){ + fDefEnd = node.body.range[0]; + } else if (node.returnParameters) { + fDefEnd = node.returnParameters.range[0]; + } else { + fDefEnd = node.range[1]; + } + let fDef = contract.slice(fDefStart, fDefEnd + 1); + fDef = fDef.replace(/\bview\b/i, ' '); + fDef = fDef.replace(/\bpure\b/i, ' '); + return contract.slice(0, fDefStart) + fDef + contract.slice(fDefEnd + 1); } /** @@ -38,55 +44,44 @@ function getModifierWhitespace(contract, modifier){ * @return {String} contract */ module.exports.run = function r(contract) { - let keepRunning = true; - - while (keepRunning) { - try { - const ast = SolidityParser.parse(contract); - keepRunning = false; - SolExplore.traverse(ast, { - enter(node, parent) { // eslint-disable-line no-loop-func - // If consequents - if (node.type === 'IfStatement' && node.consequent.type !== 'BlockStatement') { - contract = blockWrap(contract, node.consequent); - keepRunning = true; - this.stopTraversal(); - // If alternates - } else if ( - node.type === 'IfStatement' && - node.alternate && - node.alternate.type !== 'BlockStatement') { - contract = blockWrap(contract, node.alternate); - keepRunning = true; - this.stopTraversal(); - // Loops - } else if ( - (node.type === 'ForStatement' || node.type === 'WhileStatement') && - node.body.type !== 'BlockStatement') { - contract = blockWrap(contract, node.body); - keepRunning = true; - this.stopTraversal(); - } else if (node.type === 'FunctionDeclaration' && node.modifiers) { - // We want to remove constant / pure / view from functions - for (let i = 0; i < node.modifiers.length; i++) { - if (['pure', 'constant', 'view'].indexOf(node.modifiers[i].name) > -1) { - let whitespace = getModifierWhitespace(contract, node.modifiers[i]); - - contract = contract.slice(0, node.modifiers[i].start) + - whitespace + - contract.slice(node.modifiers[i].end); - keepRunning = true; - this.stopTraversal(); - } - } - } - }, - }); - } catch (err) { - contract = err; - keepRunning = false; - } + try { + const ast = SolidityParser.parse(contract, { range: true }); + blocksToWrap = []; + viewPureToRemove = []; + SolidityParser.visit(ast, { + IfStatement: function(node) { + if (node.trueBody.type !== 'Block') { + blocksToWrap.push(node.trueBody); + } else if (node.falseBody && node.falseBody.type !== 'Block'){ + blocksToWrap.push(node.falseBody); + } + }, + ForStatement: function(node){ + if (node.body.type !== 'Block'){ + blocksToWrap.push(node.body); + } + }, + WhileStatement: function(node){ + if (node.body.type !== 'Block'){ + blocksToWrap.push(node.body); + } + }, + FunctionDefinition: function(node){ + if (node.stateMutability === 'view' || node.stateMutability === 'pure'){ + viewPureToRemove.push(node); + } + } + }) + // Firstly, remove pures and views. Note that we replace 'pure' and 'view' with spaces, so + // character counts remain the same, so we can do this in any order + viewPureToRemove.forEach(node => contract = removePureView(contract, node)); + // We apply the blocks we found in reverse order to avoid extra characters messing things up. + blocksToWrap.sort((a,b) => a.range[0] < b.range[0]); + blocksToWrap.forEach(block => contract = blockWrap(contract, block)) + } catch (err) { + contract = err; + keepRunning = false; } return contract; }; diff --git a/lib/truffleConfig.js b/lib/truffleConfig.js index 51eb4804..e5eee1ff 100644 --- a/lib/truffleConfig.js +++ b/lib/truffleConfig.js @@ -9,6 +9,11 @@ module.exports = function truffleConfig(port, gasLimit, gasPrice) { gas: ${gasLimit}, gasPrice: ${gasPrice} } + }, + compilers: { + solc: { + version: "0.5.3", + } } - };`; + };`; }; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f45376fa..8e15f76f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,30 @@ { "name": "solidity-coverage", - "version": "0.5.11", + "version": "0.6.0-beta.5", "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/runtime": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.2.tgz", + "integrity": "sha512-7Bl2rALb7HpvXFL7TETNzKSAeBVCPHELzc0C//9FCxN8nsiueWSJBqaF+2oIJScyILStASR/Cx5WMkXGYTiJFA==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "@types/bn.js": { + "version": "4.11.4", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.4.tgz", + "integrity": "sha512-AO8WW+aRcKWKQAYTfKLzwnpL6U+TfPqS+haRrhCy5ff04Da8WZud3ZgVjspQXaEXJDcTlsjUEVvL39wegDek5w==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "10.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.1.tgz", + "integrity": "sha512-Rymt08vh1GaW4vYB6QP61/5m/CFLGnFZP++bJpWbiNxceNa6RBipDmb413jvtSf/R1gg5a/jQVl2jY4XVRscEA==" + }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -15,7 +36,16 @@ "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", "dev": true, "requires": { - "xtend": "4.0.1" + "xtend": "~4.0.0" + } + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" } }, "acorn": { @@ -30,7 +60,7 @@ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { @@ -41,14 +71,19 @@ } } }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" + }, "ajv": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "ajv-keywords": { @@ -57,20 +92,11 @@ "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", "dev": true }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "optional": true }, "ansi-escapes": { "version": "1.4.0", @@ -81,7 +107,8 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, "ansi-styles": { "version": "2.2.1", @@ -89,21 +116,32 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, + "app-module-path": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -119,24 +157,34 @@ "dev": true }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "async": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, "requires": { - "lodash": "4.17.5" + "lodash": "^4.14.0" } }, "async-eventemitter": { @@ -145,26 +193,28 @@ "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", "dev": true, "requires": { - "async": "2.6.0" + "async": "^2.4.0" } }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "babel-code-frame": { "version": "6.26.0", @@ -172,9 +222,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "balanced-match": { @@ -182,19 +232,19 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, - "bignumber.js": { - "version": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934" - }, "bindings": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", @@ -207,22 +257,43 @@ "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" + } + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, + "bluebird": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" + }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "dev": true, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "requires": { - "hoek": "4.2.1" + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" } }, "brace-expansion": { @@ -230,33 +301,69 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, "browser-stdout": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=" + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true }, "browserify-aes": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", - "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "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" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sha3": { @@ -264,24 +371,76 @@ "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.1.tgz", "integrity": "sha1-P/NKMAbvFcD7NWflQbkaI0ASPRE=", "requires": { - "js-sha3": "0.3.1" + "js-sha3": "^0.3.1" } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "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" + } + }, + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "caller-path": { "version": "0.1.0", @@ -289,7 +448,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsites": { @@ -298,27 +457,10 @@ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", "dev": true }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "optional": true - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "optional": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "chalk": { "version": "1.1.3", @@ -326,11 +468,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.2", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "dependencies": { "supports-color": { @@ -347,17 +489,21 @@ "integrity": "sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY=", "dev": true, "requires": { - "functional-red-black-tree": "1.0.1" + "functional-red-black-tree": "^1.0.1" } }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "circular-json": { @@ -372,7 +518,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "cli-width": { @@ -381,17 +527,6 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "optional": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -401,21 +536,28 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, + "command-exists": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz", + "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==", + "dev": true + }, "commander": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true }, "concat-map": { "version": "0.0.1", @@ -428,9 +570,9 @@ "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.5", - "typedarray": "0.0.6" + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "contains-path": { @@ -439,56 +581,105 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } }, "create-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.10" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" } }, "create-hmac": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "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" } }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "dev": true, - "requires": { - "hoek": "4.2.1" - } - } + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "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" } }, "crypto-js": { @@ -503,16 +694,15 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.40" + "es5-ext": "^0.10.9" } }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "death": { @@ -524,7 +714,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -532,7 +721,102 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "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-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "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" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + } + } }, "deep-is": { "version": "0.1.3", @@ -545,7 +829,22 @@ "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", "dev": true, "requires": { - "abstract-leveldown": "2.6.3" + "abstract-leveldown": "~2.6.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + }, + "dependencies": { + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + } } }, "del": { @@ -554,25 +853,54 @@ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "diff": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==" + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } }, "doctrine": { "version": "2.1.0", @@ -580,43 +908,69 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, "drbg.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", "dev": true, "requires": { - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6" + "browserify-aes": "^1.0.6", + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4" } }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, "elliptic": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "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" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" } }, "errno": { @@ -625,15 +979,54 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + }, + "dependencies": { + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + } + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, "es5-ext": { @@ -642,8 +1035,8 @@ "integrity": "sha512-S9Fh3oya5OOvYSNGvPZJ+vyrs6VYpe1IXPowVe3N1OhaiwVaGlwfn3Zf5P5klYcWOA0toIwYQW8XEv/QqhdHvQ==", "dev": true, "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1" } }, "es6-iterator": { @@ -652,9 +1045,9 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.40", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-map": { @@ -663,12 +1056,12 @@ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.40", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" } }, "es6-set": { @@ -677,11 +1070,11 @@ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.40", - "es6-iterator": "2.0.3", + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "event-emitter": "~0.3.5" } }, "es6-symbol": { @@ -690,8 +1083,8 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.40" + "d": "1", + "es5-ext": "~0.10.14" } }, "es6-weak-map": { @@ -700,12 +1093,17 @@ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.40", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" } }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, "escape-string-regexp": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", @@ -717,11 +1115,11 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" }, "dependencies": { "source-map": { @@ -730,7 +1128,7 @@ "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", "optional": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -741,10 +1139,10 @@ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "dev": true, "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" }, "dependencies": { "estraverse": { @@ -761,41 +1159,41 @@ "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "chalk": "1.1.3", - "concat-stream": "1.6.1", - "debug": "2.6.9", - "doctrine": "2.1.0", - "escope": "3.6.0", - "espree": "3.5.4", - "esquery": "1.0.0", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.17.2", - "is-resolvable": "1.1.0", - "js-yaml": "3.11.0", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.5", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.7.8", - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" + "babel-code-frame": "^6.16.0", + "chalk": "^1.1.3", + "concat-stream": "^1.5.2", + "debug": "^2.1.1", + "doctrine": "^2.0.0", + "escope": "^3.6.0", + "espree": "^3.4.0", + "esquery": "^1.0.0", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "glob": "^7.0.3", + "globals": "^9.14.0", + "ignore": "^3.2.0", + "imurmurhash": "^0.1.4", + "inquirer": "^0.12.0", + "is-my-json-valid": "^2.10.0", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.5.1", + "json-stable-stringify": "^1.0.0", + "levn": "^0.3.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.0", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.1", + "pluralize": "^1.2.1", + "progress": "^1.1.8", + "require-uncached": "^1.0.2", + "shelljs": "^0.7.5", + "strip-bom": "^3.0.0", + "strip-json-comments": "~2.0.1", + "table": "^3.7.8", + "text-table": "~0.2.0", + "user-home": "^2.0.0" }, "dependencies": { "estraverse": { @@ -810,12 +1208,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } }, "strip-bom": { @@ -832,7 +1230,7 @@ "integrity": "sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==", "dev": true, "requires": { - "eslint-restricted-globals": "0.1.1" + "eslint-restricted-globals": "^0.1.1" } }, "eslint-import-resolver-node": { @@ -841,8 +1239,8 @@ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", "dev": true, "requires": { - "debug": "2.6.9", - "resolve": "1.5.0" + "debug": "^2.6.9", + "resolve": "^1.5.0" }, "dependencies": { "resolve": { @@ -851,7 +1249,7 @@ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } } } @@ -862,8 +1260,8 @@ "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", "dev": true, "requires": { - "debug": "2.6.9", - "pkg-dir": "1.0.0" + "debug": "^2.6.8", + "pkg-dir": "^1.0.0" } }, "eslint-plugin-import": { @@ -872,16 +1270,16 @@ "integrity": "sha1-JgAu+/ylmJtyiKwEdQi9JPIXsWk=", "dev": true, "requires": { - "builtin-modules": "1.1.1", - "contains-path": "0.1.0", - "debug": "2.6.9", + "builtin-modules": "^1.1.1", + "contains-path": "^0.1.0", + "debug": "^2.6.8", "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.1.1", - "has": "1.0.1", - "lodash": "4.17.5", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0" + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.1.1", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0" }, "dependencies": { "doctrine": { @@ -890,8 +1288,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, "find-up": { @@ -900,7 +1298,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "load-json-file": { @@ -909,10 +1307,10 @@ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, "path-type": { @@ -921,7 +1319,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" } }, "read-pkg": { @@ -930,9 +1328,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { @@ -941,8 +1339,8 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "strip-bom": { @@ -959,7 +1357,7 @@ "integrity": "sha512-hxWtYHvLA0p/PKymRfDYh9Mxt5dYkg2Goy1vZDarTEEYfELP9ksga7kKG1NUKSQy27C8Qjc7YrSWTLUhOEOksA==", "dev": true, "requires": { - "ramda": "0.25.0" + "ramda": "^0.25.0" } }, "eslint-restricted-globals": { @@ -974,8 +1372,8 @@ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.5.3", - "acorn-jsx": "3.0.1" + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" } }, "esprima": { @@ -989,7 +1387,7 @@ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" }, "dependencies": { "estraverse": { @@ -1006,7 +1404,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" }, "dependencies": { "estraverse": { @@ -1027,20 +1425,55 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, - "ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=", - "dev": true + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "ethereumjs-account": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.4.tgz", - "integrity": "sha1-+MMCMby3B/RRTYoFLB+doQNiTUc=", + "eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", + "requires": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + }, + "dependencies": { + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + } + } + }, + "eth-lib": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", + "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", + "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" + } + }, + "ethereum-common": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", + "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=", + "dev": true + }, + "ethereumjs-account": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.4.tgz", + "integrity": "sha1-+MMCMby3B/RRTYoFLB+doQNiTUc=", "dev": true, "requires": { - "ethereumjs-util": "4.5.0", - "rlp": "2.0.0" + "ethereumjs-util": "^4.0.1", + "rlp": "^2.0.0" }, "dependencies": { "ethereumjs-util": { @@ -1049,42 +1482,425 @@ "integrity": "sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=", "dev": true, "requires": { - "bn.js": "4.11.8", - "create-hash": "1.1.3", - "keccakjs": "0.2.1", - "rlp": "2.0.0", - "secp256k1": "3.5.0" + "bn.js": "^4.8.0", + "create-hash": "^1.1.2", + "keccakjs": "^0.2.0", + "rlp": "^2.0.0", + "secp256k1": "^3.0.1" } } } }, "ethereumjs-block": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.0.tgz", + "integrity": "sha512-Ye+uG/L2wrp364Zihdlr/GfC3ft+zG8PdHcRtsBFNNH1CkOhxOwdB8friBU85n89uRZ9eIMAywCq0F4CwT1wAw==", "dev": true, "requires": { - "async": "2.6.0", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "1.3.4", - "ethereumjs-util": "5.1.5", - "merkle-patricia-tree": "2.1.2" - }, - "dependencies": { - "ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==", - "dev": true - } + "async": "^2.0.1", + "ethereumjs-common": "^1.1.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" } }, + "ethereumjs-common": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.1.0.tgz", + "integrity": "sha512-LUmYkKV/HcZbWRyu3OU9YOevsH3VJDXtI6kEd8VZweQec+JjDGKCmAVKUyzhYUHqxRJu7JNALZ3A/b3NXOP6tA==", + "dev": true + }, "ethereumjs-testrpc-sc": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/ethereumjs-testrpc-sc/-/ethereumjs-testrpc-sc-6.1.6.tgz", - "integrity": "sha512-iv2qiGBFgk9mn5Nq2enX8dG5WQ7Lk+FCqpnxfPfH4Ns8KLPwttmNOy264nh3SXDJJvcQwz/XnlLteDQVILotbg==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/ethereumjs-testrpc-sc/-/ethereumjs-testrpc-sc-6.4.1.tgz", + "integrity": "sha512-5iDomKQm/P61mN0PEJsuWITzQvOjhCfjm+LIbwjP3BTOhvyGJ37mcE9ApI6EJOss/Lvq9YM/WR0V9IG3gT2Wrw==", "requires": { - "source-map-support": "0.5.6" + "bn.js": "4.11.8", + "source-map-support": "0.5.9", + "yargs": "*" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "bn.js": { + "version": "4.11.8", + "bundled": true + }, + "buffer-from": { + "version": "1.1.1", + "bundled": true + }, + "camelcase": { + "version": "5.2.0", + "bundled": true + }, + "cliui": { + "version": "4.1.0", + "bundled": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + } + } + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "cross-spawn": { + "version": "6.0.5", + "bundled": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "decamelize": { + "version": "1.2.0", + "bundled": true + }, + "emoji-regex": { + "version": "7.0.3", + "bundled": true + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "^1.4.0" + } + }, + "execa": { + "version": "1.0.0", + "bundled": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.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" + } + }, + "find-up": { + "version": "3.0.0", + "bundled": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "bundled": true + }, + "get-stream": { + "version": "4.1.0", + "bundled": true, + "requires": { + "pump": "^3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true + }, + "lcid": { + "version": "2.0.0", + "bundled": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "bundled": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "mem": { + "version": "4.2.0", + "bundled": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.0.0", + "bundled": true + }, + "nice-try": { + "version": "1.0.5", + "bundled": true + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "os-locale": { + "version": "3.1.0", + "bundled": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "bundled": true + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "p-is-promise": { + "version": "2.0.0", + "bundled": true + }, + "p-limit": { + "version": "2.2.0", + "bundled": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.1.0", + "bundled": true + }, + "path-exists": { + "version": "3.0.0", + "bundled": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true + }, + "pump": { + "version": "3.0.0", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true + }, + "require-main-filename": { + "version": "2.0.0", + "bundled": true + }, + "semver": { + "version": "5.6.0", + "bundled": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "source-map": { + "version": "0.6.1", + "bundled": true + }, + "source-map-support": { + "version": "0.5.9", + "bundled": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "string-width": { + "version": "3.1.0", + "bundled": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "bundled": true + }, + "strip-ansi": { + "version": "5.2.0", + "bundled": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + }, + "which": { + "version": "1.3.1", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "y18n": { + "version": "4.0.0", + "bundled": true + }, + "yargs": { + "version": "13.2.2", + "bundled": true, + "requires": { + "cliui": "^4.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" + } + }, + "yargs-parser": { + "version": "13.0.0", + "bundled": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } }, "ethereumjs-tx": { @@ -1093,8 +1909,8 @@ "integrity": "sha512-kOgUd5jC+0tgV7t52UDECMMz9Uf+Lro+6fSpCvzWemtXfMEcwI3EOxf5mVPMRbTFkMMhuERokNNVF3jItAjidg==", "dev": true, "requires": { - "ethereum-common": "0.0.18", - "ethereumjs-util": "5.1.5" + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" } }, "ethereumjs-util": { @@ -1103,53 +1919,160 @@ "integrity": "sha512-xPaSEATYJpMTCGowIt0oMZwFP4R1bxd6QsWgkcDvFL0JtXsr39p32WEcD14RscCjfP41YXZPCVWA4yAg0nrJmw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "create-hash": "1.1.3", - "ethjs-util": "0.1.4", - "keccak": "1.4.0", - "rlp": "2.0.0", - "safe-buffer": "5.1.1", - "secp256k1": "3.5.0" + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "^0.1.3", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" } }, "ethereumjs-vm": { - "version": "git+https://github.com/sc-forks/ethereumjs-vm-sc.git#6be86e6f12634b711423203e6744cafe07c38e69", - "dev": true, - "requires": { - "async": "2.6.0", - "async-eventemitter": "0.2.4", - "ethereum-common": "0.2.0", - "ethereumjs-account": "2.0.4", - "ethereumjs-block": "1.7.1", - "ethereumjs-util": "4.5.0", - "fake-merkle-patricia-tree": "1.0.1", - "functional-red-black-tree": "1.0.1", - "merkle-patricia-tree": "2.1.2", - "rustbn.js": "0.1.2", - "safe-buffer": "5.1.1" + "version": "git+https://github.com/sc-forks/ethereumjs-vm-sc.git#3c328147a2c48a379af775930f52c439813a21e2", + "from": "git+https://github.com/sc-forks/ethereumjs-vm-sc.git#3c328147a2c48a379af775930f52c439813a21e2", + "dev": true, + "requires": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" }, "dependencies": { - "ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==", - "dev": true - }, "ethereumjs-util": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz", - "integrity": "sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "create-hash": "1.1.3", - "keccakjs": "0.2.1", - "rlp": "2.0.0", - "secp256k1": "3.5.0" + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "0.1.6", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "merkle-patricia-tree": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", + "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", + "dev": true, + "requires": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "^0.1.3", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + } } } } }, + "ethers": { + "version": "4.0.27", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.27.tgz", + "integrity": "sha512-+DXZLP/tyFnXWxqr2fXLT67KlGUfLuvDkHSOtSC9TUVG9OIj6yrG5JPeXRMYo15xkOYwnjgdMKrXp5V94rtjJA==", + "requires": { + "@types/node": "^10.3.2", + "aes-js": "3.0.0", + "bn.js": "^4.4.0", + "elliptic": "6.3.3", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + }, + "dependencies": { + "elliptic": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", + "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "inherits": "^2.0.1" + } + }, + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + }, + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" + } + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, "ethjs-util": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.4.tgz", @@ -1166,18 +2089,37 @@ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.40" + "d": "1", + "es5-ext": "~0.10.14" } }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "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" } }, "exit-hook": { @@ -1186,17 +2128,64 @@ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", "dev": true }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "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", + "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", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fake-merkle-patricia-tree": { "version": "1.0.1", @@ -1204,34 +2193,40 @@ "integrity": "sha1-S4w6z7Ugr635hgsfFM2M40As3dM=", "dev": true, "requires": { - "checkpoint-store": "1.1.0" + "checkpoint-store": "^1.1.0" } }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" }, "dependencies": { "escape-string-regexp": { @@ -1248,17 +2243,44 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "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" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } } }, "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "flat-cache": { @@ -1267,40 +2289,69 @@ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" } }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs-extra": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "requires": { + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -1311,8 +2362,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -1332,21 +2382,26 @@ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "dev": true, "requires": { - "is-property": "1.0.2" + "is-property": "^1.0.0" } }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "glob": { @@ -1354,11 +2409,20 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "^2.19.0", + "process": "~0.5.1" } }, "globals": { @@ -1373,12 +2437,12 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "glob": { @@ -1387,48 +2451,83 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } } } }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "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" + } + }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, "growl": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==" + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true }, "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", - "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", + "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", + "requires": { + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "optional": true }, "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "uglify-js": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "optional": true, "requires": { - "amdefine": "1.0.1" + "commander": "~2.17.1", + "source-map": "~0.6.1" } } } @@ -1436,29 +2535,26 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" + "ajv": "^6.5.5", + "har-schema": "^2.0.0" }, "dependencies": { "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, + "version": "6.9.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.2.tgz", + "integrity": "sha512-4UFy0/LgDo7Oa/+wOAlj44tp9K78u38E5/359eSrqEp1Z5PdVfimCcs7SluXMP755RUQu6d2b4AvF0R1C9RZjg==", "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } } } @@ -1467,9 +2563,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.0.2" } }, "has-ansi": { @@ -1478,7 +2573,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -1486,75 +2581,112 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, "hash-base": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "^2.0.1" } }, "hash.js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "dev": true, - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", - "dev": true - }, "hosted-git-info": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" + } } }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" + }, "ignore": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", @@ -1578,8 +2710,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -1593,19 +2725,19 @@ "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "figures": "1.7.0", - "lodash": "4.17.5", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" } }, "interpret": { @@ -1616,39 +2748,57 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true }, "is-builtin-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, + "is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" + }, "is-hex-prefixed": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", - "dev": true + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" }, "is-my-ip-valid": { "version": "1.0.0", @@ -1662,13 +2812,23 @@ "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", "dev": true, "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" } }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -1681,7 +2841,7 @@ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -1690,37 +2850,61 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, "is-property": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", "dev": true }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "^1.0.1" + } + }, "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "requires": { + "has-symbols": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -1730,28 +2914,27 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "2.7.3", - "glob": "5.0.15", - "handlebars": "4.0.11", - "js-yaml": "3.11.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.0", - "wordwrap": "1.0.0" + "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" }, "dependencies": { "async": { @@ -1766,6 +2949,15 @@ } } }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, "js-sha3": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz", @@ -1782,8 +2974,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "dependencies": { "esprima": { @@ -1796,21 +2988,17 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify": { "version": "1.0.1", @@ -1818,14 +3006,13 @@ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "jsonfile": { "version": "2.4.0", @@ -1833,7 +3020,7 @@ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsonify": { @@ -1852,7 +3039,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -1866,10 +3052,10 @@ "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", "dev": true, "requires": { - "bindings": "1.3.0", - "inherits": "2.0.3", - "nan": "2.9.2", - "safe-buffer": "5.1.1" + "bindings": "^1.2.1", + "inherits": "^2.0.3", + "nan": "^2.2.1", + "safe-buffer": "^5.1.0" } }, "keccakjs": { @@ -1877,16 +3063,8 @@ "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.1.tgz", "integrity": "sha1-HWM6+QfvMFu/ny+mFtVsRFYd+k0=", "requires": { - "browserify-sha3": "0.0.1", - "sha3": "1.2.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" + "browserify-sha3": "^0.0.1", + "sha3": "^1.1.0" } }, "klaw": { @@ -1895,21 +3073,16 @@ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.9" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "optional": true - }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "level-codec": { @@ -1924,7 +3097,7 @@ "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.1" } }, "level-iterator-stream": { @@ -1933,10 +3106,10 @@ "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", "dev": true, "requires": { - "inherits": "2.0.3", - "level-errors": "1.0.5", - "readable-stream": "1.1.14", - "xtend": "4.0.1" + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" }, "dependencies": { "isarray": { @@ -1951,10 +3124,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -1971,8 +3144,8 @@ "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "2.1.2" + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" }, "dependencies": { "isarray": { @@ -1987,10 +3160,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -2005,7 +3178,7 @@ "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", "dev": true, "requires": { - "object-keys": "0.4.0" + "object-keys": "~0.4.0" } } } @@ -2016,13 +3189,13 @@ "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", "dev": true, "requires": { - "deferred-leveldown": "1.2.2", - "level-codec": "7.0.1", - "level-errors": "1.0.5", - "level-iterator-stream": "1.3.1", - "prr": "1.0.1", - "semver": "5.4.1", - "xtend": "4.0.1" + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" }, "dependencies": { "semver": { @@ -2038,20 +3211,8 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "locate-path": { @@ -2060,8 +3221,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": { @@ -2073,20 +3234,24 @@ } }, "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, - "longest": { + "lowercase-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } }, "ltgt": { "version": "2.2.0", @@ -2094,40 +3259,67 @@ "integrity": "sha1-tlul/LNJopkkyOMz98alVi8uSEI=", "dev": true }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" }, "dependencies": { "hash-base": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } } } }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, "memdown": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=", "dev": true, "requires": { - "abstract-leveldown": "2.7.2", - "functional-red-black-tree": "1.0.1", - "immediate": "3.2.3", - "inherits": "2.0.3", - "ltgt": "2.2.0", - "safe-buffer": "5.1.1" + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" }, "dependencies": { "abstract-leveldown": { @@ -2136,7 +3328,7 @@ "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", "dev": true, "requires": { - "xtend": "4.0.1" + "xtend": "~4.0.0" } } } @@ -2147,20 +3339,25 @@ "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", "dev": true }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, "merkle-patricia-tree": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.1.2.tgz", "integrity": "sha1-ckSD1Ut1YxpI/t2lXhFAUXBqcpE=", "dev": true, "requires": { - "async": "1.5.2", - "ethereumjs-util": "4.5.0", + "async": "^1.4.2", + "ethereumjs-util": "^4.0.0", "level-ws": "0.0.0", - "levelup": "1.3.9", - "memdown": "1.4.1", - "readable-stream": "2.3.5", - "rlp": "2.0.0", - "semaphore": "1.1.0" + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" }, "dependencies": { "async": { @@ -2175,48 +3372,82 @@ "integrity": "sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=", "dev": true, "requires": { - "bn.js": "4.11.8", - "create-hash": "1.1.3", - "keccakjs": "0.2.1", - "rlp": "2.0.0", - "secp256k1": "3.5.0" + "bn.js": "^4.8.0", + "create-hash": "^1.1.2", + "keccakjs": "^0.2.0", + "rlp": "^2.0.0", + "secp256k1": "^3.0.1" } } } }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, "mime-db": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" }, "mime-types": { "version": "2.1.18", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dev": true, "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" } }, "minimalistic-assert": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", - "dev": true + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -2224,6 +3455,35 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "requires": { + "minipass": "^2.2.1" + } + }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -2232,10 +3492,19 @@ "minimist": "0.0.8" } }, + "mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", + "requires": { + "mkdirp": "*" + } + }, "mocha": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", + "dev": true, "requires": { "browser-stdout": "1.3.0", "commander": "2.11.0", @@ -2253,6 +3522,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -2260,36 +3530,45 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true }, "supports-color": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } }, + "mock-fs": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.8.0.tgz", + "integrity": "sha512-Gwj4KnJOW15YeTJKO5frFd/WDO5Mc0zxXqL9oHx3+e9rBqW8EVARqQHSaIXznUdljrD6pvbNGW2ZGXKPEfYJfw==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -2306,47 +3585,82 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==" }, + "nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "requires": { - "abbrev": "1.0.9" + "abbrev": "1" } }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "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" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, "requires": { - "hosted-git-info": "2.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.3" + "path-key": "^2.0.0" } }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } }, "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-keys": { "version": "0.4.0", @@ -2354,12 +3668,20 @@ "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", "dev": true }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -2373,8 +3695,8 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.2" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, "optionator": { @@ -2382,12 +3704,12 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "requires": { - "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" + "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" }, "dependencies": { "wordwrap": { @@ -2409,13 +3731,21 @@ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "1.0.0" - } + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-limit": { "version": "1.2.0", @@ -2423,7 +3753,7 @@ "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -2432,7 +3762,15 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.2.0" + "p-limit": "^1.1.0" + } + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "requires": { + "p-finally": "^1.0.0" } }, "p-try": { @@ -2441,20 +3779,49 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "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", + "safe-buffer": "^5.1.1" + } + }, + "parse-headers": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", + "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", + "requires": { + "for-each": "^0.3.3", + "string.prototype.trim": "^1.1.2" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { @@ -2468,32 +3835,44 @@ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, "path-parse": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", "dev": true }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "pegjs": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", - "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pify": { "version": "2.3.0", @@ -2510,7 +3889,7 @@ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -2519,7 +3898,7 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" } }, "pluralize": { @@ -2533,11 +3912,20 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "progress": { "version": "1.1.8", @@ -2545,23 +3933,76 @@ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" + } + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "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", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" }, "ramda": { "version": "0.25.0", @@ -2569,38 +4010,56 @@ "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==", "dev": true }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "safe-buffer": "^5.1.0" } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "randomhex": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", + "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" } }, "readable-stream": { "version": "2.3.5", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "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.0.3", + "util-deprecate": "~1.0.1" } }, "readline2": { @@ -2609,8 +4068,8 @@ "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", "mute-stream": "0.0.5" } }, @@ -2619,20 +4078,20 @@ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "requires": { - "resolve": "1.1.7" + "resolve": "^1.1.6" } }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "regenerator-runtime": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" }, "req-cwd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-1.0.1.tgz", "integrity": "sha1-DXOurpJm5penj3l2AZZ352rPD/8=", "requires": { - "req-from": "1.0.1" + "req-from": "^1.0.1" } }, "req-from": { @@ -2640,54 +4099,67 @@ "resolved": "https://registry.npmjs.org/req-from/-/req-from-1.0.1.tgz", "integrity": "sha1-v4HaUUeUfTLRO5R9wSpYrUWHNQ4=", "requires": { - "resolve-from": "2.0.0" + "resolve-from": "^2.0.0" } }, "request": { - "version": "2.85.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", - "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "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" + }, + "dependencies": { + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "requires": { + "mime-db": "~1.38.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true }, "require-uncached": { "version": "1.0.3", @@ -2695,8 +4167,8 @@ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" }, "dependencies": { "resolve-from": { @@ -2707,6 +4179,11 @@ } } }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, "resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", @@ -2723,17 +4200,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "optional": true, - "requires": { - "align-text": "0.1.4" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } }, "rimraf": { @@ -2742,7 +4210,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" }, "dependencies": { "glob": { @@ -2751,12 +4219,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } } } @@ -2765,10 +4233,9 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true, "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" + "hash-base": "^2.0.0", + "inherits": "^2.0.1" } }, "rlp": { @@ -2783,13 +4250,13 @@ "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.3.0" } }, "rustbn.js": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.1.2.tgz", - "integrity": "sha512-bAkNqSHYdJdFsBC7Z11JgzYktL31HIpB2o70jZcGiL1U1TVtPyvaVhDrGWwS8uZtaqwW2k6NOPGZCqW/Dgh5Lg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", "dev": true }, "rx-lite": { @@ -2798,11 +4265,53 @@ "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", "dev": true }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "scrypt": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", + "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", + "requires": { + "nan": "^2.0.8" + } + }, + "scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" + }, + "scrypt.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", + "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", + "requires": { + "scrypt": "^6.0.2", + "scryptsy": "^1.2.1" + } + }, + "scryptsy": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", + "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", + "requires": { + "pbkdf2": "^3.0.3" + } }, "secp256k1": { "version": "3.5.0", @@ -2810,14 +4319,32 @@ "integrity": "sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==", "dev": true, "requires": { - "bindings": "1.3.0", - "bip66": "1.1.5", - "bn.js": "4.11.8", - "create-hash": "1.1.3", - "drbg.js": "1.0.1", - "elliptic": "6.4.0", - "nan": "2.9.2", - "safe-buffer": "5.1.1" + "bindings": "^1.2.1", + "bip66": "^1.1.3", + "bn.js": "^4.11.3", + "create-hash": "^1.1.2", + "drbg.js": "^1.0.1", + "elliptic": "^6.2.3", + "nan": "^2.2.1", + "safe-buffer": "^5.1.0" + } + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "requires": { + "commander": "~2.8.1" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + } } }, "semaphore": { @@ -2829,21 +4356,82 @@ "semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "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", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "requires": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + } }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "sha.js": { "version": "2.4.10", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", - "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "sha3": { @@ -2851,17 +4439,32 @@ "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.0.tgz", "integrity": "sha1-aYnxtwpJhwWHajc+LGKs6WqpOZo=", "requires": { - "nan": "2.9.2" + "nan": "^2.0.5" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" } }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, "shelljs": { "version": "0.7.8", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" }, "dependencies": { "glob": { @@ -2869,108 +4472,211 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } } } }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "slice-ansi": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "dev": true, - "requires": { - "hoek": "4.2.1" - } - }, "sol-explore": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/sol-explore/-/sol-explore-1.6.2.tgz", "integrity": "sha1-Q66MQZ/TrAVqBfip0fsQIs1B7MI=" }, "solc": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.24.tgz", - "integrity": "sha512-2xd7Cf1HeVwrIb6Bu1cwY2/TaLRodrppCq3l7rhLimFQgmxptXhTC3+/wesVLpB09F1A2kZgvbMOgH7wvhFnBQ==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.5.4.tgz", + "integrity": "sha512-Jz3yz2mct0AYzR83/jBgxDqrLXTHhYUg2G2PVJbMMt5Vu+8e3Of1Mn3nvjPw5mh46jrzt8l4fBN7vHqG5ZF0cw==", "dev": true, "requires": { - "fs-extra": "0.30.0", - "memorystream": "0.3.1", - "require-from-string": "1.2.1", - "semver": "5.5.0", - "yargs": "4.8.1" - } - }, - "solidity-parser-sc": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/solidity-parser-sc/-/solidity-parser-sc-0.4.11.tgz", - "integrity": "sha512-1kV5iC7m3CtMDfmHaVNwz2saSGQVIuF16rIxU417Al38MVCWHMQQ5vT6cmLsNwDe60S74auobWij9vNawSeOyw==", - "requires": { - "mocha": "4.1.0", - "pegjs": "0.10.0", - "yargs": "4.8.1" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "optional": true - }, - "source-map-support": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", - "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", - "requires": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" + "command-exists": "^1.2.8", + "fs-extra": "^0.30.0", + "keccak": "^1.0.2", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33", + "yargs": "^11.0.0" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "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" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "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" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } } } }, + "solidity-parser-antlr": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/solidity-parser-antlr/-/solidity-parser-antlr-0.4.1.tgz", + "integrity": "sha512-3lXZd3kUbCyiLCieDeyhAm2jPtPXKQYVR5wItbVLRw4MW4fv5pSGC3v4x6BRucKVE6tjVZ9AhTErkqRu2KlXDg==" + }, "spdx-correct": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", "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.0" } }, "spdx-exceptions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "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.0" } }, "spdx-license-ids": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true }, "sprintf-js": { "version": "1.0.3", @@ -2978,67 +4684,87 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", - "dev": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - } + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "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" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.trim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "define-properties": "^1.1.2", + "es-abstract": "^1.5.0", + "function-bind": "^1.0.2" } }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "requires": { - "is-utf8": "0.2.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", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, "strip-hex-prefix": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "dev": true, "requires": { "is-hex-prefixed": "1.0.0" } @@ -3054,7 +4780,46 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" + } + }, + "swarm-js": { + "version": "0.1.39", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", + "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", + "requires": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "decompress": "^4.0.0", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request-promise": "^0.1.2" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + } } }, "table": { @@ -3063,12 +4828,12 @@ "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", "dev": true, "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.5", + "ajv": "^4.7.0", + "ajv-keywords": "^1.0.0", + "chalk": "^1.1.1", + "lodash": "^4.0.0", "slice-ansi": "0.0.4", - "string-width": "2.1.1" + "string-width": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -3089,8 +4854,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": { @@ -3099,11 +4864,51 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "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" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3113,16 +4918,41 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "punycode": "1.4.1" + "os-tmpdir": "~1.0.2" + } + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } } }, "tree-kill": { @@ -3131,53 +4961,175 @@ "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==" }, "truffle": { - "version": "4.1.14", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-4.1.14.tgz", - "integrity": "sha512-e7tTLvKP3bN9dE7MagfWyFjy4ZgoEGbeujECy1me1ENBzbj/aO/+45gs72qsL3+3IkCNNcWNOJjjrm8BYZZNNg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/truffle/-/truffle-5.0.5.tgz", + "integrity": "sha512-YKAfHvq3C5hGCc+S+14FNDM8iZPeta9McocKSAkYBxDTiRfyT6yeDrHmSNEU7fzNAc7jFSlwhY7Cs5bXUR3RKg==", "dev": true, "requires": { - "mocha": "4.1.0", + "app-module-path": "^2.2.0", + "mocha": "^4.1.0", "original-require": "1.0.1", - "solc": "0.4.24" + "solc": "0.5.0" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "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" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "solc": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.24.tgz", - "integrity": "sha512-2xd7Cf1HeVwrIb6Bu1cwY2/TaLRodrppCq3l7rhLimFQgmxptXhTC3+/wesVLpB09F1A2kZgvbMOgH7wvhFnBQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.5.0.tgz", + "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" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "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" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { - "fs-extra": "0.30.0", - "memorystream": "0.3.1", - "require-from-string": "1.2.1", - "semver": "5.5.0", - "yargs": "4.8.1" + "camelcase": "^4.1.0" } } } }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" } }, "typedarray": { @@ -3186,36 +5138,72 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "optional": true, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "optional": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } + "is-typedarray": "^1.0.0" } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "unbzip2-stream": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", + "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", + "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "requires": { + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } + }, + "url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" }, "user-home": { "version": "2.0.0", @@ -3223,84 +5211,351 @@ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", "dev": true, "requires": { - "os-homedir": "1.0.2" + "os-homedir": "^1.0.0" } }, "utf8": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", - "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", + "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "validate-npm-package-license": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "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": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "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.3.0" + "extsprintf": "^1.2.0" } }, "web3": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/web3/-/web3-0.20.6.tgz", - "integrity": "sha1-PpcwauAk+yThCj11yIQwJWIhUSA=", - "requires": { - "bignumber.js": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934", - "crypto-js": "3.1.8", - "utf8": "2.1.2", - "xhr2": "0.1.4", - "xmlhttprequest": "1.8.0" + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.50.tgz", + "integrity": "sha512-N4YqT1jl2tZYNWiLk5gA5BMchHJaG76d65z899DT9UTR4iI6mfqe1QIE+1YLII1x+uE8ohFzBq/aaZ8praLeoA==", + "requires": { + "@babel/runtime": "^7.3.1", + "@types/node": "^10.12.18", + "web3-bzz": "1.0.0-beta.50", + "web3-core": "1.0.0-beta.50", + "web3-core-helpers": "1.0.0-beta.50", + "web3-core-method": "1.0.0-beta.50", + "web3-eth": "1.0.0-beta.50", + "web3-eth-personal": "1.0.0-beta.50", + "web3-net": "1.0.0-beta.50", + "web3-providers": "1.0.0-beta.50", + "web3-shh": "1.0.0-beta.50", + "web3-utils": "1.0.0-beta.50" + } + }, + "web3-bzz": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.50.tgz", + "integrity": "sha512-0jD4/g+apH7t87cA9gXoZpvvVW7OqQtbu+X+olFKPrS9pKbkwfaKPdRwc1BNbjqvrRYN0K7koT9xV+Lzvyah6w==", + "requires": { + "@babel/runtime": "^7.3.1", + "@types/node": "^10.12.18", + "lodash": "^4.17.11", + "swarm-js": "^0.1.39" + } + }, + "web3-core": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.50.tgz", + "integrity": "sha512-edOHdSnkRREi0vUXXNUsrbkTvXftCDroiF2tEvbPVyiBv0U6/VDYClFdHuZKdrrTRUcn/rUbvBqw8qCt3xgcuQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "@types/node": "^10.12.18", + "lodash": "^4.17.11", + "web3-utils": "1.0.0-beta.50" + } + }, + "web3-core-helpers": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.50.tgz", + "integrity": "sha512-B1LMrlC9c5HEJYmBWUhsxHdJ78w5YGop/ptF1cFL8cHLwTCQqCFFKLgYUg+dax/554TP1xgJ2w/ArLpnPJ8dBg==", + "requires": { + "@babel/runtime": "^7.3.1", + "lodash": "^4.17.11", + "web3-eth-iban": "1.0.0-beta.50", + "web3-utils": "1.0.0-beta.50" + } + }, + "web3-core-method": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.50.tgz", + "integrity": "sha512-0+L37KDT90DD1fcTye/ZWMyGOLiw0ZxX2vaC8qDSFvAV3scTEuZyEQuR+tCM2aGyUVihy8LdmZwioRwnTXgLwg==", + "requires": { + "@babel/runtime": "^7.3.1", + "eventemitter3": "3.1.0", + "lodash": "^4.17.11" + } + }, + "web3-core-subscriptions": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.50.tgz", + "integrity": "sha512-q2Jmuy/BCwcKCFjR6kc03hPbdC6sR0n3IhPVg98Sk7ewgRLur/v3lLDz0fQpY4xE6U0XOqrjxwzlqISkOcP5Kw==", + "requires": { + "@babel/runtime": "^7.3.1", + "eventemitter3": "^3.1.0", + "lodash": "^4.17.11" + } + }, + "web3-eth": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.50.tgz", + "integrity": "sha512-ojsddEclIdu+C3hfRrLVJK0rcxt2O+Yj7c3b4YEzZQ9+Kd/HaSZfeSpUgKojgmFhUUiCCRTEc2holWtQ+Lx4gQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "eth-lib": "0.2.8", + "rxjs": "^6.4.0", + "web3-core": "1.0.0-beta.50", + "web3-core-helpers": "1.0.0-beta.50", + "web3-core-method": "1.0.0-beta.50", + "web3-core-subscriptions": "1.0.0-beta.50", + "web3-eth-abi": "1.0.0-beta.50", + "web3-eth-accounts": "1.0.0-beta.50", + "web3-eth-contract": "1.0.0-beta.50", + "web3-eth-ens": "1.0.0-beta.50", + "web3-eth-iban": "1.0.0-beta.50", + "web3-eth-personal": "1.0.0-beta.50", + "web3-net": "1.0.0-beta.50", + "web3-providers": "1.0.0-beta.50", + "web3-utils": "1.0.0-beta.50" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + } + } + }, + "web3-eth-abi": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.50.tgz", + "integrity": "sha512-Nwm1HL3xBbrs43j/9V3gH1CJWWR7jyTDSE7PIkjYVjwgygAjlHPMHzuzGffoFMp2tSQ2DywCGmXAY5I5+vznZw==", + "requires": { + "@babel/runtime": "^7.3.1", + "ethers": "^4.0.27", + "lodash": "^4.17.11", + "web3-utils": "1.0.0-beta.50" + } + }, + "web3-eth-accounts": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.50.tgz", + "integrity": "sha512-cUuYxKhymob87zCUYgw7ieZY6aVStMhClocblI3FKNdI1I8dczhdhZ97qMj5iavOganN7/OxLzeji7ksAoNAhg==", + "requires": { + "@babel/runtime": "^7.3.1", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "lodash": "^4.17.11", + "scrypt.js": "0.2.0", + "uuid": "3.3.2", + "web3-core": "1.0.0-beta.50", + "web3-core-helpers": "1.0.0-beta.50", + "web3-core-method": "1.0.0-beta.50", + "web3-providers": "1.0.0-beta.50", + "web3-utils": "1.0.0-beta.50" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + } + } + }, + "web3-eth-contract": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.50.tgz", + "integrity": "sha512-X8R1+qIeD4Dbz1RmQa5m3K1suVFigNgd7EFMp6vVC3ULDjt4R6T0cRmFw/x51v3MQoT7s6Yd1KiEWIAt9IYG6w==", + "requires": { + "@babel/runtime": "^7.3.1", + "lodash": "^4.17.11", + "web3-core": "1.0.0-beta.50", + "web3-core-helpers": "1.0.0-beta.50", + "web3-core-method": "1.0.0-beta.50", + "web3-core-subscriptions": "1.0.0-beta.50", + "web3-eth-abi": "1.0.0-beta.50", + "web3-eth-accounts": "1.0.0-beta.50", + "web3-providers": "1.0.0-beta.50", + "web3-utils": "1.0.0-beta.50" + } + }, + "web3-eth-ens": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.50.tgz", + "integrity": "sha512-UnhYcNuSNRBOBcbD5y8cTyRh5ENn65/GfZkxCDXAKBY6sD4GzMZNkD7kq+37/34cnZEzzQPPGd9jLZNLXOklyg==", + "requires": { + "@babel/runtime": "^7.3.1", + "eth-ens-namehash": "2.0.8", + "lodash": "^4.17.11", + "web3-core": "1.0.0-beta.50", + "web3-core-helpers": "1.0.0-beta.50", + "web3-core-method": "1.0.0-beta.50", + "web3-eth-abi": "1.0.0-beta.50", + "web3-eth-contract": "1.0.0-beta.50", + "web3-net": "1.0.0-beta.50", + "web3-providers": "1.0.0-beta.50", + "web3-utils": "1.0.0-beta.50" + } + }, + "web3-eth-iban": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.50.tgz", + "integrity": "sha512-rW5fpUUW3WaToPxBXNnqTfj5dh2BJ+9uognYAfThh2WWR1+EwWZethsKS/PyU6Jn9uA5p/kQoUIP0JKaeBm80Q==", + "requires": { + "@babel/runtime": "^7.3.1", + "bn.js": "4.11.8", + "web3-utils": "1.0.0-beta.50" + } + }, + "web3-eth-personal": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.50.tgz", + "integrity": "sha512-52dS24YfJxx/Uy21RKj2m5rjag1kktdy5rY/R9vDwWZRrJkxfDf058CvtRF+QsD7A6QVxkHCZ9YwEWnLCLW9Cw==", + "requires": { + "@babel/runtime": "^7.3.1", + "web3-core": "1.0.0-beta.50", + "web3-core-helpers": "1.0.0-beta.50", + "web3-core-method": "1.0.0-beta.50", + "web3-net": "1.0.0-beta.50", + "web3-providers": "1.0.0-beta.50", + "web3-utils": "1.0.0-beta.50" + } + }, + "web3-net": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.50.tgz", + "integrity": "sha512-T9aBrWYzCeqZTTJlljonTm8x1tEjHT1uBqcdvEYZoyCS1Xxc+zCNBqP4SBfdcfwCeGohhI7bRx9qX1JjYH3cRA==", + "requires": { + "@babel/runtime": "^7.3.1", + "lodash": "^4.17.11", + "web3-core": "1.0.0-beta.50", + "web3-core-helpers": "1.0.0-beta.50", + "web3-core-method": "1.0.0-beta.50", + "web3-providers": "1.0.0-beta.50", + "web3-utils": "1.0.0-beta.50" + } + }, + "web3-providers": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-providers/-/web3-providers-1.0.0-beta.50.tgz", + "integrity": "sha512-p2xtr6N72pdXvND5dLdK1G9T/9qCQiKC2EYDPmimnqvoHWixmM3tlBl042swkHspHHVL60vXPKxB4UDaQE2hWQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "@types/node": "^10.12.18", + "eventemitter3": "3.1.0", + "lodash": "^4.17.11", + "url-parse": "1.4.4", + "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "xhr2-cookies": "1.1.0" + } + }, + "web3-shh": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.50.tgz", + "integrity": "sha512-a46Gz/YQdF3HJ4XK7rZh6bJiP3IEq+BDAvdxD1jW54yKM2k3RGarOY8hanC1crxKE7E9Q1UUkrp1Vjrj8XSQuQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "web3-core": "1.0.0-beta.50", + "web3-core-helpers": "1.0.0-beta.50", + "web3-core-method": "1.0.0-beta.50", + "web3-core-subscriptions": "1.0.0-beta.50", + "web3-net": "1.0.0-beta.50", + "web3-providers": "1.0.0-beta.50", + "web3-utils": "1.0.0-beta.50" + } + }, + "web3-utils": { + "version": "1.0.0-beta.50", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.50.tgz", + "integrity": "sha512-xGhM/YkepK2x0iMYUl/sws58LzTbodjMGlhZxrCZLZxJ0DoaDyk3UdmZ6aCSCwVTFg4hlVj3doaIhWnwGfhhpQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "@types/bn.js": "^4.11.4", + "@types/node": "^10.12.18", + "bn.js": "4.11.8", + "eth-lib": "0.2.8", + "ethjs-unit": "^0.1.6", + "lodash": "^4.17.11", + "number-to-bn": "1.7.0", + "randomhex": "0.1.5", + "utf8": "2.1.1" }, "dependencies": { - "crypto-js": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", - "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=" + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } } } }, + "websocket": { + "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "from": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible", + "requires": { + "debug": "^2.2.0", + "nan": "^2.3.3", + "typedarray-to-buffer": "^3.1.2", + "yaeti": "^0.0.6" + } + }, "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "optional": true - }, "wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", @@ -3310,9 +5565,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } }, "wrappy": { @@ -3326,13 +5582,59 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, - "xhr2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", - "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "xhr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", + "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", + "requires": { + "global": "~4.3.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "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" + } + }, + "xhr-request-promise": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", + "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", + "requires": { + "xhr-request": "^1.0.1" + } + }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", + "requires": { + "cookiejar": "^2.1.1" + } }, "xmlhttprequest": { "version": "1.8.0", @@ -3342,66 +5644,32 @@ "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", - "requires": { - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "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" - }, - "dependencies": { - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=" - } - } + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" }, - "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "requires": { - "camelcase": "3.0.0", - "lodash.assign": "4.2.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - } + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } } } diff --git a/package.json b/package.json index 5c5c0b68..3eb74538 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "solidity-coverage", - "version": "0.5.11", + "version": "0.6.0-beta.5", "description": "", "bin": { "solidity-coverage": "./bin/exec.js" @@ -22,15 +22,16 @@ "license": "ISC", "dependencies": { "death": "^1.1.0", - "ethereumjs-testrpc-sc": "6.1.6", + "ethereumjs-testrpc-sc": "6.4.1", "istanbul": "^0.4.5", "keccakjs": "^0.2.1", "req-cwd": "^1.0.1", "shelljs": "^0.7.4", "sol-explore": "^1.6.2", - "solidity-parser-sc": "0.4.11", + "solidity-parser-antlr": "^0.4.1", "tree-kill": "^1.2.0", - "web3": "^0.20.6" + "web3": "^1.0.0-beta.50", + "web3-eth-abi": "1.0.0-beta.50" }, "devDependencies": { "crypto-js": "^3.1.9-1", @@ -41,11 +42,11 @@ "ethereumjs-account": "~2.0.4", "ethereumjs-tx": "^1.2.2", "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "https://github.com/sc-forks/ethereumjs-vm-sc.git#6be86e6f12634b711423203e6744cafe07c38e69", + "ethereumjs-vm": "git+https://github.com/sc-forks/ethereumjs-vm-sc.git#3c328147a2c48a379af775930f52c439813a21e2", "merkle-patricia-tree": "~2.1.2", "mocha": "^4.1.0", - "request": "^2.81.0", - "solc": "^0.4.24", - "truffle": "^4.1.14" + "request": "^2.88.0", + "solc": "^0.5.3", + "truffle": "^5.0.0" } } diff --git a/test/app.js b/test/app.js index 0ce67b76..8b56a42b 100644 --- a/test/app.js +++ b/test/app.js @@ -155,6 +155,14 @@ describe('app', () => { port: 8999, network_id: "*" } + }, + compilers: { + solc: { + version: "0.5.3", + settings: { + evmVersion: "constantinople" + } + } } };`; @@ -305,6 +313,7 @@ describe('app', () => { }); it.skip('contract sends / transfers to instrumented fallback: coverage, cleanup & exit(0)', () => { + // Skipped due to https://github.com/sc-forks/solidity-coverage/issues/106 // Validate ethereumjs-vm hack to remove gas constraints on transfer() and send() assert(pathExists('./coverage') === false, 'should start without: coverage'); assert(pathExists('./coverage.json') === false, 'should start without: coverage.json'); @@ -337,8 +346,7 @@ describe('app', () => { const produced = JSON.parse(fs.readFileSync('./coverage.json', 'utf8')); const ownedPath = Object.keys(produced)[0]; const proxyPath = Object.keys(produced)[1]; - - assert(produced[ownedPath].fnMap['1'].name === 'Owned', 'coverage.json should map "Owned"'); + assert(produced[ownedPath].fnMap['1'].name === 'constructor', 'coverage.json should map "constructor"'); assert(produced[proxyPath].fnMap['1'].name === 'isOwner', 'coverage.json should map "isOwner"'); collectGarbage(); }); diff --git a/test/assembly.js b/test/assembly.js new file mode 100644 index 00000000..9c1ed16a --- /dev/null +++ b/test/assembly.js @@ -0,0 +1,24 @@ +/* eslint-env node, mocha */ + +const solc = require('solc'); +const getInstrumentedVersion = require('./../lib/instrumentSolidity.js'); +const util = require('./util/util.js'); +const path = require('path'); + +/** + * NB: passing '1' to solc as an option activates the optimiser + * NB: solc will throw if there is a compilation error, causing the test to fail + * and passing the error to mocha. + */ +describe('generic expressions', () => { + const filePath = path.resolve('./test.sol'); + + it('should compile after instrumenting an assembly function with spaces in parameters', () => { + const contract = util.getCode('assembly/spaces-in-function.sol'); + const info = getInstrumentedVersion(contract, filePath); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); + console.log(info) + util.report(output.errors); + }); + +}); diff --git a/test/cli/events.js b/test/cli/events.js index 6fc78fca..53b15b0b 100644 --- a/test/cli/events.js +++ b/test/cli/events.js @@ -8,12 +8,13 @@ contract('Events', accounts => { const loggedEvents = []; Events.deployed().then(instance => { const allEvents = instance.allEvents(); - allEvents.watch((error, event) => { loggedEvents.push(event); }); + + allEvents.on("data", event => { loggedEvents.push(event); }); instance.test(5).then(() => { const bad = loggedEvents.filter(e => e.event !== 'LogEventOne' && e.event !== 'LogEventTwo'); assert(bad.length === 0, 'Did not filter events correctly'); - allEvents.stopWatching(done); + done(); }); }); }); diff --git a/test/cli/sign.js b/test/cli/sign.js index c4d7913b..1f43e318 100644 --- a/test/cli/sign.js +++ b/test/cli/sign.js @@ -1,23 +1,23 @@ /* eslint-env node, mocha */ /* global artifacts, contract, assert */ -const Web3 = require('web3'); const ethUtil = require('ethereumjs-util'); -const provider = new Web3.providers.HttpProvider('http://localhost:8555'); // testrpc-sc -const web3 = new Web3(provider); const Simple = artifacts.require('./Simple.sol'); contract('Simple', accounts => { it('should set x to 5', () => { let simple; + let messageSha3; return Simple.deployed() .then(instance => instance.test(5)) // We need this line to generate some coverage .then(() => { const message = 'Enclosed is my formal application for permanent residency in New Zealand'; - const messageSha3 = web3.sha3(message); - const signature = web3.eth.sign(accounts[0], messageSha3); - + messageSha3 = web3.utils.sha3(message); + const signature = web3.eth.sign(messageSha3, accounts[0]); + return signature; + }) + .then((signature) => { const messageBuffer = new Buffer(messageSha3.replace('0x', ''), 'hex'); const messagePersonalHash = ethUtil.hashPersonalMessage(messageBuffer); @@ -25,7 +25,7 @@ contract('Simple', accounts => { const publicKey = ethUtil.ecrecover(messagePersonalHash, sigParams.v, sigParams.r, sigParams.s); const senderBuffer = ethUtil.pubToAddress(publicKey); const sender = ethUtil.bufferToHex(senderBuffer); - assert.equal(sender, accounts[0]); + assert.equal(sender, accounts[0].toLowerCase()); }); }); }); \ No newline at end of file diff --git a/test/cli/testrpc-options.js b/test/cli/testrpc-options.js index b4c455dd..3266a4b6 100644 --- a/test/cli/testrpc-options.js +++ b/test/cli/testrpc-options.js @@ -6,7 +6,7 @@ const Simple = artifacts.require('./Simple.sol'); contract('Simple', accounts => { // Crash truffle if the account loaded in the options string isn't found here. it('should load with expected account', () => { - assert(accounts[0] === '0xa4860cedd5143bd63f347cab453bf91425f8404f'); + assert(accounts[0] === '0xA4860CEDd5143Bd63F347CaB453Bf91425f8404f'); }); // Generate some coverage so the script doesn't exit(1) because there are no events diff --git a/test/cli/totallyPure.js b/test/cli/totallyPure.js index 63e08910..b665267d 100644 --- a/test/cli/totallyPure.js +++ b/test/cli/totallyPure.js @@ -21,12 +21,6 @@ contract('TotallyPure', accounts => { assert.equal(value.toNumber(), 5); }); - it('calls an imported, inherited constant function', async () => { - const instance = await TotallyPure.deployed(); - const value = await instance.isConstant(); - assert.equal(value.toNumber(), 99); - }); - it('overrides an imported, inherited abstract pure function', async () => { const instance = await TotallyPure.deployed(); const value = await instance.bePure(4, 5); @@ -39,18 +33,6 @@ contract('TotallyPure', accounts => { assert.equal(value.toNumber(), 99); }); - it('overrides an imported, inherited abstract constant function', async () => { - const instance = await TotallyPure.deployed(); - const value = await instance.beConstant(); - assert.equal(value.toNumber(), 99); - }); - - it('overrides an imported, inherited abstract constant function, and uses .call()', async () => { - const instance = await TotallyPure.deployed(); - const value = await instance.beConstant.call(); - assert.equal(value.toNumber(), 99); - }); - it('calls a pure method implemented in an inherited class', async() => { const instance = await TotallyPure.deployed(); const value = await instance.inheritedPure(4, 5); @@ -63,12 +45,6 @@ contract('TotallyPure', accounts => { assert.equal(value.toNumber(), 5); }); - it('calls a constant method implemented in an inherited class', async () => { - const instance = await TotallyPure.deployed(); - const value = await instance.inheritedConstant(); - assert.equal(value.toNumber(), 5); - }); - it('calls a view method whose modifiers span lines', async () => { const instance = await TotallyPure.deployed(); const value = await instance.multiline(5, 7) diff --git a/test/cli/wallet.js b/test/cli/wallet.js index 591bf613..2aaf35a5 100644 --- a/test/cli/wallet.js +++ b/test/cli/wallet.js @@ -9,14 +9,17 @@ contract('Wallet', accounts => { const walletB = await Wallet.new(); await walletA.sendTransaction({ - value: web3.toBigNumber(100), from: accounts[0], + value: web3.utils.toBN(100), from: accounts[0], }); + console.log('transaction done') await walletA.sendPayment(50, walletB.address, { from: accounts[0], }); + console.log('transaction done') await walletA.transferPayment(50, walletB.address, { from: accounts[0], }); + console.log('transaction done') const balance = await walletB.getBalance(); assert.equal(balance.toNumber(), 100); }); diff --git a/test/comments.js b/test/comments.js index 6d77b8f5..79ca305e 100644 --- a/test/comments.js +++ b/test/comments.js @@ -13,26 +13,26 @@ describe('comments', () => { it('should cover functions even if comments are present immediately after the opening {', () => { const contract = util.getCode('comments/postFunctionDeclarationComment.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); it('should cover lines even if comments are present', () => { const contract = util.getCode('comments/postLineComment.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); assert.deepEqual([6, 5], info.runnableLines); util.report(output.errors); }); it('should cover contracts even if comments are present', () => { const contract = util.getCode('comments/postContractComment.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); it('should cover if statements even if comments are present immediately after opening { ', () => { const contract = util.getCode('comments/postIfStatementComment.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); }); diff --git a/test/conditional.js b/test/conditional.js index 8b8da618..c6995eae 100644 --- a/test/conditional.js +++ b/test/conditional.js @@ -14,7 +14,6 @@ describe.skip('conditional statements', () => { it('should cover a conditional that reaches the consequent (same-line)', done => { const contract = util.getCode('conditional/sameline-consequent.sol'); const info = getInstrumentedVersion(contract, filePath); - console.log(info.contract) const coverage = new CoverageMap(); coverage.addContract(info, filePath); diff --git a/test/expressions.js b/test/expressions.js index fd3558b9..5723e22b 100644 --- a/test/expressions.js +++ b/test/expressions.js @@ -16,14 +16,14 @@ describe('generic expressions', () => { it('should compile after instrumenting a single binary expression', () => { const contract = util.getCode('expressions/single-binary-expression.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); it('should compile after instrumenting a new expression', () => { const contract = util.getCode('expressions/new-expression.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); }); diff --git a/test/function.js b/test/function.js index d91a9e3a..a5bb8651 100644 --- a/test/function.js +++ b/test/function.js @@ -20,49 +20,56 @@ describe('function declarations', () => { it('should compile after instrumenting an ordinary function declaration', () => { const contract = util.getCode('function/function.sol'); const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); it('should compile after instrumenting an abstract function declaration', () => { const contract = util.getCode('function/abstract.sol'); const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); it('should compile after instrumenting a function declaration with an empty body', () => { const contract = util.getCode('function/empty-body.sol'); const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); it('should compile after instrumenting lots of declarations in row', () => { const contract = util.getCode('function/multiple.sol'); const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); it('should compile after instrumenting a new->constructor-->method chain', () => { const contract = util.getCode('function/chainable-new.sol'); const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); it('should compile after instrumenting a constructor call that chains to a method call', () => { const contract = util.getCode('function/chainable.sol'); const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); + util.report(output.errors); + }); + + it('should compile after instrumenting a function with calldata keyword', () => { + const contract = util.getCode('function/calldata.sol'); + const info = getInstrumentedVersion(contract, 'test.sol'); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); it('should compile after instrumenting a constructor-->method-->value chain', () => { const contract = util.getCode('function/chainable-value.sol'); const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); @@ -89,6 +96,29 @@ describe('function declarations', () => { }).catch(done); }); + it('should cover a modifier used on a function', done => { + const contract = util.getCode('function/modifier.sol'); + const info = getInstrumentedVersion(contract, filePath); + const coverage = new CoverageMap(); + coverage.addContract(info, filePath); + + vm.execute(info.contract, 'a', [0]).then(events => { + const mapping = coverage.generate(events, pathPrefix); + assert.deepEqual(mapping[filePath].l, { + 5: 1, 6: 1, 9: 1, + }); + assert.deepEqual(mapping[filePath].b, {}); + assert.deepEqual(mapping[filePath].s, { + 1: 1 + }); + assert.deepEqual(mapping[filePath].f, { + 1: 1, + 2: 1, + }); + done(); + }).catch(done); + }); + it('should cover a constructor that uses the `constructor` keyword', done => { const contract = util.getCode('function/constructor-keyword.sol'); const info = getInstrumentedVersion(contract, filePath); @@ -102,7 +132,7 @@ describe('function declarations', () => { }); assert.deepEqual(mapping[filePath].b, {}); assert.deepEqual(mapping[filePath].s, { - 1: 1, + 1: 1, 2: 1 }); assert.deepEqual(mapping[filePath].f, { 1: 1, diff --git a/test/if.js b/test/if.js index 4c8fd825..60cb49b1 100644 --- a/test/if.js +++ b/test/if.js @@ -208,4 +208,27 @@ describe('if, else, and else if statements', () => { done(); }).catch(done); }); + + it('should cover if-elseif-else statements that are at the same depth as each other', done => { + const contract = util.getCode('if/if-elseif-else.sol'); + const info = getInstrumentedVersion(contract, filePath); + const coverage = new CoverageMap(); + coverage.addContract(info, filePath); + vm.execute(info.contract, 'a', [2, 3, 3]).then(events => { + const mapping = coverage.generate(events, pathPrefix); + assert.deepEqual(mapping[filePath].l, { + 5: 1, 6: 0, 8: 1, 10: 0, 13: 1, 14: 0, 16: 1, 18: 0, + }); + assert.deepEqual(mapping[filePath].b, { + 1: [0, 1], 2: [1, 0], 3: [0, 1], 4: [1, 0] + }); + assert.deepEqual(mapping[filePath].s, { + 1: 1, 2: 0, 3: 1, 4: 1, 5: 0, 6: 1, 7: 0, 8: 1, 9: 1, 10: 0, + }); + assert.deepEqual(mapping[filePath].f, { + 1: 1, + }); + done(); + }).catch(done); + }); }); diff --git a/test/return.js b/test/return.js index a8ebaa35..3df788a5 100644 --- a/test/return.js +++ b/test/return.js @@ -8,14 +8,7 @@ describe('return statements', () => { it('should compile after instrumenting function that returns true', () => { const contract = util.getCode('return/return.sol'); const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting function that returns without specifying val (null)', () => { - const contract = util.getCode('return/return-null.sol'); - const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); }); diff --git a/test/sources/assembly/spaces-in-function.sol b/test/sources/assembly/spaces-in-function.sol new file mode 100644 index 00000000..67cef021 --- /dev/null +++ b/test/sources/assembly/spaces-in-function.sol @@ -0,0 +1,18 @@ +pragma solidity ^0.5.0; + +contract Test { + function a() public { + assembly { + function power(base, exponent) -> result { + switch exponent + case 0 { result := 1 } + case 1 { result := base } + default { + result := power(mul(base, base), div(exponent, 2)) + switch mod(exponent, 2) + case 1 { result := mul(base, result) } + } + } + } + } +} \ No newline at end of file diff --git a/test/sources/assert/Assert.sol b/test/sources/assert/Assert.sol index 2f5b1d54..a14189a5 100644 --- a/test/sources/assert/Assert.sol +++ b/test/sources/assert/Assert.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.13; +pragma solidity ^0.5.0; contract Test { - function a(bool test){ + function a(bool test) public { assert(test); } } diff --git a/test/sources/assert/RequireMultiline.sol b/test/sources/assert/RequireMultiline.sol index b45bb2e0..de1aead6 100644 --- a/test/sources/assert/RequireMultiline.sol +++ b/test/sources/assert/RequireMultiline.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.13; +pragma solidity ^0.5.0; contract Test { - function a(bool a, bool b, bool c){ + function a(bool a, bool b, bool c) public { require(a && b && c); diff --git a/test/sources/cli/CLibrary.sol b/test/sources/cli/CLibrary.sol index 28931ea2..3a341115 100644 --- a/test/sources/cli/CLibrary.sol +++ b/test/sources/cli/CLibrary.sol @@ -1,8 +1,8 @@ -pragma solidity ^0.4.17; +pragma solidity ^0.5.0; library CLibrary { uint constant x = 1; - function a() public constant returns (uint) { + function a() public view returns (uint) { return x; } } \ No newline at end of file diff --git a/test/sources/cli/Empty.sol b/test/sources/cli/Empty.sol index 4c43cfc9..a832fa4b 100644 --- a/test/sources/cli/Empty.sol +++ b/test/sources/cli/Empty.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Empty { } \ No newline at end of file diff --git a/test/sources/cli/Events.sol b/test/sources/cli/Events.sol index 8a80ca4d..6c4e3ede 100644 --- a/test/sources/cli/Events.sol +++ b/test/sources/cli/Events.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Events { uint x = 0; @@ -7,14 +7,14 @@ contract Events { event LogEventOne( uint x, address y); event LogEventTwo( uint x, address y); - function test(uint val) { + function test(uint val) public { // Assert / Require events require(true); // Contract Events - LogEventOne(100, msg.sender); + emit LogEventOne(100, msg.sender); x = x + val; - LogEventTwo(200, msg.sender); + emit LogEventTwo(200, msg.sender); // Branch events if (true) { @@ -24,7 +24,7 @@ contract Events { } } - function getX() returns (uint){ + function getX() public view returns (uint){ return x; } } \ No newline at end of file diff --git a/test/sources/cli/Expensive.sol b/test/sources/cli/Expensive.sol index 310010d3..327239d5 100644 --- a/test/sources/cli/Expensive.sol +++ b/test/sources/cli/Expensive.sol @@ -2,11 +2,11 @@ // Block gas limit is: 0x47e7c4 // Should throw out of gas on unmodified truffle // Should pass solcover truffle -pragma solidity ^0.4.2; +pragma solidity ^0.5.0; contract Expensive { mapping (uint => address) map; - function Expensive(){ + constructor() public { for(uint i = 0; i < 1000; i++ ){ map[i] = address(this); } diff --git a/test/sources/cli/Face.sol b/test/sources/cli/Face.sol index 47b5030b..2e9d2a45 100644 --- a/test/sources/cli/Face.sol +++ b/test/sources/cli/Face.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.4.21; +pragma solidity ^0.5.0; interface Face { function stare(uint a, uint b) external; diff --git a/test/sources/cli/Migrations.sol b/test/sources/cli/Migrations.sol index b001aa75..2dceceab 100644 --- a/test/sources/cli/Migrations.sol +++ b/test/sources/cli/Migrations.sol @@ -1,20 +1,25 @@ -pragma solidity ^0.4.4; +pragma solidity ^0.5.0; + + contract Migrations { address public owner; + uint public last_completed_migration; - modifier restricted() {if (msg.sender == owner) _;} + modifier restricted() { + if (msg.sender == owner) { _; } + } - function Migrations() { + constructor() public { owner = msg.sender; } - function setCompleted(uint completed) restricted { + function setCompleted(uint completed) public restricted { last_completed_migration = completed; } - function upgrade(address new_address) restricted { + function upgrade(address new_address) public restricted { Migrations upgraded = Migrations(new_address); upgraded.setCompleted(last_completed_migration); } -} \ No newline at end of file +} diff --git a/test/sources/cli/OnlyCall.sol b/test/sources/cli/OnlyCall.sol index 87dda617..d37ab2cb 100644 --- a/test/sources/cli/OnlyCall.sol +++ b/test/sources/cli/OnlyCall.sol @@ -2,10 +2,10 @@ * This contract contains a single function that is accessed using method.call * With an unpatched testrpc it should not generate any events. */ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract OnlyCall { - function addTwo(uint val) returns (uint){ + function addTwo(uint val) public pure returns (uint){ val = val + 2; return val; } diff --git a/test/sources/cli/Owned.sol b/test/sources/cli/Owned.sol index c6b91c7d..2b2b96bc 100644 --- a/test/sources/cli/Owned.sol +++ b/test/sources/cli/Owned.sol @@ -1,6 +1,6 @@ -pragma solidity ^0.4.4; +pragma solidity ^0.5.0; contract Owned { - function Owned() { owner = msg.sender; } + constructor() public { owner = msg.sender; } address owner; } \ No newline at end of file diff --git a/test/sources/cli/Proxy.sol b/test/sources/cli/Proxy.sol index 25bcba56..f6557ed3 100644 --- a/test/sources/cli/Proxy.sol +++ b/test/sources/cli/Proxy.sol @@ -1,9 +1,9 @@ -pragma solidity ^0.4.4; +pragma solidity ^0.5.0; import "./Owned.sol"; contract Proxy is Owned { - function isOwner() returns (bool) { + function isOwner() public returns (bool) { if (msg.sender == owner) { return true; } else { diff --git a/test/sources/cli/PureView.sol b/test/sources/cli/PureView.sol index f8debcda..a66773f1 100644 --- a/test/sources/cli/PureView.sol +++ b/test/sources/cli/PureView.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.4.21; +pragma solidity ^0.5.0; contract PureView { @@ -8,7 +8,6 @@ contract PureView { // Abstract functions to inherit from an uninstrumented, imported file. function bePure(uint a, uint b) public pure returns (uint); function beView() public view returns (uint); - function beConstant() public constant returns (uint); function inheritedPure(uint a, uint b) public pure returns(uint){ return a + b; @@ -17,8 +16,4 @@ contract PureView { function inheritedView() public view returns (uint){ return notpureview; } - - function inheritedConstant() public constant returns (uint){ - return notpureview; - } } \ No newline at end of file diff --git a/test/sources/cli/Simple.sol b/test/sources/cli/Simple.sol index f552b230..bfbd6d2e 100644 --- a/test/sources/cli/Simple.sol +++ b/test/sources/cli/Simple.sol @@ -1,13 +1,13 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.3; contract Simple { uint x = 0; - function test(uint val) { + function test(uint val) public { x = x + val; } - function getX() returns (uint){ + function getX() public view returns (uint){ return x; } } \ No newline at end of file diff --git a/test/sources/cli/SimpleError.sol b/test/sources/cli/SimpleError.sol index f1f92828..a50bacbb 100644 --- a/test/sources/cli/SimpleError.sol +++ b/test/sources/cli/SimpleError.sol @@ -1,14 +1,14 @@ // This contract should throw a parse error in instrumentSolidity.js -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract SimpleError { uint x = 0; - function test(uint val) { + function test(uint val) public { x = x + val // <-- no semi-colon } - function getX() returns (uint){ + function getX() public returns (uint){ return x; } } \ No newline at end of file diff --git a/test/sources/cli/TotallyPure.sol b/test/sources/cli/TotallyPure.sol index 1d0eeeef..008271cb 100644 --- a/test/sources/cli/TotallyPure.sol +++ b/test/sources/cli/TotallyPure.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.4.21; +pragma solidity ^0.5.0; import "./../assets/Face.sol"; import "./../assets/PureView.sol"; @@ -7,7 +7,7 @@ import "./../assets/CLibrary.sol"; contract TotallyPure is PureView, Face { uint onehundred = 99; - function usesThem() { + function usesThem() public view { uint y = isPure(1,2); uint z = isView(); } @@ -20,11 +20,7 @@ contract TotallyPure is PureView, Face { return notpureview; } - function isConstant() public constant returns (uint){ - return onehundred; - } - - function beConstant() public constant returns (uint){ + function isConstant() public view returns (uint){ return onehundred; } @@ -36,7 +32,7 @@ contract TotallyPure is PureView, Face { return onehundred; } - function usesLibrary() public constant returns (uint){ + function usesLibrary() public view returns (uint){ return CLibrary.a(); } diff --git a/test/sources/cli/Wallet.sol b/test/sources/cli/Wallet.sol index 48c0ba16..037d9ad8 100644 --- a/test/sources/cli/Wallet.sol +++ b/test/sources/cli/Wallet.sol @@ -1,25 +1,25 @@ -pragma solidity ^0.4.4; +pragma solidity ^0.5.0; contract Wallet { event Deposit(address indexed _sender, uint _value); - function transferPayment(uint payment, address recipient){ + function transferPayment(uint payment, address payable recipient) public { recipient.transfer(payment); } - function sendPayment(uint payment, address recipient){ + function sendPayment(uint payment, address payable recipient) public { if (!recipient.send(payment)) revert(); } - function getBalance() constant returns(uint){ + function getBalance() public view returns(uint){ return address(this).balance; } - function() payable + function() external payable { if (msg.value > 0) - Deposit(msg.sender, msg.value); + emit Deposit(msg.sender, msg.value); } } \ No newline at end of file diff --git a/test/sources/comments/postContractComment.sol b/test/sources/comments/postContractComment.sol index 3385918a..452c6d69 100644 --- a/test/sources/comments/postContractComment.sol +++ b/test/sources/comments/postContractComment.sol @@ -1,8 +1,8 @@ -pragma solidity ^0.4.13; +pragma solidity ^0.5.0; contract Test {//Comment immediately after contract declaration - function a(bool test){ - var x = 1; - var y = 2; + function a(bool test) public { + uint8 x = 1; + uint8 y = 2; } } diff --git a/test/sources/comments/postFunctionDeclarationComment.sol b/test/sources/comments/postFunctionDeclarationComment.sol index 2a3e79ea..4c6fdcae 100644 --- a/test/sources/comments/postFunctionDeclarationComment.sol +++ b/test/sources/comments/postFunctionDeclarationComment.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.13; +pragma solidity ^0.5.0; contract Test { - function a(bool test){//Comment immediately after function declaration + function a(bool test) public {//Comment immediately after function declaration } - function b(bool test){var x=1;}//Comment immediately after function closes + function b(bool test) public {uint8 x=1;}//Comment immediately after function closes } diff --git a/test/sources/comments/postIfStatementComment.sol b/test/sources/comments/postIfStatementComment.sol index 5f93a946..77a404b6 100644 --- a/test/sources/comments/postIfStatementComment.sol +++ b/test/sources/comments/postIfStatementComment.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.13; +pragma solidity ^0.5.0; contract Test { - function a(bool x){ + function a(bool x) public { int y; if (x){//Comment straight after { y = 1; diff --git a/test/sources/comments/postLineComment.sol b/test/sources/comments/postLineComment.sol index baddd68d..20725c4f 100644 --- a/test/sources/comments/postLineComment.sol +++ b/test/sources/comments/postLineComment.sol @@ -1,8 +1,8 @@ -pragma solidity ^0.4.13; +pragma solidity ^0.5.0; contract Test { - function a(bool test){ - var x = 1;//Comment immediately after line - var y = 2; + function a(bool test) public { + uint x = 1;//Comment immediately after line + uint y = 2; } } diff --git a/test/sources/conditional/declarative-exp-assignment-alternate.sol b/test/sources/conditional/declarative-exp-assignment-alternate.sol index ca033459..b5491a42 100644 --- a/test/sources/conditional/declarative-exp-assignment-alternate.sol +++ b/test/sources/conditional/declarative-exp-assignment-alternate.sol @@ -1,9 +1,9 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a() { - var x = false; - var y = false; + function a() public { + bool x = false; + bool y = false; bool z = (x) ? false : true; } } \ No newline at end of file diff --git a/test/sources/conditional/identifier-assignment-alternate.sol b/test/sources/conditional/identifier-assignment-alternate.sol index 744cd744..d2033818 100644 --- a/test/sources/conditional/identifier-assignment-alternate.sol +++ b/test/sources/conditional/identifier-assignment-alternate.sol @@ -1,10 +1,10 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a() { - var x = false; - var y = false; - var z = false; + function a() public { + bool x = false; + bool y = false; + bool z = false; z = (x) ? false : true; } } \ No newline at end of file diff --git a/test/sources/conditional/mapping-assignment.sol b/test/sources/conditional/mapping-assignment.sol index 57ceb7c1..c8100a0b 100644 --- a/test/sources/conditional/mapping-assignment.sol +++ b/test/sources/conditional/mapping-assignment.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { struct Vote { @@ -7,7 +7,7 @@ contract Test { Vote vote; - function a(){ + function a() public { var isYay = false; vote.voted[msg.sender] = isYay ? 1 : 2; } diff --git a/test/sources/conditional/multiline-alternate.sol b/test/sources/conditional/multiline-alternate.sol index 9eb43ad9..c3136e20 100644 --- a/test/sources/conditional/multiline-alternate.sol +++ b/test/sources/conditional/multiline-alternate.sol @@ -1,9 +1,9 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a() { - var x = false; - var y = false; + function a() public { + bool x = false; + bool y = false; (x) ? y = false : y = false; diff --git a/test/sources/conditional/multiline-consequent.sol b/test/sources/conditional/multiline-consequent.sol index 304e1ede..c482c698 100644 --- a/test/sources/conditional/multiline-consequent.sol +++ b/test/sources/conditional/multiline-consequent.sol @@ -1,9 +1,9 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a() { - var x = true; - var y = false; + function a() public { + bool x = true; + bool y = false; (x) ? y = false : y = false; diff --git a/test/sources/conditional/sameline-alternate.sol b/test/sources/conditional/sameline-alternate.sol index e01321c0..0acd0e71 100644 --- a/test/sources/conditional/sameline-alternate.sol +++ b/test/sources/conditional/sameline-alternate.sol @@ -1,9 +1,9 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a() { - var x = false; - var y = false; + function a() public { + bool x = false; + bool y = false; (x) ? y = false : y = false; } } \ No newline at end of file diff --git a/test/sources/conditional/sameline-consequent.sol b/test/sources/conditional/sameline-consequent.sol index 85bdf688..b69260de 100644 --- a/test/sources/conditional/sameline-consequent.sol +++ b/test/sources/conditional/sameline-consequent.sol @@ -1,9 +1,9 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a() { - var x = true; - var y = false; + function a() public { + bool x = true; + bool y = false; (x) ? y = false : y = false; } } \ No newline at end of file diff --git a/test/sources/conditional/variable-decl-assignment-alternate.sol b/test/sources/conditional/variable-decl-assignment-alternate.sol index 1fcdc728..b5491a42 100644 --- a/test/sources/conditional/variable-decl-assignment-alternate.sol +++ b/test/sources/conditional/variable-decl-assignment-alternate.sol @@ -1,9 +1,9 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a() { - var x = false; - var y = false; - var z = (x) ? false : true; + function a() public { + bool x = false; + bool y = false; + bool z = (x) ? false : true; } } \ No newline at end of file diff --git a/test/sources/expressions/new-expression.sol b/test/sources/expressions/new-expression.sol index ef706b33..0033e67c 100644 --- a/test/sources/expressions/new-expression.sol +++ b/test/sources/expressions/new-expression.sol @@ -1,12 +1,12 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(uint x) { + function a(uint x) public { new Test2(x); } } contract Test2 { - function Test2(uint x) { + constructor(uint x) public { x+1; } } diff --git a/test/sources/expressions/single-binary-expression.sol b/test/sources/expressions/single-binary-expression.sol index b6053714..e63a0183 100644 --- a/test/sources/expressions/single-binary-expression.sol +++ b/test/sources/expressions/single-binary-expression.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(uint x) { + function a(uint x) public { x+1; } } diff --git a/test/sources/function/abstract.sol b/test/sources/function/abstract.sol index f9304b3e..ae5bab5c 100644 --- a/test/sources/function/abstract.sol +++ b/test/sources/function/abstract.sol @@ -1,5 +1,5 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function abstractFn(uint x); + function abstractFn(uint x) public; } \ No newline at end of file diff --git a/test/sources/function/calldata.sol b/test/sources/function/calldata.sol new file mode 100644 index 00000000..b0ccf42c --- /dev/null +++ b/test/sources/function/calldata.sol @@ -0,0 +1,7 @@ +pragma solidity ^0.5.0; + +contract Test { + function a(string calldata x) external { + x; + } +} diff --git a/test/sources/function/chainable-new.sol b/test/sources/function/chainable-new.sol index ae5b519f..c69f2c91 100644 --- a/test/sources/function/chainable-new.sol +++ b/test/sources/function/chainable-new.sol @@ -1,12 +1,12 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; // This is for a test that verifies solcover can instrument a // chained constructor/method call invoked by the new operator. contract Chainable { - function chainWith(uint y, uint z) {} + function chainWith(uint y, uint z) public {} } contract Test { - function a(){ + function a() public { new Chainable().chainWith(3, 4); } } \ No newline at end of file diff --git a/test/sources/function/chainable-value.sol b/test/sources/function/chainable-value.sol index 84a9312f..b4cbf985 100644 --- a/test/sources/function/chainable-value.sol +++ b/test/sources/function/chainable-value.sol @@ -1,12 +1,12 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; // This is for a test that verifies solcover can instrument a // another kind of long CallExpression chain contract Test { - function paySomeone(address x, address y) payable { + function paySomeone(address x, address y) public payable { } - function a() payable { - Test(0x00).paySomeone.value(msg.value)(0x00, 0x00); + function a() public payable { + Test(0x00).paySomeone.value(msg.value)(0x0000000000000000000000000000000000000000, 0x0000000000000000000000000000000000000000); } } \ No newline at end of file diff --git a/test/sources/function/chainable.sol b/test/sources/function/chainable.sol index bf4081b9..17560193 100644 --- a/test/sources/function/chainable.sol +++ b/test/sources/function/chainable.sol @@ -1,11 +1,11 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; // This is for a test that verifies solcover can instrument a // chained constructor/method call. contract Test { - function chainWith(uint y, uint z) {} + function chainWith(uint y, uint z) public {} - function a(){ + function a() public { Test(0x00).chainWith(3, 4); } } diff --git a/test/sources/function/constructor-keyword.sol b/test/sources/function/constructor-keyword.sol index ea6ef7e1..f089f5b7 100644 --- a/test/sources/function/constructor-keyword.sol +++ b/test/sources/function/constructor-keyword.sol @@ -1,13 +1,13 @@ -pragma solidity ^0.4.23; +pragma solidity ^0.5.0; contract UsesConstructor { uint z; - constructor(){ + constructor() public { z = 5; } } contract Test { - function a(){ + function a() public { new UsesConstructor(); } } diff --git a/test/sources/function/empty-body.sol b/test/sources/function/empty-body.sol index 813ec173..f37f5901 100644 --- a/test/sources/function/empty-body.sol +++ b/test/sources/function/empty-body.sol @@ -1,5 +1,5 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function emptyBody(uint x){} + function emptyBody(uint x) public {} } diff --git a/test/sources/function/function-call.sol b/test/sources/function/function-call.sol index 07f463be..417bac6f 100644 --- a/test/sources/function/function-call.sol +++ b/test/sources/function/function-call.sol @@ -1,9 +1,9 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; // This test verifies that an invoked function gets logged as a statement contract Test { - function loggedAsStatement(uint x) {} - function a(){ + function loggedAsStatement(uint x) public {} + function a() public { loggedAsStatement(5); } } \ No newline at end of file diff --git a/test/sources/function/function.sol b/test/sources/function/function.sol index fa9cc86d..a20e7d84 100644 --- a/test/sources/function/function.sol +++ b/test/sources/function/function.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(bytes32 x) { + function a(bytes32 x) public { x; } } diff --git a/test/sources/function/modifier.sol b/test/sources/function/modifier.sol new file mode 100644 index 00000000..1ce590ac --- /dev/null +++ b/test/sources/function/modifier.sol @@ -0,0 +1,11 @@ +pragma solidity ^0.5.0; + +contract Test { + modifier b(){ + uint y; + _; + } + function a(uint x) b public { + x; + } +} diff --git a/test/sources/function/multiple.sol b/test/sources/function/multiple.sol index bae4f079..dff49a15 100644 --- a/test/sources/function/multiple.sol +++ b/test/sources/function/multiple.sol @@ -1,15 +1,15 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function f1(bytes32 x) { + function f1(uint x) public { x = 1; } - function f2(uint x){ x = 2; } + function f2(uint x) public { x = 2; } address a; - function f3(uint y){ + function f3(uint y) public { y = 1; } } \ No newline at end of file diff --git a/test/sources/if/else-with-brackets.sol b/test/sources/if/else-with-brackets.sol index 61f05326..309f98cb 100644 --- a/test/sources/if/else-with-brackets.sol +++ b/test/sources/if/else-with-brackets.sol @@ -1,9 +1,9 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(uint x) { + function a(uint x) public { if (x == 1) { - throw; + revert(); } else { x = 5; } diff --git a/test/sources/if/else-without-brackets.sol b/test/sources/if/else-without-brackets.sol index 9fbbaa71..fbf35bba 100644 --- a/test/sources/if/else-without-brackets.sol +++ b/test/sources/if/else-without-brackets.sol @@ -1,9 +1,9 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(uint x) { + function a(uint x) public { if (x == 1) { - throw; + revert(); } else x = 5; } diff --git a/test/sources/if/if-elseif-else.sol b/test/sources/if/if-elseif-else.sol new file mode 100644 index 00000000..af76f6e2 --- /dev/null +++ b/test/sources/if/if-elseif-else.sol @@ -0,0 +1,21 @@ +pragma solidity ^0.5.0; + +contract Test { + function a(uint x,uint y, uint z) public { + if (x == y) { + z = 0; + } else if (x == 2) { + z = 1; + } else { + z = 2; + } + + if (x == y) { + z = 0; + } else if (x == 2) { + z = 1; + } else { + z = 2; + } + } +} \ No newline at end of file diff --git a/test/sources/if/if-no-brackets-multiline.sol b/test/sources/if/if-no-brackets-multiline.sol index 92abce1a..f376f8fb 100644 --- a/test/sources/if/if-no-brackets-multiline.sol +++ b/test/sources/if/if-no-brackets-multiline.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(uint x) { + function a(uint x) public { if (x == 1) x = 2; } diff --git a/test/sources/if/if-no-brackets.sol b/test/sources/if/if-no-brackets.sol index e72c4493..d59e61b9 100644 --- a/test/sources/if/if-no-brackets.sol +++ b/test/sources/if/if-no-brackets.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(uint x) { + function a(uint x) public { if (x == 1) x = 2; } } \ No newline at end of file diff --git a/test/sources/if/if-with-brackets-multiline.sol b/test/sources/if/if-with-brackets-multiline.sol index 81aa2808..1648f3e2 100644 --- a/test/sources/if/if-with-brackets-multiline.sol +++ b/test/sources/if/if-with-brackets-multiline.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(uint x) { + function a(uint x) public { if (x == 1) { x = 3; } diff --git a/test/sources/if/if-with-brackets.sol b/test/sources/if/if-with-brackets.sol index 4f36bafe..2eb82087 100644 --- a/test/sources/if/if-with-brackets.sol +++ b/test/sources/if/if-with-brackets.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(uint x) { + function a(uint x) public { if (x == 1) {x = 3;} } } \ No newline at end of file diff --git a/test/sources/if/nested-if-missing-else.sol b/test/sources/if/nested-if-missing-else.sol index a3a87a8d..a225e4dc 100644 --- a/test/sources/if/nested-if-missing-else.sol +++ b/test/sources/if/nested-if-missing-else.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(uint x,uint y, uint z) { + function a(uint x,uint y, uint z) public { if (x==y){ } else if (x==2){ if (y==z){ diff --git a/test/sources/loops/for-no-brackets.sol b/test/sources/loops/for-no-brackets.sol index 8fa9dbdb..82af4e45 100644 --- a/test/sources/loops/for-no-brackets.sol +++ b/test/sources/loops/for-no-brackets.sol @@ -1,8 +1,8 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a() { - for(var x = 0; x < 10; x++) - sha3(x); + function a() public { + for(uint x = 0; x < 10; x++) + keccak256(abi.encodePacked(x)); } } \ No newline at end of file diff --git a/test/sources/loops/for-with-brackets.sol b/test/sources/loops/for-with-brackets.sol index 197ebe3c..a205ca2d 100644 --- a/test/sources/loops/for-with-brackets.sol +++ b/test/sources/loops/for-with-brackets.sol @@ -1,9 +1,9 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a() { - for(var x = 0; x < 10; x++){ - sha3(x); + function a() public { + for(uint x = 0; x < 10; x++){ + keccak256(abi.encodePacked(x)); } } } \ No newline at end of file diff --git a/test/sources/loops/while-no-brackets.sol b/test/sources/loops/while-no-brackets.sol index 3ef0defa..2bd9d89c 100644 --- a/test/sources/loops/while-no-brackets.sol +++ b/test/sources/loops/while-no-brackets.sol @@ -1,8 +1,8 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a() { - var t = true; + function a() public { + bool t = true; while(t) t = false; } diff --git a/test/sources/loops/while-with-brackets.sol b/test/sources/loops/while-with-brackets.sol index 9acf9a5a..5688a8ff 100644 --- a/test/sources/loops/while-with-brackets.sol +++ b/test/sources/loops/while-with-brackets.sol @@ -1,8 +1,8 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a() { - var t = true; + function a() public { + bool t = true; while(t){ t = false; } diff --git a/test/sources/return/return-null.sol b/test/sources/return/return-null.sol deleted file mode 100644 index b35bbb94..00000000 --- a/test/sources/return/return-null.sol +++ /dev/null @@ -1,7 +0,0 @@ -pragma solidity ^0.4.3; - -contract Test { - function a(uint x) returns (bool) { - return; - } -} \ No newline at end of file diff --git a/test/sources/return/return.sol b/test/sources/return/return.sol index 38241339..fd24dab2 100644 --- a/test/sources/return/return.sol +++ b/test/sources/return/return.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(uint x) returns (bool) { + function a(uint x) public returns (bool) { return true; } } \ No newline at end of file diff --git a/test/sources/statements/compilation-error.sol b/test/sources/statements/compilation-error.sol index 42a4030d..8bd281ab 100644 --- a/test/sources/statements/compilation-error.sol +++ b/test/sources/statements/compilation-error.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { address a; diff --git a/test/sources/statements/emit-coverage.sol b/test/sources/statements/emit-coverage.sol index 555ebec1..0f210f9c 100644 --- a/test/sources/statements/emit-coverage.sol +++ b/test/sources/statements/emit-coverage.sol @@ -1,8 +1,8 @@ -pragma solidity ^0.4.23; +pragma solidity ^0.5.0; contract Test { event TestEvent(); - function a(uint x) { + function a(uint x) public { emit TestEvent(); } } \ No newline at end of file diff --git a/test/sources/statements/emit-instrument.sol b/test/sources/statements/emit-instrument.sol index 120f2975..11260d09 100644 --- a/test/sources/statements/emit-instrument.sol +++ b/test/sources/statements/emit-instrument.sol @@ -1,8 +1,8 @@ -pragma solidity ^0.4.23; +pragma solidity ^0.5.0; contract Test { event TestEvent(); - function a(uint x) { + function a(uint x) public { if(true) emit TestEvent(); } diff --git a/test/sources/statements/empty-contract-ala-melonport.sol b/test/sources/statements/empty-contract-ala-melonport.sol index 80744e6e..0f0135eb 100644 --- a/test/sources/statements/empty-contract-ala-melonport.sol +++ b/test/sources/statements/empty-contract-ala-melonport.sol @@ -1,3 +1,3 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test {} \ No newline at end of file diff --git a/test/sources/statements/empty-contract-body.sol b/test/sources/statements/empty-contract-body.sol index 5c7f276c..3c9fd058 100644 --- a/test/sources/statements/empty-contract-body.sol +++ b/test/sources/statements/empty-contract-body.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { } diff --git a/test/sources/statements/fn-argument-multiline.sol b/test/sources/statements/fn-argument-multiline.sol index f09867b7..42efa8a3 100644 --- a/test/sources/statements/fn-argument-multiline.sol +++ b/test/sources/statements/fn-argument-multiline.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { @@ -6,17 +6,17 @@ contract Test { uint a, uint b, uint c, - bytes32 d) + bytes32 d) public { - var x = a; + uint x = a; } - function Test(){ + constructor() public { multiline( 1, 2, 3, - sha3('hello') + keccak256(abi.encodePacked('hello')) ); } } \ No newline at end of file diff --git a/test/sources/statements/fn-argument.sol b/test/sources/statements/fn-argument.sol index 8f3b11d2..1518f572 100644 --- a/test/sources/statements/fn-argument.sol +++ b/test/sources/statements/fn-argument.sol @@ -1,11 +1,11 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(bytes32 x) { + function a(bytes32 x) public { x; } - function b (){ - a(sha3(0)); + function b () public { + a(keccak256(abi.encodePacked(uint256(0)))); } } \ No newline at end of file diff --git a/test/sources/statements/fn-struct.sol b/test/sources/statements/fn-struct.sol index 3d771f9d..5af1f83e 100644 --- a/test/sources/statements/fn-struct.sol +++ b/test/sources/statements/fn-struct.sol @@ -1,8 +1,6 @@ -pragma experimental "v0.5.0"; - contract Test { struct Fn { - function(bytes32) internal constant returns(bool) startConditions; - function(bytes32) internal constant endConditions; + function(bytes32) internal view returns(bool) startConditions; + function(bytes32) internal view endConditions; } } \ No newline at end of file diff --git a/test/sources/statements/library.sol b/test/sources/statements/library.sol index dae00d63..557ceca3 100644 --- a/test/sources/statements/library.sol +++ b/test/sources/statements/library.sol @@ -15,7 +15,7 @@ contract Test { using Boolean for Boolean.Value; Boolean.Value b; - function not() returns (bool) { + function not() public returns (bool) { return b.flip(); } } diff --git a/test/sources/statements/multiple.sol b/test/sources/statements/multiple.sol index 397dbd0b..438b7008 100644 --- a/test/sources/statements/multiple.sol +++ b/test/sources/statements/multiple.sol @@ -1,8 +1,8 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(uint x) { - sha3(x); - sha3(0); + function a(uint x) public { + keccak256(abi.encodePacked(x)); + keccak256(abi.encodePacked(uint256(0))); } } \ No newline at end of file diff --git a/test/sources/statements/post-close-brace.sol b/test/sources/statements/post-close-brace.sol index 9b1561eb..49beec7e 100644 --- a/test/sources/statements/post-close-brace.sol +++ b/test/sources/statements/post-close-brace.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(uint x) { + function a(uint x) public { if (x>1){ x=3; } diff --git a/test/sources/statements/single.sol b/test/sources/statements/single.sol index b7b01f0b..36f50829 100644 --- a/test/sources/statements/single.sol +++ b/test/sources/statements/single.sol @@ -1,7 +1,7 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function a(uint x) { - sha3(x); + function a(uint x) public { + keccak256(abi.encodePacked(x)); } } \ No newline at end of file diff --git a/test/sources/statements/tuple.sol b/test/sources/statements/tuple.sol index 9c675fb6..54ff373e 100644 --- a/test/sources/statements/tuple.sol +++ b/test/sources/statements/tuple.sol @@ -1,13 +1,13 @@ -pragma solidity ^0.4.3; +pragma solidity ^0.5.0; contract Test { - function returnTuple() returns (uint x, uint y) { + function returnTuple() public returns (uint x, uint y) { return (10, 20); } - function a() { - var (a, b) = (10, 20); - var (x, y) = returnTuple(); + function a() public { + (uint a, uint b) = (10, 20); + (a, b) = returnTuple(); } } \ No newline at end of file diff --git a/test/sources/zeppelin b/test/sources/zeppelin new file mode 160000 index 00000000..0dded493 --- /dev/null +++ b/test/sources/zeppelin @@ -0,0 +1 @@ +Subproject commit 0dded493a03623c93845c2d58634c229862ab54a diff --git a/test/sources/zeppelin/Bounty.sol b/test/sources/zeppelin/Bounty.sol deleted file mode 100644 index 46699b1b..00000000 --- a/test/sources/zeppelin/Bounty.sol +++ /dev/null @@ -1,58 +0,0 @@ -pragma solidity ^0.4.4; - - -import './PullPayment.sol'; -import './Killable.sol'; - - -/* - * Bounty - * - * This bounty will pay out to a researcher if they break invariant logic of the contract. - */ -contract Bounty is PullPayment, Killable { - Target target; - bool public claimed; - mapping(address => address) public researchers; - - event TargetCreated(address createdAddress); - - function() payable { - if (claimed) throw; - } - - function createTarget() returns(Target) { - target = Target(deployContract()); - researchers[target] = msg.sender; - TargetCreated(target); - return target; - } - - function deployContract() internal returns(address); - - function checkInvariant() returns(bool){ - return target.checkInvariant(); - } - - function claim(Target target) { - address researcher = researchers[target]; - if (researcher == 0) throw; - // Check Target contract invariants - if (target.checkInvariant()) { - throw; - } - asyncSend(researcher, this.balance); - claimed = true; - } - -} - -/* - * Target - * - * Your main contract should inherit from this class and implement the checkInvariant method. This is a function that should check everything your contract assumes to be true all the time. If this function returns false, it means your contract was broken in some way and is in an inconsistent state. This is what security researchers will try to acomplish when trying to get the bounty. - */ -contract Target { - function checkInvariant() returns(bool); -} - diff --git a/test/sources/zeppelin/Claimable.sol b/test/sources/zeppelin/Claimable.sol deleted file mode 100644 index d51d34f0..00000000 --- a/test/sources/zeppelin/Claimable.sol +++ /dev/null @@ -1,30 +0,0 @@ -pragma solidity ^0.4.0; - - - -import './Ownable.sol'; - - -/* - * Claimable - * - * Extension for the Ownable contract, where the ownership needs to be claimed. This allows the new owner to accept the transfer. - */ -contract Claimable is Ownable { - address public pendingOwner; - - modifier onlyPendingOwner() { - if (msg.sender == pendingOwner) - _; - } - - function transfer(address newOwner) onlyOwner { - pendingOwner = newOwner; - } - - function claimOwnership() onlyPendingOwner { - owner = pendingOwner; - pendingOwner = 0x0; - } - -} diff --git a/test/sources/zeppelin/DayLimit.sol b/test/sources/zeppelin/DayLimit.sol deleted file mode 100644 index e74837fd..00000000 --- a/test/sources/zeppelin/DayLimit.sol +++ /dev/null @@ -1,73 +0,0 @@ -pragma solidity ^0.4.4; - - -import './Shareable.sol'; -/* - * DayLimit - * - * inheritable "property" contract that enables methods to be protected by placing a linear limit (specifiable) - * on a particular resource per calendar day. is multiowned to allow the limit to be altered. resource that method - * uses is specified in the modifier. - */ -contract DayLimit is Shareable { - // FIELDS - - uint public dailyLimit; - uint public spentToday; - uint public lastDay; - - - // MODIFIERS - - // simple modifier for daily limit. - modifier limitedDaily(uint _value) { - if (underLimit(_value)) - _; - } - - - // CONSTRUCTOR - // stores initial daily limit and records the present day's index. - function DayLimit(uint _limit) { - dailyLimit = _limit; - lastDay = today(); - } - - - // METHODS - - // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today. - function setDailyLimit(uint _newLimit) onlymanyowners(sha3(msg.data)) external { - dailyLimit = _newLimit; - } - - // resets the amount already spent today. needs many of the owners to confirm - function resetSpentToday() onlymanyowners(sha3(msg.data)) external { - spentToday = 0; - } - - - // INTERNAL METHODS - - // checks to see if there is at least `_value` left from the daily limit today. if there is, subtracts it and - // returns true. otherwise just returns false. - function underLimit(uint _value) internal onlyOwner returns (bool) { - // reset the spend limit if we're on a different day to last time. - if (today() > lastDay) { - spentToday = 0; - lastDay = today(); - } - // check to see if there's enough left - if so, subtract and return true. - // overflow protection // dailyLimit check - if (spentToday + _value >= spentToday && spentToday + _value <= dailyLimit) { - spentToday += _value; - return true; - } - return false; - } - - // determines today's index. - function today() private constant returns (uint) { - return now / 1 days; - } -} diff --git a/test/sources/zeppelin/Killable.sol b/test/sources/zeppelin/Killable.sol deleted file mode 100644 index 10621d63..00000000 --- a/test/sources/zeppelin/Killable.sol +++ /dev/null @@ -1,15 +0,0 @@ -pragma solidity ^0.4.4; - - -import "./Ownable.sol"; - - -/* - * Killable - * Base contract that can be killed by owner. All funds in contract will be sent to the owner. - */ -contract Killable is Ownable { - function kill() onlyOwner { - selfdestruct(owner); - } -} diff --git a/test/sources/zeppelin/LimitBalance.sol b/test/sources/zeppelin/LimitBalance.sol deleted file mode 100644 index d8c29bae..00000000 --- a/test/sources/zeppelin/LimitBalance.sol +++ /dev/null @@ -1,18 +0,0 @@ -pragma solidity ^0.4.4; -contract LimitBalance { - - uint public limit; - - function LimitBalance(uint _limit) { - limit = _limit; - } - - modifier limitedPayable() { - if (this.balance > limit) { - throw; - } - _; - - } - -} diff --git a/test/sources/zeppelin/Migrations.sol b/test/sources/zeppelin/Migrations.sol deleted file mode 100644 index c8d890be..00000000 --- a/test/sources/zeppelin/Migrations.sol +++ /dev/null @@ -1,15 +0,0 @@ -pragma solidity ^0.4.4; -import './Ownable.sol'; - -contract Migrations is Ownable { - uint public lastCompletedMigration; - - function setCompleted(uint completed) onlyOwner { - lastCompletedMigration = completed; - } - - function upgrade(address newAddress) onlyOwner { - Migrations upgraded = Migrations(newAddress); - upgraded.setCompleted(lastCompletedMigration); - } -} diff --git a/test/sources/zeppelin/Multisig.sol b/test/sources/zeppelin/Multisig.sol deleted file mode 100644 index 561bfe0b..00000000 --- a/test/sources/zeppelin/Multisig.sol +++ /dev/null @@ -1,29 +0,0 @@ -pragma solidity ^0.4.4; - - -/* - * Multisig - * Interface contract for multisig proxy contracts; see below for docs. - */ -contract Multisig { - // EVENTS - - // logged events: - // Funds has arrived into the wallet (record how much). - event Deposit(address _from, uint value); - // Single transaction going out of the wallet (record who signed for it, how much, and to whom it's going). - event SingleTransact(address owner, uint value, address to, bytes data); - // Multi-sig transaction going out of the wallet (record who signed for it last, the operation hash, how much, and to whom it's going). - event MultiTransact(address owner, bytes32 operation, uint value, address to, bytes data); - // Confirmation still needed for a transaction. - event ConfirmationNeeded(bytes32 operation, address initiator, uint value, address to, bytes data); - - - // FUNCTIONS - - // TODO: document - function changeOwner(address _from, address _to) external; - function execute(address _to, uint _value, bytes _data) external returns (bytes32); - function confirm(bytes32 _h) returns (bool); -} - diff --git a/test/sources/zeppelin/MultisigWallet.sol b/test/sources/zeppelin/MultisigWallet.sol deleted file mode 100644 index 1eb24c09..00000000 --- a/test/sources/zeppelin/MultisigWallet.sol +++ /dev/null @@ -1,102 +0,0 @@ -pragma solidity ^0.4.4; - - -import "./Multisig.sol"; -import "./Shareable.sol"; -import "./DayLimit.sol"; - - -/* - * MultisigWallet - * usage: - * bytes32 h = Wallet(w).from(oneOwner).execute(to, value, data); - * Wallet(w).from(anotherOwner).confirm(h); - */ -contract MultisigWallet is Multisig, Shareable, DayLimit { - // TYPES - - // Transaction structure to remember details of transaction lest it need be saved for a later call. - struct Transaction { - address to; - uint value; - bytes data; - } - - - // CONSTRUCTOR - - // just pass on the owner array to the multiowned and - // the limit to daylimit - function MultisigWallet(address[] _owners, uint _required, uint _daylimit) - Shareable(_owners, _required) - DayLimit(_daylimit) { } - - - // METHODS - - // kills the contract sending everything to `_to`. - function kill(address _to) onlymanyowners(sha3(msg.data)) external { - suicide(_to); - } - - // gets called when no other function matches - function() payable { - // just being sent some cash? - if (msg.value > 0) - Deposit(msg.sender, msg.value); - } - - // Outside-visible transact entry point. Executes transaction immediately if below daily spend limit. - // If not, goes into multisig process. We provide a hash on return to allow the sender to provide - // shortcuts for the other confirmations (allowing them to avoid replicating the _to, _value - // and _data arguments). They still get the option of using them if they want, anyways. - function execute(address _to, uint _value, bytes _data) external onlyOwner returns (bytes32 _r) { - // first, take the opportunity to check that we're under the daily limit. - if (underLimit(_value)) { - SingleTransact(msg.sender, _value, _to, _data); - // yes - just execute the call. - if (!_to.call.value(_value)(_data)) { - throw; - } - return 0; - } - // determine our operation hash. - _r = sha3(msg.data, block.number); - if (!confirm(_r) && txs[_r].to == 0) { - txs[_r].to = _to; - txs[_r].value = _value; - txs[_r].data = _data; - ConfirmationNeeded(_r, msg.sender, _value, _to, _data); - } - } - - // confirm a transaction through just the hash. we use the previous transactions map, txs, in order - // to determine the body of the transaction from the hash provided. - function confirm(bytes32 _h) onlymanyowners(_h) returns (bool) { - if (txs[_h].to != 0) { - if (!txs[_h].to.call.value(txs[_h].value)(txs[_h].data)) { - throw; - } - MultiTransact(msg.sender, _h, txs[_h].value, txs[_h].to, txs[_h].data); - delete txs[_h]; - return true; - } - } - - - // INTERNAL METHODS - - function clearPending() internal { - uint length = pendingsIndex.length; - for (uint i = 0; i < length; ++i) { - delete txs[pendingsIndex[i]]; - } - super.clearPending(); - } - - - // FIELDS - - // pending transactions we have at present. - mapping (bytes32 => Transaction) txs; -} diff --git a/test/sources/zeppelin/Ownable.sol b/test/sources/zeppelin/Ownable.sol deleted file mode 100644 index 40fc0814..00000000 --- a/test/sources/zeppelin/Ownable.sol +++ /dev/null @@ -1,26 +0,0 @@ -pragma solidity ^0.4.4; - - -/* - * Ownable - * - * Base contract with an owner. - * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner. - */ -contract Ownable { - address public owner; - - function Ownable() { - owner = msg.sender; - } - - modifier onlyOwner() { - if (msg.sender == owner) - _; - } - - function transfer(address newOwner) onlyOwner { - if (newOwner != address(0)) owner = newOwner; - } - -} diff --git a/test/sources/zeppelin/PullPayment.sol b/test/sources/zeppelin/PullPayment.sol deleted file mode 100644 index 9bee81e0..00000000 --- a/test/sources/zeppelin/PullPayment.sol +++ /dev/null @@ -1,30 +0,0 @@ -pragma solidity ^0.4.4; - - -/* - * PullPayment - * Base contract supporting async send for pull payments. - * Inherit from this contract and use asyncSend instead of send. - */ -contract PullPayment { - mapping(address => uint) public payments; - - // store sent amount as credit to be pulled, called by payer - function asyncSend(address dest, uint amount) internal { - payments[dest] += amount; - } - - // withdraw accumulated balance, called by payee - function withdrawPayments() { - address payee = msg.sender; - uint payment = payments[payee]; - - if (payment == 0) throw; - if (this.balance < payment) throw; - - payments[payee] = 0; - if (!payee.send(payment)) { - throw; - } - } -} diff --git a/test/sources/zeppelin/SafeMath.sol b/test/sources/zeppelin/SafeMath.sol deleted file mode 100644 index 8568ddd9..00000000 --- a/test/sources/zeppelin/SafeMath.sol +++ /dev/null @@ -1,29 +0,0 @@ -pragma solidity ^0.4.4; - - -/** - * Math operations with safety checks - */ -contract SafeMath { - function safeMul(uint a, uint b) internal returns (uint) { - uint c = a * b; - assert(a == 0 || c / a == b); - return c; - } - - function safeSub(uint a, uint b) internal returns (uint) { - assert(b <= a); - return a - b; - } - - function safeAdd(uint a, uint b) internal returns (uint) { - uint c = a + b; - assert(c>=a && c>=b); - return c; - } - - function assert(bool assertion) internal { - if (!assertion) throw; - } -} - diff --git a/test/sources/zeppelin/Shareable.sol b/test/sources/zeppelin/Shareable.sol deleted file mode 100644 index b73f31ee..00000000 --- a/test/sources/zeppelin/Shareable.sol +++ /dev/null @@ -1,165 +0,0 @@ -pragma solidity ^0.4.4; - - -/* - * Shareable - * - * Based on https://github.com/ethereum/dapp-bin/blob/master/wallet/wallet.sol - * - * inheritable "property" contract that enables methods to be protected by requiring the acquiescence of either a single, or, crucially, each of a number of, designated owners. - * - * usage: - * use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the same hash must be provided by some number (specified in constructor) of the set of owners (specified in the constructor) before the interior is executed. - */ -contract Shareable { - // TYPES - - // struct for the status of a pending operation. - struct PendingState { - uint yetNeeded; - uint ownersDone; - uint index; - } - - - // FIELDS - - // the number of owners that must confirm the same operation before it is run. - uint public required; - - // list of owners - uint[256] owners; - uint constant c_maxOwners = 250; - // index on the list of owners to allow reverse lookup - mapping(uint => uint) ownerIndex; - // the ongoing operations. - mapping(bytes32 => PendingState) pendings; - bytes32[] pendingsIndex; - - - // EVENTS - - // this contract only has six types of events: it can accept a confirmation, in which case - // we record owner and operation (hash) alongside it. - event Confirmation(address owner, bytes32 operation); - event Revoke(address owner, bytes32 operation); - - - // MODIFIERS - - // simple single-sig function modifier. - modifier onlyOwner { - if (isOwner(msg.sender)) - _; - } - - // multi-sig function modifier: the operation must have an intrinsic hash in order - // that later attempts can be realised as the same underlying operation and - // thus count as confirmations. - modifier onlymanyowners(bytes32 _operation) { - if (confirmAndCheck(_operation)) - _; - } - - - // CONSTRUCTOR - - // constructor is given number of sigs required to do protected "onlymanyowners" transactions - // as well as the selection of addresses capable of confirming them. - function Shareable(address[] _owners, uint _required) { - owners[1] = uint(msg.sender); - ownerIndex[uint(msg.sender)] = 1; - for (uint i = 0; i < _owners.length; ++i) { - owners[2 + i] = uint(_owners[i]); - ownerIndex[uint(_owners[i])] = 2 + i; - } - required = _required; - } - - - // METHODS - - // Revokes a prior confirmation of the given operation - function revoke(bytes32 _operation) external { - uint index = ownerIndex[uint(msg.sender)]; - // make sure they're an owner - if (index == 0) return; - uint ownerIndexBit = 2**index; - var pending = pendings[_operation]; - if (pending.ownersDone & ownerIndexBit > 0) { - pending.yetNeeded++; - pending.ownersDone -= ownerIndexBit; - Revoke(msg.sender, _operation); - } - } - - // Gets an owner by 0-indexed position (using numOwners as the count) - function getOwner(uint ownerIndex) external constant returns (address) { - return address(owners[ownerIndex + 1]); - } - - function isOwner(address _addr) returns (bool) { - return ownerIndex[uint(_addr)] > 0; - } - - function hasConfirmed(bytes32 _operation, address _owner) constant returns (bool) { - var pending = pendings[_operation]; - uint index = ownerIndex[uint(_owner)]; - - // make sure they're an owner - if (index == 0) return false; - - // determine the bit to set for this owner. - uint ownerIndexBit = 2**index; - return !(pending.ownersDone & ownerIndexBit == 0); - } - - // INTERNAL METHODS - - function confirmAndCheck(bytes32 _operation) internal returns (bool) { - // determine what index the present sender is: - uint index = ownerIndex[uint(msg.sender)]; - // make sure they're an owner - if (index == 0) return; - - var pending = pendings[_operation]; - // if we're not yet working on this operation, switch over and reset the confirmation status. - if (pending.yetNeeded == 0) { - // reset count of confirmations needed. - pending.yetNeeded = required; - // reset which owners have confirmed (none) - set our bitmap to 0. - pending.ownersDone = 0; - pending.index = pendingsIndex.length++; - pendingsIndex[pending.index] = _operation; - } - // determine the bit to set for this owner. - uint ownerIndexBit = 2**index; - // make sure we (the message sender) haven't confirmed this operation previously. - if (pending.ownersDone & ownerIndexBit == 0) { - Confirmation(msg.sender, _operation); - // ok - check if count is enough to go ahead. - if (pending.yetNeeded <= 1) { - // enough confirmations: reset and run interior. - delete pendingsIndex[pendings[_operation].index]; - delete pendings[_operation]; - return true; - } - else - { - // not enough: record that this owner in particular confirmed. - pending.yetNeeded--; - pending.ownersDone |= ownerIndexBit; - } - } - } - - function clearPending() internal { - uint length = pendingsIndex.length; - for (uint i = 0; i < length; ++i) - if (pendingsIndex[i] != 0) - delete pendings[pendingsIndex[i]]; - delete pendingsIndex; - } - -} - diff --git a/test/sources/zeppelin/Stoppable.sol b/test/sources/zeppelin/Stoppable.sol deleted file mode 100644 index 5c018844..00000000 --- a/test/sources/zeppelin/Stoppable.sol +++ /dev/null @@ -1,28 +0,0 @@ -pragma solidity ^0.4.4; - - -import "./Ownable.sol"; - - -/* - * Stoppable - * Abstract contract that allows children to implement an - * emergency stop mechanism. - */ -contract Stoppable is Ownable { - bool public stopped; - - modifier stopInEmergency { if (!stopped) _; } - modifier onlyInEmergency { if (stopped) _; } - - // called by the owner on emergency, triggers stopped state - function emergencyStop() external onlyOwner { - stopped = true; - } - - // called by the owner on end of emergency, returns to normal state - function release() external onlyOwner onlyInEmergency { - stopped = false; - } - -} diff --git a/test/sources/zeppelin/token/BasicToken.sol b/test/sources/zeppelin/token/BasicToken.sol deleted file mode 100644 index b0ad1e48..00000000 --- a/test/sources/zeppelin/token/BasicToken.sol +++ /dev/null @@ -1,29 +0,0 @@ -pragma solidity ^0.4.4; - - -import './ERC20Basic.sol'; -import '../SafeMath.sol'; - - -/* - * Basic token - * Basic version of StandardToken, with no allowances - */ -contract BasicToken is ERC20Basic, SafeMath { - - mapping(address => uint) balances; - - function transfer(address _to, uint _value) { - if (balances[msg.sender] < _value) { - throw; - } - balances[msg.sender] = safeSub(balances[msg.sender], _value); - balances[_to] = safeAdd(balances[_to], _value); - Transfer(msg.sender, _to, _value); - } - - function balanceOf(address _owner) constant returns (uint balance) { - return balances[_owner]; - } - -} diff --git a/test/sources/zeppelin/token/CrowdsaleToken.sol b/test/sources/zeppelin/token/CrowdsaleToken.sol deleted file mode 100644 index f7865469..00000000 --- a/test/sources/zeppelin/token/CrowdsaleToken.sol +++ /dev/null @@ -1,38 +0,0 @@ -pragma solidity ^0.4.4; - - -import "./StandardToken.sol"; - - -/* - * CrowdsaleToken - * - * Simple ERC20 Token example, with crowdsale token creation - */ -contract CrowdsaleToken is StandardToken { - - string public name = "CrowdsaleToken"; - string public symbol = "CRW"; - uint public decimals = 18; - - // 1 ether = 500 example tokens - uint PRICE = 500; - - function () payable { - createTokens(msg.sender); - } - - function createTokens(address recipient) payable { - if (msg.value == 0) throw; - - uint tokens = safeMul(msg.value, getPrice()); - - totalSupply = safeAdd(totalSupply, tokens); - balances[recipient] = safeAdd(balances[recipient], tokens); - } - - // replace this with any other price function - function getPrice() constant returns (uint result){ - return PRICE; - } -} diff --git a/test/sources/zeppelin/token/ERC20.sol b/test/sources/zeppelin/token/ERC20.sol deleted file mode 100644 index 4ac0bb1f..00000000 --- a/test/sources/zeppelin/token/ERC20.sol +++ /dev/null @@ -1,18 +0,0 @@ -pragma solidity ^0.4.4; - - -/* - * ERC20 interface - * see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20 { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function allowance(address owner, address spender) constant returns (uint); - - function transfer(address to, uint value) returns (bool ok); - function transferFrom(address from, address to, uint value) returns (bool ok); - function approve(address spender, uint value) returns (bool ok); - event Transfer(address indexed from, address indexed to, uint value); - event Approval(address indexed owner, address indexed spender, uint value); -} diff --git a/test/sources/zeppelin/token/ERC20Basic.sol b/test/sources/zeppelin/token/ERC20Basic.sol deleted file mode 100644 index b42d457c..00000000 --- a/test/sources/zeppelin/token/ERC20Basic.sol +++ /dev/null @@ -1,14 +0,0 @@ -pragma solidity ^0.4.4; - - -/* - * ERC20Basic - * Simpler version of ERC20 interface - * see https://github.com/ethereum/EIPs/issues/20 - */ -contract ERC20Basic { - uint public totalSupply; - function balanceOf(address who) constant returns (uint); - function transfer(address to, uint value); - event Transfer(address indexed from, address indexed to, uint value); -} diff --git a/test/sources/zeppelin/token/SimpleToken.sol b/test/sources/zeppelin/token/SimpleToken.sol deleted file mode 100644 index 8b59438a..00000000 --- a/test/sources/zeppelin/token/SimpleToken.sol +++ /dev/null @@ -1,26 +0,0 @@ -pragma solidity ^0.4.4; - - -import "./StandardToken.sol"; - - -/* - * SimpleToken - * - * Very simple ERC20 Token example, where all tokens are pre-assigned - * to the creator. Note they can later distribute these tokens - * as they wish using `transfer` and other `StandardToken` functions. - */ -contract SimpleToken is StandardToken { - - string public name = "SimpleToken"; - string public symbol = "SIM"; - uint public decimals = 18; - uint public INITIAL_SUPPLY = 10000; - - function SimpleToken() { - totalSupply = INITIAL_SUPPLY; - balances[msg.sender] = INITIAL_SUPPLY; - } - -} diff --git a/test/sources/zeppelin/token/StandardToken.sol b/test/sources/zeppelin/token/StandardToken.sol deleted file mode 100644 index 2f3e301d..00000000 --- a/test/sources/zeppelin/token/StandardToken.sol +++ /dev/null @@ -1,49 +0,0 @@ -pragma solidity ^0.4.4; - -import './ERC20.sol'; -import '../SafeMath.sol'; - -/** - * ERC20 token - * - * https://github.com/ethereum/EIPs/issues/20 - * Based on code by FirstBlood: - * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol - */ -contract StandardToken is ERC20, SafeMath { - - mapping(address => uint) balances; - mapping (address => mapping (address => uint)) allowed; - - function transfer(address _to, uint _value) returns (bool success) { - balances[msg.sender] = safeSub(balances[msg.sender], _value); - balances[_to] = safeAdd(balances[_to], _value); - Transfer(msg.sender, _to, _value); - return true; - } - - function transferFrom(address _from, address _to, uint _value) returns (bool success) { - var _allowance = allowed[_from][msg.sender]; - - balances[_to] = safeAdd(balances[_to], _value); - balances[_from] = safeSub(balances[_from], _value); - allowed[_from][msg.sender] = safeSub(_allowance, _value); - Transfer(_from, _to, _value); - return true; - } - - function balanceOf(address _owner) constant returns (uint balance) { - return balances[_owner]; - } - - function approve(address _spender, uint _value) returns (bool success) { - allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); - return true; - } - - function allowance(address _owner, address _spender) constant returns (uint remaining) { - return allowed[_owner][_spender]; - } - -} diff --git a/test/statements.js b/test/statements.js index 653e7b9c..0e02e766 100644 --- a/test/statements.js +++ b/test/statements.js @@ -20,42 +20,42 @@ describe('generic statements', () => { it('should compile function defined in a struct', () => { const contract = util.getCode('statements/fn-struct.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }) it('should compile after instrumenting a single statement (first line of function)', () => { const contract = util.getCode('statements/single.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); it('should compile after instrumenting multiple statements', () => { const contract = util.getCode('statements/multiple.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); it('should compile after instrumenting a statement that is a function argument (single line)', () => { const contract = util.getCode('statements/fn-argument.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); it('should compile after instrumenting a statement that is a function argument (multi-line)', () => { const contract = util.getCode('statements/fn-argument-multiline.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); it('should compile after instrumenting an empty-contract-body', () => { const contract = util.getCode('statements/empty-contract-ala-melonport.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); @@ -64,7 +64,7 @@ describe('generic statements', () => { it('should NOT pass tests if the contract has a compilation error', () => { const contract = util.getCode('statements/compilation-error.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); try { util.report(output.errors); assert.fail('WRONG'); // We shouldn't hit this. @@ -76,7 +76,7 @@ describe('generic statements', () => { it('should compile after instrumenting an emit statement after an un-enclosed if statement', () => { const contract = util.getCode('statements/emit-instrument.sol'); const info = getInstrumentedVersion(contract, filePath); - const output = solc.compile(info.contract, 1); + const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); @@ -86,7 +86,7 @@ describe('generic statements', () => { const coverage = new CoverageMap(); coverage.addContract(info, filePath); - vm.execute(info.contract, 'a', []).then(events => { + vm.execute(info.contract, 'a', [0]).then(events => { const mapping = coverage.generate(events, pathPrefix); assert.deepEqual(mapping[filePath].l, { 6: 1 @@ -157,7 +157,7 @@ describe('generic statements', () => { vm.execute(info.contract, 'a', []).then(events => { const mapping = coverage.generate(events, pathPrefix); assert.deepEqual(mapping[filePath].l, { - 6: 1, 10: 1, 11: 1, + 6: 1, 10: 1, 11: 1 }); assert.deepEqual(mapping[filePath].b, {}); assert.deepEqual(mapping[filePath].s, { diff --git a/test/util/mockTruffle.js b/test/util/mockTruffle.js index ea05eb9a..dded2261 100644 --- a/test/util/mockTruffle.js +++ b/test/util/mockTruffle.js @@ -6,6 +6,21 @@ const fs = require('fs'); const shell = require('shelljs'); +const defaultTruffleJs = `module.exports = { + networks: { + development: { + host: "localhost", + port: 8545, + network_id: "*" + } + }, + compilers: { + solc: { + version: "0.5.3", + } + } + };` + /** * Installs mock truffle project at ./mock with a single contract * and test specified by the params. @@ -34,17 +49,7 @@ module.exports.install = function install(contract, test, config, _trufflejs, _t const asset = 'module.exports = { value: true };'; // Mock truffle.js - const trufflejs = _trufflejs || - - `module.exports = { - networks: { - development: { - host: "localhost", - port: 8545, - network_id: "*" - } - } - };`; + const trufflejs = _trufflejs || defaultTruffleJs; // Generate mock shell.mkdir('./mock'); @@ -112,14 +117,7 @@ module.exports.installInheritanceTest = function installInheritanceTest(config) shell.cp('./test/cli/inheritance.js', './mock/test/inheritance.js'); // Mock truffle.js - const trufflejs = `module.exports = { - networks: { - development: { - host: "localhost", - port: 8545, - network_id: "*" - }}};` - ; + const trufflejs = defaultTruffleJs; const configjs = `module.exports = ${JSON.stringify(config)}`; @@ -170,18 +168,11 @@ module.exports.installLibraryTest = function installInheritanceTest(config) { shell.cp('./test/sources/cli/Face.sol', './mock/assets/Face.sol'); // Mock truffle.js - const trufflejs = `module.exports = { - networks: { - development: { - host: "localhost", - port: 8545, - network_id: "*" - }}};` - ; + const trufflejs = defaultTruffleJs; const configjs = `module.exports = ${JSON.stringify(config)}`; - fs.writeFileSync('./mock/truffle.js', trufflejs); + fs.writeFileSync('./mock/truffle-config.js', trufflejs); fs.writeFileSync('./.solcover.js', configjs); }; diff --git a/test/util/util.js b/test/util/util.js index 446028f7..921940f6 100644 --- a/test/util/util.js +++ b/test/util/util.js @@ -13,9 +13,27 @@ module.exports.getCode = function getCode(_path) { module.exports.report = function report(errors) { if (errors) { errors.forEach(error => { - if (error.indexOf('Warning') === -1) { - throw new Error(`Instrumented solidity invalid: ${errors}`); + if (error.severity === 'error') { + throw new Error(`Instrumented solidity invalid: ${JSON.stringify(errors)}`); } }); } }; + +module.exports.codeToCompilerInput = function codeToCompilerInput(code) { + return JSON.stringify({ + language: 'Solidity', + sources: { + 'test.sol': { + content: code + } + }, + settings: { + outputSelection: { + '*': { + '*': [ '*' ] + } + } + } + }); +} diff --git a/test/util/vm.js b/test/util/vm.js index 2ffc1306..46ef9399 100644 --- a/test/util/vm.js +++ b/test/util/vm.js @@ -7,7 +7,10 @@ const Transaction = require('ethereumjs-tx'); const utils = require('ethereumjs-util'); const CryptoJS = require('crypto-js'); const Trie = require('merkle-patricia-tree'); -const coder = require('web3/lib/solidity/coder.js'); +const { AbiCoder } = require('web3-eth-abi'); +const SolidityCoder = AbiCoder(); + +const codeToCompilerInput = require('./util').codeToCompilerInput; // Don't use this address for anything, obviously! const secretKey = 'e81cb653c260ee12c72ec8750e6bfd8a4dc2c3d7e3ede68dd2f150d0a67263d8'; @@ -22,7 +25,7 @@ function encodeFunctionTxData(functionName, types, args) { const signature = CryptoJS.SHA3(fullName, { outputLength: 256, }).toString(CryptoJS.enc.Hex).slice(0, 8); - const dataHex = signature + coder.encodeParams(types, args); + const dataHex = signature + SolidityCoder.encodeParameters(types, args).slice(2); return `0x${dataHex}`; } @@ -55,7 +58,7 @@ function getAbi(source, compilation) { throw new Error('Could not parse contract name from source.'); } const contractName = contractNameMatch[1]; - return JSON.parse(compilation.contracts[':' + contractName].interface); + return compilation.contracts['test.sol'][contractName].abi; } /** @@ -139,12 +142,14 @@ function callMethod(vm, abi, address, functionName, args) { * @return {Promise} resolves array of logged events. */ module.exports.execute = function ex(contract, functionName, args) { - const output = solc.compile(contract, 1); - const code = new Buffer(output.contracts[':Test'].bytecode, 'hex'); + const input = codeToCompilerInput(contract); + const output = JSON.parse(solc.compile(input)); + const code = new Buffer(output.contracts['test.sol']['Test'].evm.bytecode.object, 'hex'); const abi = getAbi(contract, output); const stateTrie = new Trie(); const vm = new VM({ state: stateTrie, + hardfork: "constantinople" }); createAccount(stateTrie); diff --git a/test/zeppelin.js b/test/zeppelin.js index e5b1c836..89869b70 100644 --- a/test/zeppelin.js +++ b/test/zeppelin.js @@ -5,234 +5,52 @@ const getInstrumentedVersion = require('./../lib/instrumentSolidity.js'); const util = require('./util/util.js'); describe('Battery test of production contracts: OpenZeppelin', () => { - it('should compile after instrumenting zeppelin-solidity/Bounty.sol', () => { - const bounty = getInstrumentedVersion(util.getCode('zeppelin/Bounty.sol'), 'Bounty.sol'); - const ownable = getInstrumentedVersion(util.getCode('zeppelin/Ownable.sol'), 'Ownable.sol'); - const pullPayment = getInstrumentedVersion(util.getCode('zeppelin/PullPayment.sol'), 'PullPayment.sol'); - const killable = getInstrumentedVersion(util.getCode('zeppelin/Killable.sol'), 'Killable.sol'); - const inputs = { - 'Ownable.sol': ownable.contract, - 'PullPayment.sol': pullPayment.contract, - 'Killable.sol': killable.contract, - 'Bounty.sol': bounty.contract, - }; - const output = solc.compile({ - sources: inputs, - }, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/Claimable.sol', () => { - const claimable = getInstrumentedVersion(util.getCode('zeppelin/Claimable.sol'), 'Claimable.sol'); - const ownable = getInstrumentedVersion(util.getCode('zeppelin/Ownable.sol'), 'Ownable.sol'); - - const inputs = { - 'Ownable.sol': ownable.contract, - 'Claimable.sol': claimable.contract, - }; - const output = solc.compile({ - sources: inputs, - }, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/DayLimit.sol', () => { - const dayLimit = getInstrumentedVersion(util.getCode('zeppelin/DayLimit.sol'), 'DayLimit.sol'); - const ownable = getInstrumentedVersion(util.getCode('zeppelin/Ownable.sol'), 'Ownable.sol'); - const shareable = getInstrumentedVersion(util.getCode('zeppelin/Shareable.sol'), 'Shareable.sol'); - - const inputs = { - 'Ownable.sol': ownable.contract, - 'DayLimit.sol': dayLimit.contract, - 'Shareable.sol': shareable.contract, - }; - const output = solc.compile({ - sources: inputs, - }, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/Killable.sol', () => { - const ownable = getInstrumentedVersion(util.getCode('zeppelin/Ownable.sol'), 'Ownable.sol'); - const killable = getInstrumentedVersion(util.getCode('zeppelin/Killable.sol'), 'Killable.sol'); - const inputs = { - 'Ownable.sol': ownable.contract, - 'Killable.sol': killable.contract, - }; - const output = solc.compile({ - sources: inputs, - }, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/LimitBalance.sol', () => { - const contract = util.getCode('zeppelin/LimitBalance.sol'); - const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/Migrations.sol', () => { - const ownable = getInstrumentedVersion(util.getCode('zeppelin/Ownable.sol'), 'Ownable.sol'); - const migrations = getInstrumentedVersion(util.getCode('zeppelin/Migrations.sol'), 'Migrations.sol'); - const inputs = { - 'Ownable.sol': ownable.contract, - 'Migrations.sol': migrations.contract, - }; - const output = solc.compile({ - sources: inputs, - }, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/Multisig.sol', () => { - const contract = util.getCode('zeppelin/Multisig.sol'); - const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/MultisigWallet.sol', () => { - const multisig = getInstrumentedVersion(util.getCode('zeppelin/Multisig.sol'), 'Multisig.sol'); - const shareable = getInstrumentedVersion(util.getCode('zeppelin/Shareable.sol'), 'Shareable.sol'); - const dayLimit = getInstrumentedVersion(util.getCode('zeppelin/DayLimit.sol'), 'DayLimit.sol'); - const multisigWallet = getInstrumentedVersion(util.getCode('zeppelin/MultisigWallet.sol'), 'MultisigWallet.sol'); - const inputs = { - 'Multisig.sol': multisig.contract, - 'Shareable.sol': shareable.contract, - 'DayLimit.sol': dayLimit.contract, - 'MultisigWallet.sol': multisigWallet.contract, - }; - const output = solc.compile({ - sources: inputs, - }, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/Ownable.sol', () => { - const contract = util.getCode('zeppelin/Ownable.sol'); - const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/PullPayment.sol', () => { - const contract = util.getCode('zeppelin/PullPayment.sol'); - const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/SafeMath.sol', () => { - const contract = util.getCode('zeppelin/SafeMath.sol'); - const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/Shareable.sol', () => { - const contract = util.getCode('zeppelin/Shareable.sol'); - const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/Stoppable.sol', () => { - const stoppable = getInstrumentedVersion(util.getCode('zeppelin/Stoppable.sol'), 'Stoppable.sol'); - const ownable = getInstrumentedVersion(util.getCode('zeppelin/Ownable.sol'), 'Ownable.sol'); - const inputs = { - 'Ownable.sol': ownable.contract, - 'Stoppable.sol': stoppable.contract, - }; - const output = solc.compile({ - sources: inputs, - }, 1); - util.report(output.errors); - }); - // --- Tokens --- - it('should compile after instrumenting zeppelin-solidity/BasicToken.sol', () => { - const basicToken = getInstrumentedVersion(util.getCode('zeppelin/token/BasicToken.sol'), 'BasicToken.sol'); - const safeMath = getInstrumentedVersion(util.getCode('zeppelin/SafeMath.sol'), 'SafeMath.sol'); - const ERC20Basic = getInstrumentedVersion(util.getCode('zeppelin/token/ERC20Basic.sol'), 'ERC20Basic.sol'); - - const inputs = { - 'ERC20Basic.sol': ERC20Basic.contract, - 'SafeMath.sol': safeMath.contract, - 'BasicToken.sol': basicToken.contract, - }; - const output = solc.compile({ - sources: inputs, - }, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/CrowdsaleToken.sol', () => { - const crowdsaleToken = getInstrumentedVersion(util.getCode('zeppelin/token/CrowdsaleToken.sol'), 'CrowdsaleToken.sol'); - const standardToken = getInstrumentedVersion(util.getCode('zeppelin/token/StandardToken.sol'), 'StandardToken.sol'); - const ERC20Basic = getInstrumentedVersion(util.getCode('zeppelin/token/ERC20Basic.sol'), 'ERC20Basic.sol'); - const ERC20 = getInstrumentedVersion(util.getCode('zeppelin/token/ERC20.sol'), 'ERC20.sol'); - const safeMath = getInstrumentedVersion(util.getCode('zeppelin/SafeMath.sol'), 'SafeMath.sol'); - - const inputs = { - 'StandardToken.sol': standardToken.contract, - 'CrowdsaleToken.sol': crowdsaleToken.contract, - 'ERC20Basic.sol': ERC20Basic.contract, - 'ERC20.sol': ERC20.contract, - 'SafeMath.sol': safeMath.contract, - }; - const output = solc.compile({ - sources: inputs, - }, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/ERC20.sol', () => { - const contract = util.getCode('zeppelin/token/ERC20.sol'); - const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/ERC20Basic.sol', () => { - const contract = util.getCode('zeppelin/token/ERC20Basic.sol'); - const info = getInstrumentedVersion(contract, 'test.sol'); - const output = solc.compile(info.contract, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/SimpleToken.sol', () => { - const standardToken = getInstrumentedVersion(util.getCode('zeppelin/token/StandardToken.sol'), 'StandardToken.sol'); - const simpleToken = getInstrumentedVersion(util.getCode('zeppelin/token/SimpleToken.sol'), 'SimpleToken.sol'); - const ERC20 = getInstrumentedVersion(util.getCode('zeppelin/token/ERC20.sol'), 'ERC20.sol'); - const safeMath = getInstrumentedVersion(util.getCode('zeppelin/SafeMath.sol'), 'SafeMath.sol'); - - const inputs = { - 'StandardToken.sol': standardToken.contract, - 'SimpleToken.sol': simpleToken.contract, - 'ERC20.sol': ERC20.contract, - 'SafeMath.sol': safeMath.contract, - }; - const output = solc.compile({ - sources: inputs, - }, 1); - util.report(output.errors); - }); - - it('should compile after instrumenting zeppelin-solidity/StandardToken.sol', () => { - const ERC20Basic = getInstrumentedVersion(util.getCode('zeppelin/token/ERC20Basic.sol'), 'ERC20Basic.sol'); - const standardToken = getInstrumentedVersion(util.getCode('zeppelin/token/StandardToken.sol'), 'StandardToken.sol'); - const safeMath = getInstrumentedVersion(util.getCode('zeppelin/SafeMath.sol'), 'SafeMath.sol'); - const ERC20 = getInstrumentedVersion(util.getCode('zeppelin/token/ERC20.sol'), 'ERC20.sol'); - - const inputs = { - 'ERC20Basic.sol': ERC20Basic.contract, - 'SafeMath.sol': safeMath.contract, - 'StandardToken.sol': standardToken.contract, - 'ERC20.sol': ERC20.contract, - }; - const output = solc.compile({ - sources: inputs, - }, 1); + it('should compile after instrumenting ConditionalEscrow.sol', () => { + const conditionalEscrow = getInstrumentedVersion(util.getCode('zeppelin/contracts/payment/escrow/ConditionalEscrow.sol'), 'ConditionalEscrow.sol'); + const escrow = getInstrumentedVersion(util.getCode('zeppelin/contracts/payment/escrow/Escrow.sol'), 'Escrow.sol'); + const safeMath = getInstrumentedVersion(util.getCode('zeppelin/contracts/math/SafeMath.sol'), 'SafeMath.sol'); + const secondary = getInstrumentedVersion(util.getCode('zeppelin/contracts/ownership/Secondary.sol'), 'Secondary.sol'); + const input = JSON.stringify({ + language: 'Solidity', + sources: { + 'ConditionalEscrow.sol': { content: conditionalEscrow.contract }, + 'Escrow.sol': { content: escrow.contract}, + 'SafeMath.sol': { content: safeMath.contract}, + 'Secondary.sol': { content: secondary.contract}, + }, + settings: { + remappings: ["math/=", "ownership/=" ] + } + }); + const output = JSON.parse(solc.compile(input)); + util.report(output.errors); + }); + + it('should compile after instrumenting FinalizableCrowdsale', () => { + const finalizableCrowdsale = getInstrumentedVersion(util.getCode('zeppelin/contracts/crowdsale/distribution/FinalizableCrowdsale.sol'), 'FinalizableCrowdsale.sol'); + const timedCrowdsale = getInstrumentedVersion(util.getCode('zeppelin/contracts/crowdsale/validation/TimedCrowdsale.sol'), 'TimedCrowdsale.sol'); + const safeMath = getInstrumentedVersion(util.getCode('zeppelin/contracts/math/SafeMath.sol'), 'SafeMath.sol'); + const crowdsale = getInstrumentedVersion(util.getCode('zeppelin/contracts/crowdsale/Crowdsale.sol'), 'Crowdsale.sol'); + const ierc20 = getInstrumentedVersion(util.getCode('zeppelin/contracts/token/ERC20/IERC20.sol'), 'IERC20.sol'); + const safeErc20 = getInstrumentedVersion(util.getCode('zeppelin/contracts/token/ERC20/SafeERC20.sol'), 'SafeERC20.sol'); + const reentrancyGuard = getInstrumentedVersion(util.getCode('zeppelin/contracts/utils/ReentrancyGuard.sol'), 'ReentrancyGuard.sol'); + + const input = JSON.stringify({ + language: 'Solidity', + sources: { + 'FinalizableCrowdsale.sol': { content: finalizableCrowdsale.contract }, + 'TimedCrowdsale.sol': { content: timedCrowdsale.contract}, + 'SafeMath.sol': { content: safeMath.contract}, + 'Crowdsale.sol': { content: crowdsale.contract}, + 'IERC20.sol': { content: ierc20.contract}, + 'SafeERC20.sol': { content: safeErc20.contract}, + 'ReentrancyGuard.sol': { content: reentrancyGuard.contract}, + }, + settings: { + remappings: ["math/=", "token/ERC20/=", "utils/=", "crowdsale/=", "validation/="] + } + }); + const output = JSON.parse(solc.compile(input)); util.report(output.errors); }); });