From f4bca2710fef1f7cbd0bb8008ac3205508e1932e Mon Sep 17 00:00:00 2001 From: VoR0220 Date: Mon, 21 May 2018 08:38:13 -0500 Subject: [PATCH 01/12] gas estimator and fuzzer Signed-off-by: VoR0220 --- lib/modules/fuzzer/index.js | 57 ++++++++++++++++++++++++++++ lib/modules/profiler/gasEstimator.js | 11 ++++++ 2 files changed, 68 insertions(+) create mode 100644 lib/modules/fuzzer/index.js create mode 100644 lib/modules/profiler/gasEstimator.js diff --git a/lib/modules/fuzzer/index.js b/lib/modules/fuzzer/index.js new file mode 100644 index 00000000..23d799f1 --- /dev/null +++ b/lib/modules/fuzzer/index.js @@ -0,0 +1,57 @@ +const ethAbi = require('web3-eth-abi'); +const utils = require('web3-utils'); +const _ = require('underscore'); + + +// generates random inputs based on the inputs of an ABI +class ContractFuzzer { + constructor(abi) { + this.abi = abi; + } + + generateFuzz() { + this.abi.forEach((abiMethod) => { + let inputTypes = abiMethod.inputs.map(input => input.type); + let fuzzedInputType = _.reduce(inputTypes, decipherType, 0); + }) + } + + getTypeFuzz(type) { + switch() { + case 'uintN' || 'intN': + + case 'bytesN': + return generateRandomStaticBytes(size); + case 'string' || 'bytes': + return generateRandomDynamicType() + case 'address': + return generateRandomAddress(); + default: + } + } + + generateArrayOfType(length, type) { + var arr = []; + for (var i = 0; i < length; i++) { + arr.push(getTypeFuzz(type)); + } + return arr; + } + + generateRandomDynamicType() { + return Math.random().toString(36).slice(2); + } + + generateRandomStaticBytes(size) { + return utils.randomHex(size); + } + + generateRandomInt(size) { + return utils.hexToNumber(utils.randomHex(size)); + } + + generateRandomAddress() { + return utils.randomHex(20); + } + +} \ No newline at end of file diff --git a/lib/modules/profiler/gasEstimator.js b/lib/modules/profiler/gasEstimator.js new file mode 100644 index 00000000..287227b8 --- /dev/null +++ b/lib/modules/profiler/gasEstimator.js @@ -0,0 +1,11 @@ +const ethAbi = require('web3-eth-abi'); +const contract = require('web3-eth-contract'); + +class GasEstimator { + constructor(provider, abi, iterations) { + this.abi = abi; + this.iters = iterations; + } + + +} \ No newline at end of file From 78129511645ecc45ae03b8ed0a1d03fb604323cb Mon Sep 17 00:00:00 2001 From: VoR0220 Date: Mon, 21 May 2018 08:38:23 -0500 Subject: [PATCH 02/12] wip Signed-off-by: VoR0220 --- lib/modules/profiler/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/modules/profiler/index.js b/lib/modules/profiler/index.js index f86ad995..f5fe8654 100644 --- a/lib/modules/profiler/index.js +++ b/lib/modules/profiler/index.js @@ -1,4 +1,5 @@ const asciiTable = require('ascii-table'); +const ethAbi = require('web3-eth-abi'); class Profiler { constructor(embark) { @@ -36,6 +37,17 @@ class Profiler { return paramString; } + generateGasEstimation(method) { + + } + + generateRandomType(type) { + switch(type) { + case "uint256": + case "uint" + } + } + registerConsoleCommand() { const self = this; self.embark.registerConsoleCommand((cmd, _options) => { From a0d0d9692b8f992de0c1f3f7311ffd82e6d1bb9d Mon Sep 17 00:00:00 2001 From: VoR0220 Date: Mon, 4 Jun 2018 13:25:42 -0500 Subject: [PATCH 03/12] flesh it out further and add a console command and fix annoying bugs Signed-off-by: VoR0220 --- lib/modules/fuzzer/index.js | 138 +++++++++++++++++++++++----------- lib/modules/profiler/index.js | 4 +- 2 files changed, 98 insertions(+), 44 deletions(-) diff --git a/lib/modules/fuzzer/index.js b/lib/modules/fuzzer/index.js index 23d799f1..76ddd1f5 100644 --- a/lib/modules/fuzzer/index.js +++ b/lib/modules/fuzzer/index.js @@ -5,53 +5,107 @@ const _ = require('underscore'); // generates random inputs based on the inputs of an ABI class ContractFuzzer { - constructor(abi) { - this.abi = abi; - } + constructor(embark) { + //this.abi = abi; + this.embark = embark; + this.logger = embark.logger; + this.events = embark.events; - generateFuzz() { - this.abi.forEach((abiMethod) => { - let inputTypes = abiMethod.inputs.map(input => input.type); - let fuzzedInputType = _.reduce(inputTypes, decipherType, 0); - }) - } + this.registerConsoleCommand(); + } - getTypeFuzz(type) { - switch() { - case 'uintN' || 'intN': - - case 'bytesN': - return generateRandomStaticBytes(size); - case 'string' || 'bytes': - return generateRandomDynamicType() - case 'address': - return generateRandomAddress(); - default: - } - } + generateFuzz(iterations, contract) { + let fuzz = []; + for (let i = 0; i < iterations; i++) + contract.abiDefinition.forEach((abiMethod) => { + let inputTypes = abiMethod.inputs.map(input => input.type); + console.log("INPUT TYPES:", inputTypes); + let fuzzedInputs = _.map(inputTypes, this.getTypeFuzz.bind(this)); + console.log("FUZZED INPUTS:", fuzzedInputs); + //fuzz.push(ethAbi.encodeFunctionCall(abiMethod, fuzzedInputs)); + console.log("FUZZ SO FAR:", fuzz); + }); + console.log("FUZZ:", fuzz); + return fuzz; + } - generateArrayOfType(length, type) { - var arr = []; - for (var i = 0; i < length; i++) { - arr.push(getTypeFuzz(type)); - } - return arr; - } + getTypeFuzz(typeString) { + const self = this; + console.log("TYPE:", typeString); + // Group 0: uint256[3] + // Group 1: uint256 + // Group 2: uint + // Group 3: 256 + // Group 4: [3] + // Group 5: 3 + let regexObj = typeString.match(/((bool|int|uint|bytes|string|address)([0-9]*)?)(\[([0-9]*)\])*$/); + console.log("ARRAY OBJ:", regexObj); + let type = regexObj[1]; + let size = regexObj[3]; + switch(true) { + case (regexObj[2] !== undefined): + let length = regexObj[5] === undefined ? self.generateRandomInt(256) : regexObj[5]; + return self.generateArrayOfType(length, type) + case (/bool/).test(type): + return self.generateRandomBool(); + case (/(int|uint)([0-9]*)?/).test(type): + return self.generateRandomInt(size); + case (/^bytes([0-9]{1,})/).test(type): + return self.generateRandomStaticBytes(size); + case (/(string|bytes)/).test(type): + return self.generateRandomDynamicType() + case (/address/).test(type): + return self.generateRandomAddress(); + default: + throw new Error("Couldn't find proper ethereum abi type"); + } + } - generateRandomDynamicType() { - return Math.random().toString(36).slice(2); - } + generateRandomBool() { + return _.sample([true, false]); + } - generateRandomStaticBytes(size) { - return utils.randomHex(size); - } + generateArrayOfType(length, type) { + var arr = []; + for (var i = 0; i < length; i++) { + arr.push(this.getTypeFuzz(type)); + } + return arr; + } - generateRandomInt(size) { - return utils.hexToNumber(utils.randomHex(size)); - } + generateRandomDynamicType() { + return Math.random().toString(36).slice(2); + } - generateRandomAddress() { - return utils.randomHex(20); - } + generateRandomStaticBytes(size) { + return utils.randomHex(size); + } -} \ No newline at end of file + generateRandomInt(size) { + return utils.hexToNumber(utils.randomHex(size / 8)); + } + + generateRandomAddress() { + return utils.randomHex(20); + } + + registerConsoleCommand() { + const self = this; + self.embark.registerConsoleCommand((cmd, _options) => { + let splitCmd = cmd.split(' '); + let cmdName = splitCmd[0]; + let contractName = splitCmd[1]; + let iterations = splitCmd[2] === undefined ? 1 : splitCmd[2]; + if (cmdName === 'fuzz') { + self.events.request('contracts:contract', contractName, (contract) => { + self.logger.info("-- fuzzed vals for " + contractName); + this.generateFuzz(1, contract); + }); + return ""; + } + return false; + }); + } +} + +module.exports = ContractFuzzer; diff --git a/lib/modules/profiler/index.js b/lib/modules/profiler/index.js index f5fe8654..d5f40fa7 100644 --- a/lib/modules/profiler/index.js +++ b/lib/modules/profiler/index.js @@ -37,7 +37,7 @@ class Profiler { return paramString; } - generateGasEstimation(method) { + /*generateGasEstimation(method) { } @@ -46,7 +46,7 @@ class Profiler { case "uint256": case "uint" } - } + }*/ registerConsoleCommand() { const self = this; From 2056a7e9ad5b82e793bbef0fd80316ecef34d863 Mon Sep 17 00:00:00 2001 From: VoR0220 Date: Mon, 4 Jun 2018 13:26:16 -0500 Subject: [PATCH 04/12] finish engine addition Signed-off-by: VoR0220 --- lib/core/engine.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/core/engine.js b/lib/core/engine.js index efef0f3a..49612a79 100644 --- a/lib/core/engine.js +++ b/lib/core/engine.js @@ -185,6 +185,7 @@ class Engine { this.registerModule('solidity'); this.registerModule('vyper'); this.registerModule('profiler'); + this.registerModule('fuzzer'); this.registerModule('deploytracker'); this.registerModule('specialconfigs'); From 4858f8a19fe0a8b25756af283344384cd60d4e9f Mon Sep 17 00:00:00 2001 From: VoR0220 Date: Mon, 4 Jun 2018 15:35:20 -0500 Subject: [PATCH 05/12] convert to BN instead of number Signed-off-by: VoR0220 --- lib/modules/fuzzer/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/fuzzer/index.js b/lib/modules/fuzzer/index.js index 76ddd1f5..6e2fb524 100644 --- a/lib/modules/fuzzer/index.js +++ b/lib/modules/fuzzer/index.js @@ -82,7 +82,7 @@ class ContractFuzzer { } generateRandomInt(size) { - return utils.hexToNumber(utils.randomHex(size / 8)); + return utils.toBN(utils.randomHex(size / 8)); } generateRandomAddress() { From 28d1d585febd355ed720c68f7d228fd354a819bc Mon Sep 17 00:00:00 2001 From: VoR0220 Date: Tue, 5 Jun 2018 09:19:28 -0500 Subject: [PATCH 06/12] checkpoint Signed-off-by: VoR0220 --- lib/modules/fuzzer/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/modules/fuzzer/index.js b/lib/modules/fuzzer/index.js index 6e2fb524..69ef8fe4 100644 --- a/lib/modules/fuzzer/index.js +++ b/lib/modules/fuzzer/index.js @@ -42,7 +42,7 @@ class ContractFuzzer { console.log("ARRAY OBJ:", regexObj); let type = regexObj[1]; let size = regexObj[3]; - switch(true) { + /*switch(true) { case (regexObj[2] !== undefined): let length = regexObj[5] === undefined ? self.generateRandomInt(256) : regexObj[5]; return self.generateArrayOfType(length, type) @@ -58,7 +58,7 @@ class ContractFuzzer { return self.generateRandomAddress(); default: throw new Error("Couldn't find proper ethereum abi type"); - } + }*/ } generateRandomBool() { From f8b79904cbe0ec42b9aee58ac1035065387c9a34 Mon Sep 17 00:00:00 2001 From: VoR0220 Date: Tue, 5 Jun 2018 09:19:40 -0500 Subject: [PATCH 07/12] package lock update Signed-off-by: VoR0220 --- package-lock.json | 226 +++++++++++++++++++++++----------------------- 1 file changed, 113 insertions(+), 113 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6d4e637..21d95370 100644 --- a/package-lock.json +++ b/package-lock.json @@ -92,7 +92,7 @@ "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "abstract-leveldown": { "version": "2.6.3", @@ -114,7 +114,7 @@ "acorn": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha1-9HPdR+AnegjijpvsWu6wR1HwuMk=" + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==" }, "acorn-dynamic-import": { "version": "2.0.2", @@ -484,7 +484,7 @@ "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { "sprintf-js": "1.0.3" } @@ -500,7 +500,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "arr-union": { "version": "3.1.0", @@ -559,7 +559,7 @@ "asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "requires": { "bn.js": "4.11.8", "inherits": "2.0.3", @@ -687,7 +687,7 @@ "babel-generator": { "version": "6.26.1", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "requires": { "babel-messages": "6.23.0", "babel-runtime": "6.26.0", @@ -858,7 +858,7 @@ "babel-loader": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz", - "integrity": "sha1-40Y5OL1ObVXRwXTFSF1AahiO0BU=", + "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", "requires": { "find-cache-dir": "1.0.0", "loader-utils": "1.1.0", @@ -1553,7 +1553,7 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=" + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "backoff": { "version": "2.5.0", @@ -1571,7 +1571,7 @@ "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { "cache-base": "1.0.1", "class-utils": "0.3.6", @@ -1630,7 +1630,7 @@ "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=" + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" }, "binary-extensions": { "version": "1.11.0", @@ -1645,7 +1645,7 @@ "bindings": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", - "integrity": "sha1-s0b27PapX1qBXFg5/HzbIlAvHtc=" + "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" }, "bip39": { "version": "2.5.0", @@ -1701,7 +1701,7 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=" + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, "body-parser": { "version": "1.18.2", @@ -1731,7 +1731,7 @@ "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "1.0.0", "concat-map": "0.0.1" @@ -1931,7 +1931,7 @@ "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { "collection-visit": "1.0.0", "component-emitter": "1.2.1", @@ -2223,7 +2223,7 @@ "cids": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/cids/-/cids-0.5.3.tgz", - "integrity": "sha1-miW2l+t2+vgHr87DXEq5Nu370KQ=", + "integrity": "sha512-ujWbNP8SeLKg5KmGrxYZM4c+ttd+wwvegrdtgmbi2KNFUbQN4pqsGZaGQE3rhjayXTbKFq36bYDbKhsnD0eMsg==", "requires": { "multibase": "0.4.0", "multicodec": "0.2.6", @@ -2233,7 +2233,7 @@ "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "requires": { "inherits": "2.0.3", "safe-buffer": "5.1.1" @@ -2248,7 +2248,7 @@ "clap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", "requires": { "chalk": "1.1.3" } @@ -2256,7 +2256,7 @@ "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { "arr-union": "3.1.0", "define-property": "0.2.5", @@ -2510,7 +2510,7 @@ "color-convert": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "requires": { "color-name": "1.1.3" } @@ -2721,7 +2721,7 @@ "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "requires": { "browserify-cipher": "1.0.0", "browserify-sign": "4.0.4", @@ -2895,7 +2895,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } @@ -3047,7 +3047,7 @@ "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "requires": { "is-descriptor": "1.0.2", "isobject": "3.0.1" @@ -3288,7 +3288,7 @@ "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "requires": { "once": "1.4.0" } @@ -3619,7 +3619,7 @@ "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "requires": { "estraverse": "4.2.0" } @@ -4121,7 +4121,7 @@ "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "requires": { "md5.js": "1.3.4", "safe-buffer": "5.1.1" @@ -4242,7 +4242,7 @@ "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { "is-plain-object": "2.0.4" } @@ -4648,7 +4648,7 @@ "file-loader": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", - "integrity": "sha1-b+iGRJsPKpNuQ8q6rAzb+zaVBvg=", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "requires": { "loader-utils": "1.1.0", "schema-utils": "0.4.5" @@ -4917,7 +4917,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -5033,7 +5033,7 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -5135,7 +5135,7 @@ "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=" + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" }, "globby": { "version": "5.0.0", @@ -5470,7 +5470,7 @@ "grunt-mocha-test": { "version": "0.13.3", "resolved": "https://registry.npmjs.org/grunt-mocha-test/-/grunt-mocha-test-0.13.3.tgz", - "integrity": "sha1-kChHK2Fb2m3eqnswpaFk6YBd4AU=", + "integrity": "sha512-zQGEsi3d+ViPPi7/4jcj78afKKAKiAA5n61pknQYi25Ugik+aNOuRmiOkmb8mN2CeG8YxT+YdT1H1Q7B/eNkoQ==", "dev": true, "requires": { "hooker": "0.2.3", @@ -5636,7 +5636,7 @@ "hash.js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha1-NA3tvmKQGHFRweodd3o0SJNd+EY=", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "requires": { "inherits": "2.0.3", "minimalistic-assert": "1.0.0" @@ -5700,7 +5700,7 @@ "hosted-git-info": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha1-IyNbKasjDFdqqw1PE/wEawsDgiI=" + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" }, "html-comment-regex": { "version": "1.1.1", @@ -5789,7 +5789,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "1.9.1" } @@ -5822,7 +5822,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { "version": "5.3.0", @@ -6029,7 +6029,7 @@ "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "requires": { "loose-envify": "1.3.1" } @@ -6052,7 +6052,7 @@ "ipfs-api": { "version": "17.2.4", "resolved": "https://registry.npmjs.org/ipfs-api/-/ipfs-api-17.2.4.tgz", - "integrity": "sha1-gTCl+pjhWyr49qJ7cUQs66/ImyQ=", + "integrity": "sha512-GFNy3Cj7EkzCrdyaQpvctHmtwtghzIDPTtW6XTqj+vybSwk2swyEMKaMHimqi8c8N+5+x5wfLpeUyRUhcZ9lDA==", "requires": { "async": "2.6.0", "bs58": "4.0.1", @@ -6089,7 +6089,7 @@ "ipfs-block": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/ipfs-block/-/ipfs-block-0.6.1.tgz", - "integrity": "sha1-uTBT6eqV917SkHgX/79V2ZKgatE=", + "integrity": "sha512-28dgGsb2YsYnFs+To4cVBX8e/lTCb8eWDzGhN5csj3a/sHMOYrHeK8+Ez0IV67CI3lqKGuG/ZD01Cmd6JUvKrQ==", "requires": { "cids": "0.5.3" } @@ -6097,7 +6097,7 @@ "ipfs-unixfs": { "version": "0.1.14", "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-0.1.14.tgz", - "integrity": "sha1-JWQ3/PZC2KtGtRhVguxPIekI7zc=", + "integrity": "sha512-s1tEnwKhdd17MmyC/EUMNVMDYzKhCiHDI11TF8tSBeWkEQp+0WUxkYuqvz0R5TSi2lNDJ/oVnEmwWhki2spUiQ==", "requires": { "protons": "1.0.1" } @@ -6105,7 +6105,7 @@ "ipld-dag-pb": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/ipld-dag-pb/-/ipld-dag-pb-0.11.4.tgz", - "integrity": "sha1-sPrlaB+tVpcTLjJdbC/xe18Mtqg=", + "integrity": "sha512-A514Bt4z44bxhPQVzmBFMJsV3res92eBaDX0snzVsLLasBPNh4Z7He8N2mwSeAX9bJNywRBlJbHMQPwC45rqXw==", "requires": { "async": "2.6.0", "bs58": "4.0.1", @@ -6157,7 +6157,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-builtin-module": { "version": "1.0.0", @@ -6274,7 +6274,7 @@ "is-ipfs": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-ipfs/-/is-ipfs-0.3.2.tgz", - "integrity": "sha1-xGULg442/QFR3liWsv8xn+iTYYI=", + "integrity": "sha512-82V1j4LMkYy7H4seQQzOWqo7FiW3I64/1/ryo3dhtWKfOvm7ZolLMRQQfGKs4OXWauh5rAkPnamVcRISHwhmpQ==", "requires": { "bs58": "4.0.1", "cids": "0.5.3", @@ -6317,7 +6317,7 @@ "is-odd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha1-dkZiRnH9fqVYzNmieVGC8pWPGyQ=", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "requires": { "is-number": "4.0.0" }, @@ -6325,7 +6325,7 @@ "is-number": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=" + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" } } }, @@ -6361,7 +6361,7 @@ "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { "isobject": "3.0.1" }, @@ -6446,7 +6446,7 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=" + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "isarray": { "version": "1.0.0", @@ -6872,7 +6872,7 @@ "libp2p-crypto": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.12.1.tgz", - "integrity": "sha1-SocNJpujFQ3+AU5PmuoeVQdgFcg=", + "integrity": "sha512-1/z8rxZ0DcQNreZhEsl7PnLr7DWOioSvYbKBLGkRwNRiNh1JJLgh0PdTySBb44wkrOGT+TxcGRd7iq3/X6Wxwg==", "requires": { "asn1.js": "5.0.0", "async": "2.6.0", @@ -6892,7 +6892,7 @@ "asn1.js": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.0.0.tgz", - "integrity": "sha1-Kwq7x/pm3Aqt0GpGg8c2CMMrBpY=", + "integrity": "sha512-Y+FKviD0uyIWWo/xE0XkUl0x1allKFhzEVJ+//2Dgqpy+n+B77MlPNqvyk7Vx50M9XyVzjnRhDqJAEAsyivlbA==", "requires": { "bn.js": "4.11.8", "inherits": "2.0.3", @@ -7892,7 +7892,7 @@ "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "requires": { "bn.js": "4.11.8", "brorand": "1.1.0" @@ -7901,7 +7901,7 @@ "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=" + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { "version": "1.33.0", @@ -7919,7 +7919,7 @@ "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=" + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "mimic-response": { "version": "1.0.0", @@ -7947,7 +7947,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "1.1.11" } @@ -7975,7 +7975,7 @@ "minizlib": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", - "integrity": "sha1-EeE2WM5GvDpwomeqxYNZ0eDCnOs=", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "requires": { "minipass": "2.2.1" } @@ -7983,7 +7983,7 @@ "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "requires": { "for-in": "1.0.2", "is-extendable": "1.0.1" @@ -7992,7 +7992,7 @@ "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { "is-plain-object": "2.0.4" } @@ -8115,7 +8115,7 @@ "multibase": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.4.0.tgz", - "integrity": "sha1-G9tiyC3gEU+CKh2HUby+6RzS77o=", + "integrity": "sha512-fnYvZJWDn3eSJ7EeWvS8zbOpRwuyPHpDggSnqGXkQMvYED5NdO9nyqnZboGvAT+r/60J8KZ09tW8YJHkS22sFw==", "requires": { "base-x": "3.0.4" } @@ -8123,7 +8123,7 @@ "multicodec": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.2.6.tgz", - "integrity": "sha1-nS1lZfvAgVsTnfyQY3H8Od9N/ds=", + "integrity": "sha512-VGyRUDkxdJzWnj9x3C49MzI3+TtKKDYNfIBOaWBCNuPk6CE5CwwkL15gJtsLDfLay0fL4xTh4Af3kBbJSxSppw==", "requires": { "varint": "5.0.0" } @@ -8131,7 +8131,7 @@ "multihashes": { "version": "0.4.13", "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.13.tgz", - "integrity": "sha1-0QvXG9UdJKqJTipvFFcUa7e6wSU=", + "integrity": "sha512-HwJGEKPCpLlNlgGQA56CYh/Wsqa+c4JAq8+mheIgw7OK5T4QvNJqgp6TH8gZ4q4l1aiWeNat/H/MrFXmTuoFfQ==", "requires": { "bs58": "4.0.1", "varint": "5.0.0" @@ -8140,7 +8140,7 @@ "multihashing-async": { "version": "0.4.8", "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.4.8.tgz", - "integrity": "sha1-QVcrJaj8aOsxi4ViQJ/dchpyfqE=", + "integrity": "sha512-LCc4lfxmTJOHKIjZjFNgvmfB6nXS/ErLInT9uwU8udFrRm2PH+aTPk3mfCREKmCiSHOlCWiv2O8rlnBx+OjlMw==", "requires": { "async": "2.6.0", "blakejs": "1.1.0", @@ -8199,7 +8199,7 @@ "nanomatch": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha1-h59xUMstq3pHElkGbBBO7m4Pp8I=", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "requires": { "arr-diff": "4.0.0", "array-unique": "0.3.2", @@ -8488,7 +8488,7 @@ "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "requires": { "hosted-git-info": "2.6.0", "is-builtin-module": "1.0.0", @@ -8857,7 +8857,7 @@ "p-limit": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha1-DpK2vty1nwIsE9DxlJ3ILRWQnxw=", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "requires": { "p-try": "1.0.0" } @@ -9036,7 +9036,7 @@ "peer-info": { "version": "0.11.6", "resolved": "https://registry.npmjs.org/peer-info/-/peer-info-0.11.6.tgz", - "integrity": "sha1-BICwAw0t+P1PCYebJppxWyvSuhI=", + "integrity": "sha512-xrVNiAF1IhVJNGEg5P2UQN+subaEkszT8YkC3zdy06MK0vTH3cMHB+HH+ZURkoSLssc3HbK58ecXeKpQ/4zq5w==", "requires": { "lodash.uniqby": "4.7.0", "multiaddr": "3.0.2", @@ -9119,7 +9119,7 @@ "postcss": { "version": "5.2.18", "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", "js-base64": "2.4.3", @@ -9303,7 +9303,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "1.9.1" } @@ -9336,7 +9336,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { "version": "5.3.0", @@ -9360,7 +9360,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "1.9.1" } @@ -9393,7 +9393,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { "version": "5.3.0", @@ -9417,7 +9417,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "1.9.1" } @@ -9450,7 +9450,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { "version": "5.3.0", @@ -9474,7 +9474,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "1.9.1" } @@ -9507,7 +9507,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { "version": "5.3.0", @@ -9654,7 +9654,7 @@ "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=" + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" }, "process": { "version": "0.11.10", @@ -9664,7 +9664,7 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=" + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "progress": { "version": "2.0.0", @@ -9692,7 +9692,7 @@ "promisify-es6": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/promisify-es6/-/promisify-es6-1.0.3.tgz", - "integrity": "sha1-sBJmjE3zyWXOE9qsKzpNFyapY0Y=" + "integrity": "sha512-N9iVG+CGJsI4b4ZGazjwLnxErD2d9Pe4DPvvXSxYA9tFNu8ymXME4Qs5HIQ0LMJpNM7zj+m0NlNnNeqFpKzqnA==" }, "promptly": { "version": "2.2.0", @@ -9713,12 +9713,12 @@ "protocol-buffers-schema": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz", - "integrity": "sha1-AENPYItOjfVMWeBw7+78N/tLuFk=" + "integrity": "sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w==" }, "protons": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/protons/-/protons-1.0.1.tgz", - "integrity": "sha1-HBBxRMB/wtHLi2y3ZFHmqTgjdnY=", + "integrity": "sha512-+0ZKnfVs+4c43tbAQ5j0Mck8wPcLnlxUYzKQoB4iDW4ocdXGnN4P+0dDbgX1FTpoY9+7P2Tn2scJyHHqj+S/lQ==", "requires": { "protocol-buffers-schema": "3.3.2", "safe-buffer": "5.1.1", @@ -9780,7 +9780,7 @@ "pump": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha1-Xf6DEcM7v2/BgmH580cCxHwIqVQ=", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "requires": { "end-of-stream": "1.4.1", "once": "1.4.0" @@ -9860,7 +9860,7 @@ "randombytes": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "requires": { "safe-buffer": "5.1.1" } @@ -9868,7 +9868,7 @@ "randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "requires": { "randombytes": "2.0.6", "safe-buffer": "5.1.1" @@ -10057,12 +10057,12 @@ "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, "regenerator-transform": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "requires": { "babel-runtime": "6.26.0", "babel-types": "6.26.0", @@ -10072,7 +10072,7 @@ "regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "requires": { "is-equal-shallow": "0.1.3" } @@ -10080,7 +10080,7 @@ "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "requires": { "extend-shallow": "3.0.2", "safe-regex": "1.1.0" @@ -10269,7 +10269,7 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=" + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "right-align": { "version": "0.1.3", @@ -10282,7 +10282,7 @@ "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { "glob": "7.1.2" } @@ -10398,7 +10398,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=" + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "scandirectory": { "version": "2.5.0", @@ -10413,7 +10413,7 @@ "schema-utils": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", - "integrity": "sha1-IYNvBgiqwXt4+ePiTa/xSlyhOj4=", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "requires": { "ajv": "6.2.1", "ajv-keywords": "3.1.0" @@ -10452,7 +10452,7 @@ "secp256k1": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz", - "integrity": "sha1-Z307io4E4aX6OBoa5DfFQge3ONA=", + "integrity": "sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==", "requires": { "bindings": "1.3.0", "bip66": "1.1.5", @@ -10490,12 +10490,12 @@ "semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=" + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", "depd": "1.1.2", @@ -10522,7 +10522,7 @@ "serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { "encodeurl": "1.0.2", "escape-html": "1.0.3", @@ -10555,7 +10555,7 @@ "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "requires": { "extend-shallow": "2.0.1", "is-extendable": "0.1.1", @@ -10729,7 +10729,7 @@ "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { "base": "0.11.2", "debug": "2.6.9", @@ -10813,7 +10813,7 @@ "snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "requires": { "define-property": "1.0.0", "isobject": "3.0.1", @@ -10838,7 +10838,7 @@ "snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "requires": { "kind-of": "3.2.2" } @@ -11040,7 +11040,7 @@ "source-list-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha1-qqR0A/eyRakvvJfqCPJQ1gh+0IU=" + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==" }, "source-map": { "version": "0.5.7", @@ -11062,7 +11062,7 @@ "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "requires": { "source-map": "0.5.7" } @@ -11075,7 +11075,7 @@ "spdx-correct": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha1-BaW01xU6GVvJLDxCW2nzsqlSTII=", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "requires": { "spdx-expression-parse": "3.0.0", "spdx-license-ids": "3.0.0" @@ -11084,12 +11084,12 @@ "spdx-exceptions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha1-LHrmEFbHFKW5ubKyr30xHvXHj+k=" + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "requires": { "spdx-exceptions": "2.1.0", "spdx-license-ids": "3.0.0" @@ -11098,12 +11098,12 @@ "spdx-license-ids": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha1-enzShHDMbToc/m1miG9rxDDTrIc=" + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "requires": { "extend-shallow": "3.0.2" } @@ -11111,7 +11111,7 @@ "split2": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha1-GGsldbz4PoW30YRldWI47k7kJJM=", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", "requires": { "through2": "2.0.3" } @@ -11287,7 +11287,7 @@ "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { "is-fullwidth-code-point": "2.0.0", "strip-ansi": "4.0.0" @@ -11406,7 +11406,7 @@ "style-loader": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.19.1.tgz", - "integrity": "sha1-WR/8gLzv4mi3fF2evAUF13Jhn4U=", + "integrity": "sha512-IRE+ijgojrygQi3rsqT0U4dd+UcPCqcVvauZpCnQrGAlEe+FUIyrK93bUDScamesjP08JlQNsFJU+KmPedP5Og==", "requires": { "loader-utils": "1.1.0", "schema-utils": "0.3.0" @@ -11618,7 +11618,7 @@ "tar": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-3.2.1.tgz", - "integrity": "sha1-mqjkHIjwnnbBZgdbxx+T1RZuYbE=", + "integrity": "sha512-ZSzds1E0IqutvMU8HxjMaU8eB7urw2fGwTq88ukDOVuUIh0656l7/P7LiVPxhO5kS4flcRJQk8USG+cghQbTUQ==", "requires": { "chownr": "1.0.1", "minipass": "2.2.1", @@ -11787,7 +11787,7 @@ "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "requires": { "define-property": "2.0.2", "extend-shallow": "3.0.2", @@ -11908,7 +11908,7 @@ "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha1-qX7nqf9CaRufeD/xvFES/j/KkIA=", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "requires": { "is-typedarray": "1.0.0" } @@ -12153,7 +12153,7 @@ "url-loader": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz", - "integrity": "sha1-oAenEJYg6dmI0UvOZ3od7Lmpk/c=", + "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==", "requires": { "loader-utils": "1.1.0", "mime": "1.4.1", @@ -12202,7 +12202,7 @@ "use": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha1-FHFr8D/f79AwQK71jYtLhfOnxUQ=", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", "requires": { "kind-of": "6.0.2" }, @@ -12257,7 +12257,7 @@ "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": "sha1-gWQ7y+8b3+zUYjeT3EZIlIupgzg=", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "requires": { "spdx-correct": "3.0.0", "spdx-expression-parse": "3.0.0" @@ -13222,7 +13222,7 @@ "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "requires": { "isexe": "2.0.0" } From ffe26d052a2e3b270fe02c160830501ea7e78cdc Mon Sep 17 00:00:00 2001 From: VoR0220 Date: Tue, 5 Jun 2018 13:39:10 -0500 Subject: [PATCH 08/12] some changes to the way randomness is calculated and getting rid of unnecessary garbage and added logging Signed-off-by: VoR0220 --- lib/modules/fuzzer/index.js | 53 ++++++++++++++++++---------- lib/modules/profiler/gasEstimator.js | 11 ------ lib/modules/profiler/index.js | 11 ------ 3 files changed, 34 insertions(+), 41 deletions(-) delete mode 100644 lib/modules/profiler/gasEstimator.js diff --git a/lib/modules/fuzzer/index.js b/lib/modules/fuzzer/index.js index 69ef8fe4..a0e3a88e 100644 --- a/lib/modules/fuzzer/index.js +++ b/lib/modules/fuzzer/index.js @@ -15,23 +15,27 @@ class ContractFuzzer { } generateFuzz(iterations, contract) { - let fuzz = []; + let fuzzMap = {}; for (let i = 0; i < iterations; i++) - contract.abiDefinition.forEach((abiMethod) => { + contract.abiDefinition.filter((x) => x.inputs && x.inputs.length != 0) + .forEach((abiMethod) => { + let name = abiMethod.type === "constructor" ? "constructor" : abiMethod.name; + console.log("name"); let inputTypes = abiMethod.inputs.map(input => input.type); console.log("INPUT TYPES:", inputTypes); let fuzzedInputs = _.map(inputTypes, this.getTypeFuzz.bind(this)); console.log("FUZZED INPUTS:", fuzzedInputs); - //fuzz.push(ethAbi.encodeFunctionCall(abiMethod, fuzzedInputs)); - console.log("FUZZ SO FAR:", fuzz); - }); - console.log("FUZZ:", fuzz); - return fuzz; + fuzzMap[name] = fuzzedInputs; + console.log("FUZZ KEYS SO FAR:", Object.keys(fuzzMap)); + console.log("FUZZ VALS SO FAR:", Object.values(fuzzMap)); + }); + console.log("FUZZ:", Object.keys(fuzzMap), Object.values(fuzzMap)); + return fuzzMap; } getTypeFuzz(typeString) { const self = this; - console.log("TYPE:", typeString); + console.log("TYPESTRING:", typeString); // Group 0: uint256[3] // Group 1: uint256 // Group 2: uint @@ -39,26 +43,36 @@ class ContractFuzzer { // Group 4: [3] // Group 5: 3 let regexObj = typeString.match(/((bool|int|uint|bytes|string|address)([0-9]*)?)(\[([0-9]*)\])*$/); - console.log("ARRAY OBJ:", regexObj); + console.log("REGEX OBJ:", regexObj); let type = regexObj[1]; + console.log("type:", type); + let kind = regexObj[2]; + console.log("kind:", kind); let size = regexObj[3]; - /*switch(true) { - case (regexObj[2] !== undefined): - let length = regexObj[5] === undefined ? self.generateRandomInt(256) : regexObj[5]; + console.log("size:", size); + let array = regexObj[4]; + console.log("array:", array); + let arraySize = regexObj[5]; + console.log("array size:", arraySize); + switch(true) { + case (array !== undefined): + // if it's a dynamic array pick a number between 1 and 256 for length of array + let length = arraySize === undefined || arraySize === null || arraySize === '' ? Math.floor((Math.random() * 256) + 1) : arraySize; + console.log("LENGTH: ", length); return self.generateArrayOfType(length, type) - case (/bool/).test(type): + case kind == "bool": return self.generateRandomBool(); - case (/(int|uint)([0-9]*)?/).test(type): + case kind == "uint" || kind == "int": return self.generateRandomInt(size); - case (/^bytes([0-9]{1,})/).test(type): + case kind === "bytes" && size !== undefined: return self.generateRandomStaticBytes(size); - case (/(string|bytes)/).test(type): + case kind === "string" || kind === "bytes": return self.generateRandomDynamicType() - case (/address/).test(type): + case kind === "address": return self.generateRandomAddress(); default: throw new Error("Couldn't find proper ethereum abi type"); - }*/ + } } generateRandomBool() { @@ -68,8 +82,9 @@ class ContractFuzzer { generateArrayOfType(length, type) { var arr = []; for (var i = 0; i < length; i++) { - arr.push(this.getTypeFuzz(type)); + arr.push(this.getTypeFuzz(type)); } + console.log("Final Array:", arr); return arr; } diff --git a/lib/modules/profiler/gasEstimator.js b/lib/modules/profiler/gasEstimator.js deleted file mode 100644 index 287227b8..00000000 --- a/lib/modules/profiler/gasEstimator.js +++ /dev/null @@ -1,11 +0,0 @@ -const ethAbi = require('web3-eth-abi'); -const contract = require('web3-eth-contract'); - -class GasEstimator { - constructor(provider, abi, iterations) { - this.abi = abi; - this.iters = iterations; - } - - -} \ No newline at end of file diff --git a/lib/modules/profiler/index.js b/lib/modules/profiler/index.js index d5f40fa7..6f5ce2aa 100644 --- a/lib/modules/profiler/index.js +++ b/lib/modules/profiler/index.js @@ -37,17 +37,6 @@ class Profiler { return paramString; } - /*generateGasEstimation(method) { - - } - - generateRandomType(type) { - switch(type) { - case "uint256": - case "uint" - } - }*/ - registerConsoleCommand() { const self = this; self.embark.registerConsoleCommand((cmd, _options) => { From a7629d2ac047ac03158f788beacc2ecbfd45fbf7 Mon Sep 17 00:00:00 2001 From: VoR0220 Date: Tue, 5 Jun 2018 13:54:43 -0500 Subject: [PATCH 09/12] fix linting Signed-off-by: VoR0220 --- lib/modules/fuzzer/index.js | 16 ++++++++-------- lib/modules/profiler/index.js | 1 - 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/modules/fuzzer/index.js b/lib/modules/fuzzer/index.js index a0e3a88e..f2f6f2ab 100644 --- a/lib/modules/fuzzer/index.js +++ b/lib/modules/fuzzer/index.js @@ -1,4 +1,3 @@ -const ethAbi = require('web3-eth-abi'); const utils = require('web3-utils'); const _ = require('underscore'); @@ -14,11 +13,11 @@ class ContractFuzzer { this.registerConsoleCommand(); } + // main function to call, takes in iteration number and a contract and returns a map object + // composed of method names -> fuzzed inputs. generateFuzz(iterations, contract) { let fuzzMap = {}; - for (let i = 0; i < iterations; i++) - contract.abiDefinition.filter((x) => x.inputs && x.inputs.length != 0) - .forEach((abiMethod) => { + for (let i = 0; i < iterations; i++) contract.abiDefinition.filter((x) => x.inputs && x.inputs.length != 0).forEach((abiMethod) => { let name = abiMethod.type === "constructor" ? "constructor" : abiMethod.name; console.log("name"); let inputTypes = abiMethod.inputs.map(input => input.type); @@ -55,11 +54,12 @@ class ContractFuzzer { let arraySize = regexObj[5]; console.log("array size:", arraySize); switch(true) { - case (array !== undefined): + case array !== undefined: { // if it's a dynamic array pick a number between 1 and 256 for length of array let length = arraySize === undefined || arraySize === null || arraySize === '' ? Math.floor((Math.random() * 256) + 1) : arraySize; console.log("LENGTH: ", length); - return self.generateArrayOfType(length, type) + return self.generateArrayOfType(length, type); + } case kind == "bool": return self.generateRandomBool(); case kind == "uint" || kind == "int": @@ -67,7 +67,7 @@ class ContractFuzzer { case kind === "bytes" && size !== undefined: return self.generateRandomStaticBytes(size); case kind === "string" || kind === "bytes": - return self.generateRandomDynamicType() + return self.generateRandomDynamicType(); case kind === "address": return self.generateRandomAddress(); default: @@ -114,7 +114,7 @@ class ContractFuzzer { if (cmdName === 'fuzz') { self.events.request('contracts:contract', contractName, (contract) => { self.logger.info("-- fuzzed vals for " + contractName); - this.generateFuzz(1, contract); + this.generateFuzz(iterations, contract); }); return ""; } diff --git a/lib/modules/profiler/index.js b/lib/modules/profiler/index.js index 6f5ce2aa..f86ad995 100644 --- a/lib/modules/profiler/index.js +++ b/lib/modules/profiler/index.js @@ -1,5 +1,4 @@ const asciiTable = require('ascii-table'); -const ethAbi = require('web3-eth-abi'); class Profiler { constructor(embark) { From 773f5a792127f705c4d1eace26a3c588650102c5 Mon Sep 17 00:00:00 2001 From: VoR0220 Date: Tue, 5 Jun 2018 14:16:38 -0500 Subject: [PATCH 10/12] convert console logs to embark logger and this baby is ready to rock Signed-off-by: VoR0220 --- lib/modules/fuzzer/index.js | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/lib/modules/fuzzer/index.js b/lib/modules/fuzzer/index.js index f2f6f2ab..0a1d9686 100644 --- a/lib/modules/fuzzer/index.js +++ b/lib/modules/fuzzer/index.js @@ -16,25 +16,20 @@ class ContractFuzzer { // main function to call, takes in iteration number and a contract and returns a map object // composed of method names -> fuzzed inputs. generateFuzz(iterations, contract) { + const self = this; let fuzzMap = {}; for (let i = 0; i < iterations; i++) contract.abiDefinition.filter((x) => x.inputs && x.inputs.length != 0).forEach((abiMethod) => { let name = abiMethod.type === "constructor" ? "constructor" : abiMethod.name; - console.log("name"); let inputTypes = abiMethod.inputs.map(input => input.type); - console.log("INPUT TYPES:", inputTypes); let fuzzedInputs = _.map(inputTypes, this.getTypeFuzz.bind(this)); - console.log("FUZZED INPUTS:", fuzzedInputs); fuzzMap[name] = fuzzedInputs; - console.log("FUZZ KEYS SO FAR:", Object.keys(fuzzMap)); - console.log("FUZZ VALS SO FAR:", Object.values(fuzzMap)); }); - console.log("FUZZ:", Object.keys(fuzzMap), Object.values(fuzzMap)); + for (let key in fuzzMap) self.logger.info(key + ":" + fuzzMap[key]); return fuzzMap; } getTypeFuzz(typeString) { const self = this; - console.log("TYPESTRING:", typeString); // Group 0: uint256[3] // Group 1: uint256 // Group 2: uint @@ -42,22 +37,15 @@ class ContractFuzzer { // Group 4: [3] // Group 5: 3 let regexObj = typeString.match(/((bool|int|uint|bytes|string|address)([0-9]*)?)(\[([0-9]*)\])*$/); - console.log("REGEX OBJ:", regexObj); let type = regexObj[1]; - console.log("type:", type); let kind = regexObj[2]; - console.log("kind:", kind); let size = regexObj[3]; - console.log("size:", size); let array = regexObj[4]; - console.log("array:", array); let arraySize = regexObj[5]; - console.log("array size:", arraySize); switch(true) { case array !== undefined: { // if it's a dynamic array pick a number between 1 and 256 for length of array let length = arraySize === undefined || arraySize === null || arraySize === '' ? Math.floor((Math.random() * 256) + 1) : arraySize; - console.log("LENGTH: ", length); return self.generateArrayOfType(length, type); } case kind == "bool": @@ -81,10 +69,7 @@ class ContractFuzzer { generateArrayOfType(length, type) { var arr = []; - for (var i = 0; i < length; i++) { - arr.push(this.getTypeFuzz(type)); - } - console.log("Final Array:", arr); + for (var i = 0; i < length; i++) arr.push(this.getTypeFuzz(type)); return arr; } From 95a06e0bf92f3421d9ffb56070493b4a9c81ea2a Mon Sep 17 00:00:00 2001 From: VoR0220 Date: Tue, 5 Jun 2018 14:39:32 -0500 Subject: [PATCH 11/12] formatting fixes Signed-off-by: VoR0220 one more Signed-off-by: VoR0220 --- lib/modules/fuzzer/index.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/modules/fuzzer/index.js b/lib/modules/fuzzer/index.js index 0a1d9686..7ff4dd6b 100644 --- a/lib/modules/fuzzer/index.js +++ b/lib/modules/fuzzer/index.js @@ -5,7 +5,6 @@ const _ = require('underscore'); // generates random inputs based on the inputs of an ABI class ContractFuzzer { constructor(embark) { - //this.abi = abi; this.embark = embark; this.logger = embark.logger; this.events = embark.events; @@ -18,12 +17,13 @@ class ContractFuzzer { generateFuzz(iterations, contract) { const self = this; let fuzzMap = {}; - for (let i = 0; i < iterations; i++) contract.abiDefinition.filter((x) => x.inputs && x.inputs.length != 0).forEach((abiMethod) => { - let name = abiMethod.type === "constructor" ? "constructor" : abiMethod.name; - let inputTypes = abiMethod.inputs.map(input => input.type); - let fuzzedInputs = _.map(inputTypes, this.getTypeFuzz.bind(this)); - fuzzMap[name] = fuzzedInputs; - }); + for (let i = 0; i < iterations; i++) { + contract.abiDefinition.filter((x) => x.inputs && x.inputs.length != 0).forEach((abiMethod) => { + let name = abiMethod.type === "constructor" ? "constructor" : abiMethod.name; + let inputTypes = abiMethod.inputs.map(input => input.type); + fuzzMap[name] = inputTypes.map(input => this.getTypeFuzz.bind(this)); + }); + } for (let key in fuzzMap) self.logger.info(key + ":" + fuzzMap[key]); return fuzzMap; } @@ -102,8 +102,8 @@ class ContractFuzzer { this.generateFuzz(iterations, contract); }); return ""; - } - return false; + } + return false; }); } } From e42cbb4ade0102880961db9450f8abc3c8ea5a6c Mon Sep 17 00:00:00 2001 From: VoR0220 Date: Tue, 5 Jun 2018 15:07:41 -0500 Subject: [PATCH 12/12] one last change Signed-off-by: VoR0220 --- lib/modules/fuzzer/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/fuzzer/index.js b/lib/modules/fuzzer/index.js index 7ff4dd6b..a38dc89c 100644 --- a/lib/modules/fuzzer/index.js +++ b/lib/modules/fuzzer/index.js @@ -21,7 +21,7 @@ class ContractFuzzer { contract.abiDefinition.filter((x) => x.inputs && x.inputs.length != 0).forEach((abiMethod) => { let name = abiMethod.type === "constructor" ? "constructor" : abiMethod.name; let inputTypes = abiMethod.inputs.map(input => input.type); - fuzzMap[name] = inputTypes.map(input => this.getTypeFuzz.bind(this)); + fuzzMap[name] = inputTypes.map(input => this.getTypeFuzz(input)); }); } for (let key in fuzzMap) self.logger.info(key + ":" + fuzzMap[key]);