From a328bca98c6ff1ee3351a8cf47b471645ed091b7 Mon Sep 17 00:00:00 2001 From: lsaether Date: Fri, 27 Jul 2018 13:09:22 +0300 Subject: [PATCH 01/24] util --- lib/{constants.js => constants.ts} | 4 +- lib/global.d.ts | 2 + lib/requestFactory/{index.js => index.ts} | 28 +- lib/util.js | 217 - lib/util.ts | 269 + package-lock.json | 6319 ++------------------- package.json | 1 + tsconfig.json | 59 + 8 files changed, 829 insertions(+), 6070 deletions(-) rename lib/{constants.js => constants.ts} (95%) create mode 100644 lib/global.d.ts rename lib/requestFactory/{index.js => index.ts} (91%) delete mode 100644 lib/util.js create mode 100644 lib/util.ts create mode 100644 tsconfig.json diff --git a/lib/constants.js b/lib/constants.ts similarity index 95% rename from lib/constants.js rename to lib/constants.ts index c3a41a9..88f818a 100644 --- a/lib/constants.js +++ b/lib/constants.ts @@ -1,4 +1,4 @@ -module.exports = { +export default { GT_HEX: "0x3e", LT_HEX: "0x3c", GTE_HEX: "0x3e3d", @@ -11,4 +11,4 @@ module.exports = { "0xc008bc849b42227c61d5063a1313ce509a6e99211bfd59e827e417be6c65c81b", NEWREQUESTLOG: "0x2749295aa7ffdbd4d16719dc03d592cd081eebd9bb790ceedce201a40675fc03", -} +}; diff --git a/lib/global.d.ts b/lib/global.d.ts new file mode 100644 index 0000000..04096af --- /dev/null +++ b/lib/global.d.ts @@ -0,0 +1,2 @@ +declare module 'ethereumjs-util'; +declare module 'web3'; \ No newline at end of file diff --git a/lib/requestFactory/index.js b/lib/requestFactory/index.ts similarity index 91% rename from lib/requestFactory/index.js rename to lib/requestFactory/index.ts index a517bc6..289f459 100644 --- a/lib/requestFactory/index.js +++ b/lib/requestFactory/index.ts @@ -1,27 +1,35 @@ /* eslint class-methods-use-this: "off" */ -const Util = require("../util")() +import * as initUtil from '../util'; -class RequestFactory { - constructor(address, web3) { +const Util = initUtil(); + +type Address = string; + +export default class RequestFactory { + public instance: any; + public web3: any; + + constructor(address: Address, web3: any) { if (!Util.checkNotNullAddress(address)) { - throw new Error("Attempted to instantiate a RequestFactory class from a null address.") + throw new Error(`Cannot initialize a RequestFactory from address ${address}`); } - this.web3 = web3 + + this.web3 = web3; this.instance = this.web3.eth .contract(Util.getABI("RequestFactory")) - .at(address) + .at(address); } - get address() { - return this.instance.address + get address(): Address { + return this.instance.address; } /** * Conveinence methods */ - isKnownRequest(requestAddress) { + isKnownRequest(requestAddress: Address) { return new Promise((resolve, reject) => { this.instance.isKnownRequest.call(requestAddress, (err, isKnown) => { if (!err) resolve(isKnown) @@ -216,5 +224,3 @@ class RequestFactory { // return new RequestFactory(address, web3) // } } - -module.exports = RequestFactory diff --git a/lib/util.js b/lib/util.js deleted file mode 100644 index 2e8ba1f..0000000 --- a/lib/util.js +++ /dev/null @@ -1,217 +0,0 @@ -/* eslint global-require: "off", import/no-dynamic-require: "off", no-param-reassign: "off" */ - -const { BigNumber } = require("bignumber.js") -const Constants = require("./constants.js") -const ethUtil = require("ethereumjs-util") - -const calcEndowment = (callGas, callValue, gasPrice, fee, bounty) => { - const callGasBN = new BigNumber(callGas) - const callValueBN = new BigNumber(callValue) - const gasPriceBN = new BigNumber(gasPrice) - const feeBN = new BigNumber(fee) - const bountyBN = new BigNumber(bounty) - - return bountyBN - .plus(feeBN) - .plus(callGasBN.times(gasPrice)) - .plus(gasPriceBN.times(180000)) - .plus(callValueBN) -} - -const checkForUnlockedAccount = (web3) => { - return new Promise((resolve, reject) => { - if (web3.eth.defaultAccount == null) { - web3.eth.getAccounts((err, accounts) => { - if (accounts.length < 1) { - reject(new Error("\n error: must have an unlocked account in index -\n")) - } - [web3.eth.defaultAccount] = accounts - resolve(true) - }) - } - }) -} - -const checkNetworkID = (web3) => { - return new Promise((resolve) => { - web3.version.getNetwork((err, netID) => { - // mainnet - if (netID === '1') resolve(false) - // ropsten - else if (netID === '3') resolve(true) - // rinkeby - else if (netID === '4') resolve(false) - // kovan - else if (netID === '42') resolve(true) - // docker - else if (netID === '1001') resolve(true) - // development - else if (netID === '1002') resolve(true) - else resolve(false) - }) - }) -} - -const checkNotNullAddress = (address) => { - if (address === Constants.NULL_ADDRESS) return false - return true -} - -const checkValidAddress = (address) => { - if (!ethUtil.isValidAddress(address)) { - return false - } - return true -} - -/** - * Promise resolves to the amount of gas from web3.eth.estimateGas - * @param {Web3} web3 - * @param {Object} opts Ethereum object options, including `from`, `to`, `value`, and `data` - */ -const estimateGas = (web3, opts) => new Promise((resolve, reject) => { - web3.eth.estimateGas(opts, (err, gas) => { - if (!err) resolve(gas) - else reject(err) - }) -}) - -// / Requires a case sensitive name of the contract and will return the ABI if found. -const getABI = (name) => { - return require(`${__dirname}/build/abi/${name}.json`) -} - -const getBalance = (web3, address) => new Promise((resolve, reject) => { - web3.eth.getBalance(address, (err, bal) => { - if (!err) resolve(bal) - else reject(err) - }) -}) - -const getBlockNumber = web3 => new Promise((resolve, reject) => { - web3.eth.getBlockNumber((err, blockNum) => { - if (!err) resolve(blockNum) - else reject(err) - }) -}) - -const getGasPrice = web3 => new Promise((resolve, reject) => { - web3.eth.getGasPrice((err, gasPrice) => { - if (!err) resolve(gasPrice) - else reject(err) - }) -}) - -const getTimestamp = web3 => new Promise((resolve, reject) => { - web3.eth.getBlock("latest", (err, block) => { - if (!err) resolve(block.timestamp) - else reject(err) - }) -}) - -const getTimestampForBlock = async (web3, blockNum) => { - const curBlockNum = await getBlockNumber(web3) - if (blockNum > curBlockNum) { - throw new Error(`Must pass in a blocknumber at or lower than the current blocknumber. Now: ${curBlockNum} | Tried: ${blockNum}`) - } - return new Promise((resolve, reject) => { - web3.eth.getBlock(blockNum, (err, block) => { - if (!err) resolve(block.timestamp) - else reject(err) - }) - }) -} - -const getTxRequestFromReceipt = (receipt) => { - const log = receipt.logs.find(log => log.topics[0] === Constants.NEWREQUESTLOG) - return "0x".concat(log.data.slice(-40)) -} - -/** - * Returns the string argument of the detected network to be - * passed into eacScheduler. - * @param {Web3} web3 - */ -const getChainName = web3 => new Promise((resolve, reject) => { - web3.version.getNetwork((err, netID) => { - if (!err) { - if (netID === '1') { - // return 'mainnet' - reject(new Error("Not implemented for mainnet")) - } else if (netID === '3') { - resolve("ropsten") - } else if (netID === '4') { - resolve("rinkeby") - } else if (netID === '42') { - resolve("kovan") - } else if (netID === '1001') { - resolve("docker") - } else if (netID === '1002') { - resolve("development") - } else if (netID > 1517361627) { - resolve("tester") - } - } - }) -}) - -const waitForTransactionToBeMined = (web3, txHash, interval) => { - interval = interval || 500 - const txReceiptAsync = (txHash, resolve, reject) => { - web3.eth.getTransactionReceipt(txHash, (err, receipt) => { - if (err) { - reject(err) - } else if (receipt == null) { - setTimeout(() => { - txReceiptAsync(txHash, resolve, reject) - }, interval) - } else { - resolve(receipt) - } - }) - } - return new Promise((resolve, reject) => { - txReceiptAsync(txHash, resolve, reject) - }) -} - -module.exports = (web3) => { - if (!web3) { - return { - calcEndowment, - checkForUnlockedAccount, - checkNetworkID, - checkNotNullAddress, - checkValidAddress, - estimateGas, - getABI, - getBalance, - getBlockNumber, - getChainName, - getGasPrice, - getTimestamp, - getTimestampForBlock, - getTxRequestFromReceipt, - waitForTransactionToBeMined, - } - } - - return { - calcEndowment, - checkForUnlockedAccount: () => checkForUnlockedAccount(web3), - checkNetworkID: () => checkNetworkID(web3), - checkNotNullAddress, - checkValidAddress, - estimateGas: opts => estimateGas(web3, opts), - getABI, - getBalance: address => getBalance(web3, address), - getBlockNumber: () => getBlockNumber(web3), - getChainName: () => getChainName(web3), - getGasPrice: () => getGasPrice(web3), - getTimestamp: () => getTimestamp(web3), - getTimestampForBlock: blockNum => getTimestampForBlock(web3, blockNum), - getTxRequestFromReceipt, - waitForTransactionToBeMined: txHash => - waitForTransactionToBeMined(web3, txHash), - } -} diff --git a/lib/util.ts b/lib/util.ts new file mode 100644 index 0000000..0814a1e --- /dev/null +++ b/lib/util.ts @@ -0,0 +1,269 @@ +import BigNumber from 'bignumber.js'; +import * as ethUtil from 'ethereumjs-util'; + +import Constants from './constants'; + +type Address = string; + +export default class Util { + public web3: any; + + constructor(web3: any) { + this.web3 = web3; + } + + private checkWeb3(web3: any): any { + if (!web3 && !this.web3) { + throw new Error('[eac.js-lib] You must either pass a Web3 object to Util class or instatiate it with Web3 object.'); + } + return web3 || this.web3; + } + + calcEndowment(gas: BigNumber, value: BigNumber, gasPrice: BigNumber, fee: BigNumber, bounty: BigNumber): BigNumber { + return bounty.add(fee).add(gas.times(gasPrice)).add(gasPrice.times(180000)).add(value); + } + + checkForUnlockedAccount = () => { + throw new Error("[eac.js-lib] Deprecated."); + } + + checkNetworkID(web3: any): Promise { + web3 = this.checkWeb3(web3); + + return new Promise((resolve: any, reject: any) => { + web3.version.getNetwork((err: any, netId: any) => { + switch (netId) { + case '1': + // mainnet + resolve(false); break; + case '3': + // ropsten + resolve(true); break; + case '4': + // rinkeby + resolve(false); break; + case '42': + // kovan + resolve(true); break; + case '1001': + // docker + resolve(true); break; + case '1002': + // development + resolve(true); break; + default: + resolve(false); + } + }) + }) + } + + checkNotNullAddress(address: Address): boolean { + return address !== Constants.NULL_ADDRESS; + } + + checkValidAddress(address: Address): boolean { + return ethUtil.isValidAddress(address); + } + + estimateGas(web3: any, opts: {}): Promise { + web3 = this.checkWeb3(web3); + + return new Promise((resolve: any, reject: any) => { + web3.eth.estimateGas(opts, (err: any, gas: any) => { + if (!err) { + resolve(gas); + } else { + reject(err); + } + }) + }) + } + + getABI(name: string): {} { + return require(`${__dirname}/build/abi/${name}.json`); + } + + getBalance(web3: any, address: Address): Promise { + web3 = this.checkWeb3(web3); + + return new Promise((resolve: any, reject: any) => { + web3.eth.getBalance(address, (err: any, bal: any) => { + if (!err) { + resolve(bal); + } else { + reject(err); + } + }) + }) + } + + getBlockNumber(web3: any): Promise { + web3 = this.checkWeb3(web3); + + return new Promise((resolve: any, reject: any) => { + web3.eth.getBlockNumber((err: any, blockNum: any) => { + if (!err) { + resolve(blockNum); + } else { + reject(err); + } + }) + }) + } + + getGasPrice(web3: any): Promise { + web3 = this.checkWeb3(web3); + + return new Promise((resolve: any, reject: any) => { + web3.eth.getGasPrice((err: any, gasPrice: any) => { + if (!err) { + resolve(gasPrice); + } else { + reject(err); + } + }) + }) + } + + getTimestamp(web3: any): Promise { + web3 = this.checkWeb3(web3); + + return new Promise((resolve: any, reject: any) => { + web3.eth.getBlock('latest', (err: any, block: any) => { + if (!err) { + resolve(block.timestamp); + } else { + reject(err); + } + }) + }) + } + + getTimestampForBlock(web3: any, blockNum: any): Promise { + web3 = this.checkWeb3(web3); + + this.getBlockNumber(web3).then((curBlockNum) => { + if (blockNum > curBlockNum) { + throw new Error(`[eac.js-lib] Passed blockNum ${blockNum} is greater than current blockNum ${curBlockNum}`); + } + + return new Promise((resolve: any, reject: any) => { + web3.eth.getBlock(blockNum, (err: any, block: any) => { + if (!err) { + resolve(block.timestamp); + } else { + reject(err); + } + }) + }) + }) + } + + getTxRequestFromReceipt(receipt: any): Address { + const newRequestLog = receipt.logs.find((log) => { + return log.topics[0] === Constants.NEWREQUESTLOG; + }) + + if (!newRequestLog) { + throw new Error('[eac.js-lib] Invalid receipt passed!'); + } + + return "0x" + newRequestLog.data.slice(-40); + } + + getChainName(web3: any): Promise { + web3 = this.checkWeb3(web3); + + return new Promise((resolve: any, reject: any) => { + web3.version.getNetwork((err: any, netId: any) => { + switch (netId) { + case '1': + reject("Not implemented on mainnet."); + break; + case '3': + resolve("ropsten"); + break; + case "4": + resolve("rinkeby"); + break; + case "42": + resolve("kovan"); + break; + case "1001": + resolve("docker"); + break; + case "1002": + resolve("development"); + break; + default: + resolve("tester"); + } + }) + }) + } + + waitForTransactionToBeMined(web3: any, txHash: any, interval: any): Promise { + interval = interval || 500; + web3 = this.checkWeb3(web3); + + const txReceiptAsync = (txHash: any, resolve: any, reject: any) => { + web3.eth.getTransactionReceipt(txHash, (err: any, receipt: any) => { + if (err) { + reject(err); + } else if (receipt === null) { + setTimeout(() => { + txReceiptAsync(txHash, resolve, reject) + }, interval); + } else { + resolve(receipt); + } + }) + } + + return new Promise((resolve: any, reject: any) => { + txReceiptAsync(txHash, resolve, reject); + }) + } +} + +// module.exports = (web3) => { +// if (!web3) { +// return { +// calcEndowment, +// checkForUnlockedAccount, +// checkNetworkID, +// checkNotNullAddress, +// checkValidAddress, +// estimateGas, +// getABI, +// getBalance, +// getBlockNumber, +// getChainName, +// getGasPrice, +// getTimestamp, +// getTimestampForBlock, +// getTxRequestFromReceipt, +// waitForTransactionToBeMined, +// } +// } + +// return { +// calcEndowment, +// checkForUnlockedAccount: () => checkForUnlockedAccount(web3), +// checkNetworkID: () => checkNetworkID(web3), +// checkNotNullAddress, +// checkValidAddress, +// estimateGas: opts => estimateGas(web3, opts), +// getABI, +// getBalance: address => getBalance(web3, address), +// getBlockNumber: () => getBlockNumber(web3), +// getChainName: () => getChainName(web3), +// getGasPrice: () => getGasPrice(web3), +// getTimestamp: () => getTimestamp(web3), +// getTimestampForBlock: blockNum => getTimestampForBlock(web3, blockNum), +// getTxRequestFromReceipt, +// waitForTransactionToBeMined: txHash => +// waitForTransactionToBeMined(web3, txHash), +// } +// } diff --git a/package-lock.json b/package-lock.json index cbacc54..8795cab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,29 +10,10 @@ "integrity": "sha1-Xa+RrXiNa1lqGarSLi5mfk7ICKg=", "dev": true }, - "abstract-leveldown": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz", - "integrity": "sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ==", - "dev": true, - "requires": { - "xtend": "4.0.1" - } - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "2.1.18", - "negotiator": "0.6.1" - } - }, - "aes-js": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-0.2.4.tgz", - "integrity": "sha1-lLiBq3FyhtAV+iGeCPtmcJ3aWj0=", + "@types/node": { + "version": "10.5.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.3.tgz", + "integrity": "sha512-jQ1p+SyF/z8ygPxfSPKZKMWazlCgTBSyIaC1UCUvkLHDdxdmPQtQFk02X4WFM31Z1BKMAS3MSAK0cRP2c92n6Q==", "dev": true }, "ajv": { @@ -47,5699 +28,482 @@ "json-schema-traverse": "0.3.1" } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true + "bignumber.js": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-5.0.0.tgz", + "integrity": "sha512-KWTu6ZMVk9sxlDJQh2YH1UOnfDP8O8TpxUxgQG/vKASoSnEjK9aVuOueFaPcQEYQ5fyNXNTOYwYw3099RYebWg==" }, - "argsarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", - "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=", - "dev": true + "bindings": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", + "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true + "bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", + "requires": { + "safe-buffer": "5.1.2" + } }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "balanced-match": "1.0.0", + "concat-map": "0.0.1" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { + "brorand": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { - "lodash": "4.17.10" + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "async": "2.6.1" + "assertion-error": "1.1.0", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.8" } }, - "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==", + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "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==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } }, - "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=", + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.4", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" } }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.10", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" - }, - "dependencies": { - "debug": { - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.10", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - } - } + "crypto-js": { + "version": "3.1.9-1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz", + "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=", + "dev": true }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "type-detect": "4.0.8" } }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, + "drbg.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", + "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "create-hmac": "1.1.7" } }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" + "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.1", + "minimalistic-crypto-utils": "1.0.1" } }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } + "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=", + "dev": true }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "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==", "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.4", + "keccak": "1.4.0", + "rlp": "2.0.0", + "safe-buffer": "5.1.2", + "secp256k1": "3.5.0" } }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "ethjs-abi": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.1.8.tgz", + "integrity": "sha1-zSiFg+1ijN+tr4re+juh28vKbBg=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "bn.js": "4.11.6", + "js-sha3": "0.5.5", + "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=", + "dev": true + }, + "js-sha3": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", + "integrity": "sha1-uvDA6MVK1ZA0R9+Wreekobynmko=", + "dev": true + } } }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, + "ethjs-util": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.4.tgz", + "integrity": "sha1-HItoeSV0RO9NPz+7rC3tEs2ZfZM=", "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" } }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, + "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": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "md5.js": "1.3.4", + "safe-buffer": "5.1.2" } }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" - } + "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 }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } + "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 }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "0.10.1" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "3.2.8", - "invariant": "2.2.4", - "semver": "5.4.1" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "6.26.3", - "babel-runtime": "6.26.0", - "core-js": "2.5.7", - "home-or-tmp": "2.0.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.5.7", - "regenerator-runtime": "0.11.1" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.10" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.10" - }, - "dependencies": { - "debug": { - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.10", - "to-fast-properties": "1.0.3" - } - }, - "babelify": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", - "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", - "dev": true, - "requires": { - "babel-core": "6.26.3", - "object-assign": "4.1.1" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-1.1.0.tgz", - "integrity": "sha1-QtPXF0dPnqAiB/bRqh9CaRPut6w=", - "dev": true - }, - "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==", - "dev": true - }, - "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, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "bignumber.js": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-5.0.0.tgz", - "integrity": "sha512-KWTu6ZMVk9sxlDJQh2YH1UOnfDP8O8TpxUxgQG/vKASoSnEjK9aVuOueFaPcQEYQ5fyNXNTOYwYw3099RYebWg==" - }, - "bindings": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", - "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" - }, - "bip39": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.4.0.tgz", - "integrity": "sha512-1++HywqIyPtWDo7gm4v0ylYbwkLvHkuwVSKbBlZBbTCP/mnkyrlARBny906VLAwxJbC5xw9EvuJasHFIZaIFMQ==", - "dev": true, - "requires": { - "create-hash": "1.2.0", - "pbkdf2": "3.0.16", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2", - "unorm": "1.4.1" - } - }, - "bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "bl": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", - "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=", - "dev": true, - "requires": { - "readable-stream": "1.0.34" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - } - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "debug": { - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "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=" - }, - "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "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==", - "dev": true, - "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.1", - "evp_bytestokey": "1.0.3" - } - }, - "browserify-des": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", - "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" - } - }, - "browserify-sha3": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.1.tgz", - "integrity": "sha1-P/NKMAbvFcD7NWflQbkaI0ASPRE=", - "dev": true, - "requires": { - "js-sha3": "0.3.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" - } - }, - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000847", - "electron-to-chromium": "1.3.48" - } - }, - "bs58": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-3.1.0.tgz", - "integrity": "sha1-1MJjiL9IBMrHFBQbGUWqR+XrJI4=", - "dev": true, - "requires": { - "base-x": "1.1.0" - } - }, - "bs58check": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-1.3.4.tgz", - "integrity": "sha1-xSVABzdJEXcU+gQsMEfrj5FRy/g=", - "dev": true, - "requires": { - "bs58": "3.1.0", - "create-hash": "1.2.0" - } - }, - "buffer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", - "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", - "dev": true, - "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.11" - } - }, - "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==", - "dev": true, - "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==", - "dev": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "buffer-from": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", - "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==", - "dev": true - }, - "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=", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "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=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "bytewise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", - "integrity": "sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4=", - "dev": true, - "requires": { - "bytewise-core": "1.2.3", - "typewise": "1.0.3" - } - }, - "bytewise-core": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", - "integrity": "sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI=", - "dev": true, - "requires": { - "typewise-core": "1.2.0" - } - }, - "cachedown": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cachedown/-/cachedown-1.0.0.tgz", - "integrity": "sha1-1D8DbkUQaWsxJG19sx6/D3rDLRU=", - "dev": true, - "requires": { - "abstract-leveldown": "2.7.2", - "lru-cache": "3.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "dev": true, - "requires": { - "xtend": "4.0.1" - } - } - } - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000847", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000847.tgz", - "integrity": "sha512-Weo+tRtVWcN2da782Ebx/27hFNEb+KP+uP6tdqAa+2S5bp1zOJhVH9tEpDygagrfvU4QjeuPwi/5VGsgT4SLaA==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", - "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", - "dev": true, - "requires": { - "assertion-error": "1.1.0", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.0", - "type-detect": "4.0.8" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "checkpoint-store": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", - "integrity": "sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY=", - "dev": true, - "requires": { - "functional-red-black-tree": "1.0.1" - } - }, - "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==", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "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=", - "dev": true - }, - "coinstring": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/coinstring/-/coinstring-2.3.0.tgz", - "integrity": "sha1-zbYzY6lhUCQEolr7gsLibV/2J6Q=", - "dev": true, - "requires": { - "bs58": "2.0.1", - "create-hash": "1.2.0" - }, - "dependencies": { - "bs58": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-2.0.1.tgz", - "integrity": "sha1-VZCNWPGYKrogCPob7Y+RmYopv40=", - "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, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "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==", - "dev": true - }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", - "dev": true - }, - "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 - }, - "cors": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", - "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "vary": "1.1.2" - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.4", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } - }, - "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==", - "dev": true, - "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.16", - "public-encrypt": "4.0.2", - "randombytes": "2.0.6", - "randomfill": "1.0.4" - } - }, - "crypto-js": { - "version": "3.1.9-1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz", - "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=", - "dev": true - }, - "d64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d64/-/d64-1.0.0.tgz", - "integrity": "sha1-QAKofoUMv8n52XBrYPymE6MzbpA=", - "dev": true - }, - "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" - } - }, - "debug": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.0.tgz", - "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "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=", - "dev": true - }, - "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", - "dev": true, - "requires": { - "decompress-tar": "4.1.1", - "decompress-tarbz2": "4.1.1", - "decompress-targz": "4.1.1", - "decompress-unzip": "4.0.1", - "graceful-fs": "4.1.11", - "make-dir": "1.3.0", - "pify": "2.3.0", - "strip-dirs": "2.1.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "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==", - "dev": true, - "requires": { - "file-type": "5.2.0", - "is-stream": "1.1.0", - "tar-stream": "1.6.1" - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dev": true, - "requires": { - "decompress-tar": "4.1.1", - "file-type": "6.2.0", - "is-stream": "1.1.0", - "seek-bzip": "1.0.5", - "unbzip2-stream": "1.2.5" - }, - "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==", - "dev": true - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dev": true, - "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=", - "dev": true, - "requires": { - "file-type": "3.9.0", - "get-stream": "2.3.1", - "pify": "2.3.0", - "yauzl": "2.9.1" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", - "dev": true, - "requires": { - "abstract-leveldown": "2.6.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", - "dev": true, - "requires": { - "xtend": "4.0.1" - } - } - } - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true, - "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" - }, - "dependencies": { - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - } - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "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 - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "diff": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", - "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==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" - } - }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", - "dev": true - }, - "drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", - "requires": { - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "create-hmac": "1.1.7" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "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, - "requires": { - "jsbn": "0.1.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.48", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz", - "integrity": "sha1-07DYWTgUBE4JLs4hCPw6ya6kuQA=", - "dev": true - }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "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.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "0.4.23" - } - }, - "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==", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "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" - } - }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "dev": true, - "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" - } - }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, - "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "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=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eth-block-tracker": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-2.3.1.tgz", - "integrity": "sha512-NamWuMBIl8kmkJFVj8WzGatySTzQPQag4Xr677yFxdVtIxACFbL/dQowk0MzEqIKk93U1TwY3MjVU6mOcwZnKA==", - "dev": true, - "requires": { - "async-eventemitter": "github:ahultgren/async-eventemitter#fa06e39e56786ba541c180061dbf2c0a5bbf951c", - "eth-query": "2.1.2", - "ethereumjs-tx": "1.3.4", - "ethereumjs-util": "5.2.0", - "ethjs-util": "0.1.4", - "json-rpc-engine": "3.7.3", - "pify": "2.3.0", - "tape": "4.9.0" - }, - "dependencies": { - "async-eventemitter": { - "version": "github:ahultgren/async-eventemitter#fa06e39e56786ba541c180061dbf2c0a5bbf951c", - "dev": true, - "requires": { - "async": "2.6.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "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==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0", - "keccakjs": "0.2.1", - "nano-json-stream-parser": "0.1.2", - "servify": "0.1.12", - "ws": "3.3.3", - "xhr-request-promise": "0.1.2" - } - }, - "eth-query": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", - "integrity": "sha1-1nQdkAAQa1FRDHLbktY2VFam2l4=", - "dev": true, - "requires": { - "json-rpc-random-id": "1.0.1", - "xtend": "4.0.1" - } - }, - "eth-sig-util": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", - "integrity": "sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=", - "dev": true, - "requires": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git#4ea2fdfed09e8f99117d9362d17c6b01b64a2bcf", - "ethereumjs-util": "5.2.0" - } - }, - "ethereum-common": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.16.tgz", - "integrity": "sha1-mh4Wnq00q3XgifUMpRK/0PvRJlU=", - "dev": true - }, - "ethereumjs-abi": { - "version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#4ea2fdfed09e8f99117d9362d17c6b01b64a2bcf", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "ethereumjs-util": "5.2.0" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", - "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", - "dev": true, - "requires": { - "ethereumjs-util": "5.2.0", - "rlp": "2.0.0", - "safe-buffer": "5.1.2" - } - }, - "ethereumjs-block": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.2.2.tgz", - "integrity": "sha1-LsdTSlkCG47JuDww5JaQxuuu3aE=", - "dev": true, - "requires": { - "async": "1.5.2", - "ethereum-common": "0.0.16", - "ethereumjs-tx": "1.3.4", - "ethereumjs-util": "4.5.0", - "merkle-patricia-tree": "2.3.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": "4.5.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz", - "integrity": "sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "keccakjs": "0.2.1", - "rlp": "2.0.0", - "secp256k1": "3.5.0" - } - } - } - }, - "ethereumjs-tx": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.4.tgz", - "integrity": "sha512-kOgUd5jC+0tgV7t52UDECMMz9Uf+Lro+6fSpCvzWemtXfMEcwI3EOxf5mVPMRbTFkMMhuERokNNVF3jItAjidg==", - "dev": true, - "requires": { - "ethereum-common": "0.0.18", - "ethereumjs-util": "5.2.0" - }, - "dependencies": { - "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-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "ethjs-util": "0.1.4", - "keccak": "1.4.0", - "rlp": "2.0.0", - "safe-buffer": "5.1.2", - "secp256k1": "3.5.0" - } - }, - "ethereumjs-vm": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.3.3.tgz", - "integrity": "sha512-yIWJqTEcrF9vJTCvNMxacRkAx6zIZTOW0SmSA+hSFiU1x8JyVZDi9o5udwsRVECT5RkPgQzm62kpL6Pf4qemsw==", - "dev": true, - "requires": { - "async": "2.6.1", - "async-eventemitter": "0.2.4", - "ethereum-common": "0.2.0", - "ethereumjs-account": "2.0.5", - "ethereumjs-block": "1.7.1", - "ethereumjs-util": "5.2.0", - "fake-merkle-patricia-tree": "1.0.1", - "functional-red-black-tree": "1.0.1", - "merkle-patricia-tree": "2.3.1", - "rustbn.js": "0.1.2", - "safe-buffer": "5.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 - }, - "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==", - "dev": true, - "requires": { - "async": "2.6.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "1.3.4", - "ethereumjs-util": "5.2.0", - "merkle-patricia-tree": "2.3.1" - } - } - } - }, - "ethereumjs-wallet": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.0.tgz", - "integrity": "sha1-gnY7Fpfuenlr5xVdqd+0my+Yz9s=", - "dev": true, - "requires": { - "aes-js": "0.2.4", - "bs58check": "1.3.4", - "ethereumjs-util": "4.5.0", - "hdkey": "0.7.1", - "scrypt.js": "0.2.0", - "utf8": "2.1.2", - "uuid": "2.0.3" - }, - "dependencies": { - "ethereumjs-util": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz", - "integrity": "sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "keccakjs": "0.2.1", - "rlp": "2.0.0", - "secp256k1": "3.5.0" - } - } - } - }, - "ethjs-abi": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.1.8.tgz", - "integrity": "sha1-zSiFg+1ijN+tr4re+juh28vKbBg=", - "dev": true, - "requires": { - "bn.js": "4.11.6", - "js-sha3": "0.5.5", - "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=", - "dev": true - }, - "js-sha3": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", - "integrity": "sha1-uvDA6MVK1ZA0R9+Wreekobynmko=", - "dev": true - } - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "dev": true, - "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=", - "dev": true - } - } - }, - "ethjs-util": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.4.tgz", - "integrity": "sha1-HItoeSV0RO9NPz+7rC3tEs2ZfZM=", - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "eventemitter3": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", - "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=", - "dev": true - }, - "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.2" - } - }, - "express": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", - "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", - "dev": true, - "requires": { - "accepts": "1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "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.3", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "dev": true, - "requires": { - "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.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.16" - } - }, - "debug": { - "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" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "dev": true, - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.4.0" - } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - } - } - }, - "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 - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fake-merkle-patricia-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", - "integrity": "sha1-S4w6z7Ugr635hgsfFM2M40As3dM=", - "dev": true, - "requires": { - "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 - }, - "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 - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "1.2.0" - } - }, - "fetch-ponyfill": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz", - "integrity": "sha1-rjzl9zLGReq4fkroeTQUcJsjmJM=", - "dev": true, - "requires": { - "node-fetch": "1.7.3" - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "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" - } - }, - "for-each": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.2.tgz", - "integrity": "sha1-LEBFC5NI6X8oEyJZO6lnBLmr1NQ=", - "dev": true, - "requires": { - "is-function": "1.0.1" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "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, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "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==", - "dev": true - }, - "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" - } - }, - "fs-promise": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz", - "integrity": "sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=", - "dev": true, - "requires": { - "any-promise": "1.3.0", - "fs-extra": "2.1.2", - "mz": "2.7.0", - "thenify-all": "1.6.0" - }, - "dependencies": { - "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "ganache-core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.1.0.tgz", - "integrity": "sha512-zUO61d23XHBCYOUjEQjIuENcfa6EQNBHKuG2oXWdTdGyu5Gbm4fXX9klZ2jjl9ZnBD2T4BaeBXycsLmL0S/d2w==", - "dev": true, - "requires": { - "abstract-leveldown": "3.0.0", - "async": "2.6.1", - "bip39": "2.4.0", - "bn.js": "4.11.6", - "cachedown": "1.0.0", - "chai": "3.5.0", - "clone": "2.1.1", - "ethereumjs-account": "2.0.5", - "ethereumjs-block": "1.2.2", - "ethereumjs-tx": "1.3.4", - "ethereumjs-util": "5.2.0", - "ethereumjs-vm": "2.3.3", - "ethereumjs-wallet": "0.6.0", - "fake-merkle-patricia-tree": "1.0.1", - "heap": "0.2.6", - "js-scrypt": "0.2.0", - "level-sublevel": "6.6.2", - "levelup": "1.3.9", - "localstorage-down": "0.6.7", - "lodash": "4.17.10", - "merkle-patricia-tree": "2.3.1", - "mocha": "3.3.0", - "pify": "3.0.0", - "prepend-file": "1.3.1", - "seedrandom": "2.4.3", - "shebang-loader": "0.0.1", - "solc": "0.4.18", - "temp": "0.8.3", - "tmp": "0.0.31", - "web3": "1.0.0-beta.34", - "web3-provider-engine": "13.8.0", - "websocket": "1.0.26", - "yargs": "7.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "dev": true - }, - "chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", - "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", - "dev": true, - "requires": { - "assertion-error": "1.1.0", - "deep-eql": "0.1.3", - "type-detect": "1.0.0" - } - }, - "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "dev": true, - "requires": { - "type-detect": "0.1.1" - }, - "dependencies": { - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", - "dev": true - } - } - }, - "mocha": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.3.0.tgz", - "integrity": "sha1-0pt0KNP1LILi5l3x7LcGThqrv7U=", - "dev": true, - "requires": { - "browser-stdout": "1.3.0", - "commander": "2.9.0", - "debug": "2.6.0", - "diff": "3.2.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.1", - "growl": "1.9.2", - "json3": "3.3.2", - "lodash.create": "3.1.1", - "mkdirp": "0.5.1", - "supports-color": "3.1.2" - } - }, - "type-detect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", - "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", - "dev": true - }, - "web3": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.34.tgz", - "integrity": "sha1-NH5WG3hAmMtVYzFfSQR5odkfKrE=", - "dev": true, - "requires": { - "web3-bzz": "1.0.0-beta.34", - "web3-core": "1.0.0-beta.34", - "web3-eth": "1.0.0-beta.34", - "web3-eth-personal": "1.0.0-beta.34", - "web3-net": "1.0.0-beta.34", - "web3-shh": "1.0.0-beta.34", - "web3-utils": "1.0.0-beta.34" - } - } - } - }, - "generic-pool": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.0.4.tgz", - "integrity": "sha1-+XGN7agvoSXtXEPjQcmiFadm2aM=", - "dev": true - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "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" - } - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "dev": true, - "requires": { - "min-document": "2.19.0", - "process": "0.5.2" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "requires": { - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-plain-obj": "1.1.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.1", - "p-cancelable": "0.3.0", - "p-timeout": "1.2.1", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "url-parse-lax": "1.0.0", - "url-to-options": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "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, - "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "has-localstorage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-localstorage/-/has-localstorage-1.0.1.tgz", - "integrity": "sha1-/mJAbEdn+9bXhNrGkFkoEIuClxs=", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-symbol-support-x": "1.4.2" - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "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==", - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - }, - "hdkey": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-0.7.1.tgz", - "integrity": "sha1-yu5L6BqneSHpCbjSKN0PKayu5jI=", - "dev": true, - "requires": { - "coinstring": "2.3.0", - "secp256k1": "3.5.0" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "heap": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz", - "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=", - "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=", - "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "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==", - "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=", - "dev": true, - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=", - "dev": true - }, - "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" - } - }, - "humble-localstorage": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/humble-localstorage/-/humble-localstorage-1.4.2.tgz", - "integrity": "sha1-0Fqw1SbE7b3b98amDfb/WAUoNGk=", - "dev": true, - "requires": { - "has-localstorage": "1.0.1", - "localstorage-memory": "1.0.2" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, - "ieee754": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", - "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==", - "dev": true - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "1.3.1" - } - }, - "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=", - "dev": true - }, - "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "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" - } - }, - "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true - }, - "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=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", - "integrity": "sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw=", - "dev": true - }, - "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" - } - }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=", - "dev": true - }, - "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=" - }, - "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=", - "dev": true - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true - }, - "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=", - "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=", - "dev": true, - "requires": { - "has": "1.0.1" - } - }, - "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=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, - "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=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "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 - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "requires": { - "has-to-string-tag-x": "1.4.1", - "is-object": "1.0.1" - } - }, - "js-scrypt": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/js-scrypt/-/js-scrypt-0.2.0.tgz", - "integrity": "sha1-emK3AbRhbnCtDN5URiequ5nX/jk=", - "dev": true, - "requires": { - "generic-pool": "2.0.4" - } - }, - "js-sha3": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz", - "integrity": "sha1-hhIoAhQvCChQKg0d7h2V4lO7AkM=", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "json-rpc-engine": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-3.7.3.tgz", - "integrity": "sha512-+FO3UWu/wafh/+MZ6BXy0HZU+f5plwUn82FgxpC0scJkEh5snOjFrAAtqCITPDfvfLHRUFOG5pQDUx2pspfERQ==", - "dev": true, - "requires": { - "async": "2.6.1", - "babel-preset-env": "1.7.0", - "babelify": "7.3.0", - "clone": "2.1.1", - "json-rpc-error": "2.0.0", - "promise-to-callback": "1.0.0" - } - }, - "json-rpc-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/json-rpc-error/-/json-rpc-error-2.0.0.tgz", - "integrity": "sha1-p6+cICg4tekFxyUOVH8a/3cligI=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "json-rpc-random-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha1-uknZat7RRE27jaPSA3SKy7zeyMg=", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "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 - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "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 - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsprim": { - "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", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "1.3.0", - "inherits": "2.0.3", - "nan": "2.10.0", - "safe-buffer": "5.1.2" - } - }, - "keccakjs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.1.tgz", - "integrity": "sha1-HWM6+QfvMFu/ny+mFtVsRFYd+k0=", - "dev": true, - "requires": { - "browserify-sha3": "0.0.1", - "sha3": "1.2.2" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "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" - } - }, - "level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==", - "dev": true - }, - "level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", - "dev": true, - "requires": { - "errno": "0.1.7" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "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" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - } - } - }, - "level-post": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/level-post/-/level-post-1.0.7.tgz", - "integrity": "sha512-PWYqG4Q00asOrLhX7BejSajByB4EmG2GaKHfj3h5UmmZ2duciXLPGYWIjBzLECFWUGOZWlm5B20h/n3Gs3HKew==", - "dev": true, - "requires": { - "ltgt": "2.2.1" - } - }, - "level-sublevel": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-6.6.2.tgz", - "integrity": "sha512-+hptqmFYPKFju9QG4F6scvx3ZXkhrSmmhYui+hPzRn/jiC3DJ6VNZRKsIhGMpeajVBWfRV7XiysUThrJ/7PgXQ==", - "dev": true, - "requires": { - "bytewise": "1.1.0", - "levelup": "0.19.1", - "ltgt": "2.1.3", - "pull-defer": "0.2.2", - "pull-level": "2.0.4", - "pull-stream": "3.6.8", - "typewiselite": "1.0.0", - "xtend": "4.0.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", - "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=", - "dev": true, - "requires": { - "xtend": "3.0.0" - }, - "dependencies": { - "xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", - "dev": true - } - } - }, - "deferred-leveldown": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", - "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=", - "dev": true, - "requires": { - "abstract-leveldown": "0.12.4" - } - }, - "levelup": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.19.1.tgz", - "integrity": "sha1-86anIFJyxLXzXkEv8ASgOgrt9Qs=", - "dev": true, - "requires": { - "bl": "0.8.2", - "deferred-leveldown": "0.2.0", - "errno": "0.1.7", - "prr": "0.0.0", - "readable-stream": "1.0.34", - "semver": "5.1.1", - "xtend": "3.0.0" - }, - "dependencies": { - "xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", - "dev": true - } - } - }, - "ltgt": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.1.3.tgz", - "integrity": "sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ=", - "dev": true - }, - "prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "semver": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.1.tgz", - "integrity": "sha1-oykqNz5vPgeY2gsgZBuanFvEfhk=", - "dev": true - } - } - }, - "level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "2.1.2" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true, - "requires": { - "object-keys": "0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "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" - } - }, - "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=", - "dev": true, - "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" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "localstorage-down": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/localstorage-down/-/localstorage-down-0.6.7.tgz", - "integrity": "sha1-0Hmak7MebF+lGI7AYkLrHM6dbRU=", - "dev": true, - "requires": { - "abstract-leveldown": "0.12.3", - "argsarray": "0.0.1", - "buffer-from": "0.1.2", - "d64": "1.0.0", - "humble-localstorage": "1.4.2", - "inherits": "2.0.3", - "tiny-queue": "0.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.3.tgz", - "integrity": "sha1-EWsexcdxDvei1XBnaLvbREC+EHA=", - "dev": true, - "requires": { - "xtend": "3.0.0" - } - }, - "xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", - "dev": true - } - } - }, - "localstorage-memory": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/localstorage-memory/-/localstorage-memory-1.0.2.tgz", - "integrity": "sha1-zUqPIQ5V3VGckp9LTMgoKbWPmlE=", - "dev": true - }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", - "dev": true - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basecreate": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", - "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.create": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", - "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", - "dev": true, - "requires": { - "lodash._baseassign": "3.2.0", - "lodash._basecreate": "3.0.3", - "lodash._isiterateecall": "3.0.9" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "looper": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/looper/-/looper-2.0.0.tgz", - "integrity": "sha1-Zs0Md0rz1P7axTeU90LbVtqPCew=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", - "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", - "dev": true, - "requires": { - "pseudomap": "1.0.2" - } - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", - "dev": true - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "3.0.0" - } - }, - "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "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.1", - "safe-buffer": "5.1.2" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "dev": true, - "requires": { - "xtend": "4.0.1" - } - } - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "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=", - "dev": true - }, - "merkle-patricia-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.1.tgz", - "integrity": "sha512-Qp9Mpb3xazznXzzGQBqHbqCpT2AR9joUOHYYPiQjYCarrdCPCnLWXo4BFv77y4xN26KR224xoU1n/qYY7RYYgw==", - "dev": true, - "requires": { - "async": "1.5.2", - "ethereumjs-util": "5.2.0", - "level-ws": "0.0.0", - "levelup": "1.3.9", - "memdown": "1.4.1", - "readable-stream": "2.3.6", - "rlp": "2.0.0", - "semaphore": "1.1.0" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } - } - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "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 - }, - "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" - } - }, - "mimic-response": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", - "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "0.1.1" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "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=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "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=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } - }, - "mocha": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.1.tgz", - "integrity": "sha512-kKKs/H1KrMMQIEsWNxGmb4/BGsmj0dkeyotEvbrAuQ01FcWRLssUNXCEUZk6SZtyJBi6EE7SL0zDDtItw1rGhw==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "4.4.0" - }, - "dependencies": { - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "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" - } - }, - "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", - "dev": true - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "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" - } - } - } - }, - "mock-fs": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.5.0.tgz", - "integrity": "sha512-qqudNfOX7ZmX9vm1WIAU+gWlmxVNAnwY6UG3RkFutNywmRCUGP83tujP6IxX2DS1TmcaEZBOhYwDuYEmJYE+3w==", - "dev": true - }, - "mout": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz", - "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=", - "dev": true - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "requires": { - "any-promise": "1.3.0", - "object-assign": "4.1.1", - "thenify-all": "1.6.0" - } - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - }, - "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=", - "dev": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" - } - }, - "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.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.3" - } - }, - "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=", - "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=", - "dev": true, - "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=", - "dev": true - } - } - }, - "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 - }, - "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 - }, - "object-inspect": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.5.0.tgz", - "integrity": "sha512-UmOFbHbwvv+XHj7BerrhVq+knjceBdkvU5AriwLMvhv2qi+e7DJzxfBeFpILEjVzCp+xA+W/pIf06RGPWlZNfw==", - "dev": true - }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", - "dev": true - }, - "oboe": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.3.tgz", - "integrity": "sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=", - "dev": true, - "requires": { - "http-https": "1.0.0" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "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=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "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=", - "dev": true, - "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==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "dev": true, - "requires": { - "p-finally": "1.0.0" - } - }, - "parse-asn1": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", - "dev": true, - "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.16" - } - }, - "parse-headers": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", - "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", - "dev": true, - "requires": { - "for-each": "0.3.2", - "trim": "0.0.1" - } - }, - "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" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "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" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "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-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=", - "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=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "pbkdf2": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", - "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", - "dev": true, - "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "prepend-file": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/prepend-file/-/prepend-file-1.3.1.tgz", - "integrity": "sha1-g7FuC0rBkB/OiNvZRaIvTMgd9Xk=", - "dev": true, - "requires": { - "tmp": "0.0.31" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "dev": true - }, - "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 - }, - "promise-to-callback": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", - "integrity": "sha1-XSp0kBC/tn2WNZj805YHRqaP7vc=", - "dev": true, - "requires": { - "is-fn": "1.0.0", - "set-immediate-shim": "1.0.1" - } - }, - "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", - "dev": true, - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.6.0" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "public-encrypt": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", - "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6" - } - }, - "pull-cat": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/pull-cat/-/pull-cat-1.1.11.tgz", - "integrity": "sha1-tkLdElXaN2pwa220+pYvX9t0wxs=", - "dev": true - }, - "pull-defer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/pull-defer/-/pull-defer-0.2.2.tgz", - "integrity": "sha1-CIew/7MK8ypW2+z6csFnInHwexM=", - "dev": true - }, - "pull-level": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pull-level/-/pull-level-2.0.4.tgz", - "integrity": "sha512-fW6pljDeUThpq5KXwKbRG3X7Ogk3vc75d5OQU/TvXXui65ykm+Bn+fiktg+MOx2jJ85cd+sheufPL+rw9QSVZg==", - "dev": true, - "requires": { - "level-post": "1.0.7", - "pull-cat": "1.1.11", - "pull-live": "1.0.1", - "pull-pushable": "2.2.0", - "pull-stream": "3.6.8", - "pull-window": "2.1.4", - "stream-to-pull-stream": "1.7.2" - } - }, - "pull-live": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pull-live/-/pull-live-1.0.1.tgz", - "integrity": "sha1-pOzuAeMwFV6RJLu89HYfIbOPUfU=", - "dev": true, - "requires": { - "pull-cat": "1.1.11", - "pull-stream": "3.6.8" - } - }, - "pull-pushable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pull-pushable/-/pull-pushable-2.2.0.tgz", - "integrity": "sha1-Xy867UethpGfAbEqLpnW8b13ZYE=", - "dev": true - }, - "pull-stream": { - "version": "3.6.8", - "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.8.tgz", - "integrity": "sha512-wQUIptQBcM0rFsUhZoEpOT3vUn73DtTGVq3NQ86c4T7iMOSprDzeKWYq2ksXnbwiuExTKvt+8G9fzNLFQuiO+A==", - "dev": true - }, - "pull-window": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/pull-window/-/pull-window-2.1.4.tgz", - "integrity": "sha1-/DuG/uvRkgx64pdpHiP3BfiFUvA=", - "dev": true, - "requires": { - "looper": "2.0.0" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "decode-uri-component": "0.2.0", - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" - } - }, - "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" - } - }, - "randomhex": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=", - "dev": true - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.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=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - } - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" - } - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - } - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.7.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", - "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.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" - }, - "dependencies": { - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "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=", - "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=", - "dev": true - }, - "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, - "resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", - "dev": true, - "requires": { - "through": "2.3.8" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.1" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - } - }, - "rlp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.0.0.tgz", - "integrity": "sha1-nbOE/0uJqPYVY9kjldhiWxjzr7A=" - }, - "rustbn.js": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.1.2.tgz", - "integrity": "sha512-bAkNqSHYdJdFsBC7Z11JgzYktL31HIpB2o70jZcGiL1U1TVtPyvaVhDrGWwS8uZtaqwW2k6NOPGZCqW/Dgh5Lg==", - "dev": true - }, - "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==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "scrypt": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", - "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", - "dev": true, - "requires": { - "nan": "2.10.0" - } - }, - "scrypt.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", - "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", - "dev": true, - "requires": { - "scrypt": "6.0.3", - "scryptsy": "1.2.1" - } - }, - "scryptsy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", - "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", - "dev": true, - "requires": { - "pbkdf2": "3.0.16" - } - }, - "secp256k1": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz", - "integrity": "sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==", - "requires": { - "bindings": "1.3.0", - "bip66": "1.1.5", - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "drbg.js": "1.0.1", - "elliptic": "6.4.0", - "nan": "2.10.0", - "safe-buffer": "5.1.2" - } - }, - "seedrandom": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", - "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=", - "dev": true - }, - "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=", - "dev": true, - "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=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - } - } - }, - "semaphore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", - "dev": true - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" - }, - "dependencies": { - "debug": { - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dev": true, - "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==", - "dev": true, - "requires": { - "body-parser": "1.18.3", - "cors": "2.8.4", - "express": "4.16.3", - "request": "2.87.0", - "xhr": "2.5.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "sha3": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz", - "integrity": "sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=", - "dev": true, - "requires": { - "nan": "2.10.0" - } - }, - "shebang-loader": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shebang-loader/-/shebang-loader-0.0.1.tgz", - "integrity": "sha1-pAAEldRMzu++xjQ157FphWn6Uuw=", - "dev": true - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", - "dev": true - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "dev": true, - "requires": { - "decompress-response": "3.3.0", - "once": "1.4.0", - "simple-concat": "1.0.0" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "solc": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.18.tgz", - "integrity": "sha512-Kq+O3PNF9Pfq7fB+lDYAuoqRdghLmZyfngsg0h1Hj38NKAeVHeGPOGeZasn5KqdPeCzbMFvaGyTySxzGv6aXCg==", - "dev": true, - "requires": { - "fs-extra": "0.30.0", - "memorystream": "0.3.1", - "require-from-string": "1.2.1", - "semver": "5.4.1", - "yargs": "4.8.1" - }, - "dependencies": { - "yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", - "dev": true, - "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" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "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-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "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-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==", - "dev": true - }, - "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" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stream-to-pull-stream": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/stream-to-pull-stream/-/stream-to-pull-stream-1.7.2.tgz", - "integrity": "sha1-dXYJrhzr0zx0MtSvvjH/eGULnd4=", - "dev": true, - "requires": { - "looper": "3.0.0", - "pull-stream": "3.6.8" - }, - "dependencies": { - "looper": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/looper/-/looper-3.0.0.tgz", - "integrity": "sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k=", - "dev": true - } - } - }, - "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=", - "dev": true - }, - "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.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "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=", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.12.0", - "function-bind": "1.1.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "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" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "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==", - "dev": true, - "requires": { - "is-natural-number": "4.0.1" - } - }, - "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=", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "supports-color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", - "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - }, - "swarm-js": { - "version": "0.1.37", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.37.tgz", - "integrity": "sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "buffer": "5.1.0", - "decompress": "4.2.0", - "eth-lib": "0.1.27", - "fs-extra": "2.1.2", - "fs-promise": "2.0.3", - "got": "7.1.0", - "mime-types": "2.1.18", - "mkdirp-promise": "5.0.1", - "mock-fs": "4.5.0", - "setimmediate": "1.0.5", - "tar.gz": "1.0.7", - "xhr-request-promise": "0.1.2" - }, - "dependencies": { - "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0" - } - } - } - }, - "tape": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.9.0.tgz", - "integrity": "sha512-j0jO9BiScfqtPBb9QmPLL0qvxXMz98xjkMb7x8lKipFlJZwNJkqkWPou+NU4V6T9RnVh1kuSthLE8gLrN8bBfw==", - "dev": true, - "requires": { - "deep-equal": "1.0.1", - "defined": "1.0.0", - "for-each": "0.3.2", - "function-bind": "1.1.1", - "glob": "7.1.2", - "has": "1.0.1", - "inherits": "2.0.3", - "minimist": "1.2.0", - "object-inspect": "1.5.0", - "resolve": "1.5.0", - "resumer": "0.0.0", - "string.prototype.trim": "1.1.2", - "through": "2.3.8" - }, - "dependencies": { - "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" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", - "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", - "dev": true, - "requires": { - "bl": "1.2.2", - "buffer-alloc": "1.2.0", - "end-of-stream": "1.4.1", - "fs-constants": "1.0.0", - "readable-stream": "2.3.6", - "to-buffer": "1.1.1", - "xtend": "4.0.1" - }, - "dependencies": { - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "dev": true, - "requires": { - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2" - } - } - } - }, - "tar.gz": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/tar.gz/-/tar.gz-1.0.7.tgz", - "integrity": "sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==", - "dev": true, - "requires": { - "bluebird": "2.11.0", - "commander": "2.9.0", - "fstream": "1.0.11", - "mout": "0.11.1", - "tar": "2.2.1" - }, - "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - } - } - }, - "temp": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", - "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "rimraf": "2.2.8" - }, - "dependencies": { - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - } - } - }, - "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "dev": true, - "requires": { - "any-promise": "1.3.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, - "requires": { - "thenify": "3.3.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "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=", - "dev": true - }, - "tiny-queue": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.0.tgz", - "integrity": "sha1-xJ/LXIdVW+G0pd9+uHEB1beLydw=", - "dev": true - }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "dev": true, - "requires": { - "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==", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "truffle-blockchain-utils": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.4.tgz", - "integrity": "sha512-wgRrhwqh0aea08Hz28hUV4tuF2uTVQH/e9kBou+WK04cqrutB5cxQVQ6HGjeZLltxBYOFvhrGOOq4l3WJFnPEA==", - "dev": true - }, - "truffle-contract": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/truffle-contract/-/truffle-contract-3.0.5.tgz", - "integrity": "sha512-lRayhvX73OrLJ6TDvc0iYbzcB+Y1F9FCj9N1FXQ2EKOkqyIjmgZNMZFHGjvfTws1gsmonYd6sND0ahipiUYy8g==", - "dev": true, - "requires": { - "ethjs-abi": "0.1.8", - "truffle-blockchain-utils": "0.0.4", - "truffle-contract-schema": "2.0.0", - "truffle-error": "0.0.2", - "web3": "0.20.6" - } + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, - "truffle-contract-schema": { + "get-func-name": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/truffle-contract-schema/-/truffle-contract-schema-2.0.0.tgz", - "integrity": "sha512-nLlspmu1GKDaluWksBwitHi/7Z3IpRjmBYeO9N+T1nVJD2V4IWJaptCKP1NqnPiJA+FChB7+F7pI6Br51/FtXQ==", - "dev": true, - "requires": { - "ajv": "5.5.2", - "crypto-js": "3.1.9-1", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "truffle-error": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/truffle-error/-/truffle-error-0.0.2.tgz", - "integrity": "sha1-AbGJt4UFVmrhaJwjnHyi3RIc/kw=", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "requires": { + "inherits": "2.0.3", "safe-buffer": "5.1.2" } }, - "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 - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "dev": true, + "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==", "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.18" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, - "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==", - "dev": true, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "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=", "requires": { - "is-typedarray": "1.0.0" + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, - "typewise": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", - "integrity": "sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE=", + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "typewise-core": "1.2.0" + "once": "1.4.0", + "wrappy": "1.0.2" } }, - "typewise-core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", - "integrity": "sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU=", - "dev": true + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "typewiselite": { + "is-hex-prefixed": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typewiselite/-/typewiselite-1.0.0.tgz", - "integrity": "sha1-yIgvobsQksBgBal/NO9chQjjZk4=", - "dev": true + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "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 }, - "unbzip2-stream": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz", - "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==", - "dev": true, + "keccak": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", + "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", "requires": { - "buffer": "3.6.0", - "through": "2.3.8" - }, - "dependencies": { - "base64-js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=", - "dev": true - }, - "buffer": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", - "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", - "dev": true, - "requires": { - "base64-js": "0.0.8", - "ieee754": "1.1.11", - "isarray": "1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } + "bindings": "1.3.0", + "inherits": "2.0.3", + "nan": "2.10.0", + "safe-buffer": "5.1.2" } }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true - }, - "unorm": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", - "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "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=", - "dev": true, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "requires": { - "prepend-http": "1.0.4" + "hash-base": "3.0.4", + "inherits": "2.0.3" } }, - "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=", - "dev": true - }, - "url-to-options": { + "minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true - }, - "utf8": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", - "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "utils-merge": { + "minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, - "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==", + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "brace-expansion": "1.1.11" } }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "minimist": "0.0.8" } }, - "web3": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/web3/-/web3-0.20.6.tgz", - "integrity": "sha1-PpcwauAk+yThCj11yIQwJWIhUSA=", + "mocha": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.1.tgz", + "integrity": "sha512-kKKs/H1KrMMQIEsWNxGmb4/BGsmj0dkeyotEvbrAuQ01FcWRLssUNXCEUZk6SZtyJBi6EE7SL0zDDtItw1rGhw==", "dev": true, "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" + "browser-stdout": "1.3.1", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" }, "dependencies": { - "bignumber.js": { - "version": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934", + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "crypto-js": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", - "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=", + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", "dev": true - } - } - }, - "web3-bzz": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.34.tgz", - "integrity": "sha1-Bo03d3q2Xlxg+OyLmlDP5FJ3kpw=", - "dev": true, - "requires": { - "got": "7.1.0", - "swarm-js": "0.1.37", - "underscore": "1.8.3" - } - }, - "web3-core": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.34.tgz", - "integrity": "sha1-EhvoVV6fsA0sXQXd0zgdDJ5GmH4=", - "dev": true, - "requires": { - "web3-core-helpers": "1.0.0-beta.34", - "web3-core-method": "1.0.0-beta.34", - "web3-core-requestmanager": "1.0.0-beta.34", - "web3-utils": "1.0.0-beta.34" - } - }, - "web3-core-helpers": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.34.tgz", - "integrity": "sha1-sWjaANPhnhVrwVriAyA91N/uLQM=", - "dev": true, - "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.34", - "web3-utils": "1.0.0-beta.34" - } - }, - "web3-core-method": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.34.tgz", - "integrity": "sha1-7BY8iixJD6AqfsFVWfpzB/x8xt0=", - "dev": true, - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.34", - "web3-core-promievent": "1.0.0-beta.34", - "web3-core-subscriptions": "1.0.0-beta.34", - "web3-utils": "1.0.0-beta.34" - } - }, - "web3-core-promievent": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.34.tgz", - "integrity": "sha1-pPT6Z4S7KT6CxglgrltWqUzQPtw=", - "dev": true, - "requires": { - "any-promise": "1.3.0", - "eventemitter3": "1.1.1" - } - }, - "web3-core-requestmanager": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.34.tgz", - "integrity": "sha1-Afj2zyrmtvC3DDi64e90G1urIVw=", - "dev": true, - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.34", - "web3-providers-http": "1.0.0-beta.34", - "web3-providers-ipc": "1.0.0-beta.34", - "web3-providers-ws": "1.0.0-beta.34" - } - }, - "web3-core-subscriptions": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.34.tgz", - "integrity": "sha1-n+0UQDPyIcPPIQYDAv/a9e8t4t4=", - "dev": true, - "requires": { - "eventemitter3": "1.1.1", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.34" - } - }, - "web3-eth": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.34.tgz", - "integrity": "sha1-dAhgAIUMb+b1Ne9Jg31tS7YRMmg=", - "dev": true, - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.34", - "web3-core-helpers": "1.0.0-beta.34", - "web3-core-method": "1.0.0-beta.34", - "web3-core-subscriptions": "1.0.0-beta.34", - "web3-eth-abi": "1.0.0-beta.34", - "web3-eth-accounts": "1.0.0-beta.34", - "web3-eth-contract": "1.0.0-beta.34", - "web3-eth-iban": "1.0.0-beta.34", - "web3-eth-personal": "1.0.0-beta.34", - "web3-net": "1.0.0-beta.34", - "web3-utils": "1.0.0-beta.34" - } - }, - "web3-eth-abi": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.34.tgz", - "integrity": "sha1-A0Uz46ovfln/MXk+rqaFwO1a9no=", - "dev": true, - "requires": { - "bn.js": "4.11.6", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.34", - "web3-utils": "1.0.0-beta.34" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true - } - } - }, - "web3-eth-accounts": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.34.tgz", - "integrity": "sha1-4JFC7uzHl6w0WbdemyOUbTaV8zM=", - "dev": true, - "requires": { - "any-promise": "1.3.0", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.7", - "scrypt.js": "0.2.0", - "underscore": "1.8.3", - "uuid": "2.0.1", - "web3-core": "1.0.0-beta.34", - "web3-core-helpers": "1.0.0-beta.34", - "web3-core-method": "1.0.0-beta.34", - "web3-utils": "1.0.0-beta.34" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0", - "xhr-request-promise": "0.1.2" + "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" } }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=", + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "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" + } } } }, - "web3-eth-contract": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.34.tgz", - "integrity": "sha1-nbs4+udkOoCEJ6IBgEcOx0FckeY=", - "dev": true, - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.34", - "web3-core-helpers": "1.0.0-beta.34", - "web3-core-method": "1.0.0-beta.34", - "web3-core-promievent": "1.0.0-beta.34", - "web3-core-subscriptions": "1.0.0-beta.34", - "web3-eth-abi": "1.0.0-beta.34", - "web3-utils": "1.0.0-beta.34" - } + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" }, - "web3-eth-iban": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.34.tgz", - "integrity": "sha1-mvRYYFhnzPdOqXmq8yazi6alugw=", + "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=", "dev": true, "requires": { "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.34" + "strip-hex-prefix": "1.0.0" }, "dependencies": { "bn.js": { @@ -5750,174 +514,166 @@ } } }, - "web3-eth-personal": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.34.tgz", - "integrity": "sha1-mvuhZzQuveVCC81YlcP2w0OI8gU=", + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "web3-core": "1.0.0-beta.34", - "web3-core-helpers": "1.0.0-beta.34", - "web3-core-method": "1.0.0-beta.34", - "web3-net": "1.0.0-beta.34", - "web3-utils": "1.0.0-beta.34" + "wrappy": "1.0.2" } }, - "web3-net": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.34.tgz", - "integrity": "sha1-QnzqL0MYgUScjjjVIykPFz+f9j0=", - "dev": true, - "requires": { - "web3-core": "1.0.0-beta.34", - "web3-core-method": "1.0.0-beta.34", - "web3-utils": "1.0.0-beta.34" - } + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, - "web3-provider-engine": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-13.8.0.tgz", - "integrity": "sha512-fZXhX5VWwWpoFfrfocslyg6P7cN3YWPG/ASaevNfeO80R+nzgoPUBXcWQekSGSsNDkeRTis4aMmpmofYf1TNtQ==", - "dev": true, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { - "async": "2.6.1", - "clone": "2.1.1", - "eth-block-tracker": "2.3.1", - "eth-sig-util": "1.4.2", - "ethereumjs-block": "1.2.2", - "ethereumjs-tx": "1.3.4", - "ethereumjs-util": "5.2.0", - "ethereumjs-vm": "2.3.3", - "fetch-ponyfill": "4.1.0", - "json-rpc-error": "2.0.0", - "json-stable-stringify": "1.0.1", - "promise-to-callback": "1.0.0", - "readable-stream": "2.3.6", - "request": "2.87.0", - "semaphore": "1.1.0", - "solc": "0.4.18", - "tape": "4.9.0", - "xhr": "2.5.0", - "xtend": "4.0.1" + "hash-base": "3.0.4", + "inherits": "2.0.3" } }, - "web3-providers-http": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.34.tgz", - "integrity": "sha1-5WG1K7tDdmKCAH1AKFv+NVDCfno=", - "dev": true, + "rlp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.0.0.tgz", + "integrity": "sha1-nbOE/0uJqPYVY9kjldhiWxjzr7A=" + }, + "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==" + }, + "secp256k1": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz", + "integrity": "sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==", "requires": { - "web3-core-helpers": "1.0.0-beta.34", - "xhr2": "0.1.4" + "bindings": "1.3.0", + "bip66": "1.1.5", + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "drbg.js": "1.0.1", + "elliptic": "6.4.0", + "nan": "2.10.0", + "safe-buffer": "5.1.2" } }, - "web3-providers-ipc": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.34.tgz", - "integrity": "sha1-obd/GjBtc2SanAOQUuQMtxMo0Ao=", - "dev": true, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { - "oboe": "2.1.3", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.34" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, - "web3-providers-ws": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.34.tgz", - "integrity": "sha1-fecPG4Py3jZHZ3IVa+z+9uNRbrM=", - "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=", "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.34", - "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" - }, - "dependencies": { - "websocket": { - "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "dev": true, - "requires": { - "debug": "2.6.0", - "nan": "2.10.0", - "typedarray-to-buffer": "3.1.5", - "yaeti": "0.0.6" - } - } + "is-hex-prefixed": "1.0.0" } }, - "web3-shh": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.34.tgz", - "integrity": "sha1-l1Bh1x6uxCzO5Xb3vY9w8DhEr+A=", + "truffle-blockchain-utils": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.4.tgz", + "integrity": "sha512-wgRrhwqh0aea08Hz28hUV4tuF2uTVQH/e9kBou+WK04cqrutB5cxQVQ6HGjeZLltxBYOFvhrGOOq4l3WJFnPEA==", + "dev": true + }, + "truffle-contract": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/truffle-contract/-/truffle-contract-3.0.5.tgz", + "integrity": "sha512-lRayhvX73OrLJ6TDvc0iYbzcB+Y1F9FCj9N1FXQ2EKOkqyIjmgZNMZFHGjvfTws1gsmonYd6sND0ahipiUYy8g==", "dev": true, "requires": { - "web3-core": "1.0.0-beta.34", - "web3-core-method": "1.0.0-beta.34", - "web3-core-subscriptions": "1.0.0-beta.34", - "web3-net": "1.0.0-beta.34" + "ethjs-abi": "0.1.8", + "truffle-blockchain-utils": "0.0.4", + "truffle-contract-schema": "2.0.0", + "truffle-error": "0.0.2", + "web3": "0.20.6" } }, - "web3-utils": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.34.tgz", - "integrity": "sha1-lBH8OarvOcpOBhafdiKX2f8CCXA=", + "truffle-contract-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/truffle-contract-schema/-/truffle-contract-schema-2.0.0.tgz", + "integrity": "sha512-nLlspmu1GKDaluWksBwitHi/7Z3IpRjmBYeO9N+T1nVJD2V4IWJaptCKP1NqnPiJA+FChB7+F7pI6Br51/FtXQ==", "dev": true, "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" + "ajv": "5.5.2", + "crypto-js": "3.1.9-1", + "debug": "3.1.0" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "dev": true + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, - "websocket": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.26.tgz", - "integrity": "sha512-fjcrYDPIQxpTnqFQ9JjxUQcdvR89MFAOjPBlF+vjOt49w/XW4fJknUoMz/mDIn2eK1AdslVojcaOxOqyZZV8rw==", - "dev": true, - "requires": { - "debug": "2.6.0", - "nan": "2.10.0", - "typedarray-to-buffer": "3.1.5", - "yaeti": "0.0.6" - } + "truffle-error": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/truffle-error/-/truffle-error-0.0.2.tgz", + "integrity": "sha1-AbGJt4UFVmrhaJwjnHyi3RIc/kw=", + "dev": true }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=", "dev": true }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "web3": { + "version": "0.20.6", + "resolved": "https://registry.npmjs.org/web3/-/web3-0.20.6.tgz", + "integrity": "sha1-PpcwauAk+yThCj11yIQwJWIhUSA=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "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" + }, + "dependencies": { + "bignumber.js": { + "version": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934", + "dev": true + }, + "crypto-js": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", + "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=", + "dev": true + } } }, "wrappy": { @@ -5926,53 +682,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2", - "ultron": "1.1.1" - } - }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "dev": true, - "requires": { - "global": "4.3.2", - "is-function": "1.0.1", - "parse-headers": "2.0.1", - "xtend": "4.0.1" - } - }, - "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==", - "dev": true, - "requires": { - "buffer-to-arraybuffer": "0.0.5", - "object-assign": "4.1.1", - "query-string": "5.1.1", - "simple-get": "2.8.1", - "timed-out": "4.0.1", - "url-set-query": "1.0.0", - "xhr": "2.5.0" - } - }, - "xhr-request-promise": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", - "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", - "dev": true, - "requires": { - "xhr-request": "1.1.0" - } - }, "xhr2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", @@ -5984,76 +693,6 @@ "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "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=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "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", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" - }, - "dependencies": { - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - } - } - } - }, - "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "lodash.assign": "4.2.0" - } - }, - "yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", - "dev": true, - "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.0.1" - } } } } diff --git a/package.json b/package.json index 580eba7..e12d8e5 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "homepage": "https://github.com/ethereum-alarm-clock/eac.js-lib#readme", "devDependencies": { "@digix/tempo": "0.2.0", + "@types/node": "^10.5.3", "chai": "4.1.2", "ganache-core": "2.1.2", "mocha": "5.1.1", diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..3760477 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,59 @@ +{ + "compilerOptions": { + /* Basic Options */ + "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + "lib": ["es2015"], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + // "outDir": "./", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + + /* Source Map Options */ + // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + } +} \ No newline at end of file From 18dd5bfe94154f411a4f6f7db7139c8b46feaf3b Mon Sep 17 00:00:00 2001 From: lsaether Date: Fri, 27 Jul 2018 13:41:52 +0300 Subject: [PATCH 02/24] request factory --- lib/requestFactory/index.ts | 60 ++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/lib/requestFactory/index.ts b/lib/requestFactory/index.ts index 289f459..778a2ef 100644 --- a/lib/requestFactory/index.ts +++ b/lib/requestFactory/index.ts @@ -1,11 +1,11 @@ /* eslint class-methods-use-this: "off" */ -import * as initUtil from '../util'; - -const Util = initUtil(); +import initUtil from '../util'; type Address = string; +const Util = new initUtil(null); + export default class RequestFactory { public instance: any; public web3: any; @@ -38,13 +38,13 @@ export default class RequestFactory { }) } - validateRequestParams(addressArgs, uintArgs, endowment) { + validateRequestParams(addressArgs: string[], uintArgs: number[], endowment: number) { return new Promise((resolve, reject) => { this.instance.validateRequestParams.call( addressArgs, uintArgs, endowment, - (err, isValid) => { + (err: any, isValid: any) => { if (!err) resolve(isValid) else reject(err) } @@ -59,7 +59,7 @@ export default class RequestFactory { * @return {Array} An array of the strings of validation errors or an * array of length 0 if no errors. */ - parseIsValid(isValid) { + parseIsValid(isValid: boolean[]): string[] { if (isValid.length != 6) { throw new Error("Must pass an array of booleans returned by validateRequestParams()") } @@ -71,7 +71,7 @@ export default class RequestFactory { "CallGasTooHigh", "EmptyToAddress", ] - const errors = [] + const errors = [] as string[]; isValid.forEach((boolIsTrue, index) => { if (!boolIsTrue) { errors.push(Errors[index]) @@ -80,17 +80,17 @@ export default class RequestFactory { return errors } - async getRequestCreatedLogs(filter, startBlock, endBlock) { + async getRequestCreatedLogs(filter: any, startBlockNum: number, endBlockNum: number): Promise { const f = filter || {} const curBlock = await Util.getBlockNumber(this.web3) - const start = startBlock || 1 - const end = endBlock || "latest" + const start = startBlockNum || 1 + const end = endBlockNum || "latest" const event = this.instance.RequestCreated( f, { fromBlock: start, toBlock: end } ) return new Promise((resolve, reject) => { - event.get((err, logs) => { + event.get((err: any, logs: any[]) => { if (!err) { resolve(logs) } else reject(err) @@ -98,10 +98,10 @@ export default class RequestFactory { }) } - async watchRequestCreatedLogs(filter, startBlock, callback) { + watchRequestCreatedLogs(filter: any, startBlockNum: any, callback: Function): any { const f = filter || {} const curBlock = await Util.getBlockNumber(this.web3) - const start = startBlock || 1 + const start = startBlockNum || 1 const event = this.instance.RequestCreated( f, { fromBlock: start, toBlock: 'latest' } @@ -112,7 +112,7 @@ export default class RequestFactory { return event; } - async stopWatch(event) { + async stopWatch(event: any): Promise<{}> { return new Promise((resolve, reject) => { event.stopWatching( (err, res) => { if (!err) { @@ -122,11 +122,11 @@ export default class RequestFactory { }) } - async getRequestsByBucket(bucket) { + async getRequestsByBucket(bucket: any): Promise { const logs = await this.getRequestCreatedLogs({ bucket, - }, '', '') - const requests = [] + }, 0, 0) + const requests = [] as any[]; logs.forEach((log) => { requests.push({ address: log.args.request, @@ -136,11 +136,11 @@ export default class RequestFactory { return requests } - async watchRequestsByBucket(bucket, cb) { + async watchRequestsByBucket(bucket: any, cb: any): any { return await this.watchRequestCreatedLogs({ bucket, }, '', - (error,log) => { + (error: any, log: any) => { if (log) { cb({ address: log.args.request, @@ -151,7 +151,7 @@ export default class RequestFactory { } // Assume the temporalUnit is blocks if not timestamp. - calcBucket(windowStart, temporalUnit) { + calcBucket(windowStart: number, temporalUnit: number) { let bucketSize = 240 // block bucketsize let sign = -1 // block sign @@ -163,39 +163,39 @@ export default class RequestFactory { return sign * (windowStart - (windowStart % bucketSize)) } - async getRequests(startBlock, endBlock) { + async getRequests(startBlock: number, endBlock: number) { const logs = await this.getRequestCreatedLogs({}, startBlock, endBlock) - const requests = [] - logs.forEach((log) => { + const requests = [] as any[]; + logs.forEach((log: any) => { requests.push(log.args.request) }) return requests } - async watchRequests(startBlock, callback) { + async watchRequests(startBlock: number, callback: Function) { return await this.watchRequestCreatedLogs({}, startBlock, - (error,log) => { + (error: any, log: any) => { if (log) { callback(log.args.request); } }); } - async getRequestsByOwner(owner, startBlock, endBlock) { + async getRequestsByOwner(owner: string, startBlock: number, endBlock: number) { const logs = await this.getRequestCreatedLogs({ owner, }, startBlock, endBlock) - const requests = [] - logs.forEach((log) => { + const requests = [] as any[]; + logs.forEach((log: any) => { requests.push(log.args.request) }) return requests } - async watchRequestsByOwner(owner, startBlock, callback) { + async watchRequestsByOwner(owner: string, startBlock: number, callback: Function): any { return await this.watchRequestCreatedLogs({ owner, - }, startBlock, (error,log) => { + }, startBlock, (error: any, log: any) => { if (log) { callback(log.args.request) } From 3cf6aa54eeef2c9f4922ff9392fd5eacb00d8b02 Mon Sep 17 00:00:00 2001 From: lsaether Date: Fri, 27 Jul 2018 15:45:38 +0300 Subject: [PATCH 03/24] intermittent push --- lib/global.d.ts | 4 +- lib/requestFactory/index.ts | 108 +++---- lib/scheduling/{index.js => index.ts} | 94 +++--- lib/scheduling/testTx.js | 45 --- lib/txRequest/index.js | 1 - lib/txRequest/index.ts | 1 + lib/txRequest/requestData.js | 78 ----- lib/txRequest/requestData.ts | 134 ++++++++ lib/txRequest/{txRequest.js => txRequest.ts} | 302 ++++++++++--------- lib/util.ts | 78 ++--- tslint.json | 8 + 11 files changed, 440 insertions(+), 413 deletions(-) rename lib/scheduling/{index.js => index.ts} (73%) delete mode 100644 lib/scheduling/testTx.js delete mode 100644 lib/txRequest/index.js create mode 100644 lib/txRequest/index.ts delete mode 100644 lib/txRequest/requestData.js create mode 100644 lib/txRequest/requestData.ts rename lib/txRequest/{txRequest.js => txRequest.ts} (56%) create mode 100644 tslint.json diff --git a/lib/global.d.ts b/lib/global.d.ts index 04096af..febae77 100644 --- a/lib/global.d.ts +++ b/lib/global.d.ts @@ -1,2 +1,2 @@ -declare module 'ethereumjs-util'; -declare module 'web3'; \ No newline at end of file +declare module "ethereumjs-util"; +declare module "web3"; \ No newline at end of file diff --git a/lib/requestFactory/index.ts b/lib/requestFactory/index.ts index 778a2ef..cbb0eab 100644 --- a/lib/requestFactory/index.ts +++ b/lib/requestFactory/index.ts @@ -1,6 +1,6 @@ /* eslint class-methods-use-this: "off" */ -import initUtil from '../util'; +import initUtil from "../util"; type Address = string; @@ -32,10 +32,10 @@ export default class RequestFactory { isKnownRequest(requestAddress: Address) { return new Promise((resolve, reject) => { this.instance.isKnownRequest.call(requestAddress, (err, isKnown) => { - if (!err) resolve(isKnown) - else reject(err) - }) - }) + if (!err) resolve(isKnown); + else reject(err); + }); + }); } validateRequestParams(addressArgs: string[], uintArgs: number[], endowment: number) { @@ -45,11 +45,11 @@ export default class RequestFactory { uintArgs, endowment, (err: any, isValid: any) => { - if (!err) resolve(isValid) - else reject(err) - } - ) - }) + if (!err) resolve(isValid); + else reject(err); + }, + ); + }); } /** @@ -61,7 +61,7 @@ export default class RequestFactory { */ parseIsValid(isValid: boolean[]): string[] { if (isValid.length != 6) { - throw new Error("Must pass an array of booleans returned by validateRequestParams()") + throw new Error("Must pass an array of booleans returned by validateRequestParams()"); } const Errors = [ "InsufficientEndowment", @@ -70,44 +70,44 @@ export default class RequestFactory { "ExecutionWindowTooSoon", "CallGasTooHigh", "EmptyToAddress", - ] + ]; const errors = [] as string[]; isValid.forEach((boolIsTrue, index) => { if (!boolIsTrue) { - errors.push(Errors[index]) + errors.push(Errors[index]); } - }) - return errors + }); + return errors; } async getRequestCreatedLogs(filter: any, startBlockNum: number, endBlockNum: number): Promise { - const f = filter || {} - const curBlock = await Util.getBlockNumber(this.web3) - const start = startBlockNum || 1 - const end = endBlockNum || "latest" + const f = filter || {}; + const curBlock = await Util.getBlockNumber(this.web3); + const start = startBlockNum || 1; + const end = endBlockNum || "latest"; const event = this.instance.RequestCreated( f, - { fromBlock: start, toBlock: end } - ) + { fromBlock: start, toBlock: end }, + ); return new Promise((resolve, reject) => { event.get((err: any, logs: any[]) => { if (!err) { - resolve(logs) - } else reject(err) - }) - }) + resolve(logs); + } else reject(err); + }); + }); } watchRequestCreatedLogs(filter: any, startBlockNum: any, callback: Function): any { - const f = filter || {} - const curBlock = await Util.getBlockNumber(this.web3) - const start = startBlockNum || 1 + const f = filter || {}; + const curBlock = await Util.getBlockNumber(this.web3); + const start = startBlockNum || 1; const event = this.instance.RequestCreated( f, - { fromBlock: start, toBlock: 'latest' } + { fromBlock: start, toBlock: "latest" }, ); - event.watch(function(e,r){ - callback(e,r); + event.watch(function(e, r){ + callback(e, r); }); return event; } @@ -116,30 +116,30 @@ export default class RequestFactory { return new Promise((resolve, reject) => { event.stopWatching( (err, res) => { if (!err) { - resolve(res) - } else reject(err) - }) - }) + resolve(res); + } else reject(err); + }); + }); } async getRequestsByBucket(bucket: any): Promise { const logs = await this.getRequestCreatedLogs({ bucket, - }, 0, 0) + }, 0, 0); const requests = [] as any[]; logs.forEach((log) => { requests.push({ address: log.args.request, params: log.args.params, - }) - }) - return requests + }); + }); + return requests; } async watchRequestsByBucket(bucket: any, cb: any): any { return await this.watchRequestCreatedLogs({ bucket, - }, '', + }, "", (error: any, log: any) => { if (log) { cb({ @@ -152,24 +152,24 @@ export default class RequestFactory { // Assume the temporalUnit is blocks if not timestamp. calcBucket(windowStart: number, temporalUnit: number) { - let bucketSize = 240 // block bucketsize - let sign = -1 // block sign + let bucketSize = 240; // block bucketsize + let sign = -1; // block sign if (temporalUnit == 2) { - bucketSize = 3600 // timestamp bucketsize - sign = 1 // timestamp sign + bucketSize = 3600; // timestamp bucketsize + sign = 1; // timestamp sign } - return sign * (windowStart - (windowStart % bucketSize)) + return sign * (windowStart - (windowStart % bucketSize)); } async getRequests(startBlock: number, endBlock: number) { - const logs = await this.getRequestCreatedLogs({}, startBlock, endBlock) + const logs = await this.getRequestCreatedLogs({}, startBlock, endBlock); const requests = [] as any[]; logs.forEach((log: any) => { - requests.push(log.args.request) - }) - return requests + requests.push(log.args.request); + }); + return requests; } async watchRequests(startBlock: number, callback: Function) { @@ -184,12 +184,12 @@ export default class RequestFactory { async getRequestsByOwner(owner: string, startBlock: number, endBlock: number) { const logs = await this.getRequestCreatedLogs({ owner, - }, startBlock, endBlock) + }, startBlock, endBlock); const requests = [] as any[]; logs.forEach((log: any) => { - requests.push(log.args.request) - }) - return requests + requests.push(log.args.request); + }); + return requests; } async watchRequestsByOwner(owner: string, startBlock: number, callback: Function): any { @@ -197,7 +197,7 @@ export default class RequestFactory { owner, }, startBlock, (error: any, log: any) => { if (log) { - callback(log.args.request) + callback(log.args.request); } }); } diff --git a/lib/scheduling/index.js b/lib/scheduling/index.ts similarity index 73% rename from lib/scheduling/index.js rename to lib/scheduling/index.ts index a99d835..e319fc3 100644 --- a/lib/scheduling/index.js +++ b/lib/scheduling/index.ts @@ -1,51 +1,51 @@ /* eslint class-methods-use-this: "off" */ -const BigNumber = require("bignumber.js") -const Util = require("../util")() +const BigNumber = require("bignumber.js"); +const Util = require("../util")(); class Scheduler { constructor(bSchedulerAddress, tSchedulerAddress, web3) { - this.web3 = web3 + this.web3 = web3; try { - const BlockSchedulerABI = Util.getABI("BlockScheduler") - const TimestampSchedulerABI = Util.getABI("TimestampScheduler") + const BlockSchedulerABI = Util.getABI("BlockScheduler"); + const TimestampSchedulerABI = Util.getABI("TimestampScheduler"); this.blockScheduler = web3.eth .contract(BlockSchedulerABI) - .at(bSchedulerAddress) + .at(bSchedulerAddress); this.timestampScheduler = web3.eth .contract(TimestampSchedulerABI) - .at(tSchedulerAddress) + .at(tSchedulerAddress); } catch (err) { - throw new Error(err) + throw new Error(err); } } getFactoryAddress() { return new Promise((resolve, reject) => { this.blockScheduler.factoryAddress.call((err, address) => { - if (!err) resolve(address) - else reject(err) - }) - }) + if (!err) resolve(address); + else reject(err); + }); + }); } initSender(opts) { - this.sender = opts.from - this.gasLimit = opts.gas - this.sendValue = opts.value + this.sender = opts.from; + this.gasLimit = opts.gas; + this.sendValue = opts.value; } setGas(gasLimit) { - this.gasLimit = gasLimit + this.gasLimit = gasLimit; } setSender(address) { // TODO verfiy with ethUtil - this.sender = address + this.sender = address; } setSendValue(value) { - this.sendValue = value + this.sendValue = value; } blockSchedule( @@ -59,7 +59,7 @@ class Scheduler { fee, bounty, requiredDeposit, - waitForMined = true + waitForMined = true, ) { return new Promise((resolve, reject) => { this.blockScheduler.schedule.sendTransaction( @@ -81,24 +81,24 @@ class Scheduler { value: this.sendValue, }, (err, txHash) => { - if (err) reject(err) + if (err) reject(err); else { const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash); if (waitForMined) { miningPromise - .then(receipt => resolve(receipt)) - .catch(e => reject(e)) + .then((receipt) => resolve(receipt)) + .catch((e) => reject(e)); } else { resolve({ transactionHash: txHash, - miningPromise + miningPromise, }); } } - } - ) - }) + }, + ); + }); } timestampSchedule( @@ -112,7 +112,7 @@ class Scheduler { fee, bounty, requiredDeposit, - waitForMined = true + waitForMined = true, ) { return new Promise((resolve, reject) => { this.timestampScheduler.schedule( @@ -134,24 +134,24 @@ class Scheduler { value: this.sendValue, }, (err, txHash) => { - if (err) reject(err) + if (err) reject(err); else { const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash); if (waitForMined) { miningPromise - .then(receipt => resolve(receipt)) - .catch(e => reject(e)) + .then((receipt) => resolve(receipt)) + .catch((e) => reject(e)); } else { resolve({ transactionHash: txHash, - miningPromise + miningPromise, }); } } - } - ) - }) + }, + ); + }); } /** @@ -165,17 +165,17 @@ class Scheduler { */ calcEndowment(callGas, callValue, gasPrice, fee, bounty) { // Convert the value to a bignumber works even if it's already one. - const callGasBN = new BigNumber(callGas) - const callValueBN = new BigNumber(callValue) - const gasPriceBN = new BigNumber(gasPrice) - const feeBN = new BigNumber(fee) - const bountyBN = new BigNumber(bounty) + const callGasBN = new BigNumber(callGas); + const callValueBN = new BigNumber(callValue); + const gasPriceBN = new BigNumber(gasPrice); + const feeBN = new BigNumber(fee); + const bountyBN = new BigNumber(bounty); return bountyBN .plus(feeBN.times(2)) .plus(callGasBN.times(gasPrice)) .plus(gasPriceBN.times(180000)) - .plus(callValueBN) + .plus(callValueBN); } /** @@ -189,17 +189,17 @@ class Scheduler { */ static calcEndowment(callGas, callValue, gasPrice, fee, bounty) { // Convert the value to a bignumber works even if it's already one. - const callGasBN = new BigNumber(callGas) - const callValueBN = new BigNumber(callValue) - const gasPriceBN = new BigNumber(gasPrice) - const feeBN = new BigNumber(fee) - const bountyBN = new BigNumber(bounty) + const callGasBN = new BigNumber(callGas); + const callValueBN = new BigNumber(callValue); + const gasPriceBN = new BigNumber(gasPrice); + const feeBN = new BigNumber(fee); + const bountyBN = new BigNumber(bounty); return bountyBN .plus(feeBN.times(2)) .plus(callGasBN.times(gasPrice)) .plus(gasPriceBN.times(180000)) - .plus(callValueBN) + .plus(callValueBN); } /** @@ -223,4 +223,4 @@ class Scheduler { // } } -module.exports = Scheduler +module.exports = Scheduler; diff --git a/lib/scheduling/testTx.js b/lib/scheduling/testTx.js deleted file mode 100644 index e7362f3..0000000 --- a/lib/scheduling/testTx.js +++ /dev/null @@ -1,45 +0,0 @@ -const Scheduler = require("./index.js") -const BigNumber = require("bignumber.js") - -const main = async (chain, web3) => { - const eacScheduler = new Scheduler(web3, chain) - const me = web3.eth.accounts[0] - - const windowStart = web3.eth.blockNumber + 30 - const gasPrice = web3.toWei("100", "gwei") - const requiredDeposit = 1 - - const callGas = 1212121 - const callValue = 123454321 - const fee = 50 - const bounty = web3.toWei("500", "finney") - - const endowment = eacScheduler.calcEndowment( - new BigNumber(callGas), - new BigNumber(callValue), - new BigNumber(gasPrice), - new BigNumber(fee), - new BigNumber(bounty) - ) - - eacScheduler.initSender({ - from: me, - gas: 3000000, - value: endowment, - }) - - return eacScheduler.blockSchedule( - "0x009f7EfeD908c05df5101DA1557b7CaaB38EE4Ce", - web3.fromAscii("s0x".repeat(Math.floor(Math.random() * 10))), - callGas, - callValue, - 255, // windowSize - windowStart, - gasPrice, - fee, // fee - bounty, // bounty - requiredDeposit - ) -} - -module.exports = main diff --git a/lib/txRequest/index.js b/lib/txRequest/index.js deleted file mode 100644 index a4e6e29..0000000 --- a/lib/txRequest/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./txRequest") diff --git a/lib/txRequest/index.ts b/lib/txRequest/index.ts new file mode 100644 index 0000000..98181bc --- /dev/null +++ b/lib/txRequest/index.ts @@ -0,0 +1 @@ +export { default } from "./txRequest"; \ No newline at end of file diff --git a/lib/txRequest/requestData.js b/lib/txRequest/requestData.js deleted file mode 100644 index 4aef651..0000000 --- a/lib/txRequest/requestData.js +++ /dev/null @@ -1,78 +0,0 @@ -const { BigNumber } = require("bignumber.js") - -class RequestData { - constructor(data, txRequest) { - if (typeof data === "undefined" || typeof txRequest === "undefined") { - throw new Error("Cannot call the constructor directly.") - } - this.txRequest = txRequest - this.fill(data) - } - - fill(data) { - this.claimData = { - claimedBy: data[0][0], - claimDeposit: new BigNumber(data[2][0]), - paymentModifier: parseInt(data[3][0], 10), - requiredDeposit: new BigNumber(data[2][14]), - } - - this.meta = { - createdBy: data[0][1], - owner: data[0][2], - isCancelled: data[1][0], - wasCalled: data[1][1], - wasSuccessful: data[1][2], - } - - this.paymentData = { - feeRecipient: data[0][3], - bountyBenefactor: data[0][4], - fee: new BigNumber(data[2][1]), - feeOwed: new BigNumber(data[2][2]), - bounty: new BigNumber(data[2][3]), - bountyOwed: new BigNumber(data[2][4]), - } - - this.schedule = { - claimWindowSize: new BigNumber(data[2][5]), - freezePeriod: new BigNumber(data[2][6]), - reservedWindowSize: new BigNumber(data[2][7]), - temporalUnit: parseInt(data[2][8], 10), - windowSize: new BigNumber(data[2][9]), - windowStart: new BigNumber(data[2][10]), - } - - this.txData = { - callGas: new BigNumber(data[2][11]), - callValue: new BigNumber(data[2][12]), - gasPrice: new BigNumber(data[2][13]), - toAddress: data[0][5], - } - } - - static from(txRequest) { - return new Promise((resolve, reject) => { - txRequest.requestData.call({ gas: 3000000 }, (err, data) => { - if (err) reject(err) - else { - resolve(new RequestData(data, txRequest)) - } - }) - }) - } - - refresh() { - return new Promise((resolve, reject) => { - this.txRequest.requestData.call((err, data) => { - if (err) reject(err) - else { - this.fill(data) - resolve(true) - } - }) - }) - } -} - -module.exports = RequestData diff --git a/lib/txRequest/requestData.ts b/lib/txRequest/requestData.ts new file mode 100644 index 0000000..9689c4f --- /dev/null +++ b/lib/txRequest/requestData.ts @@ -0,0 +1,134 @@ +import BigNumber from 'bignumber.js'; + +interface IClaimData { + claimedBy: string; + claimDeposit: number; + paymentModifier: number; + requiredDeposit: number; +} + +interface IMeta { + createdBy: string; + owner: string; + isCancelled: boolean; + wasCalled: boolean; + wasSuccessful: boolean; +} + +interface IPaymentData { + feeRecipient: string; + bountyBenefactor: string; + fee: number; + feeOwed: number; + bounty: number; + bountyOwed: number; +} + +interface ISchedule { + claimWindowSize: number; + freezePeriod: number; + reservedWindowSize: number; + temporalUnit: number; + windowSize: number; + windowStart: number; +} + +interface ITxData { + callGas: number; + callValue: number; + gasPrice: number; + toAddress: string; +} + +interface IRequestData { + claimData: IClaimData; + meta: IMeta; + paymentData: IPaymentData; + schedule: ISchedule; + txData: ITxData; +} + +export default class RequestData implements IRequestData { + + public claimData: IClaimData = {} as IClaimData; + public meta: IMeta = {} as IMeta; + public paymentData: IPaymentData = {} as IPaymentData; + public schedule: ISchedule = {} as ISchedule; + public txData: ITxData = {} as ITxData; + + + public txRequest: any; + + constructor(data: any, txRequest: any) { + if (typeof data === "undefined" || typeof txRequest === "undefined") { + throw new Error("Cannot call the constructor directly."); + } + this.txRequest = txRequest; + this.fill(data); + } + + fill(data: any) { + this.claimData = { + claimedBy: data[0][0], + claimDeposit: new BigNumber(data[2][0]), + paymentModifier: parseInt(data[3][0], 10), + requiredDeposit: new BigNumber(data[2][14]), + }; + + this.meta = { + createdBy: data[0][1], + owner: data[0][2], + isCancelled: data[1][0], + wasCalled: data[1][1], + wasSuccessful: data[1][2], + }; + + this.paymentData = { + feeRecipient: data[0][3], + bountyBenefactor: data[0][4], + fee: new BigNumber(data[2][1]), + feeOwed: new BigNumber(data[2][2]), + bounty: new BigNumber(data[2][3]), + bountyOwed: new BigNumber(data[2][4]), + }; + + this.schedule = { + claimWindowSize: new BigNumber(data[2][5]), + freezePeriod: new BigNumber(data[2][6]), + reservedWindowSize: new BigNumber(data[2][7]), + temporalUnit: parseInt(data[2][8], 10), + windowSize: new BigNumber(data[2][9]), + windowStart: new BigNumber(data[2][10]), + }; + + this.txData = { + callGas: new BigNumber(data[2][11]), + callValue: new BigNumber(data[2][12]), + gasPrice: new BigNumber(data[2][13]), + toAddress: data[0][5], + }; + } + + static from(txRequest: any): Promise { + return new Promise((resolve, reject) => { + txRequest.requestData.call({ gas: 3000000 }, (err: any, data: any) => { + if (err) reject(err); + else { + resolve(new RequestData(data, txRequest)); + } + }); + }); + } + + refresh() { + return new Promise((resolve, reject) => { + this.txRequest.requestData.call((err, data) => { + if (err) reject(err); + else { + this.fill(data); + resolve(true); + } + }); + }); + } +} diff --git a/lib/txRequest/txRequest.js b/lib/txRequest/txRequest.ts similarity index 56% rename from lib/txRequest/txRequest.js rename to lib/txRequest/txRequest.ts index 720b44e..a23779e 100644 --- a/lib/txRequest/txRequest.js +++ b/lib/txRequest/txRequest.ts @@ -1,21 +1,29 @@ -const { BigNumber } = require("bignumber.js") -const RequestData = require("./requestData") -const Constants = require("../constants") -const Util = require("../util")() +import BigNumber from "bignumber.js"; + +import Constants from "../constants"; +import initUtil from "../util"; +import RequestData from "./requestData"; + +const Util = new initUtil(null); + +export default class TxRequest { + public data: RequestData = {} as RequestData; + public instance: any; + public web3: any; -class TxRequest { constructor(address, web3) { if (!Util.checkNotNullAddress(address)) { - throw new Error("Attempted to instantiate a TxRequest class from a null address.") + throw new Error("Attempted to instantiate a TxRequest class from a null address."); } - this.web3 = web3 + + this.web3 = web3; this.instance = this.web3.eth .contract(Util.getABI("TransactionRequestCore")) - .at(address) + .at(address); } get address() { - return this.instance.address + return this.instance.address; } /** @@ -23,63 +31,63 @@ class TxRequest { */ get claimWindowSize() { - this.checkData() - return this.data.schedule.claimWindowSize + this.checkData(); + return this.data.schedule.claimWindowSize; } get claimWindowStart() { - this.checkData() - return this.windowStart.minus(this.freezePeriod).minus(this.claimWindowSize) + this.checkData(); + return this.windowStart.minus(this.freezePeriod).minus(this.claimWindowSize); } get claimWindowEnd() { - this.checkData() - return this.claimWindowStart.plus(this.claimWindowSize) + this.checkData(); + return this.claimWindowStart.plus(this.claimWindowSize); } get freezePeriod() { - this.checkData() - return this.data.schedule.freezePeriod + this.checkData(); + return this.data.schedule.freezePeriod; } get freezePeriodStart() { - this.checkData() - return this.windowStart.plus(this.claimWindowSize) + this.checkData(); + return this.windowStart.plus(this.claimWindowSize); } get freezePeriodEnd() { - this.checkData() - return this.claimWindowEnd.plus(this.freezePeriod) + this.checkData(); + return this.claimWindowEnd.plus(this.freezePeriod); } get temporalUnit() { - this.checkData() - return this.data.schedule.temporalUnit + this.checkData(); + return this.data.schedule.temporalUnit; } get windowSize() { - this.checkData() - return this.data.schedule.windowSize + this.checkData(); + return this.data.schedule.windowSize; } get windowStart() { - this.checkData() - return this.data.schedule.windowStart + this.checkData(); + return this.data.schedule.windowStart; } get reservedWindowSize() { - this.checkData() - return this.data.schedule.reservedWindowSize + this.checkData(); + return this.data.schedule.reservedWindowSize; } get reservedWindowEnd() { - this.checkData() - return this.windowStart.plus(this.reservedWindowSize) + this.checkData(); + return this.windowStart.plus(this.reservedWindowSize); } get executionWindowEnd() { - this.checkData() - return this.windowStart.plus(this.windowSize) + this.checkData(); + return this.windowStart.plus(this.windowSize); } /** @@ -88,54 +96,54 @@ class TxRequest { async now() { if (this.temporalUnit == 1) { - return new BigNumber(await Util.getBlockNumber(this.web3)) + return new BigNumber(await Util.getBlockNumber(this.web3)); } else if (this.temporalUnit == 2) { - const timestamp = await Util.getTimestamp(this.web3) - return new BigNumber(timestamp) + const timestamp = await Util.getTimestamp(this.web3); + return new BigNumber(timestamp); } - throw new Error(`Unrecognized temporal unit: ${this.temporalUnit}`) + throw new Error(`Unrecognized temporal unit: ${this.temporalUnit}`); } async beforeClaimWindow() { - const now = await this.now() - return this.claimWindowStart.greaterThan(now) + const now = await this.now(); + return this.claimWindowStart.greaterThan(now); } async inClaimWindow() { - const now = await this.now() + const now = await this.now(); return ( this.claimWindowStart.lessThanOrEqualTo(now) && this.claimWindowEnd.greaterThan(now) - ) + ); } async inFreezePeriod() { - const now = await this.now() + const now = await this.now(); return ( this.claimWindowEnd.lessThanOrEqualTo(now) && this.freezePeriodEnd.greaterThan(now) - ) + ); } async inExecutionWindow() { - const now = await this.now() + const now = await this.now(); return ( this.windowStart.lessThanOrEqualTo(now) && this.executionWindowEnd.greaterThanOrEqualTo(now) - ) + ); } async inReservedWindow() { - const now = await this.now() + const now = await this.now(); return ( this.windowStart.lessThanOrEqualTo(now) && this.reservedWindowEnd.greaterThan(now) - ) + ); } async afterExecutionWindow() { - const now = await this.now() - return this.executionWindowEnd.lessThan(now) + const now = await this.now(); + return this.executionWindowEnd.lessThan(now); } /** @@ -146,41 +154,41 @@ class TxRequest { } async executedAt() { - return (await this.getExecutedEvent()).blockNumber + return (await this.getExecutedEvent()).blockNumber; } getExecutedEvent() { if (!this.wasCalled) { - return {blockNumber: 0} + return {blockNumber: 0}; } - const events = this.instance.allEvents({fromBlock: 0, toBlock: 'latest'}) + const events = this.instance.allEvents({fromBlock: 0, toBlock: "latest"}); return new Promise((resolve, reject) => { events.get((err, logs) => { if (!err) { - const Executed = logs.filter(log => log.topics[0] === '0x3e504bb8b225ad41f613b0c3c4205cdd752d1615b4d77cd1773417282fcfb5d9') + const Executed = logs.filter((log) => log.topics[0] === "0x3e504bb8b225ad41f613b0c3c4205cdd752d1615b4d77cd1773417282fcfb5d9"); resolve({ blockNumber: Executed[0].blockNumber, - bounty: this.web3.toDecimal('0x' + Executed[0].data.slice(2, 66)), - fee: this.web3.toDecimal('0x' + Executed[0].data.slice(67, 130)), - estimatedGas: this.web3.toDecimal('0x' + Executed[0].data.slice(131, 194)) - }) + bounty: this.web3.toDecimal("0x" + Executed[0].data.slice(2, 66)), + fee: this.web3.toDecimal("0x" + Executed[0].data.slice(67, 130)), + estimatedGas: this.web3.toDecimal("0x" + Executed[0].data.slice(131, 194)), + }); } - else reject(err) - }) - }) + else reject(err); + }); + }); } getBucket() { - let sign = -1 + let sign = -1; let bucketSize; if (this.temporalUnit == 1) { - bucketSize = 240 + bucketSize = 240; } else if (this.temporalUnit == 2) { - bucketSize = 3600 - sign = 1 + bucketSize = 3600; + sign = 1; } - return sign * this.windowStart - (this.windowStart % bucketSize) + return sign * this.windowStart - (this.windowStart % bucketSize); } /** @@ -188,29 +196,29 @@ class TxRequest { */ get claimedBy() { - this.checkData() - return this.data.claimData.claimedBy + this.checkData(); + return this.data.claimData.claimedBy; } get isClaimed() { - this.checkData() - return this.data.claimData.claimedBy !== Constants.NULL_ADDRESS + this.checkData(); + return this.data.claimData.claimedBy !== Constants.NULL_ADDRESS; } isClaimedBy(address) { - this.checkData() - return this.claimedBy === address + this.checkData(); + return this.claimedBy === address; } get requiredDeposit() { - this.checkData() - return this.data.claimData.requiredDeposit + this.checkData(); + return this.data.claimData.requiredDeposit; } async claimPaymentModifier() { - const now = await this.now() - const elapsed = now.minus(this.claimWindowStart) - return elapsed.times(100).dividedToIntegerBy(this.claimWindowSize) + const now = await this.now(); + const elapsed = now.minus(this.claimWindowStart); + return elapsed.times(100).dividedToIntegerBy(this.claimWindowSize); } /** @@ -218,23 +226,23 @@ class TxRequest { */ get isCancelled() { - this.checkData() - return this.data.meta.isCancelled + this.checkData(); + return this.data.meta.isCancelled; } get wasCalled() { - this.checkData() - return this.data.meta.wasCalled + this.checkData(); + return this.data.meta.wasCalled; } get wasSuccessful() { - this.checkData() - return this.data.meta.wasSuccessful + this.checkData(); + return this.data.meta.wasSuccessful; } get owner() { - this.checkData() - return this.data.meta.owner + this.checkData(); + return this.data.meta.owner; } /** @@ -242,33 +250,33 @@ class TxRequest { */ get toAddress() { - this.checkData() - return this.data.txData.toAddress + this.checkData(); + return this.data.txData.toAddress; } get callGas() { - this.checkData() - return this.data.txData.callGas + this.checkData(); + return this.data.txData.callGas; } get callValue() { - this.checkData() - return this.data.txData.callValue + this.checkData(); + return this.data.txData.callValue; } get gasPrice() { - this.checkData() - return this.data.txData.gasPrice + this.checkData(); + return this.data.txData.gasPrice; } get fee() { - this.checkData() - return this.data.paymentData.fee + this.checkData(); + return this.data.paymentData.fee; } get bounty() { - this.checkData() - return this.data.paymentData.bounty + this.checkData(); + return this.data.paymentData.bounty; } /** @@ -278,10 +286,10 @@ class TxRequest { callData() { return new Promise((resolve, reject) => { this.instance.callData.call((err, callData) => { - if (!err) resolve(callData) - else reject(err) - }) - }) + if (!err) resolve(callData); + else reject(err); + }); + }); } /** @@ -289,16 +297,16 @@ class TxRequest { */ async fillData() { - const requestData = await RequestData.from(this.instance) - this.data = requestData - return true + const requestData = await RequestData.from(this.instance); + this.data = requestData; + return true; } async refreshData() { if (!this.data) { - return this.fillData() + return this.fillData(); } - return this.data.refresh() + return this.data.refresh(); } /** @@ -306,15 +314,15 @@ class TxRequest { */ get claimData() { - return this.instance.claim.getData() + return this.instance.claim.getData(); } get executeData() { - return this.instance.execute.getData() + return this.instance.execute.getData(); } get cancelData() { - return this.instance.cancel.getData() + return this.instance.cancel.getData(); } /** @@ -327,14 +335,14 @@ class TxRequest { claim(params) { return new Promise((resolve, reject) => { this.instance.claim(params, (err, txHash) => { - if (err) reject(err) + if (err) reject(err); else { Util.waitForTransactionToBeMined(this.web3, txHash) - .then(receipt => resolve(receipt)) - .catch(e => reject(e)) + .then((receipt) => resolve(receipt)) + .catch((e) => reject(e)); } - }) - }) + }); + }); } /** @@ -343,14 +351,14 @@ class TxRequest { execute(params) { return new Promise((resolve, reject) => { this.instance.execute(params, (err, txHash) => { - if (err) reject(err) + if (err) reject(err); else { Util.waitForTransactionToBeMined(this.web3, txHash) - .then(receipt => resolve(receipt)) - .catch(e => reject(e)) + .then((receipt) => resolve(receipt)) + .catch((e) => reject(e)); } - }) - }) + }); + }); } /** @@ -359,14 +367,14 @@ class TxRequest { cancel(params) { return new Promise((resolve, reject) => { this.instance.cancel(params, (err, txHash) => { - if (err) reject(err) + if (err) reject(err); else { Util.waitForTransactionToBeMined(this.web3, txHash) - .then(receipt => resolve(receipt)) - .catch(e => reject(e)) + .then((receipt) => resolve(receipt)) + .catch((e) => reject(e)); } - }) - }) + }); + }); } /** @@ -378,14 +386,14 @@ class TxRequest { proxy(toAddress, data, params) { return new Promise((resolve, reject) => { this.instance.proxy(toAddress, data, params, (err, txHash) => { - if (err) reject(err) + if (err) reject(err); else { Util.waitForTransactionToBeMined(this.web3, txHash) .then(resolve) // resolves the receipt - .catch(reject) // rejects the error + .catch(reject); // rejects the error } - }) - }) + }); + }); } /** @@ -395,53 +403,53 @@ class TxRequest { refundClaimDeposit(params) { return new Promise((resolve, reject) => { this.instance.refundClaimDeposit(params, (err, txHash) => { - if (err) reject(err) + if (err) reject(err); else { Util.waitForTransactionToBeMined(this.web3, txHash) .then(resolve) - .catch(reject) + .catch(reject); } - }) - }) + }); + }); } sendFee(params) { return new Promise((resolve, reject) => { this.instance.sendFee(params, (err, txHash) => { - if (err) reject(err) + if (err) reject(err); else { Util.waitForTransactionToBeMined(this.web3, txHash) .then(resolve) - .catch(reject) + .catch(reject); } - }) - }) + }); + }); } sendBounty(params) { return new Promise((resolve, reject) => { this.instance.sendBounty(params, (err, txHash) => { - if (err) reject(err) + if (err) reject(err); else { Util.waitForTransactionToBeMined(this.web3, txHash) .then(resolve) - .catch(reject) + .catch(reject); } - }) - }) + }); + }); } sendOwnerEther(params) { return new Promise((resolve, reject) => { this.instance.sendOwnerEther(params, (err, txHash) => { - if (err) reject(err) + if (err) reject(err); else { Util.waitForTransactionToBeMined(this.web3, txHash) .then(resolve) - .catch(reject) + .catch(reject); } - }) - }) + }); + }); } /** @@ -449,8 +457,8 @@ class TxRequest { */ async getBalance() { - const bal = await Util.getBalance(this.web3, this.address) - return new BigNumber(bal) + const bal = await Util.getBalance(this.web3, this.address); + return new BigNumber(bal); } /** @@ -458,9 +466,9 @@ class TxRequest { */ checkData() { if (!this.data) { - throw new Error('Data has not been filled! Please call `txRequest.fillData()` before using this method.') + throw new Error("Data has not been filled! Please call `txRequest.fillData()` before using this method."); } } } -module.exports = TxRequest +module.exports = TxRequest; diff --git a/lib/util.ts b/lib/util.ts index 0814a1e..4c3495b 100644 --- a/lib/util.ts +++ b/lib/util.ts @@ -1,20 +1,20 @@ -import BigNumber from 'bignumber.js'; -import * as ethUtil from 'ethereumjs-util'; +import BigNumber from "bignumber.js"; +import * as ethUtil from "ethereumjs-util"; -import Constants from './constants'; +import Constants from "./constants"; type Address = string; export default class Util { public web3: any; - + constructor(web3: any) { this.web3 = web3; } private checkWeb3(web3: any): any { if (!web3 && !this.web3) { - throw new Error('[eac.js-lib] You must either pass a Web3 object to Util class or instatiate it with Web3 object.'); + throw new Error("[eac.js-lib] You must either pass a Web3 object to Util class or instatiate it with Web3 object."); } return web3 || this.web3; } @@ -33,29 +33,29 @@ export default class Util { return new Promise((resolve: any, reject: any) => { web3.version.getNetwork((err: any, netId: any) => { switch (netId) { - case '1': + case "1": // mainnet resolve(false); break; - case '3': + case "3": // ropsten resolve(true); break; - case '4': + case "4": // rinkeby resolve(false); break; - case '42': + case "42": // kovan resolve(true); break; - case '1001': + case "1001": // docker resolve(true); break; - case '1002': + case "1002": // development resolve(true); break; default: resolve(false); } - }) - }) + }); + }); } checkNotNullAddress(address: Address): boolean { @@ -76,8 +76,8 @@ export default class Util { } else { reject(err); } - }) - }) + }); + }); } getABI(name: string): {} { @@ -94,8 +94,8 @@ export default class Util { } else { reject(err); } - }) - }) + }); + }); } getBlockNumber(web3: any): Promise { @@ -108,8 +108,8 @@ export default class Util { } else { reject(err); } - }) - }) + }); + }); } getGasPrice(web3: any): Promise { @@ -122,27 +122,27 @@ export default class Util { } else { reject(err); } - }) - }) + }); + }); } getTimestamp(web3: any): Promise { web3 = this.checkWeb3(web3); return new Promise((resolve: any, reject: any) => { - web3.eth.getBlock('latest', (err: any, block: any) => { + web3.eth.getBlock("latest", (err: any, block: any) => { if (!err) { resolve(block.timestamp); } else { reject(err); } - }) - }) + }); + }); } getTimestampForBlock(web3: any, blockNum: any): Promise { web3 = this.checkWeb3(web3); - + this.getBlockNumber(web3).then((curBlockNum) => { if (blockNum > curBlockNum) { throw new Error(`[eac.js-lib] Passed blockNum ${blockNum} is greater than current blockNum ${curBlockNum}`); @@ -155,18 +155,18 @@ export default class Util { } else { reject(err); } - }) - }) - }) + }); + }); + }); } getTxRequestFromReceipt(receipt: any): Address { const newRequestLog = receipt.logs.find((log) => { return log.topics[0] === Constants.NEWREQUESTLOG; - }) + }); if (!newRequestLog) { - throw new Error('[eac.js-lib] Invalid receipt passed!'); + throw new Error("[eac.js-lib] Invalid receipt passed!"); } return "0x" + newRequestLog.data.slice(-40); @@ -178,10 +178,10 @@ export default class Util { return new Promise((resolve: any, reject: any) => { web3.version.getNetwork((err: any, netId: any) => { switch (netId) { - case '1': + case "1": reject("Not implemented on mainnet."); break; - case '3': + case "3": resolve("ropsten"); break; case "4": @@ -199,8 +199,8 @@ export default class Util { default: resolve("tester"); } - }) - }) + }); + }); } waitForTransactionToBeMined(web3: any, txHash: any, interval: any): Promise { @@ -213,19 +213,19 @@ export default class Util { reject(err); } else if (receipt === null) { setTimeout(() => { - txReceiptAsync(txHash, resolve, reject) + txReceiptAsync(txHash, resolve, reject); }, interval); } else { resolve(receipt); } - }) - } + }); + }; return new Promise((resolve: any, reject: any) => { txReceiptAsync(txHash, resolve, reject); - }) + }); } -} +} // module.exports = (web3) => { // if (!web3) { diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..2ee7357 --- /dev/null +++ b/tslint.json @@ -0,0 +1,8 @@ +{ + "extends": [ + "tslint:recommended" + ], + "jsRules": {}, + "rules": {}, + "rulesDirectory": [] +} \ No newline at end of file From 370f527cc9e496300732f81ccd40b2d326130218 Mon Sep 17 00:00:00 2001 From: lsaether Date: Fri, 27 Jul 2018 19:13:45 +0300 Subject: [PATCH 04/24] scheduling --- lib/scheduling/index.ts | 119 ++++++++++++++++------------------- lib/txRequest/requestData.ts | 28 ++++----- lib/txRequest/txRequest.ts | 6 +- 3 files changed, 73 insertions(+), 80 deletions(-) diff --git a/lib/scheduling/index.ts b/lib/scheduling/index.ts index e319fc3..003d35f 100644 --- a/lib/scheduling/index.ts +++ b/lib/scheduling/index.ts @@ -1,10 +1,21 @@ -/* eslint class-methods-use-this: "off" */ +import BigNumber from 'bignumber.js'; -const BigNumber = require("bignumber.js"); -const Util = require("../util")(); +import initUtil from '../util'; +const Util = new initUtil(null); -class Scheduler { - constructor(bSchedulerAddress, tSchedulerAddress, web3) { +type Address = string; + +export default class Scheduler { + public blockScheduler: any; + public timestampScheduler: any; + public web3: any; + + public sender: Address = ''; + public gasLimit: number = 0; + public sendValue: number = 0; + + + constructor(bSchedulerAddress: Address, tSchedulerAddress: Address, web3: any) { this.web3 = web3; try { const BlockSchedulerABI = Util.getABI("BlockScheduler"); @@ -20,47 +31,51 @@ class Scheduler { } } - getFactoryAddress() { + getFactoryAddress(): Promise
{ return new Promise((resolve, reject) => { - this.blockScheduler.factoryAddress.call((err, address) => { + this.blockScheduler.factoryAddress.call((err: any, address: Address) => { if (!err) resolve(address); else reject(err); }); }); } - initSender(opts) { + initSender(opts: any): boolean { this.sender = opts.from; this.gasLimit = opts.gas; this.sendValue = opts.value; + return true; } - setGas(gasLimit) { + setGas(gasLimit: number): boolean { this.gasLimit = gasLimit; + return true; } - setSender(address) { + setSender(address: Address): boolean { // TODO verfiy with ethUtil this.sender = address; + return true; } - setSendValue(value) { + setSendValue(value: number): boolean { this.sendValue = value; + return true; } blockSchedule( - toAddress, - callData, - callGas, - callValue, - windowSize, - windowStart, - gasPrice, - fee, - bounty, - requiredDeposit, - waitForMined = true, - ) { + toAddress: any, + callData: any, + callGas: any, + callValue: any, + windowSize: any, + windowStart: any, + gasPrice: any, + fee: any, + bounty: any, + requiredDeposit: any, + waitForMined: boolean = true, + ): Promise { return new Promise((resolve, reject) => { this.blockScheduler.schedule.sendTransaction( toAddress, @@ -80,10 +95,10 @@ class Scheduler { gas: this.gasLimit, value: this.sendValue, }, - (err, txHash) => { + (err: any, txHash: any) => { if (err) reject(err); else { - const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash); + const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash, null); if (waitForMined) { miningPromise @@ -102,17 +117,17 @@ class Scheduler { } timestampSchedule( - toAddress, - callData, - callGas, - callValue, - windowSize, - windowStart, - gasPrice, - fee, - bounty, - requiredDeposit, - waitForMined = true, + toAddress: any, + callData: any, + callGas: any, + callValue: any, + windowSize: any, + windowStart: any, + gasPrice: any, + fee: any, + bounty: any, + requiredDeposit: any, + waitForMined: boolean = true, ) { return new Promise((resolve, reject) => { this.timestampScheduler.schedule( @@ -133,10 +148,10 @@ class Scheduler { gas: this.gasLimit, value: this.sendValue, }, - (err, txHash) => { + (err: any, txHash: any) => { if (err) reject(err); else { - const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash); + const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash, null); if (waitForMined) { miningPromise @@ -163,31 +178,7 @@ class Scheduler { * @param {Number|String|BigNumber} fee * @param {Number|String|BigNumber} bounty */ - calcEndowment(callGas, callValue, gasPrice, fee, bounty) { - // Convert the value to a bignumber works even if it's already one. - const callGasBN = new BigNumber(callGas); - const callValueBN = new BigNumber(callValue); - const gasPriceBN = new BigNumber(gasPrice); - const feeBN = new BigNumber(fee); - const bountyBN = new BigNumber(bounty); - - return bountyBN - .plus(feeBN.times(2)) - .plus(callGasBN.times(gasPrice)) - .plus(gasPriceBN.times(180000)) - .plus(callValueBN); - } - - /** - * Calculates the required endowment for scheduling a transactions - * with the following parameters - * @param {Number|String|BigNumber} callGas - * @param {Number|String|BigNumber} callValue - * @param {Number|String|BigNumber} gasPrice - * @param {Number|String|BigNumber} fee - * @param {Number|String|BigNumber} bount - */ - static calcEndowment(callGas, callValue, gasPrice, fee, bounty) { + calcEndowment(callGas: number, callValue: number, gasPrice: number, fee: number, bounty: number): BigNumber { // Convert the value to a bignumber works even if it's already one. const callGasBN = new BigNumber(callGas); const callValueBN = new BigNumber(callValue); @@ -222,5 +213,3 @@ class Scheduler { // return new Scheduler(web3, "kovan") // } } - -module.exports = Scheduler; diff --git a/lib/txRequest/requestData.ts b/lib/txRequest/requestData.ts index 9689c4f..cb827fa 100644 --- a/lib/txRequest/requestData.ts +++ b/lib/txRequest/requestData.ts @@ -2,9 +2,9 @@ import BigNumber from 'bignumber.js'; interface IClaimData { claimedBy: string; - claimDeposit: number; + claimDeposit: BigNumber; paymentModifier: number; - requiredDeposit: number; + requiredDeposit: BigNumber; } interface IMeta { @@ -18,25 +18,25 @@ interface IMeta { interface IPaymentData { feeRecipient: string; bountyBenefactor: string; - fee: number; - feeOwed: number; - bounty: number; - bountyOwed: number; + fee: BigNumber; + feeOwed: BigNumber; + bounty: BigNumber; + bountyOwed: BigNumber; } interface ISchedule { - claimWindowSize: number; - freezePeriod: number; - reservedWindowSize: number; + claimWindowSize: BigNumber; + freezePeriod: BigNumber; + reservedWindowSize: BigNumber; temporalUnit: number; - windowSize: number; - windowStart: number; + windowSize: BigNumber; + windowStart: BigNumber; } interface ITxData { - callGas: number; - callValue: number; - gasPrice: number; + callGas: BigNumber; + callValue: BigNumber; + gasPrice: BigNumber; toAddress: string; } diff --git a/lib/txRequest/txRequest.ts b/lib/txRequest/txRequest.ts index a23779e..bd4d656 100644 --- a/lib/txRequest/txRequest.ts +++ b/lib/txRequest/txRequest.ts @@ -6,6 +6,10 @@ import RequestData from "./requestData"; const Util = new initUtil(null); +enum TXREQUEST_ERROR { + NULL_ADDRESS = "Attempted to instantiate a TxRequest class from a null address."; +} + export default class TxRequest { public data: RequestData = {} as RequestData; public instance: any; @@ -13,7 +17,7 @@ export default class TxRequest { constructor(address, web3) { if (!Util.checkNotNullAddress(address)) { - throw new Error("Attempted to instantiate a TxRequest class from a null address."); + throw new Error(TXREQUEST_ERROR.NULL_ADDRESS); } this.web3 = web3; From 53874a4443002ce7f000cae8797d71d3ea73ff61 Mon Sep 17 00:00:00 2001 From: lsaether Date: Fri, 27 Jul 2018 19:29:36 +0300 Subject: [PATCH 05/24] fixing tslint errors --- lib/constants.ts | 16 ++++----- lib/requestFactory/index.ts | 62 +++++++++++++++++++--------------- lib/scheduling/index.ts | 7 ++-- lib/txRequest/requestData.ts | 3 +- lib/txRequest/txRequest.ts | 2 +- lib/util.ts | 65 +++++++++++++++++++++--------------- 6 files changed, 87 insertions(+), 68 deletions(-) diff --git a/lib/constants.ts b/lib/constants.ts index 88f818a..684b415 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -1,14 +1,14 @@ export default { - GT_HEX: "0x3e", - LT_HEX: "0x3c", - GTE_HEX: "0x3e3d", - LTE_HEX: "0x3c3d", + ABORTEDLOG: + "0xc008bc849b42227c61d5063a1313ce509a6e99211bfd59e827e417be6c65c81b", EQ_HEX: "0x3d3d", - NULL_ADDRESS: "0x0000000000000000000000000000000000000000", EXECUTEDLOG: "0x3e504bb8b225ad41f613b0c3c4205cdd752d1615b4d77cd1773417282fcfb5d9", - ABORTEDLOG: - "0xc008bc849b42227c61d5063a1313ce509a6e99211bfd59e827e417be6c65c81b", + GTE_HEX: "0x3e3d", + GT_HEX: "0x3e", + LTE_HEX: "0x3c3d", + LT_HEX: "0x3c", NEWREQUESTLOG: - "0x2749295aa7ffdbd4d16719dc03d592cd081eebd9bb790ceedce201a40675fc03", + "0x2749295aa7ffdbd4d16719dc03d592cd081eebd9bb790ceedce201a40675fc03", + NULL_ADDRESS: "0x0000000000000000000000000000000000000000", }; diff --git a/lib/requestFactory/index.ts b/lib/requestFactory/index.ts index cbb0eab..aeb3607 100644 --- a/lib/requestFactory/index.ts +++ b/lib/requestFactory/index.ts @@ -29,24 +29,30 @@ export default class RequestFactory { * Conveinence methods */ - isKnownRequest(requestAddress: Address) { + public isKnownRequest(requestAddress: Address) { return new Promise((resolve, reject) => { - this.instance.isKnownRequest.call(requestAddress, (err, isKnown) => { - if (!err) resolve(isKnown); - else reject(err); + this.instance.isKnownRequest.call(requestAddress, (err: any, isKnown: any) => { + if (!err) { + resolve(isKnown); + } else { + reject(err); + } }); }); } - validateRequestParams(addressArgs: string[], uintArgs: number[], endowment: number) { + public validateRequestParams(addressArgs: string[], uintArgs: number[], endowment: number) { return new Promise((resolve, reject) => { this.instance.validateRequestParams.call( addressArgs, uintArgs, endowment, (err: any, isValid: any) => { - if (!err) resolve(isValid); - else reject(err); + if (!err) { + resolve(isValid); + } else { + reject(err); + } }, ); }); @@ -59,8 +65,8 @@ export default class RequestFactory { * @return {Array} An array of the strings of validation errors or an * array of length 0 if no errors. */ - parseIsValid(isValid: boolean[]): string[] { - if (isValid.length != 6) { + public parseIsValid(isValid: boolean[]): string[] { + if (isValid.length !== 6) { throw new Error("Must pass an array of booleans returned by validateRequestParams()"); } const Errors = [ @@ -80,7 +86,7 @@ export default class RequestFactory { return errors; } - async getRequestCreatedLogs(filter: any, startBlockNum: number, endBlockNum: number): Promise { + public async getRequestCreatedLogs(filter: any, startBlockNum: number, endBlockNum: number): Promise { const f = filter || {}; const curBlock = await Util.getBlockNumber(this.web3); const start = startBlockNum || 1; @@ -93,12 +99,14 @@ export default class RequestFactory { event.get((err: any, logs: any[]) => { if (!err) { resolve(logs); - } else reject(err); + } else { + reject(err); + } }); }); } - watchRequestCreatedLogs(filter: any, startBlockNum: any, callback: Function): any { + public async watchRequestCreatedLogs(filter: any, startBlockNum: any, callback: any): Promise { const f = filter || {}; const curBlock = await Util.getBlockNumber(this.web3); const start = startBlockNum || 1; @@ -106,28 +114,30 @@ export default class RequestFactory { f, { fromBlock: start, toBlock: "latest" }, ); - event.watch(function(e, r){ - callback(e, r); + event.watch((err: any, res: any) => { + callback(err, res); }); return event; } - async stopWatch(event: any): Promise<{}> { + public async stopWatch(event: any): Promise<{}> { return new Promise((resolve, reject) => { - event.stopWatching( (err, res) => { + event.stopWatching((err: any, res: any) => { if (!err) { resolve(res); - } else reject(err); + } else { + reject(err); + } }); }); } - async getRequestsByBucket(bucket: any): Promise { + public async getRequestsByBucket(bucket: any): Promise { const logs = await this.getRequestCreatedLogs({ bucket, }, 0, 0); const requests = [] as any[]; - logs.forEach((log) => { + logs.forEach((log: any) => { requests.push({ address: log.args.request, params: log.args.params, @@ -136,7 +146,7 @@ export default class RequestFactory { return requests; } - async watchRequestsByBucket(bucket: any, cb: any): any { + public async watchRequestsByBucket(bucket: any, cb: any): Promise { return await this.watchRequestCreatedLogs({ bucket, }, "", @@ -151,11 +161,11 @@ export default class RequestFactory { } // Assume the temporalUnit is blocks if not timestamp. - calcBucket(windowStart: number, temporalUnit: number) { + public calcBucket(windowStart: number, temporalUnit: number) { let bucketSize = 240; // block bucketsize let sign = -1; // block sign - if (temporalUnit == 2) { + if (temporalUnit === 2) { bucketSize = 3600; // timestamp bucketsize sign = 1; // timestamp sign } @@ -163,7 +173,7 @@ export default class RequestFactory { return sign * (windowStart - (windowStart % bucketSize)); } - async getRequests(startBlock: number, endBlock: number) { + public async getRequests(startBlock: number, endBlock: number) { const logs = await this.getRequestCreatedLogs({}, startBlock, endBlock); const requests = [] as any[]; logs.forEach((log: any) => { @@ -172,7 +182,7 @@ export default class RequestFactory { return requests; } - async watchRequests(startBlock: number, callback: Function) { + public async watchRequests(startBlock: number, callback: any) { return await this.watchRequestCreatedLogs({}, startBlock, (error: any, log: any) => { if (log) { @@ -181,7 +191,7 @@ export default class RequestFactory { }); } - async getRequestsByOwner(owner: string, startBlock: number, endBlock: number) { + public async getRequestsByOwner(owner: string, startBlock: number, endBlock: number) { const logs = await this.getRequestCreatedLogs({ owner, }, startBlock, endBlock); @@ -192,7 +202,7 @@ export default class RequestFactory { return requests; } - async watchRequestsByOwner(owner: string, startBlock: number, callback: Function): any { + public async watchRequestsByOwner(owner: string, startBlock: number, callback: any): Promise { return await this.watchRequestCreatedLogs({ owner, }, startBlock, (error: any, log: any) => { diff --git a/lib/scheduling/index.ts b/lib/scheduling/index.ts index 003d35f..bd2fb28 100644 --- a/lib/scheduling/index.ts +++ b/lib/scheduling/index.ts @@ -1,6 +1,6 @@ -import BigNumber from 'bignumber.js'; +import BigNumber from "bignumber.js"; -import initUtil from '../util'; +import initUtil from "../util"; const Util = new initUtil(null); type Address = string; @@ -10,11 +10,10 @@ export default class Scheduler { public timestampScheduler: any; public web3: any; - public sender: Address = ''; + public sender: Address = ""; public gasLimit: number = 0; public sendValue: number = 0; - constructor(bSchedulerAddress: Address, tSchedulerAddress: Address, web3: any) { this.web3 = web3; try { diff --git a/lib/txRequest/requestData.ts b/lib/txRequest/requestData.ts index cb827fa..8bb6212 100644 --- a/lib/txRequest/requestData.ts +++ b/lib/txRequest/requestData.ts @@ -1,4 +1,4 @@ -import BigNumber from 'bignumber.js'; +import BigNumber from "bignumber.js"; interface IClaimData { claimedBy: string; @@ -56,7 +56,6 @@ export default class RequestData implements IRequestData { public schedule: ISchedule = {} as ISchedule; public txData: ITxData = {} as ITxData; - public txRequest: any; constructor(data: any, txRequest: any) { diff --git a/lib/txRequest/txRequest.ts b/lib/txRequest/txRequest.ts index bd4d656..7121f78 100644 --- a/lib/txRequest/txRequest.ts +++ b/lib/txRequest/txRequest.ts @@ -7,7 +7,7 @@ import RequestData from "./requestData"; const Util = new initUtil(null); enum TXREQUEST_ERROR { - NULL_ADDRESS = "Attempted to instantiate a TxRequest class from a null address."; + NULL_ADDRESS = "Attempted to instantiate a TxRequest class from a null address."; , } export default class TxRequest { diff --git a/lib/util.ts b/lib/util.ts index 4c3495b..5806846 100644 --- a/lib/util.ts +++ b/lib/util.ts @@ -5,6 +5,11 @@ import Constants from "./constants"; type Address = string; +enum UTIL_ERROR { + WEB3_ERROR = "[eac.js-lib] You must either pass a Web3 object to Util class or instatiate it with Web3 object."; + DEPRECATED = "[eac.js-lib] Deprecated."; +} + export default class Util { public web3: any; @@ -12,22 +17,21 @@ export default class Util { this.web3 = web3; } - private checkWeb3(web3: any): any { - if (!web3 && !this.web3) { - throw new Error("[eac.js-lib] You must either pass a Web3 object to Util class or instatiate it with Web3 object."); - } - return web3 || this.web3; - } - - calcEndowment(gas: BigNumber, value: BigNumber, gasPrice: BigNumber, fee: BigNumber, bounty: BigNumber): BigNumber { + public calcEndowment( + gas: BigNumber, + value: BigNumber, + gasPrice: BigNumber, + fee: BigNumber, + bounty: BigNumber, + ): BigNumber { return bounty.add(fee).add(gas.times(gasPrice)).add(gasPrice.times(180000)).add(value); } - checkForUnlockedAccount = () => { - throw new Error("[eac.js-lib] Deprecated."); + public checkForUnlockedAccount() { + throw new Error(UTIL_ERROR.DEPRECATED); } - checkNetworkID(web3: any): Promise { + public checkNetworkID(web3: any): Promise { web3 = this.checkWeb3(web3); return new Promise((resolve: any, reject: any) => { @@ -58,15 +62,15 @@ export default class Util { }); } - checkNotNullAddress(address: Address): boolean { + public checkNotNullAddress(address: Address): boolean { return address !== Constants.NULL_ADDRESS; } - checkValidAddress(address: Address): boolean { + public checkValidAddress(address: Address): boolean { return ethUtil.isValidAddress(address); } - estimateGas(web3: any, opts: {}): Promise { + public estimateGas(web3: any, opts: {}): Promise { web3 = this.checkWeb3(web3); return new Promise((resolve: any, reject: any) => { @@ -80,11 +84,11 @@ export default class Util { }); } - getABI(name: string): {} { + public getABI(name: string): {} { return require(`${__dirname}/build/abi/${name}.json`); } - getBalance(web3: any, address: Address): Promise { + public getBalance(web3: any, address: Address): Promise { web3 = this.checkWeb3(web3); return new Promise((resolve: any, reject: any) => { @@ -98,7 +102,7 @@ export default class Util { }); } - getBlockNumber(web3: any): Promise { + public getBlockNumber(web3: any): Promise { web3 = this.checkWeb3(web3); return new Promise((resolve: any, reject: any) => { @@ -112,7 +116,7 @@ export default class Util { }); } - getGasPrice(web3: any): Promise { + public getGasPrice(web3: any): Promise { web3 = this.checkWeb3(web3); return new Promise((resolve: any, reject: any) => { @@ -126,7 +130,7 @@ export default class Util { }); } - getTimestamp(web3: any): Promise { + public getTimestamp(web3: any): Promise { web3 = this.checkWeb3(web3); return new Promise((resolve: any, reject: any) => { @@ -140,7 +144,7 @@ export default class Util { }); } - getTimestampForBlock(web3: any, blockNum: any): Promise { + public getTimestampForBlock(web3: any, blockNum: any): any { web3 = this.checkWeb3(web3); this.getBlockNumber(web3).then((curBlockNum) => { @@ -160,8 +164,8 @@ export default class Util { }); } - getTxRequestFromReceipt(receipt: any): Address { - const newRequestLog = receipt.logs.find((log) => { + public getTxRequestFromReceipt(receipt: any): Address { + const newRequestLog = receipt.logs.find((log: any) => { return log.topics[0] === Constants.NEWREQUESTLOG; }); @@ -172,7 +176,7 @@ export default class Util { return "0x" + newRequestLog.data.slice(-40); } - getChainName(web3: any): Promise { + public getChainName(web3: any): Promise { web3 = this.checkWeb3(web3); return new Promise((resolve: any, reject: any) => { @@ -203,17 +207,17 @@ export default class Util { }); } - waitForTransactionToBeMined(web3: any, txHash: any, interval: any): Promise { + public waitForTransactionToBeMined(web3: any, txHash: any, interval: any): Promise { interval = interval || 500; web3 = this.checkWeb3(web3); - const txReceiptAsync = (txHash: any, resolve: any, reject: any) => { - web3.eth.getTransactionReceipt(txHash, (err: any, receipt: any) => { + const txReceiptAsync = (_txHash: any, resolve: any, reject: any) => { + web3.eth.getTransactionReceipt(_txHash, (err: any, receipt: any) => { if (err) { reject(err); } else if (receipt === null) { setTimeout(() => { - txReceiptAsync(txHash, resolve, reject); + txReceiptAsync(_txHash, resolve, reject); }, interval); } else { resolve(receipt); @@ -225,6 +229,13 @@ export default class Util { txReceiptAsync(txHash, resolve, reject); }); } + + private checkWeb3(web3: any): any { + if (!web3 && !this.web3) { + throw new Error(UTIL_ERROR.WEB3_ERROR); + } + return web3 || this.web3; + } } // module.exports = (web3) => { From 54aa3ece8295d3bf23f413b56a33c093138f6272 Mon Sep 17 00:00:00 2001 From: lsaether Date: Fri, 27 Jul 2018 19:36:15 +0300 Subject: [PATCH 06/24] tslint fixes --- lib/scheduling/index.ts | 46 +++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/lib/scheduling/index.ts b/lib/scheduling/index.ts index bd2fb28..db44b27 100644 --- a/lib/scheduling/index.ts +++ b/lib/scheduling/index.ts @@ -30,39 +30,42 @@ export default class Scheduler { } } - getFactoryAddress(): Promise
{ + public getFactoryAddress(): Promise
{ return new Promise((resolve, reject) => { this.blockScheduler.factoryAddress.call((err: any, address: Address) => { - if (!err) resolve(address); - else reject(err); + if (!err) { + resolve(address); + } else { + reject(err); + } }); }); } - initSender(opts: any): boolean { + public initSender(opts: any): boolean { this.sender = opts.from; this.gasLimit = opts.gas; this.sendValue = opts.value; return true; } - setGas(gasLimit: number): boolean { + public setGas(gasLimit: number): boolean { this.gasLimit = gasLimit; return true; } - setSender(address: Address): boolean { + public setSender(address: Address): boolean { // TODO verfiy with ethUtil this.sender = address; return true; } - setSendValue(value: number): boolean { + public setSendValue(value: number): boolean { this.sendValue = value; return true; } - blockSchedule( + public blockSchedule( toAddress: any, callData: any, callGas: any, @@ -95,8 +98,9 @@ export default class Scheduler { value: this.sendValue, }, (err: any, txHash: any) => { - if (err) reject(err); - else { + if (err) { + reject(err); + } else { const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash, null); if (waitForMined) { @@ -105,8 +109,8 @@ export default class Scheduler { .catch((e) => reject(e)); } else { resolve({ - transactionHash: txHash, miningPromise, + transactionHash: txHash, }); } } @@ -115,7 +119,7 @@ export default class Scheduler { }); } - timestampSchedule( + public timestampSchedule( toAddress: any, callData: any, callGas: any, @@ -148,8 +152,9 @@ export default class Scheduler { value: this.sendValue, }, (err: any, txHash: any) => { - if (err) reject(err); - else { + if (err) { + reject(err); + } else { const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash, null); if (waitForMined) { @@ -158,8 +163,8 @@ export default class Scheduler { .catch((e) => reject(e)); } else { resolve({ - transactionHash: txHash, miningPromise, + transactionHash: txHash, }); } } @@ -168,16 +173,7 @@ export default class Scheduler { }); } - /** - * Calculates the required endowment for scheduling a transactions - * with the following parameters - * @param {Number|String|BigNumber} callGas - * @param {Number|String|BigNumber} callValue - * @param {Number|String|BigNumber} gasPrice - * @param {Number|String|BigNumber} fee - * @param {Number|String|BigNumber} bounty - */ - calcEndowment(callGas: number, callValue: number, gasPrice: number, fee: number, bounty: number): BigNumber { + public calcEndowment(callGas: number, callValue: number, gasPrice: number, fee: number, bounty: number): BigNumber { // Convert the value to a bignumber works even if it's already one. const callGasBN = new BigNumber(callGas); const callValueBN = new BigNumber(callValue); From b14960e70cb576d0663aa2ad493802c2387902e4 Mon Sep 17 00:00:00 2001 From: lsaether Date: Fri, 27 Jul 2018 20:05:38 +0300 Subject: [PATCH 07/24] tslint --- lib/txRequest/index.ts | 2 +- lib/txRequest/requestData.ts | 44 ++++----- lib/txRequest/txRequest.ts | 170 ++++++++++++++++++----------------- lib/util.ts | 10 +-- 4 files changed, 116 insertions(+), 110 deletions(-) diff --git a/lib/txRequest/index.ts b/lib/txRequest/index.ts index 98181bc..b3aef08 100644 --- a/lib/txRequest/index.ts +++ b/lib/txRequest/index.ts @@ -1 +1 @@ -export { default } from "./txRequest"; \ No newline at end of file +export { default } from "./txRequest"; diff --git a/lib/txRequest/requestData.ts b/lib/txRequest/requestData.ts index 8bb6212..e01637f 100644 --- a/lib/txRequest/requestData.ts +++ b/lib/txRequest/requestData.ts @@ -50,6 +50,18 @@ interface IRequestData { export default class RequestData implements IRequestData { + public static from(txRequest: any): Promise { + return new Promise((resolve, reject) => { + txRequest.requestData.call({ gas: 3000000 }, (err: any, data: any) => { + if (err) { + reject(err); + } else { + resolve(new RequestData(data, txRequest)); + } + }); + }); + } + public claimData: IClaimData = {} as IClaimData; public meta: IMeta = {} as IMeta; public paymentData: IPaymentData = {} as IPaymentData; @@ -66,29 +78,29 @@ export default class RequestData implements IRequestData { this.fill(data); } - fill(data: any) { + public fill(data: any) { this.claimData = { - claimedBy: data[0][0], claimDeposit: new BigNumber(data[2][0]), + claimedBy: data[0][0], paymentModifier: parseInt(data[3][0], 10), requiredDeposit: new BigNumber(data[2][14]), }; this.meta = { createdBy: data[0][1], - owner: data[0][2], isCancelled: data[1][0], + owner: data[0][2], wasCalled: data[1][1], wasSuccessful: data[1][2], }; this.paymentData = { - feeRecipient: data[0][3], + bounty: new BigNumber(data[2][3]), bountyBenefactor: data[0][4], + bountyOwed: new BigNumber(data[2][4]), fee: new BigNumber(data[2][1]), feeOwed: new BigNumber(data[2][2]), - bounty: new BigNumber(data[2][3]), - bountyOwed: new BigNumber(data[2][4]), + feeRecipient: data[0][3], }; this.schedule = { @@ -108,22 +120,12 @@ export default class RequestData implements IRequestData { }; } - static from(txRequest: any): Promise { - return new Promise((resolve, reject) => { - txRequest.requestData.call({ gas: 3000000 }, (err: any, data: any) => { - if (err) reject(err); - else { - resolve(new RequestData(data, txRequest)); - } - }); - }); - } - - refresh() { + public refresh() { return new Promise((resolve, reject) => { - this.txRequest.requestData.call((err, data) => { - if (err) reject(err); - else { + this.txRequest.requestData.call((err: any, data: any) => { + if (err) { + reject(err); + } else { this.fill(data); resolve(true); } diff --git a/lib/txRequest/txRequest.ts b/lib/txRequest/txRequest.ts index 7121f78..59e5a9d 100644 --- a/lib/txRequest/txRequest.ts +++ b/lib/txRequest/txRequest.ts @@ -7,7 +7,7 @@ import RequestData from "./requestData"; const Util = new initUtil(null); enum TXREQUEST_ERROR { - NULL_ADDRESS = "Attempted to instantiate a TxRequest class from a null address."; , + NULL_ADDRESS = "Attempted to instantiate a TxRequest class from a null address.", } export default class TxRequest { @@ -15,7 +15,7 @@ export default class TxRequest { public instance: any; public web3: any; - constructor(address, web3) { + constructor(address: any, web3: any) { if (!Util.checkNotNullAddress(address)) { throw new Error(TXREQUEST_ERROR.NULL_ADDRESS); } @@ -98,22 +98,22 @@ export default class TxRequest { * Dynamic getters */ - async now() { - if (this.temporalUnit == 1) { + public async now() { + if (this.temporalUnit === 1) { return new BigNumber(await Util.getBlockNumber(this.web3)); - } else if (this.temporalUnit == 2) { + } else if (this.temporalUnit === 2) { const timestamp = await Util.getTimestamp(this.web3); return new BigNumber(timestamp); } throw new Error(`Unrecognized temporal unit: ${this.temporalUnit}`); } - async beforeClaimWindow() { + public async beforeClaimWindow() { const now = await this.now(); return this.claimWindowStart.greaterThan(now); } - async inClaimWindow() { + public async inClaimWindow() { const now = await this.now(); return ( this.claimWindowStart.lessThanOrEqualTo(now) && @@ -121,7 +121,7 @@ export default class TxRequest { ); } - async inFreezePeriod() { + public async inFreezePeriod() { const now = await this.now(); return ( this.claimWindowEnd.lessThanOrEqualTo(now) && @@ -129,7 +129,7 @@ export default class TxRequest { ); } - async inExecutionWindow() { + public async inExecutionWindow() { const now = await this.now(); return ( this.windowStart.lessThanOrEqualTo(now) && @@ -137,7 +137,7 @@ export default class TxRequest { ); } - async inReservedWindow() { + public async inReservedWindow() { const now = await this.now(); return ( this.windowStart.lessThanOrEqualTo(now) && @@ -145,54 +145,50 @@ export default class TxRequest { ); } - async afterExecutionWindow() { + public async afterExecutionWindow() { const now = await this.now(); return this.executionWindowEnd.lessThan(now); } - /** - * - */ - createdAt() { - + public async executedAt() { + return ((await this.getExecutedEvent()) as any).blockNumber; } - async executedAt() { - return (await this.getExecutedEvent()).blockNumber; - } - - getExecutedEvent() { + public getExecutedEvent() { if (!this.wasCalled) { return {blockNumber: 0}; } const events = this.instance.allEvents({fromBlock: 0, toBlock: "latest"}); return new Promise((resolve, reject) => { - events.get((err, logs) => { + events.get((err: any, logs: any) => { if (!err) { - const Executed = logs.filter((log) => log.topics[0] === "0x3e504bb8b225ad41f613b0c3c4205cdd752d1615b4d77cd1773417282fcfb5d9"); + const Executed = logs.filter((log: any) => { + return log.topics[0] === "0x3e504bb8b225ad41f613b0c3c4205cdd752d1615b4d77cd1773417282fcfb5d9"; + }); resolve({ blockNumber: Executed[0].blockNumber, bounty: this.web3.toDecimal("0x" + Executed[0].data.slice(2, 66)), - fee: this.web3.toDecimal("0x" + Executed[0].data.slice(67, 130)), estimatedGas: this.web3.toDecimal("0x" + Executed[0].data.slice(131, 194)), + fee: this.web3.toDecimal("0x" + Executed[0].data.slice(67, 130)), }); + } else { + reject(err); } - else reject(err); }); }); } - getBucket() { + public getBucket() { let sign = -1; - let bucketSize; + let bucketSize = 0; - if (this.temporalUnit == 1) { + if (this.temporalUnit === 1) { bucketSize = 240; - } else if (this.temporalUnit == 2) { + } else if (this.temporalUnit === 2) { bucketSize = 3600; sign = 1; } - return sign * this.windowStart - (this.windowStart % bucketSize); + return sign * this.windowStart.toNumber() - (this.windowStart.toNumber() % bucketSize); } /** @@ -209,7 +205,7 @@ export default class TxRequest { return this.data.claimData.claimedBy !== Constants.NULL_ADDRESS; } - isClaimedBy(address) { + public isClaimedBy(address: any) { this.checkData(); return this.claimedBy === address; } @@ -219,7 +215,7 @@ export default class TxRequest { return this.data.claimData.requiredDeposit; } - async claimPaymentModifier() { + public async claimPaymentModifier() { const now = await this.now(); const elapsed = now.minus(this.claimWindowStart); return elapsed.times(100).dividedToIntegerBy(this.claimWindowSize); @@ -287,11 +283,14 @@ export default class TxRequest { * Call Data */ - callData() { + public callData() { return new Promise((resolve, reject) => { - this.instance.callData.call((err, callData) => { - if (!err) resolve(callData); - else reject(err); + this.instance.callData.call((err: any, callData: any) => { + if (!err) { + resolve(callData); + } else { + reject(err); + } }); }); } @@ -300,13 +299,13 @@ export default class TxRequest { * Data management */ - async fillData() { + public async fillData() { const requestData = await RequestData.from(this.instance); this.data = requestData; return true; } - async refreshData() { + public async refreshData() { if (!this.data) { return this.fillData(); } @@ -336,12 +335,13 @@ export default class TxRequest { /** * @param {Object} params Transaction object including `from`, `gas`, `gasPrice` and `value`. */ - claim(params) { + public claim(params: any) { return new Promise((resolve, reject) => { - this.instance.claim(params, (err, txHash) => { - if (err) reject(err); - else { - Util.waitForTransactionToBeMined(this.web3, txHash) + this.instance.claim(params, (err: any, txHash: any) => { + if (err) { + reject(err); + } else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) .then((receipt) => resolve(receipt)) .catch((e) => reject(e)); } @@ -352,12 +352,13 @@ export default class TxRequest { /** * @param {Object} params Transaction object including `from`, `gas`, `gasPrice` and `value`. */ - execute(params) { + public execute(params: any) { return new Promise((resolve, reject) => { - this.instance.execute(params, (err, txHash) => { - if (err) reject(err); - else { - Util.waitForTransactionToBeMined(this.web3, txHash) + this.instance.execute(params, (err: any, txHash: any) => { + if (err) { + reject(err); + } else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) .then((receipt) => resolve(receipt)) .catch((e) => reject(e)); } @@ -368,12 +369,13 @@ export default class TxRequest { /** * @param {Object} params Transaction object including `from`, `gas`, `gasPrice` and `value`. */ - cancel(params) { + public cancel(params: any) { return new Promise((resolve, reject) => { - this.instance.cancel(params, (err, txHash) => { - if (err) reject(err); - else { - Util.waitForTransactionToBeMined(this.web3, txHash) + this.instance.cancel(params, (err: any, txHash: any) => { + if (err) { + reject(err); + } else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) .then((receipt) => resolve(receipt)) .catch((e) => reject(e)); } @@ -387,12 +389,13 @@ export default class TxRequest { * @param {string} data Hex encoded data for the transaction to proxy * @param {Object} params Transaction object including `from`, `gas`, `gasPrice` and `value`. */ - proxy(toAddress, data, params) { + public proxy(toAddress: any, data: any, params: any) { return new Promise((resolve, reject) => { - this.instance.proxy(toAddress, data, params, (err, txHash) => { - if (err) reject(err); - else { - Util.waitForTransactionToBeMined(this.web3, txHash) + this.instance.proxy(toAddress, data, params, (err: any, txHash: any) => { + if (err) { + reject(err); + } else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) .then(resolve) // resolves the receipt .catch(reject); // rejects the error } @@ -403,13 +406,13 @@ export default class TxRequest { /** * Pull Payments */ - - refundClaimDeposit(params) { + public refundClaimDeposit(params: any) { return new Promise((resolve, reject) => { - this.instance.refundClaimDeposit(params, (err, txHash) => { - if (err) reject(err); - else { - Util.waitForTransactionToBeMined(this.web3, txHash) + this.instance.refundClaimDeposit(params, (err: any, txHash: any) => { + if (err) { + reject(err); + } else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) .then(resolve) .catch(reject); } @@ -417,12 +420,13 @@ export default class TxRequest { }); } - sendFee(params) { + public sendFee(params: any) { return new Promise((resolve, reject) => { - this.instance.sendFee(params, (err, txHash) => { - if (err) reject(err); - else { - Util.waitForTransactionToBeMined(this.web3, txHash) + this.instance.sendFee(params, (err: any, txHash: any) => { + if (err) { + reject(err); + } else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) .then(resolve) .catch(reject); } @@ -430,12 +434,13 @@ export default class TxRequest { }); } - sendBounty(params) { + public sendBounty(params: any) { return new Promise((resolve, reject) => { - this.instance.sendBounty(params, (err, txHash) => { - if (err) reject(err); - else { - Util.waitForTransactionToBeMined(this.web3, txHash) + this.instance.sendBounty(params, (err: any, txHash: any) => { + if (err) { + reject(err); + } else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) .then(resolve) .catch(reject); } @@ -443,12 +448,13 @@ export default class TxRequest { }); } - sendOwnerEther(params) { + public sendOwnerEther(params: any) { return new Promise((resolve, reject) => { - this.instance.sendOwnerEther(params, (err, txHash) => { - if (err) reject(err); - else { - Util.waitForTransactionToBeMined(this.web3, txHash) + this.instance.sendOwnerEther(params, (err: any, txHash: any) => { + if (err) { + reject(err); + } else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) .then(resolve) .catch(reject); } @@ -460,7 +466,7 @@ export default class TxRequest { * Misc. */ - async getBalance() { + public async getBalance() { const bal = await Util.getBalance(this.web3, this.address); return new BigNumber(bal); } @@ -468,11 +474,9 @@ export default class TxRequest { /** * Error handling */ - checkData() { + public checkData() { if (!this.data) { throw new Error("Data has not been filled! Please call `txRequest.fillData()` before using this method."); } } } - -module.exports = TxRequest; diff --git a/lib/util.ts b/lib/util.ts index 5806846..2baab7b 100644 --- a/lib/util.ts +++ b/lib/util.ts @@ -6,8 +6,8 @@ import Constants from "./constants"; type Address = string; enum UTIL_ERROR { - WEB3_ERROR = "[eac.js-lib] You must either pass a Web3 object to Util class or instatiate it with Web3 object."; - DEPRECATED = "[eac.js-lib] Deprecated."; + WEB3_ERROR = "[eac.js-lib] You must either pass a Web3 object to Util class or instatiate it with Web3 object.", + DEPRECATED = "[eac.js-lib] Deprecated.", } export default class Util { @@ -211,13 +211,13 @@ export default class Util { interval = interval || 500; web3 = this.checkWeb3(web3); - const txReceiptAsync = (_txHash: any, resolve: any, reject: any) => { - web3.eth.getTransactionReceipt(_txHash, (err: any, receipt: any) => { + const txReceiptAsync = (txHash2: any, resolve: any, reject: any) => { + web3.eth.getTransactionReceipt(txHash2, (err: any, receipt: any) => { if (err) { reject(err); } else if (receipt === null) { setTimeout(() => { - txReceiptAsync(_txHash, resolve, reject); + txReceiptAsync(txHash2, resolve, reject); }, interval); } else { resolve(receipt); From 5b90a03ac86de95c526a889003b3717c835514ac Mon Sep 17 00:00:00 2001 From: lsaether Date: Fri, 27 Jul 2018 20:14:25 +0300 Subject: [PATCH 08/24] buidl --- buidl | 1165 +++++++++++++++++++++++++++++++++++++++++++++++++ tsconfig.json | 8 +- 2 files changed, 1169 insertions(+), 4 deletions(-) create mode 100644 buidl diff --git a/buidl b/buidl new file mode 100644 index 0000000..61e6edc --- /dev/null +++ b/buidl @@ -0,0 +1,1165 @@ +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +define("constants", ["require", "exports"], function (require, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = { + ABORTEDLOG: "0xc008bc849b42227c61d5063a1313ce509a6e99211bfd59e827e417be6c65c81b", + EQ_HEX: "0x3d3d", + EXECUTEDLOG: "0x3e504bb8b225ad41f613b0c3c4205cdd752d1615b4d77cd1773417282fcfb5d9", + GTE_HEX: "0x3e3d", + GT_HEX: "0x3e", + LTE_HEX: "0x3c3d", + LT_HEX: "0x3c", + NEWREQUESTLOG: "0x2749295aa7ffdbd4d16719dc03d592cd081eebd9bb790ceedce201a40675fc03", + NULL_ADDRESS: "0x0000000000000000000000000000000000000000", + }; +}); +define("util", ["require", "exports", "ethereumjs-util", "constants"], function (require, exports, ethUtil, constants_1) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + ethUtil = __importStar(ethUtil); + constants_1 = __importDefault(constants_1); + var UTIL_ERROR; + (function (UTIL_ERROR) { + UTIL_ERROR["WEB3_ERROR"] = "[eac.js-lib] You must either pass a Web3 object to Util class or instatiate it with Web3 object."; + UTIL_ERROR["DEPRECATED"] = "[eac.js-lib] Deprecated."; + })(UTIL_ERROR || (UTIL_ERROR = {})); + class Util { + constructor(web3) { + this.web3 = web3; + } + calcEndowment(gas, value, gasPrice, fee, bounty) { + return bounty.add(fee).add(gas.times(gasPrice)).add(gasPrice.times(180000)).add(value); + } + checkForUnlockedAccount() { + throw new Error(UTIL_ERROR.DEPRECATED); + } + checkNetworkID(web3) { + web3 = this.checkWeb3(web3); + return new Promise((resolve, reject) => { + web3.version.getNetwork((err, netId) => { + switch (netId) { + case "1": + // mainnet + resolve(false); + break; + case "3": + // ropsten + resolve(true); + break; + case "4": + // rinkeby + resolve(false); + break; + case "42": + // kovan + resolve(true); + break; + case "1001": + // docker + resolve(true); + break; + case "1002": + // development + resolve(true); + break; + default: + resolve(false); + } + }); + }); + } + checkNotNullAddress(address) { + return address !== constants_1.default.NULL_ADDRESS; + } + checkValidAddress(address) { + return ethUtil.isValidAddress(address); + } + estimateGas(web3, opts) { + web3 = this.checkWeb3(web3); + return new Promise((resolve, reject) => { + web3.eth.estimateGas(opts, (err, gas) => { + if (!err) { + resolve(gas); + } + else { + reject(err); + } + }); + }); + } + getABI(name) { + return require(`${__dirname}/build/abi/${name}.json`); + } + getBalance(web3, address) { + web3 = this.checkWeb3(web3); + return new Promise((resolve, reject) => { + web3.eth.getBalance(address, (err, bal) => { + if (!err) { + resolve(bal); + } + else { + reject(err); + } + }); + }); + } + getBlockNumber(web3) { + web3 = this.checkWeb3(web3); + return new Promise((resolve, reject) => { + web3.eth.getBlockNumber((err, blockNum) => { + if (!err) { + resolve(blockNum); + } + else { + reject(err); + } + }); + }); + } + getGasPrice(web3) { + web3 = this.checkWeb3(web3); + return new Promise((resolve, reject) => { + web3.eth.getGasPrice((err, gasPrice) => { + if (!err) { + resolve(gasPrice); + } + else { + reject(err); + } + }); + }); + } + getTimestamp(web3) { + web3 = this.checkWeb3(web3); + return new Promise((resolve, reject) => { + web3.eth.getBlock("latest", (err, block) => { + if (!err) { + resolve(block.timestamp); + } + else { + reject(err); + } + }); + }); + } + getTimestampForBlock(web3, blockNum) { + web3 = this.checkWeb3(web3); + this.getBlockNumber(web3).then((curBlockNum) => { + if (blockNum > curBlockNum) { + throw new Error(`[eac.js-lib] Passed blockNum ${blockNum} is greater than current blockNum ${curBlockNum}`); + } + return new Promise((resolve, reject) => { + web3.eth.getBlock(blockNum, (err, block) => { + if (!err) { + resolve(block.timestamp); + } + else { + reject(err); + } + }); + }); + }); + } + getTxRequestFromReceipt(receipt) { + const newRequestLog = receipt.logs.find((log) => { + return log.topics[0] === constants_1.default.NEWREQUESTLOG; + }); + if (!newRequestLog) { + throw new Error("[eac.js-lib] Invalid receipt passed!"); + } + return "0x" + newRequestLog.data.slice(-40); + } + getChainName(web3) { + web3 = this.checkWeb3(web3); + return new Promise((resolve, reject) => { + web3.version.getNetwork((err, netId) => { + switch (netId) { + case "1": + reject("Not implemented on mainnet."); + break; + case "3": + resolve("ropsten"); + break; + case "4": + resolve("rinkeby"); + break; + case "42": + resolve("kovan"); + break; + case "1001": + resolve("docker"); + break; + case "1002": + resolve("development"); + break; + default: + resolve("tester"); + } + }); + }); + } + waitForTransactionToBeMined(web3, txHash, interval) { + interval = interval || 500; + web3 = this.checkWeb3(web3); + const txReceiptAsync = (txHash2, resolve, reject) => { + web3.eth.getTransactionReceipt(txHash2, (err, receipt) => { + if (err) { + reject(err); + } + else if (receipt === null) { + setTimeout(() => { + txReceiptAsync(txHash2, resolve, reject); + }, interval); + } + else { + resolve(receipt); + } + }); + }; + return new Promise((resolve, reject) => { + txReceiptAsync(txHash, resolve, reject); + }); + } + checkWeb3(web3) { + if (!web3 && !this.web3) { + throw new Error(UTIL_ERROR.WEB3_ERROR); + } + return web3 || this.web3; + } + } + exports.default = Util; +}); +// module.exports = (web3) => { +// if (!web3) { +// return { +// calcEndowment, +// checkForUnlockedAccount, +// checkNetworkID, +// checkNotNullAddress, +// checkValidAddress, +// estimateGas, +// getABI, +// getBalance, +// getBlockNumber, +// getChainName, +// getGasPrice, +// getTimestamp, +// getTimestampForBlock, +// getTxRequestFromReceipt, +// waitForTransactionToBeMined, +// } +// } +// return { +// calcEndowment, +// checkForUnlockedAccount: () => checkForUnlockedAccount(web3), +// checkNetworkID: () => checkNetworkID(web3), +// checkNotNullAddress, +// checkValidAddress, +// estimateGas: opts => estimateGas(web3, opts), +// getABI, +// getBalance: address => getBalance(web3, address), +// getBlockNumber: () => getBlockNumber(web3), +// getChainName: () => getChainName(web3), +// getGasPrice: () => getGasPrice(web3), +// getTimestamp: () => getTimestamp(web3), +// getTimestampForBlock: blockNum => getTimestampForBlock(web3, blockNum), +// getTxRequestFromReceipt, +// waitForTransactionToBeMined: txHash => +// waitForTransactionToBeMined(web3, txHash), +// } +// } +/* eslint class-methods-use-this: "off" */ +define("requestFactory/index", ["require", "exports", "util"], function (require, exports, util_1) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + util_1 = __importDefault(util_1); + const Util = new util_1.default(null); + class RequestFactory { + constructor(address, web3) { + if (!Util.checkNotNullAddress(address)) { + throw new Error(`Cannot initialize a RequestFactory from address ${address}`); + } + this.web3 = web3; + this.instance = this.web3.eth + .contract(Util.getABI("RequestFactory")) + .at(address); + } + get address() { + return this.instance.address; + } + /** + * Conveinence methods + */ + isKnownRequest(requestAddress) { + return new Promise((resolve, reject) => { + this.instance.isKnownRequest.call(requestAddress, (err, isKnown) => { + if (!err) { + resolve(isKnown); + } + else { + reject(err); + } + }); + }); + } + validateRequestParams(addressArgs, uintArgs, endowment) { + return new Promise((resolve, reject) => { + this.instance.validateRequestParams.call(addressArgs, uintArgs, endowment, (err, isValid) => { + if (!err) { + resolve(isValid); + } + else { + reject(err); + } + }); + }); + } + /** + * Parses the boolean returned by validateRequestParams() and returns the + * reason validation failed. + * @param {Array} isValid The array returned by this.validateRequestParams() + * @return {Array} An array of the strings of validation errors or an + * array of length 0 if no errors. + */ + parseIsValid(isValid) { + if (isValid.length !== 6) { + throw new Error("Must pass an array of booleans returned by validateRequestParams()"); + } + const Errors = [ + "InsufficientEndowment", + "ReservedWindowBiggerThanExecutionWindow", + "InvalidTemporalUnit", + "ExecutionWindowTooSoon", + "CallGasTooHigh", + "EmptyToAddress", + ]; + const errors = []; + isValid.forEach((boolIsTrue, index) => { + if (!boolIsTrue) { + errors.push(Errors[index]); + } + }); + return errors; + } + getRequestCreatedLogs(filter, startBlockNum, endBlockNum) { + return __awaiter(this, void 0, void 0, function* () { + const f = filter || {}; + const curBlock = yield Util.getBlockNumber(this.web3); + const start = startBlockNum || 1; + const end = endBlockNum || "latest"; + const event = this.instance.RequestCreated(f, { fromBlock: start, toBlock: end }); + return new Promise((resolve, reject) => { + event.get((err, logs) => { + if (!err) { + resolve(logs); + } + else { + reject(err); + } + }); + }); + }); + } + watchRequestCreatedLogs(filter, startBlockNum, callback) { + return __awaiter(this, void 0, void 0, function* () { + const f = filter || {}; + const curBlock = yield Util.getBlockNumber(this.web3); + const start = startBlockNum || 1; + const event = this.instance.RequestCreated(f, { fromBlock: start, toBlock: "latest" }); + event.watch((err, res) => { + callback(err, res); + }); + return event; + }); + } + stopWatch(event) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => { + event.stopWatching((err, res) => { + if (!err) { + resolve(res); + } + else { + reject(err); + } + }); + }); + }); + } + getRequestsByBucket(bucket) { + return __awaiter(this, void 0, void 0, function* () { + const logs = yield this.getRequestCreatedLogs({ + bucket, + }, 0, 0); + const requests = []; + logs.forEach((log) => { + requests.push({ + address: log.args.request, + params: log.args.params, + }); + }); + return requests; + }); + } + watchRequestsByBucket(bucket, cb) { + return __awaiter(this, void 0, void 0, function* () { + return yield this.watchRequestCreatedLogs({ + bucket, + }, "", (error, log) => { + if (log) { + cb({ + address: log.args.request, + params: log.args.params, + }); + } + }); + }); + } + // Assume the temporalUnit is blocks if not timestamp. + calcBucket(windowStart, temporalUnit) { + let bucketSize = 240; // block bucketsize + let sign = -1; // block sign + if (temporalUnit === 2) { + bucketSize = 3600; // timestamp bucketsize + sign = 1; // timestamp sign + } + return sign * (windowStart - (windowStart % bucketSize)); + } + getRequests(startBlock, endBlock) { + return __awaiter(this, void 0, void 0, function* () { + const logs = yield this.getRequestCreatedLogs({}, startBlock, endBlock); + const requests = []; + logs.forEach((log) => { + requests.push(log.args.request); + }); + return requests; + }); + } + watchRequests(startBlock, callback) { + return __awaiter(this, void 0, void 0, function* () { + return yield this.watchRequestCreatedLogs({}, startBlock, (error, log) => { + if (log) { + callback(log.args.request); + } + }); + }); + } + getRequestsByOwner(owner, startBlock, endBlock) { + return __awaiter(this, void 0, void 0, function* () { + const logs = yield this.getRequestCreatedLogs({ + owner, + }, startBlock, endBlock); + const requests = []; + logs.forEach((log) => { + requests.push(log.args.request); + }); + return requests; + }); + } + watchRequestsByOwner(owner, startBlock, callback) { + return __awaiter(this, void 0, void 0, function* () { + return yield this.watchRequestCreatedLogs({ + owner, + }, startBlock, (error, log) => { + if (log) { + callback(log.args.request); + } + }); + }); + } + } + exports.default = RequestFactory; +}); +define("scheduling/index", ["require", "exports", "bignumber.js", "util"], function (require, exports, bignumber_js_1, util_2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + bignumber_js_1 = __importDefault(bignumber_js_1); + util_2 = __importDefault(util_2); + const Util = new util_2.default(null); + class Scheduler { + constructor(bSchedulerAddress, tSchedulerAddress, web3) { + this.sender = ""; + this.gasLimit = 0; + this.sendValue = 0; + this.web3 = web3; + try { + const BlockSchedulerABI = Util.getABI("BlockScheduler"); + const TimestampSchedulerABI = Util.getABI("TimestampScheduler"); + this.blockScheduler = web3.eth + .contract(BlockSchedulerABI) + .at(bSchedulerAddress); + this.timestampScheduler = web3.eth + .contract(TimestampSchedulerABI) + .at(tSchedulerAddress); + } + catch (err) { + throw new Error(err); + } + } + getFactoryAddress() { + return new Promise((resolve, reject) => { + this.blockScheduler.factoryAddress.call((err, address) => { + if (!err) { + resolve(address); + } + else { + reject(err); + } + }); + }); + } + initSender(opts) { + this.sender = opts.from; + this.gasLimit = opts.gas; + this.sendValue = opts.value; + return true; + } + setGas(gasLimit) { + this.gasLimit = gasLimit; + return true; + } + setSender(address) { + // TODO verfiy with ethUtil + this.sender = address; + return true; + } + setSendValue(value) { + this.sendValue = value; + return true; + } + blockSchedule(toAddress, callData, callGas, callValue, windowSize, windowStart, gasPrice, fee, bounty, requiredDeposit, waitForMined = true) { + return new Promise((resolve, reject) => { + this.blockScheduler.schedule.sendTransaction(toAddress, callData, [ + callGas, + callValue, + windowSize, + windowStart, + gasPrice, + fee, + bounty, + requiredDeposit, + ], { + from: this.sender, + gas: this.gasLimit, + value: this.sendValue, + }, (err, txHash) => { + if (err) { + reject(err); + } + else { + const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash, null); + if (waitForMined) { + miningPromise + .then((receipt) => resolve(receipt)) + .catch((e) => reject(e)); + } + else { + resolve({ + miningPromise, + transactionHash: txHash, + }); + } + } + }); + }); + } + timestampSchedule(toAddress, callData, callGas, callValue, windowSize, windowStart, gasPrice, fee, bounty, requiredDeposit, waitForMined = true) { + return new Promise((resolve, reject) => { + this.timestampScheduler.schedule(toAddress, callData, [ + callGas, + callValue, + windowSize, + windowStart, + gasPrice, + fee, + bounty, + requiredDeposit, + ], { + from: this.sender, + gas: this.gasLimit, + value: this.sendValue, + }, (err, txHash) => { + if (err) { + reject(err); + } + else { + const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash, null); + if (waitForMined) { + miningPromise + .then((receipt) => resolve(receipt)) + .catch((e) => reject(e)); + } + else { + resolve({ + miningPromise, + transactionHash: txHash, + }); + } + } + }); + }); + } + calcEndowment(callGas, callValue, gasPrice, fee, bounty) { + // Convert the value to a bignumber works even if it's already one. + const callGasBN = new bignumber_js_1.default(callGas); + const callValueBN = new bignumber_js_1.default(callValue); + const gasPriceBN = new bignumber_js_1.default(gasPrice); + const feeBN = new bignumber_js_1.default(fee); + const bountyBN = new bignumber_js_1.default(bounty); + return bountyBN + .plus(feeBN.times(2)) + .plus(callGasBN.times(gasPrice)) + .plus(gasPriceBN.times(180000)) + .plus(callValueBN); + } + } + exports.default = Scheduler; +}); +define("txRequest/requestData", ["require", "exports", "bignumber.js"], function (require, exports, bignumber_js_2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + bignumber_js_2 = __importDefault(bignumber_js_2); + class RequestData { + constructor(data, txRequest) { + this.claimData = {}; + this.meta = {}; + this.paymentData = {}; + this.schedule = {}; + this.txData = {}; + if (typeof data === "undefined" || typeof txRequest === "undefined") { + throw new Error("Cannot call the constructor directly."); + } + this.txRequest = txRequest; + this.fill(data); + } + static from(txRequest) { + return new Promise((resolve, reject) => { + txRequest.requestData.call({ gas: 3000000 }, (err, data) => { + if (err) { + reject(err); + } + else { + resolve(new RequestData(data, txRequest)); + } + }); + }); + } + fill(data) { + this.claimData = { + claimDeposit: new bignumber_js_2.default(data[2][0]), + claimedBy: data[0][0], + paymentModifier: parseInt(data[3][0], 10), + requiredDeposit: new bignumber_js_2.default(data[2][14]), + }; + this.meta = { + createdBy: data[0][1], + isCancelled: data[1][0], + owner: data[0][2], + wasCalled: data[1][1], + wasSuccessful: data[1][2], + }; + this.paymentData = { + bounty: new bignumber_js_2.default(data[2][3]), + bountyBenefactor: data[0][4], + bountyOwed: new bignumber_js_2.default(data[2][4]), + fee: new bignumber_js_2.default(data[2][1]), + feeOwed: new bignumber_js_2.default(data[2][2]), + feeRecipient: data[0][3], + }; + this.schedule = { + claimWindowSize: new bignumber_js_2.default(data[2][5]), + freezePeriod: new bignumber_js_2.default(data[2][6]), + reservedWindowSize: new bignumber_js_2.default(data[2][7]), + temporalUnit: parseInt(data[2][8], 10), + windowSize: new bignumber_js_2.default(data[2][9]), + windowStart: new bignumber_js_2.default(data[2][10]), + }; + this.txData = { + callGas: new bignumber_js_2.default(data[2][11]), + callValue: new bignumber_js_2.default(data[2][12]), + gasPrice: new bignumber_js_2.default(data[2][13]), + toAddress: data[0][5], + }; + } + refresh() { + return new Promise((resolve, reject) => { + this.txRequest.requestData.call((err, data) => { + if (err) { + reject(err); + } + else { + this.fill(data); + resolve(true); + } + }); + }); + } + } + exports.default = RequestData; +}); +define("txRequest/txRequest", ["require", "exports", "bignumber.js", "constants", "util", "txRequest/requestData"], function (require, exports, bignumber_js_3, constants_2, util_3, requestData_1) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + bignumber_js_3 = __importDefault(bignumber_js_3); + constants_2 = __importDefault(constants_2); + util_3 = __importDefault(util_3); + requestData_1 = __importDefault(requestData_1); + const Util = new util_3.default(null); + var TXREQUEST_ERROR; + (function (TXREQUEST_ERROR) { + TXREQUEST_ERROR["NULL_ADDRESS"] = "Attempted to instantiate a TxRequest class from a null address."; + })(TXREQUEST_ERROR || (TXREQUEST_ERROR = {})); + class TxRequest { + constructor(address, web3) { + this.data = {}; + if (!Util.checkNotNullAddress(address)) { + throw new Error(TXREQUEST_ERROR.NULL_ADDRESS); + } + this.web3 = web3; + this.instance = this.web3.eth + .contract(Util.getABI("TransactionRequestCore")) + .at(address); + } + get address() { + return this.instance.address; + } + /** + * Window centric getters + */ + get claimWindowSize() { + this.checkData(); + return this.data.schedule.claimWindowSize; + } + get claimWindowStart() { + this.checkData(); + return this.windowStart.minus(this.freezePeriod).minus(this.claimWindowSize); + } + get claimWindowEnd() { + this.checkData(); + return this.claimWindowStart.plus(this.claimWindowSize); + } + get freezePeriod() { + this.checkData(); + return this.data.schedule.freezePeriod; + } + get freezePeriodStart() { + this.checkData(); + return this.windowStart.plus(this.claimWindowSize); + } + get freezePeriodEnd() { + this.checkData(); + return this.claimWindowEnd.plus(this.freezePeriod); + } + get temporalUnit() { + this.checkData(); + return this.data.schedule.temporalUnit; + } + get windowSize() { + this.checkData(); + return this.data.schedule.windowSize; + } + get windowStart() { + this.checkData(); + return this.data.schedule.windowStart; + } + get reservedWindowSize() { + this.checkData(); + return this.data.schedule.reservedWindowSize; + } + get reservedWindowEnd() { + this.checkData(); + return this.windowStart.plus(this.reservedWindowSize); + } + get executionWindowEnd() { + this.checkData(); + return this.windowStart.plus(this.windowSize); + } + /** + * Dynamic getters + */ + now() { + return __awaiter(this, void 0, void 0, function* () { + if (this.temporalUnit === 1) { + return new bignumber_js_3.default(yield Util.getBlockNumber(this.web3)); + } + else if (this.temporalUnit === 2) { + const timestamp = yield Util.getTimestamp(this.web3); + return new bignumber_js_3.default(timestamp); + } + throw new Error(`Unrecognized temporal unit: ${this.temporalUnit}`); + }); + } + beforeClaimWindow() { + return __awaiter(this, void 0, void 0, function* () { + const now = yield this.now(); + return this.claimWindowStart.greaterThan(now); + }); + } + inClaimWindow() { + return __awaiter(this, void 0, void 0, function* () { + const now = yield this.now(); + return (this.claimWindowStart.lessThanOrEqualTo(now) && + this.claimWindowEnd.greaterThan(now)); + }); + } + inFreezePeriod() { + return __awaiter(this, void 0, void 0, function* () { + const now = yield this.now(); + return (this.claimWindowEnd.lessThanOrEqualTo(now) && + this.freezePeriodEnd.greaterThan(now)); + }); + } + inExecutionWindow() { + return __awaiter(this, void 0, void 0, function* () { + const now = yield this.now(); + return (this.windowStart.lessThanOrEqualTo(now) && + this.executionWindowEnd.greaterThanOrEqualTo(now)); + }); + } + inReservedWindow() { + return __awaiter(this, void 0, void 0, function* () { + const now = yield this.now(); + return (this.windowStart.lessThanOrEqualTo(now) && + this.reservedWindowEnd.greaterThan(now)); + }); + } + afterExecutionWindow() { + return __awaiter(this, void 0, void 0, function* () { + const now = yield this.now(); + return this.executionWindowEnd.lessThan(now); + }); + } + executedAt() { + return __awaiter(this, void 0, void 0, function* () { + return (yield this.getExecutedEvent()).blockNumber; + }); + } + getExecutedEvent() { + if (!this.wasCalled) { + return { blockNumber: 0 }; + } + const events = this.instance.allEvents({ fromBlock: 0, toBlock: "latest" }); + return new Promise((resolve, reject) => { + events.get((err, logs) => { + if (!err) { + const Executed = logs.filter((log) => { + return log.topics[0] === "0x3e504bb8b225ad41f613b0c3c4205cdd752d1615b4d77cd1773417282fcfb5d9"; + }); + resolve({ + blockNumber: Executed[0].blockNumber, + bounty: this.web3.toDecimal("0x" + Executed[0].data.slice(2, 66)), + estimatedGas: this.web3.toDecimal("0x" + Executed[0].data.slice(131, 194)), + fee: this.web3.toDecimal("0x" + Executed[0].data.slice(67, 130)), + }); + } + else { + reject(err); + } + }); + }); + } + getBucket() { + let sign = -1; + let bucketSize = 0; + if (this.temporalUnit === 1) { + bucketSize = 240; + } + else if (this.temporalUnit === 2) { + bucketSize = 3600; + sign = 1; + } + return sign * this.windowStart.toNumber() - (this.windowStart.toNumber() % bucketSize); + } + /** + * Claim props/methods + */ + get claimedBy() { + this.checkData(); + return this.data.claimData.claimedBy; + } + get isClaimed() { + this.checkData(); + return this.data.claimData.claimedBy !== constants_2.default.NULL_ADDRESS; + } + isClaimedBy(address) { + this.checkData(); + return this.claimedBy === address; + } + get requiredDeposit() { + this.checkData(); + return this.data.claimData.requiredDeposit; + } + claimPaymentModifier() { + return __awaiter(this, void 0, void 0, function* () { + const now = yield this.now(); + const elapsed = now.minus(this.claimWindowStart); + return elapsed.times(100).dividedToIntegerBy(this.claimWindowSize); + }); + } + /** + * Meta + */ + get isCancelled() { + this.checkData(); + return this.data.meta.isCancelled; + } + get wasCalled() { + this.checkData(); + return this.data.meta.wasCalled; + } + get wasSuccessful() { + this.checkData(); + return this.data.meta.wasSuccessful; + } + get owner() { + this.checkData(); + return this.data.meta.owner; + } + /** + * TxData + */ + get toAddress() { + this.checkData(); + return this.data.txData.toAddress; + } + get callGas() { + this.checkData(); + return this.data.txData.callGas; + } + get callValue() { + this.checkData(); + return this.data.txData.callValue; + } + get gasPrice() { + this.checkData(); + return this.data.txData.gasPrice; + } + get fee() { + this.checkData(); + return this.data.paymentData.fee; + } + get bounty() { + this.checkData(); + return this.data.paymentData.bounty; + } + /** + * Call Data + */ + callData() { + return new Promise((resolve, reject) => { + this.instance.callData.call((err, callData) => { + if (!err) { + resolve(callData); + } + else { + reject(err); + } + }); + }); + } + /** + * Data management + */ + fillData() { + return __awaiter(this, void 0, void 0, function* () { + const requestData = yield requestData_1.default.from(this.instance); + this.data = requestData; + return true; + }); + } + refreshData() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.data) { + return this.fillData(); + } + return this.data.refresh(); + }); + } + /** + * ABI convenience functions + */ + get claimData() { + return this.instance.claim.getData(); + } + get executeData() { + return this.instance.execute.getData(); + } + get cancelData() { + return this.instance.cancel.getData(); + } + /** + * Action Wrappers + */ + /** + * @param {Object} params Transaction object including `from`, `gas`, `gasPrice` and `value`. + */ + claim(params) { + return new Promise((resolve, reject) => { + this.instance.claim(params, (err, txHash) => { + if (err) { + reject(err); + } + else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) + .then((receipt) => resolve(receipt)) + .catch((e) => reject(e)); + } + }); + }); + } + /** + * @param {Object} params Transaction object including `from`, `gas`, `gasPrice` and `value`. + */ + execute(params) { + return new Promise((resolve, reject) => { + this.instance.execute(params, (err, txHash) => { + if (err) { + reject(err); + } + else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) + .then((receipt) => resolve(receipt)) + .catch((e) => reject(e)); + } + }); + }); + } + /** + * @param {Object} params Transaction object including `from`, `gas`, `gasPrice` and `value`. + */ + cancel(params) { + return new Promise((resolve, reject) => { + this.instance.cancel(params, (err, txHash) => { + if (err) { + reject(err); + } + else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) + .then((receipt) => resolve(receipt)) + .catch((e) => reject(e)); + } + }); + }); + } + /** + * Proxy + * @param {string} toAddress Ethereum address + * @param {string} data Hex encoded data for the transaction to proxy + * @param {Object} params Transaction object including `from`, `gas`, `gasPrice` and `value`. + */ + proxy(toAddress, data, params) { + return new Promise((resolve, reject) => { + this.instance.proxy(toAddress, data, params, (err, txHash) => { + if (err) { + reject(err); + } + else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) + .then(resolve) // resolves the receipt + .catch(reject); // rejects the error + } + }); + }); + } + /** + * Pull Payments + */ + refundClaimDeposit(params) { + return new Promise((resolve, reject) => { + this.instance.refundClaimDeposit(params, (err, txHash) => { + if (err) { + reject(err); + } + else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) + .then(resolve) + .catch(reject); + } + }); + }); + } + sendFee(params) { + return new Promise((resolve, reject) => { + this.instance.sendFee(params, (err, txHash) => { + if (err) { + reject(err); + } + else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) + .then(resolve) + .catch(reject); + } + }); + }); + } + sendBounty(params) { + return new Promise((resolve, reject) => { + this.instance.sendBounty(params, (err, txHash) => { + if (err) { + reject(err); + } + else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) + .then(resolve) + .catch(reject); + } + }); + }); + } + sendOwnerEther(params) { + return new Promise((resolve, reject) => { + this.instance.sendOwnerEther(params, (err, txHash) => { + if (err) { + reject(err); + } + else { + Util.waitForTransactionToBeMined(this.web3, txHash, null) + .then(resolve) + .catch(reject); + } + }); + }); + } + /** + * Misc. + */ + getBalance() { + return __awaiter(this, void 0, void 0, function* () { + const bal = yield Util.getBalance(this.web3, this.address); + return new bignumber_js_3.default(bal); + }); + } + /** + * Error handling + */ + checkData() { + if (!this.data) { + throw new Error("Data has not been filled! Please call `txRequest.fillData()` before using this method."); + } + } + } + exports.default = TxRequest; +}); +define("txRequest/index", ["require", "exports", "txRequest/txRequest"], function (require, exports, txRequest_1) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = txRequest_1.default; +}); diff --git a/tsconfig.json b/tsconfig.json index 3760477..9a0b930 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,8 @@ { "compilerOptions": { /* Basic Options */ - "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + "target": "es2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ + "module": "amd", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ "lib": ["es2015"], /* Specify library files to be included in the compilation. */ // "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ @@ -10,8 +10,8 @@ // "declaration": true, /* Generates corresponding '.d.ts' file. */ // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - // "outDir": "./", /* Redirect output structure to the directory. */ + "outFile": "./buidl", /* Concatenate and emit output to single file. */ + // "outDir": "./buidl", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ // "composite": true, /* Enable project compilation */ // "removeComments": true, /* Do not emit comments to output. */ From f55d824756fd12a089d004d52e660c2a27b41a7a Mon Sep 17 00:00:00 2001 From: lsaether Date: Mon, 30 Jul 2018 13:05:04 +0300 Subject: [PATCH 09/24] fix build --- .gitignore | 3 +- buidl | 1165 ----------------- .../index.ts | 14 +- lib/{scheduling => Scheduler}/index.ts | 4 +- lib/TransactionRequest/index.ts | 4 + .../requestData.ts | 0 .../txRequest.ts | 46 +- lib/Version/index.ts | 4 + lib/index.ts | 48 + lib/txRequest/index.ts | 1 - lib/util.ts | 44 +- package.json | 3 + tsconfig.json | 8 +- 13 files changed, 120 insertions(+), 1224 deletions(-) delete mode 100644 buidl rename lib/{requestFactory => RequestFactory}/index.ts (95%) rename lib/{scheduling => Scheduler}/index.ts (98%) create mode 100644 lib/TransactionRequest/index.ts rename lib/{txRequest => TransactionRequest}/requestData.ts (100%) rename lib/{txRequest => TransactionRequest}/txRequest.ts (89%) create mode 100644 lib/Version/index.ts create mode 100644 lib/index.ts delete mode 100644 lib/txRequest/index.ts diff --git a/.gitignore b/.gitignore index 00902b3..c81f5ff 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ site site/ lib/assets/tester.json lib/assets/development.json -lib/build/contracts \ No newline at end of file +lib/build/contracts +build \ No newline at end of file diff --git a/buidl b/buidl deleted file mode 100644 index 61e6edc..0000000 --- a/buidl +++ /dev/null @@ -1,1165 +0,0 @@ -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -define("constants", ["require", "exports"], function (require, exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.default = { - ABORTEDLOG: "0xc008bc849b42227c61d5063a1313ce509a6e99211bfd59e827e417be6c65c81b", - EQ_HEX: "0x3d3d", - EXECUTEDLOG: "0x3e504bb8b225ad41f613b0c3c4205cdd752d1615b4d77cd1773417282fcfb5d9", - GTE_HEX: "0x3e3d", - GT_HEX: "0x3e", - LTE_HEX: "0x3c3d", - LT_HEX: "0x3c", - NEWREQUESTLOG: "0x2749295aa7ffdbd4d16719dc03d592cd081eebd9bb790ceedce201a40675fc03", - NULL_ADDRESS: "0x0000000000000000000000000000000000000000", - }; -}); -define("util", ["require", "exports", "ethereumjs-util", "constants"], function (require, exports, ethUtil, constants_1) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - ethUtil = __importStar(ethUtil); - constants_1 = __importDefault(constants_1); - var UTIL_ERROR; - (function (UTIL_ERROR) { - UTIL_ERROR["WEB3_ERROR"] = "[eac.js-lib] You must either pass a Web3 object to Util class or instatiate it with Web3 object."; - UTIL_ERROR["DEPRECATED"] = "[eac.js-lib] Deprecated."; - })(UTIL_ERROR || (UTIL_ERROR = {})); - class Util { - constructor(web3) { - this.web3 = web3; - } - calcEndowment(gas, value, gasPrice, fee, bounty) { - return bounty.add(fee).add(gas.times(gasPrice)).add(gasPrice.times(180000)).add(value); - } - checkForUnlockedAccount() { - throw new Error(UTIL_ERROR.DEPRECATED); - } - checkNetworkID(web3) { - web3 = this.checkWeb3(web3); - return new Promise((resolve, reject) => { - web3.version.getNetwork((err, netId) => { - switch (netId) { - case "1": - // mainnet - resolve(false); - break; - case "3": - // ropsten - resolve(true); - break; - case "4": - // rinkeby - resolve(false); - break; - case "42": - // kovan - resolve(true); - break; - case "1001": - // docker - resolve(true); - break; - case "1002": - // development - resolve(true); - break; - default: - resolve(false); - } - }); - }); - } - checkNotNullAddress(address) { - return address !== constants_1.default.NULL_ADDRESS; - } - checkValidAddress(address) { - return ethUtil.isValidAddress(address); - } - estimateGas(web3, opts) { - web3 = this.checkWeb3(web3); - return new Promise((resolve, reject) => { - web3.eth.estimateGas(opts, (err, gas) => { - if (!err) { - resolve(gas); - } - else { - reject(err); - } - }); - }); - } - getABI(name) { - return require(`${__dirname}/build/abi/${name}.json`); - } - getBalance(web3, address) { - web3 = this.checkWeb3(web3); - return new Promise((resolve, reject) => { - web3.eth.getBalance(address, (err, bal) => { - if (!err) { - resolve(bal); - } - else { - reject(err); - } - }); - }); - } - getBlockNumber(web3) { - web3 = this.checkWeb3(web3); - return new Promise((resolve, reject) => { - web3.eth.getBlockNumber((err, blockNum) => { - if (!err) { - resolve(blockNum); - } - else { - reject(err); - } - }); - }); - } - getGasPrice(web3) { - web3 = this.checkWeb3(web3); - return new Promise((resolve, reject) => { - web3.eth.getGasPrice((err, gasPrice) => { - if (!err) { - resolve(gasPrice); - } - else { - reject(err); - } - }); - }); - } - getTimestamp(web3) { - web3 = this.checkWeb3(web3); - return new Promise((resolve, reject) => { - web3.eth.getBlock("latest", (err, block) => { - if (!err) { - resolve(block.timestamp); - } - else { - reject(err); - } - }); - }); - } - getTimestampForBlock(web3, blockNum) { - web3 = this.checkWeb3(web3); - this.getBlockNumber(web3).then((curBlockNum) => { - if (blockNum > curBlockNum) { - throw new Error(`[eac.js-lib] Passed blockNum ${blockNum} is greater than current blockNum ${curBlockNum}`); - } - return new Promise((resolve, reject) => { - web3.eth.getBlock(blockNum, (err, block) => { - if (!err) { - resolve(block.timestamp); - } - else { - reject(err); - } - }); - }); - }); - } - getTxRequestFromReceipt(receipt) { - const newRequestLog = receipt.logs.find((log) => { - return log.topics[0] === constants_1.default.NEWREQUESTLOG; - }); - if (!newRequestLog) { - throw new Error("[eac.js-lib] Invalid receipt passed!"); - } - return "0x" + newRequestLog.data.slice(-40); - } - getChainName(web3) { - web3 = this.checkWeb3(web3); - return new Promise((resolve, reject) => { - web3.version.getNetwork((err, netId) => { - switch (netId) { - case "1": - reject("Not implemented on mainnet."); - break; - case "3": - resolve("ropsten"); - break; - case "4": - resolve("rinkeby"); - break; - case "42": - resolve("kovan"); - break; - case "1001": - resolve("docker"); - break; - case "1002": - resolve("development"); - break; - default: - resolve("tester"); - } - }); - }); - } - waitForTransactionToBeMined(web3, txHash, interval) { - interval = interval || 500; - web3 = this.checkWeb3(web3); - const txReceiptAsync = (txHash2, resolve, reject) => { - web3.eth.getTransactionReceipt(txHash2, (err, receipt) => { - if (err) { - reject(err); - } - else if (receipt === null) { - setTimeout(() => { - txReceiptAsync(txHash2, resolve, reject); - }, interval); - } - else { - resolve(receipt); - } - }); - }; - return new Promise((resolve, reject) => { - txReceiptAsync(txHash, resolve, reject); - }); - } - checkWeb3(web3) { - if (!web3 && !this.web3) { - throw new Error(UTIL_ERROR.WEB3_ERROR); - } - return web3 || this.web3; - } - } - exports.default = Util; -}); -// module.exports = (web3) => { -// if (!web3) { -// return { -// calcEndowment, -// checkForUnlockedAccount, -// checkNetworkID, -// checkNotNullAddress, -// checkValidAddress, -// estimateGas, -// getABI, -// getBalance, -// getBlockNumber, -// getChainName, -// getGasPrice, -// getTimestamp, -// getTimestampForBlock, -// getTxRequestFromReceipt, -// waitForTransactionToBeMined, -// } -// } -// return { -// calcEndowment, -// checkForUnlockedAccount: () => checkForUnlockedAccount(web3), -// checkNetworkID: () => checkNetworkID(web3), -// checkNotNullAddress, -// checkValidAddress, -// estimateGas: opts => estimateGas(web3, opts), -// getABI, -// getBalance: address => getBalance(web3, address), -// getBlockNumber: () => getBlockNumber(web3), -// getChainName: () => getChainName(web3), -// getGasPrice: () => getGasPrice(web3), -// getTimestamp: () => getTimestamp(web3), -// getTimestampForBlock: blockNum => getTimestampForBlock(web3, blockNum), -// getTxRequestFromReceipt, -// waitForTransactionToBeMined: txHash => -// waitForTransactionToBeMined(web3, txHash), -// } -// } -/* eslint class-methods-use-this: "off" */ -define("requestFactory/index", ["require", "exports", "util"], function (require, exports, util_1) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - util_1 = __importDefault(util_1); - const Util = new util_1.default(null); - class RequestFactory { - constructor(address, web3) { - if (!Util.checkNotNullAddress(address)) { - throw new Error(`Cannot initialize a RequestFactory from address ${address}`); - } - this.web3 = web3; - this.instance = this.web3.eth - .contract(Util.getABI("RequestFactory")) - .at(address); - } - get address() { - return this.instance.address; - } - /** - * Conveinence methods - */ - isKnownRequest(requestAddress) { - return new Promise((resolve, reject) => { - this.instance.isKnownRequest.call(requestAddress, (err, isKnown) => { - if (!err) { - resolve(isKnown); - } - else { - reject(err); - } - }); - }); - } - validateRequestParams(addressArgs, uintArgs, endowment) { - return new Promise((resolve, reject) => { - this.instance.validateRequestParams.call(addressArgs, uintArgs, endowment, (err, isValid) => { - if (!err) { - resolve(isValid); - } - else { - reject(err); - } - }); - }); - } - /** - * Parses the boolean returned by validateRequestParams() and returns the - * reason validation failed. - * @param {Array} isValid The array returned by this.validateRequestParams() - * @return {Array} An array of the strings of validation errors or an - * array of length 0 if no errors. - */ - parseIsValid(isValid) { - if (isValid.length !== 6) { - throw new Error("Must pass an array of booleans returned by validateRequestParams()"); - } - const Errors = [ - "InsufficientEndowment", - "ReservedWindowBiggerThanExecutionWindow", - "InvalidTemporalUnit", - "ExecutionWindowTooSoon", - "CallGasTooHigh", - "EmptyToAddress", - ]; - const errors = []; - isValid.forEach((boolIsTrue, index) => { - if (!boolIsTrue) { - errors.push(Errors[index]); - } - }); - return errors; - } - getRequestCreatedLogs(filter, startBlockNum, endBlockNum) { - return __awaiter(this, void 0, void 0, function* () { - const f = filter || {}; - const curBlock = yield Util.getBlockNumber(this.web3); - const start = startBlockNum || 1; - const end = endBlockNum || "latest"; - const event = this.instance.RequestCreated(f, { fromBlock: start, toBlock: end }); - return new Promise((resolve, reject) => { - event.get((err, logs) => { - if (!err) { - resolve(logs); - } - else { - reject(err); - } - }); - }); - }); - } - watchRequestCreatedLogs(filter, startBlockNum, callback) { - return __awaiter(this, void 0, void 0, function* () { - const f = filter || {}; - const curBlock = yield Util.getBlockNumber(this.web3); - const start = startBlockNum || 1; - const event = this.instance.RequestCreated(f, { fromBlock: start, toBlock: "latest" }); - event.watch((err, res) => { - callback(err, res); - }); - return event; - }); - } - stopWatch(event) { - return __awaiter(this, void 0, void 0, function* () { - return new Promise((resolve, reject) => { - event.stopWatching((err, res) => { - if (!err) { - resolve(res); - } - else { - reject(err); - } - }); - }); - }); - } - getRequestsByBucket(bucket) { - return __awaiter(this, void 0, void 0, function* () { - const logs = yield this.getRequestCreatedLogs({ - bucket, - }, 0, 0); - const requests = []; - logs.forEach((log) => { - requests.push({ - address: log.args.request, - params: log.args.params, - }); - }); - return requests; - }); - } - watchRequestsByBucket(bucket, cb) { - return __awaiter(this, void 0, void 0, function* () { - return yield this.watchRequestCreatedLogs({ - bucket, - }, "", (error, log) => { - if (log) { - cb({ - address: log.args.request, - params: log.args.params, - }); - } - }); - }); - } - // Assume the temporalUnit is blocks if not timestamp. - calcBucket(windowStart, temporalUnit) { - let bucketSize = 240; // block bucketsize - let sign = -1; // block sign - if (temporalUnit === 2) { - bucketSize = 3600; // timestamp bucketsize - sign = 1; // timestamp sign - } - return sign * (windowStart - (windowStart % bucketSize)); - } - getRequests(startBlock, endBlock) { - return __awaiter(this, void 0, void 0, function* () { - const logs = yield this.getRequestCreatedLogs({}, startBlock, endBlock); - const requests = []; - logs.forEach((log) => { - requests.push(log.args.request); - }); - return requests; - }); - } - watchRequests(startBlock, callback) { - return __awaiter(this, void 0, void 0, function* () { - return yield this.watchRequestCreatedLogs({}, startBlock, (error, log) => { - if (log) { - callback(log.args.request); - } - }); - }); - } - getRequestsByOwner(owner, startBlock, endBlock) { - return __awaiter(this, void 0, void 0, function* () { - const logs = yield this.getRequestCreatedLogs({ - owner, - }, startBlock, endBlock); - const requests = []; - logs.forEach((log) => { - requests.push(log.args.request); - }); - return requests; - }); - } - watchRequestsByOwner(owner, startBlock, callback) { - return __awaiter(this, void 0, void 0, function* () { - return yield this.watchRequestCreatedLogs({ - owner, - }, startBlock, (error, log) => { - if (log) { - callback(log.args.request); - } - }); - }); - } - } - exports.default = RequestFactory; -}); -define("scheduling/index", ["require", "exports", "bignumber.js", "util"], function (require, exports, bignumber_js_1, util_2) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - bignumber_js_1 = __importDefault(bignumber_js_1); - util_2 = __importDefault(util_2); - const Util = new util_2.default(null); - class Scheduler { - constructor(bSchedulerAddress, tSchedulerAddress, web3) { - this.sender = ""; - this.gasLimit = 0; - this.sendValue = 0; - this.web3 = web3; - try { - const BlockSchedulerABI = Util.getABI("BlockScheduler"); - const TimestampSchedulerABI = Util.getABI("TimestampScheduler"); - this.blockScheduler = web3.eth - .contract(BlockSchedulerABI) - .at(bSchedulerAddress); - this.timestampScheduler = web3.eth - .contract(TimestampSchedulerABI) - .at(tSchedulerAddress); - } - catch (err) { - throw new Error(err); - } - } - getFactoryAddress() { - return new Promise((resolve, reject) => { - this.blockScheduler.factoryAddress.call((err, address) => { - if (!err) { - resolve(address); - } - else { - reject(err); - } - }); - }); - } - initSender(opts) { - this.sender = opts.from; - this.gasLimit = opts.gas; - this.sendValue = opts.value; - return true; - } - setGas(gasLimit) { - this.gasLimit = gasLimit; - return true; - } - setSender(address) { - // TODO verfiy with ethUtil - this.sender = address; - return true; - } - setSendValue(value) { - this.sendValue = value; - return true; - } - blockSchedule(toAddress, callData, callGas, callValue, windowSize, windowStart, gasPrice, fee, bounty, requiredDeposit, waitForMined = true) { - return new Promise((resolve, reject) => { - this.blockScheduler.schedule.sendTransaction(toAddress, callData, [ - callGas, - callValue, - windowSize, - windowStart, - gasPrice, - fee, - bounty, - requiredDeposit, - ], { - from: this.sender, - gas: this.gasLimit, - value: this.sendValue, - }, (err, txHash) => { - if (err) { - reject(err); - } - else { - const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash, null); - if (waitForMined) { - miningPromise - .then((receipt) => resolve(receipt)) - .catch((e) => reject(e)); - } - else { - resolve({ - miningPromise, - transactionHash: txHash, - }); - } - } - }); - }); - } - timestampSchedule(toAddress, callData, callGas, callValue, windowSize, windowStart, gasPrice, fee, bounty, requiredDeposit, waitForMined = true) { - return new Promise((resolve, reject) => { - this.timestampScheduler.schedule(toAddress, callData, [ - callGas, - callValue, - windowSize, - windowStart, - gasPrice, - fee, - bounty, - requiredDeposit, - ], { - from: this.sender, - gas: this.gasLimit, - value: this.sendValue, - }, (err, txHash) => { - if (err) { - reject(err); - } - else { - const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash, null); - if (waitForMined) { - miningPromise - .then((receipt) => resolve(receipt)) - .catch((e) => reject(e)); - } - else { - resolve({ - miningPromise, - transactionHash: txHash, - }); - } - } - }); - }); - } - calcEndowment(callGas, callValue, gasPrice, fee, bounty) { - // Convert the value to a bignumber works even if it's already one. - const callGasBN = new bignumber_js_1.default(callGas); - const callValueBN = new bignumber_js_1.default(callValue); - const gasPriceBN = new bignumber_js_1.default(gasPrice); - const feeBN = new bignumber_js_1.default(fee); - const bountyBN = new bignumber_js_1.default(bounty); - return bountyBN - .plus(feeBN.times(2)) - .plus(callGasBN.times(gasPrice)) - .plus(gasPriceBN.times(180000)) - .plus(callValueBN); - } - } - exports.default = Scheduler; -}); -define("txRequest/requestData", ["require", "exports", "bignumber.js"], function (require, exports, bignumber_js_2) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - bignumber_js_2 = __importDefault(bignumber_js_2); - class RequestData { - constructor(data, txRequest) { - this.claimData = {}; - this.meta = {}; - this.paymentData = {}; - this.schedule = {}; - this.txData = {}; - if (typeof data === "undefined" || typeof txRequest === "undefined") { - throw new Error("Cannot call the constructor directly."); - } - this.txRequest = txRequest; - this.fill(data); - } - static from(txRequest) { - return new Promise((resolve, reject) => { - txRequest.requestData.call({ gas: 3000000 }, (err, data) => { - if (err) { - reject(err); - } - else { - resolve(new RequestData(data, txRequest)); - } - }); - }); - } - fill(data) { - this.claimData = { - claimDeposit: new bignumber_js_2.default(data[2][0]), - claimedBy: data[0][0], - paymentModifier: parseInt(data[3][0], 10), - requiredDeposit: new bignumber_js_2.default(data[2][14]), - }; - this.meta = { - createdBy: data[0][1], - isCancelled: data[1][0], - owner: data[0][2], - wasCalled: data[1][1], - wasSuccessful: data[1][2], - }; - this.paymentData = { - bounty: new bignumber_js_2.default(data[2][3]), - bountyBenefactor: data[0][4], - bountyOwed: new bignumber_js_2.default(data[2][4]), - fee: new bignumber_js_2.default(data[2][1]), - feeOwed: new bignumber_js_2.default(data[2][2]), - feeRecipient: data[0][3], - }; - this.schedule = { - claimWindowSize: new bignumber_js_2.default(data[2][5]), - freezePeriod: new bignumber_js_2.default(data[2][6]), - reservedWindowSize: new bignumber_js_2.default(data[2][7]), - temporalUnit: parseInt(data[2][8], 10), - windowSize: new bignumber_js_2.default(data[2][9]), - windowStart: new bignumber_js_2.default(data[2][10]), - }; - this.txData = { - callGas: new bignumber_js_2.default(data[2][11]), - callValue: new bignumber_js_2.default(data[2][12]), - gasPrice: new bignumber_js_2.default(data[2][13]), - toAddress: data[0][5], - }; - } - refresh() { - return new Promise((resolve, reject) => { - this.txRequest.requestData.call((err, data) => { - if (err) { - reject(err); - } - else { - this.fill(data); - resolve(true); - } - }); - }); - } - } - exports.default = RequestData; -}); -define("txRequest/txRequest", ["require", "exports", "bignumber.js", "constants", "util", "txRequest/requestData"], function (require, exports, bignumber_js_3, constants_2, util_3, requestData_1) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - bignumber_js_3 = __importDefault(bignumber_js_3); - constants_2 = __importDefault(constants_2); - util_3 = __importDefault(util_3); - requestData_1 = __importDefault(requestData_1); - const Util = new util_3.default(null); - var TXREQUEST_ERROR; - (function (TXREQUEST_ERROR) { - TXREQUEST_ERROR["NULL_ADDRESS"] = "Attempted to instantiate a TxRequest class from a null address."; - })(TXREQUEST_ERROR || (TXREQUEST_ERROR = {})); - class TxRequest { - constructor(address, web3) { - this.data = {}; - if (!Util.checkNotNullAddress(address)) { - throw new Error(TXREQUEST_ERROR.NULL_ADDRESS); - } - this.web3 = web3; - this.instance = this.web3.eth - .contract(Util.getABI("TransactionRequestCore")) - .at(address); - } - get address() { - return this.instance.address; - } - /** - * Window centric getters - */ - get claimWindowSize() { - this.checkData(); - return this.data.schedule.claimWindowSize; - } - get claimWindowStart() { - this.checkData(); - return this.windowStart.minus(this.freezePeriod).minus(this.claimWindowSize); - } - get claimWindowEnd() { - this.checkData(); - return this.claimWindowStart.plus(this.claimWindowSize); - } - get freezePeriod() { - this.checkData(); - return this.data.schedule.freezePeriod; - } - get freezePeriodStart() { - this.checkData(); - return this.windowStart.plus(this.claimWindowSize); - } - get freezePeriodEnd() { - this.checkData(); - return this.claimWindowEnd.plus(this.freezePeriod); - } - get temporalUnit() { - this.checkData(); - return this.data.schedule.temporalUnit; - } - get windowSize() { - this.checkData(); - return this.data.schedule.windowSize; - } - get windowStart() { - this.checkData(); - return this.data.schedule.windowStart; - } - get reservedWindowSize() { - this.checkData(); - return this.data.schedule.reservedWindowSize; - } - get reservedWindowEnd() { - this.checkData(); - return this.windowStart.plus(this.reservedWindowSize); - } - get executionWindowEnd() { - this.checkData(); - return this.windowStart.plus(this.windowSize); - } - /** - * Dynamic getters - */ - now() { - return __awaiter(this, void 0, void 0, function* () { - if (this.temporalUnit === 1) { - return new bignumber_js_3.default(yield Util.getBlockNumber(this.web3)); - } - else if (this.temporalUnit === 2) { - const timestamp = yield Util.getTimestamp(this.web3); - return new bignumber_js_3.default(timestamp); - } - throw new Error(`Unrecognized temporal unit: ${this.temporalUnit}`); - }); - } - beforeClaimWindow() { - return __awaiter(this, void 0, void 0, function* () { - const now = yield this.now(); - return this.claimWindowStart.greaterThan(now); - }); - } - inClaimWindow() { - return __awaiter(this, void 0, void 0, function* () { - const now = yield this.now(); - return (this.claimWindowStart.lessThanOrEqualTo(now) && - this.claimWindowEnd.greaterThan(now)); - }); - } - inFreezePeriod() { - return __awaiter(this, void 0, void 0, function* () { - const now = yield this.now(); - return (this.claimWindowEnd.lessThanOrEqualTo(now) && - this.freezePeriodEnd.greaterThan(now)); - }); - } - inExecutionWindow() { - return __awaiter(this, void 0, void 0, function* () { - const now = yield this.now(); - return (this.windowStart.lessThanOrEqualTo(now) && - this.executionWindowEnd.greaterThanOrEqualTo(now)); - }); - } - inReservedWindow() { - return __awaiter(this, void 0, void 0, function* () { - const now = yield this.now(); - return (this.windowStart.lessThanOrEqualTo(now) && - this.reservedWindowEnd.greaterThan(now)); - }); - } - afterExecutionWindow() { - return __awaiter(this, void 0, void 0, function* () { - const now = yield this.now(); - return this.executionWindowEnd.lessThan(now); - }); - } - executedAt() { - return __awaiter(this, void 0, void 0, function* () { - return (yield this.getExecutedEvent()).blockNumber; - }); - } - getExecutedEvent() { - if (!this.wasCalled) { - return { blockNumber: 0 }; - } - const events = this.instance.allEvents({ fromBlock: 0, toBlock: "latest" }); - return new Promise((resolve, reject) => { - events.get((err, logs) => { - if (!err) { - const Executed = logs.filter((log) => { - return log.topics[0] === "0x3e504bb8b225ad41f613b0c3c4205cdd752d1615b4d77cd1773417282fcfb5d9"; - }); - resolve({ - blockNumber: Executed[0].blockNumber, - bounty: this.web3.toDecimal("0x" + Executed[0].data.slice(2, 66)), - estimatedGas: this.web3.toDecimal("0x" + Executed[0].data.slice(131, 194)), - fee: this.web3.toDecimal("0x" + Executed[0].data.slice(67, 130)), - }); - } - else { - reject(err); - } - }); - }); - } - getBucket() { - let sign = -1; - let bucketSize = 0; - if (this.temporalUnit === 1) { - bucketSize = 240; - } - else if (this.temporalUnit === 2) { - bucketSize = 3600; - sign = 1; - } - return sign * this.windowStart.toNumber() - (this.windowStart.toNumber() % bucketSize); - } - /** - * Claim props/methods - */ - get claimedBy() { - this.checkData(); - return this.data.claimData.claimedBy; - } - get isClaimed() { - this.checkData(); - return this.data.claimData.claimedBy !== constants_2.default.NULL_ADDRESS; - } - isClaimedBy(address) { - this.checkData(); - return this.claimedBy === address; - } - get requiredDeposit() { - this.checkData(); - return this.data.claimData.requiredDeposit; - } - claimPaymentModifier() { - return __awaiter(this, void 0, void 0, function* () { - const now = yield this.now(); - const elapsed = now.minus(this.claimWindowStart); - return elapsed.times(100).dividedToIntegerBy(this.claimWindowSize); - }); - } - /** - * Meta - */ - get isCancelled() { - this.checkData(); - return this.data.meta.isCancelled; - } - get wasCalled() { - this.checkData(); - return this.data.meta.wasCalled; - } - get wasSuccessful() { - this.checkData(); - return this.data.meta.wasSuccessful; - } - get owner() { - this.checkData(); - return this.data.meta.owner; - } - /** - * TxData - */ - get toAddress() { - this.checkData(); - return this.data.txData.toAddress; - } - get callGas() { - this.checkData(); - return this.data.txData.callGas; - } - get callValue() { - this.checkData(); - return this.data.txData.callValue; - } - get gasPrice() { - this.checkData(); - return this.data.txData.gasPrice; - } - get fee() { - this.checkData(); - return this.data.paymentData.fee; - } - get bounty() { - this.checkData(); - return this.data.paymentData.bounty; - } - /** - * Call Data - */ - callData() { - return new Promise((resolve, reject) => { - this.instance.callData.call((err, callData) => { - if (!err) { - resolve(callData); - } - else { - reject(err); - } - }); - }); - } - /** - * Data management - */ - fillData() { - return __awaiter(this, void 0, void 0, function* () { - const requestData = yield requestData_1.default.from(this.instance); - this.data = requestData; - return true; - }); - } - refreshData() { - return __awaiter(this, void 0, void 0, function* () { - if (!this.data) { - return this.fillData(); - } - return this.data.refresh(); - }); - } - /** - * ABI convenience functions - */ - get claimData() { - return this.instance.claim.getData(); - } - get executeData() { - return this.instance.execute.getData(); - } - get cancelData() { - return this.instance.cancel.getData(); - } - /** - * Action Wrappers - */ - /** - * @param {Object} params Transaction object including `from`, `gas`, `gasPrice` and `value`. - */ - claim(params) { - return new Promise((resolve, reject) => { - this.instance.claim(params, (err, txHash) => { - if (err) { - reject(err); - } - else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) - .then((receipt) => resolve(receipt)) - .catch((e) => reject(e)); - } - }); - }); - } - /** - * @param {Object} params Transaction object including `from`, `gas`, `gasPrice` and `value`. - */ - execute(params) { - return new Promise((resolve, reject) => { - this.instance.execute(params, (err, txHash) => { - if (err) { - reject(err); - } - else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) - .then((receipt) => resolve(receipt)) - .catch((e) => reject(e)); - } - }); - }); - } - /** - * @param {Object} params Transaction object including `from`, `gas`, `gasPrice` and `value`. - */ - cancel(params) { - return new Promise((resolve, reject) => { - this.instance.cancel(params, (err, txHash) => { - if (err) { - reject(err); - } - else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) - .then((receipt) => resolve(receipt)) - .catch((e) => reject(e)); - } - }); - }); - } - /** - * Proxy - * @param {string} toAddress Ethereum address - * @param {string} data Hex encoded data for the transaction to proxy - * @param {Object} params Transaction object including `from`, `gas`, `gasPrice` and `value`. - */ - proxy(toAddress, data, params) { - return new Promise((resolve, reject) => { - this.instance.proxy(toAddress, data, params, (err, txHash) => { - if (err) { - reject(err); - } - else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) - .then(resolve) // resolves the receipt - .catch(reject); // rejects the error - } - }); - }); - } - /** - * Pull Payments - */ - refundClaimDeposit(params) { - return new Promise((resolve, reject) => { - this.instance.refundClaimDeposit(params, (err, txHash) => { - if (err) { - reject(err); - } - else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) - .then(resolve) - .catch(reject); - } - }); - }); - } - sendFee(params) { - return new Promise((resolve, reject) => { - this.instance.sendFee(params, (err, txHash) => { - if (err) { - reject(err); - } - else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) - .then(resolve) - .catch(reject); - } - }); - }); - } - sendBounty(params) { - return new Promise((resolve, reject) => { - this.instance.sendBounty(params, (err, txHash) => { - if (err) { - reject(err); - } - else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) - .then(resolve) - .catch(reject); - } - }); - }); - } - sendOwnerEther(params) { - return new Promise((resolve, reject) => { - this.instance.sendOwnerEther(params, (err, txHash) => { - if (err) { - reject(err); - } - else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) - .then(resolve) - .catch(reject); - } - }); - }); - } - /** - * Misc. - */ - getBalance() { - return __awaiter(this, void 0, void 0, function* () { - const bal = yield Util.getBalance(this.web3, this.address); - return new bignumber_js_3.default(bal); - }); - } - /** - * Error handling - */ - checkData() { - if (!this.data) { - throw new Error("Data has not been filled! Please call `txRequest.fillData()` before using this method."); - } - } - } - exports.default = TxRequest; -}); -define("txRequest/index", ["require", "exports", "txRequest/txRequest"], function (require, exports, txRequest_1) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.default = txRequest_1.default; -}); diff --git a/lib/requestFactory/index.ts b/lib/RequestFactory/index.ts similarity index 95% rename from lib/requestFactory/index.ts rename to lib/RequestFactory/index.ts index aeb3607..427e1ff 100644 --- a/lib/requestFactory/index.ts +++ b/lib/RequestFactory/index.ts @@ -1,23 +1,21 @@ -/* eslint class-methods-use-this: "off" */ - import initUtil from "../util"; type Address = string; -const Util = new initUtil(null); - export default class RequestFactory { public instance: any; + public util: any; public web3: any; constructor(address: Address, web3: any) { - if (!Util.checkNotNullAddress(address)) { + if (!this.util.checkNotNullAddress(address)) { throw new Error(`Cannot initialize a RequestFactory from address ${address}`); } this.web3 = web3; + this.util = new initUtil(web3); this.instance = this.web3.eth - .contract(Util.getABI("RequestFactory")) + .contract(this.util.getABI("RequestFactory")) .at(address); } @@ -88,7 +86,7 @@ export default class RequestFactory { public async getRequestCreatedLogs(filter: any, startBlockNum: number, endBlockNum: number): Promise { const f = filter || {}; - const curBlock = await Util.getBlockNumber(this.web3); + const curBlock = await this.util.getBlockNumber(this.web3); const start = startBlockNum || 1; const end = endBlockNum || "latest"; const event = this.instance.RequestCreated( @@ -108,7 +106,7 @@ export default class RequestFactory { public async watchRequestCreatedLogs(filter: any, startBlockNum: any, callback: any): Promise { const f = filter || {}; - const curBlock = await Util.getBlockNumber(this.web3); + const curBlock = await this.util.getBlockNumber(this.web3); const start = startBlockNum || 1; const event = this.instance.RequestCreated( f, diff --git a/lib/scheduling/index.ts b/lib/Scheduler/index.ts similarity index 98% rename from lib/scheduling/index.ts rename to lib/Scheduler/index.ts index db44b27..6047787 100644 --- a/lib/scheduling/index.ts +++ b/lib/Scheduler/index.ts @@ -101,7 +101,7 @@ export default class Scheduler { if (err) { reject(err); } else { - const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash, null); + const miningPromise = Util.waitForTransactionToBeMined(txHash, null); if (waitForMined) { miningPromise @@ -155,7 +155,7 @@ export default class Scheduler { if (err) { reject(err); } else { - const miningPromise = Util.waitForTransactionToBeMined(this.web3, txHash, null); + const miningPromise = Util.waitForTransactionToBeMined(txHash, null); if (waitForMined) { miningPromise diff --git a/lib/TransactionRequest/index.ts b/lib/TransactionRequest/index.ts new file mode 100644 index 0000000..71ffa44 --- /dev/null +++ b/lib/TransactionRequest/index.ts @@ -0,0 +1,4 @@ +import TxRequest, { RequestData } from "./txRequest"; + +export default TxRequest; +export { RequestData }; diff --git a/lib/txRequest/requestData.ts b/lib/TransactionRequest/requestData.ts similarity index 100% rename from lib/txRequest/requestData.ts rename to lib/TransactionRequest/requestData.ts diff --git a/lib/txRequest/txRequest.ts b/lib/TransactionRequest/txRequest.ts similarity index 89% rename from lib/txRequest/txRequest.ts rename to lib/TransactionRequest/txRequest.ts index 59e5a9d..33dfdad 100644 --- a/lib/txRequest/txRequest.ts +++ b/lib/TransactionRequest/txRequest.ts @@ -4,8 +4,6 @@ import Constants from "../constants"; import initUtil from "../util"; import RequestData from "./requestData"; -const Util = new initUtil(null); - enum TXREQUEST_ERROR { NULL_ADDRESS = "Attempted to instantiate a TxRequest class from a null address.", } @@ -13,16 +11,18 @@ enum TXREQUEST_ERROR { export default class TxRequest { public data: RequestData = {} as RequestData; public instance: any; + public util: any; public web3: any; constructor(address: any, web3: any) { - if (!Util.checkNotNullAddress(address)) { + if (!this.util.checkNotNullAddress(address)) { throw new Error(TXREQUEST_ERROR.NULL_ADDRESS); } this.web3 = web3; + this.util = new initUtil(web3); this.instance = this.web3.eth - .contract(Util.getABI("TransactionRequestCore")) + .contract(this.util.getABI("TransactionRequestCore")) .at(address); } @@ -100,9 +100,9 @@ export default class TxRequest { public async now() { if (this.temporalUnit === 1) { - return new BigNumber(await Util.getBlockNumber(this.web3)); + return new BigNumber(await this.util.getBlockNumber(this.web3)); } else if (this.temporalUnit === 2) { - const timestamp = await Util.getTimestamp(this.web3); + const timestamp = await this.util.getTimestamp(this.web3); return new BigNumber(timestamp); } throw new Error(`Unrecognized temporal unit: ${this.temporalUnit}`); @@ -341,9 +341,9 @@ export default class TxRequest { if (err) { reject(err); } else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) - .then((receipt) => resolve(receipt)) - .catch((e) => reject(e)); + this.util.waitForTransactionToBeMined(txHash, null) + .then((receipt: any) => resolve(receipt)) + .catch((e: any) => reject(e)); } }); }); @@ -358,9 +358,9 @@ export default class TxRequest { if (err) { reject(err); } else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) - .then((receipt) => resolve(receipt)) - .catch((e) => reject(e)); + this.util.waitForTransactionToBeMined(txHash, null) + .then((receipt: any) => resolve(receipt)) + .catch((e: any) => reject(e)); } }); }); @@ -375,9 +375,9 @@ export default class TxRequest { if (err) { reject(err); } else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) - .then((receipt) => resolve(receipt)) - .catch((e) => reject(e)); + this.util.waitForTransactionToBeMined(txHash, null) + .then((receipt: any) => resolve(receipt)) + .catch((e: any) => reject(e)); } }); }); @@ -395,7 +395,7 @@ export default class TxRequest { if (err) { reject(err); } else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) + this.util.waitForTransactionToBeMined(txHash, null) .then(resolve) // resolves the receipt .catch(reject); // rejects the error } @@ -412,7 +412,7 @@ export default class TxRequest { if (err) { reject(err); } else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) + this.util.waitForTransactionToBeMined(txHash, null) .then(resolve) .catch(reject); } @@ -426,7 +426,7 @@ export default class TxRequest { if (err) { reject(err); } else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) + this.util.waitForTransactionToBeMined(txHash, null) .then(resolve) .catch(reject); } @@ -440,7 +440,7 @@ export default class TxRequest { if (err) { reject(err); } else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) + this.util.waitForTransactionToBeMined(txHash, null) .then(resolve) .catch(reject); } @@ -454,7 +454,7 @@ export default class TxRequest { if (err) { reject(err); } else { - Util.waitForTransactionToBeMined(this.web3, txHash, null) + this.util.waitForTransactionToBeMined(txHash, null) .then(resolve) .catch(reject); } @@ -467,7 +467,7 @@ export default class TxRequest { */ public async getBalance() { - const bal = await Util.getBalance(this.web3, this.address); + const bal = await this.util.getBalance(this.address); return new BigNumber(bal); } @@ -480,3 +480,7 @@ export default class TxRequest { } } } + +export { + RequestData, +}; diff --git a/lib/Version/index.ts b/lib/Version/index.ts new file mode 100644 index 0000000..9311abd --- /dev/null +++ b/lib/Version/index.ts @@ -0,0 +1,4 @@ +/* tslint:disable */ +const Version = require("../../package.json").version; + +export default Version; \ No newline at end of file diff --git a/lib/index.ts b/lib/index.ts new file mode 100644 index 0000000..36646b8 --- /dev/null +++ b/lib/index.ts @@ -0,0 +1,48 @@ +import Constants from "./constants"; +import RequestFactory from "./RequestFactory"; +import Scheduler from "./Scheduler"; +import TxRequest, { RequestData } from "./TransactionRequest"; +import Util from "./util"; +import Version from "./Version"; + +const initPackage = (web3: any) => { + // if (!web3) { + // return { + // Constants, + // RequestData, + // RequestFactory, + // Scheduler, + // TxRequest, + // Util: new Util(null), + // Version, + // }; + // } + + // We have a web3 object to initialize contracts. + const util = new Util(web3); + return { + Constants, + RequestData, + Util: util, + Version, + requestFactory: async () => { + const chainName = await util.getChainName(); + const contracts = require(`./lib/assets/${chainName}.json`); + return new RequestFactory(contracts.requestFactory, web3); + }, + scheduler: async () => { + const chainName = await util.getChainName() + const contracts = require(`./lib/assets/${chainName}.json`) + return new Scheduler( + contracts.blockScheduler, + contracts.timestampScheduler, + web3, + ); + }, + transactionRequest: (address: string) => { + return new TxRequest(address, web3); + }, + }; +}; + +export default initPackage; diff --git a/lib/txRequest/index.ts b/lib/txRequest/index.ts deleted file mode 100644 index b3aef08..0000000 --- a/lib/txRequest/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from "./txRequest"; diff --git a/lib/util.ts b/lib/util.ts index 2baab7b..31b4613 100644 --- a/lib/util.ts +++ b/lib/util.ts @@ -31,8 +31,8 @@ export default class Util { throw new Error(UTIL_ERROR.DEPRECATED); } - public checkNetworkID(web3: any): Promise { - web3 = this.checkWeb3(web3); + public checkNetworkID(): Promise { + const web3 = this.checkWeb3(); return new Promise((resolve: any, reject: any) => { web3.version.getNetwork((err: any, netId: any) => { @@ -70,8 +70,8 @@ export default class Util { return ethUtil.isValidAddress(address); } - public estimateGas(web3: any, opts: {}): Promise { - web3 = this.checkWeb3(web3); + public estimateGas(opts: {}): Promise { + const web3 = this.checkWeb3(); return new Promise((resolve: any, reject: any) => { web3.eth.estimateGas(opts, (err: any, gas: any) => { @@ -88,8 +88,8 @@ export default class Util { return require(`${__dirname}/build/abi/${name}.json`); } - public getBalance(web3: any, address: Address): Promise { - web3 = this.checkWeb3(web3); + public getBalance(address: Address): Promise { + const web3 = this.checkWeb3(); return new Promise((resolve: any, reject: any) => { web3.eth.getBalance(address, (err: any, bal: any) => { @@ -102,8 +102,8 @@ export default class Util { }); } - public getBlockNumber(web3: any): Promise { - web3 = this.checkWeb3(web3); + public getBlockNumber(): Promise { + const web3 = this.checkWeb3(); return new Promise((resolve: any, reject: any) => { web3.eth.getBlockNumber((err: any, blockNum: any) => { @@ -116,8 +116,8 @@ export default class Util { }); } - public getGasPrice(web3: any): Promise { - web3 = this.checkWeb3(web3); + public getGasPrice(): Promise { + const web3 = this.checkWeb3(); return new Promise((resolve: any, reject: any) => { web3.eth.getGasPrice((err: any, gasPrice: any) => { @@ -130,8 +130,8 @@ export default class Util { }); } - public getTimestamp(web3: any): Promise { - web3 = this.checkWeb3(web3); + public getTimestamp(): Promise { + const web3 = this.checkWeb3(); return new Promise((resolve: any, reject: any) => { web3.eth.getBlock("latest", (err: any, block: any) => { @@ -144,10 +144,10 @@ export default class Util { }); } - public getTimestampForBlock(web3: any, blockNum: any): any { - web3 = this.checkWeb3(web3); + public getTimestampForBlock(blockNum: any): any { + const web3 = this.checkWeb3(); - this.getBlockNumber(web3).then((curBlockNum) => { + this.getBlockNumber().then((curBlockNum) => { if (blockNum > curBlockNum) { throw new Error(`[eac.js-lib] Passed blockNum ${blockNum} is greater than current blockNum ${curBlockNum}`); } @@ -176,8 +176,8 @@ export default class Util { return "0x" + newRequestLog.data.slice(-40); } - public getChainName(web3: any): Promise { - web3 = this.checkWeb3(web3); + public getChainName(): Promise { + const web3 = this.checkWeb3(); return new Promise((resolve: any, reject: any) => { web3.version.getNetwork((err: any, netId: any) => { @@ -207,9 +207,9 @@ export default class Util { }); } - public waitForTransactionToBeMined(web3: any, txHash: any, interval: any): Promise { + public waitForTransactionToBeMined(txHash: any, interval: any): Promise { interval = interval || 500; - web3 = this.checkWeb3(web3); + const web3 = this.checkWeb3(); const txReceiptAsync = (txHash2: any, resolve: any, reject: any) => { web3.eth.getTransactionReceipt(txHash2, (err: any, receipt: any) => { @@ -230,11 +230,11 @@ export default class Util { }); } - private checkWeb3(web3: any): any { - if (!web3 && !this.web3) { + private checkWeb3(): any { + if (!this.web3) { throw new Error(UTIL_ERROR.WEB3_ERROR); } - return web3 || this.web3; + return this.web3; } } diff --git a/package.json b/package.json index e12d8e5..747b022 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,9 @@ "description": "Javascript library for interacting with the Ethereum Alarm Clock contracts", "main": "index.js", "scripts": { + "build": "tsc", + "lint": "tslint lib/**/*.ts", + "lint-fix": "tslint lib/**/*.ts --fix", "test": "mocha", "citest": "./scripts/citest.sh" }, diff --git a/tsconfig.json b/tsconfig.json index 9a0b930..dae6bff 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,16 +2,16 @@ "compilerOptions": { /* Basic Options */ "target": "es2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ - "module": "amd", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ "lib": ["es2015"], /* Specify library files to be included in the compilation. */ // "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - // "declaration": true, /* Generates corresponding '.d.ts' file. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ // "sourceMap": true, /* Generates corresponding '.map' file. */ - "outFile": "./buidl", /* Concatenate and emit output to single file. */ - // "outDir": "./buidl", /* Redirect output structure to the directory. */ + // "outFile": "./build", /* Concatenate and emit output to single file. */ + "outDir": "./build", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ // "composite": true, /* Enable project compilation */ // "removeComments": true, /* Do not emit comments to output. */ From 81584cedba6b71df1cbfaab9df647423c8f775b6 Mon Sep 17 00:00:00 2001 From: lsaether Date: Mon, 30 Jul 2018 13:08:43 +0300 Subject: [PATCH 10/24] create static folder --- index.js | 50 +----------------- lib/build/abi/BaseScheduler.json | 1 - lib/build/abi/BlockScheduler.json | 1 - lib/build/abi/ClaimLib.json | 1 - lib/build/abi/CloneFactory.json | 1 - lib/build/abi/DelayedPayment.json | 1 - lib/build/abi/ExecutionLib.json | 1 - lib/build/abi/IterTools.json | 1 - lib/build/abi/MathLib.json | 1 - lib/build/abi/Migrations.json | 1 - lib/build/abi/PaymentLib.json | 1 - lib/build/abi/Proxy.json | 1 - lib/build/abi/RecurringPayment.json | 1 - lib/build/abi/RequestFactory.json | 1 - lib/build/abi/RequestFactoryInterface.json | 1 - lib/build/abi/RequestLib.json | 1 - lib/build/abi/RequestMetaLib.json | 1 - lib/build/abi/RequestScheduleLib.json | 1 - lib/build/abi/SafeMath.json | 1 - lib/build/abi/SchedulerInterface.json | 1 - lib/build/abi/SimpleToken.json | 1 - lib/build/abi/TimestampScheduler.json | 1 - lib/build/abi/TransactionRecorder.json | 1 - lib/build/abi/TransactionRequestCore.json | 1 - .../abi/TransactionRequestInterface.json | 1 - lib/build/ethereum-alarm-clock.json | 51 ------------------- lib/index.ts | 4 +- {lib => static}/assets/kovan.json | 0 28 files changed, 3 insertions(+), 126 deletions(-) delete mode 100644 lib/build/abi/BaseScheduler.json delete mode 100644 lib/build/abi/BlockScheduler.json delete mode 100644 lib/build/abi/ClaimLib.json delete mode 100644 lib/build/abi/CloneFactory.json delete mode 100644 lib/build/abi/DelayedPayment.json delete mode 100644 lib/build/abi/ExecutionLib.json delete mode 100644 lib/build/abi/IterTools.json delete mode 100644 lib/build/abi/MathLib.json delete mode 100644 lib/build/abi/Migrations.json delete mode 100644 lib/build/abi/PaymentLib.json delete mode 100644 lib/build/abi/Proxy.json delete mode 100644 lib/build/abi/RecurringPayment.json delete mode 100644 lib/build/abi/RequestFactory.json delete mode 100644 lib/build/abi/RequestFactoryInterface.json delete mode 100644 lib/build/abi/RequestLib.json delete mode 100644 lib/build/abi/RequestMetaLib.json delete mode 100644 lib/build/abi/RequestScheduleLib.json delete mode 100644 lib/build/abi/SafeMath.json delete mode 100644 lib/build/abi/SchedulerInterface.json delete mode 100644 lib/build/abi/SimpleToken.json delete mode 100644 lib/build/abi/TimestampScheduler.json delete mode 100644 lib/build/abi/TransactionRecorder.json delete mode 100644 lib/build/abi/TransactionRequestCore.json delete mode 100644 lib/build/abi/TransactionRequestInterface.json delete mode 100644 lib/build/ethereum-alarm-clock.json rename {lib => static}/assets/kovan.json (100%) diff --git a/index.js b/index.js index 81391fa..c90d0a7 100644 --- a/index.js +++ b/index.js @@ -1,49 +1 @@ -/* eslint global-require: "off", import/no-dynamic-require: "off" */ - -const Constants = require("./lib/constants") -const RequestFactory = require("./lib/requestFactory") -const Scheduler = require("./lib/scheduling") -const TxRequest = require("./lib/txRequest") -const Util = require("./lib/util") -const RequestData = require("./lib/txRequest/requestData") -const version = require('./package.json').version; -const contracts = require("./lib/build/ethereum-alarm-clock.json").version; - -module.exports = (web3) => { - if (!web3) { - return { - Constants, - RequestFactory, - Scheduler, - TxRequest, - Util: Util(), - RequestData, - version, - contracts - } - } - - const util = Util(web3) - return { - Constants, - requestFactory: async () => { - const chainName = await util.getChainName() - const contracts = require(`./lib/assets/${chainName}.json`) - return new RequestFactory(contracts.requestFactory, web3) - }, - scheduler: async () => { - const chainName = await util.getChainName() - const contracts = require(`./lib/assets/${chainName}.json`) - return new Scheduler( - contracts.blockScheduler, - contracts.timestampScheduler, - web3 - ) - }, - transactionRequest: address => new TxRequest(address, web3), - Util: util, - RequestData, - version, - contracts - } -} +module.exports = require("build/index"); diff --git a/lib/build/abi/BaseScheduler.json b/lib/build/abi/BaseScheduler.json deleted file mode 100644 index 83b3393..0000000 --- a/lib/build/abi/BaseScheduler.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[],"name":"temporalUnit","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeRecipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factoryAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"request","type":"address"}],"name":"NewRequest","type":"event"},{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_callData","type":"bytes"},{"name":"_uintArgs","type":"uint256[8]"}],"name":"schedule","outputs":[{"name":"newRequest","type":"address"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_bounty","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_callGas","type":"uint256"},{"name":"_callValue","type":"uint256"},{"name":"_gasPrice","type":"uint256"}],"name":"computeEndowment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/BlockScheduler.json b/lib/build/abi/BlockScheduler.json deleted file mode 100644 index 56850fc..0000000 --- a/lib/build/abi/BlockScheduler.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_callData","type":"bytes"},{"name":"_uintArgs","type":"uint256[8]"}],"name":"schedule","outputs":[{"name":"newRequest","type":"address"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"temporalUnit","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeRecipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_bounty","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_callGas","type":"uint256"},{"name":"_callValue","type":"uint256"},{"name":"_gasPrice","type":"uint256"}],"name":"computeEndowment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factoryAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_factoryAddress","type":"address"},{"name":"_feeRecipient","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"request","type":"address"}],"name":"NewRequest","type":"event"}] \ No newline at end of file diff --git a/lib/build/abi/ClaimLib.json b/lib/build/abi/ClaimLib.json deleted file mode 100644 index 0637a08..0000000 --- a/lib/build/abi/ClaimLib.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/lib/build/abi/CloneFactory.json b/lib/build/abi/CloneFactory.json deleted file mode 100644 index 57896f1..0000000 --- a/lib/build/abi/CloneFactory.json +++ /dev/null @@ -1 +0,0 @@ -[{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"clone","type":"address"}],"name":"CloneCreated","type":"event"}] \ No newline at end of file diff --git a/lib/build/abi/DelayedPayment.json b/lib/build/abi/DelayedPayment.json deleted file mode 100644 index 2ad3f10..0000000 --- a/lib/build/abi/DelayedPayment.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[],"name":"scheduler","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"scheduledTransaction","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_scheduler","type":"address"},{"name":"_numBlocks","type":"uint256"},{"name":"_recipient","type":"address"}],"payable":true,"stateMutability":"payable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[],"name":"payout","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/ExecutionLib.json b/lib/build/abi/ExecutionLib.json deleted file mode 100644 index 0637a08..0000000 --- a/lib/build/abi/ExecutionLib.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/lib/build/abi/IterTools.json b/lib/build/abi/IterTools.json deleted file mode 100644 index 870ae95..0000000 --- a/lib/build/abi/IterTools.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[{"name":"_values","type":"bool[6]"}],"name":"all","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/MathLib.json b/lib/build/abi/MathLib.json deleted file mode 100644 index e826216..0000000 --- a/lib/build/abi/MathLib.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"max","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"min","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"}],"name":"safeCastSigned","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"pure","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/Migrations.json b/lib/build/abi/Migrations.json deleted file mode 100644 index e69e516..0000000 --- a/lib/build/abi/Migrations.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[],"name":"last_completed_migration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":false,"inputs":[{"name":"completed","type":"uint256"}],"name":"setCompleted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"new_address","type":"address"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/PaymentLib.json b/lib/build/abi/PaymentLib.json deleted file mode 100644 index 09035c9..0000000 --- a/lib/build/abi/PaymentLib.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[{"name":"_bounty","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_callGas","type":"uint256"},{"name":"_callValue","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_gasOverhead","type":"uint256"}],"name":"computeEndowment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_endowment","type":"uint256"},{"name":"_bounty","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_callGas","type":"uint256"},{"name":"_callValue","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_gasOverhead","type":"uint256"}],"name":"validateEndowment","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/Proxy.json b/lib/build/abi/Proxy.json deleted file mode 100644 index 30cfda8..0000000 --- a/lib/build/abi/Proxy.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"scheduler","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"scheduledTransaction","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"receipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_scheduler","type":"address"},{"name":"_receipient","type":"address"},{"name":"_payout","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_delay","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"name":"_receipient","type":"address"}],"name":"sendOwnerEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/RecurringPayment.json b/lib/build/abi/RecurringPayment.json deleted file mode 100644 index 80b4705..0000000 --- a/lib/build/abi/RecurringPayment.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[],"name":"scheduler","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentScheduledTransaction","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_scheduler","type":"address"},{"name":"_paymentInterval","type":"uint256"},{"name":"_paymentValue","type":"uint256"},{"name":"_recipient","type":"address"}],"payable":true,"stateMutability":"payable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"scheduledTransaction","type":"address"},{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"PaymentScheduled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"scheduledTransaction","type":"address"},{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"PaymentExecuted","type":"event"},{"constant":false,"inputs":[],"name":"process","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/RequestFactory.json b/lib/build/abi/RequestFactory.json deleted file mode 100644 index ac9a5fe..0000000 --- a/lib/build/abi/RequestFactory.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[],"name":"TIMESTAMP_BUCKET_SIZE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transactionRequestCore","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BLOCKS_BUCKET_SIZE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_transactionRequestCore","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"error","type":"uint8"}],"name":"ValidationError","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"clone","type":"address"}],"name":"CloneCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"request","type":"address"},{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"bucket","type":"int256"},{"indexed":false,"name":"params","type":"uint256[12]"}],"name":"RequestCreated","type":"event"},{"constant":false,"inputs":[{"name":"_addressArgs","type":"address[3]"},{"name":"_uintArgs","type":"uint256[12]"},{"name":"_callData","type":"bytes"}],"name":"createRequest","outputs":[{"name":"","type":"address"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_addressArgs","type":"address[3]"},{"name":"_uintArgs","type":"uint256[12]"},{"name":"_callData","type":"bytes"}],"name":"createValidatedRequest","outputs":[{"name":"","type":"address"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_addressArgs","type":"address[3]"},{"name":"_uintArgs","type":"uint256[12]"},{"name":"_endowment","type":"uint256"}],"name":"validateRequestParams","outputs":[{"name":"","type":"bool[6]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isKnownRequest","outputs":[{"name":"isKnown","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"windowStart","type":"uint256"},{"name":"unit","type":"uint8"}],"name":"getBucket","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"pure","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/RequestFactoryInterface.json b/lib/build/abi/RequestFactoryInterface.json deleted file mode 100644 index d0d1b9e..0000000 --- a/lib/build/abi/RequestFactoryInterface.json +++ /dev/null @@ -1 +0,0 @@ -[{"anonymous":false,"inputs":[{"indexed":false,"name":"request","type":"address"},{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"bucket","type":"int256"},{"indexed":false,"name":"params","type":"uint256[12]"}],"name":"RequestCreated","type":"event"},{"constant":false,"inputs":[{"name":"addressArgs","type":"address[3]"},{"name":"uintArgs","type":"uint256[12]"},{"name":"callData","type":"bytes"}],"name":"createRequest","outputs":[{"name":"","type":"address"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"addressArgs","type":"address[3]"},{"name":"uintArgs","type":"uint256[12]"},{"name":"callData","type":"bytes"}],"name":"createValidatedRequest","outputs":[{"name":"","type":"address"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"addressArgs","type":"address[3]"},{"name":"uintArgs","type":"uint256[12]"},{"name":"endowment","type":"uint256"}],"name":"validateRequestParams","outputs":[{"name":"","type":"bool[6]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isKnownRequest","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/RequestLib.json b/lib/build/abi/RequestLib.json deleted file mode 100644 index 2372dcd..0000000 --- a/lib/build/abi/RequestLib.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[],"name":"EXECUTE_EXTRA_GAS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EXECUTION_GAS_OVERHEAD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CANCEL_EXTRA_GAS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PRE_EXECUTION_GAS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"reason","type":"uint8"}],"name":"Aborted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"rewardPayment","type":"uint256"},{"indexed":false,"name":"measuredGasConsumption","type":"uint256"}],"name":"Cancelled","type":"event"},{"anonymous":false,"inputs":[],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bounty","type":"uint256"},{"indexed":false,"name":"fee","type":"uint256"},{"indexed":false,"name":"measuredGasConsumption","type":"uint256"}],"name":"Executed","type":"event"},{"constant":true,"inputs":[{"name":"_addressArgs","type":"address[4]"},{"name":"_uintArgs","type":"uint256[12]"},{"name":"_endowment","type":"uint256"}],"name":"validate","outputs":[{"name":"isValid","type":"bool[6]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"RequestLib.Request storage"},{"name":"_addressArgs","type":"address[4]"},{"name":"_uintArgs","type":"uint256[12]"},{"name":"_callData","type":"bytes"}],"name":"initialize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getEXECUTION_GAS_OVERHEAD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"RequestLib.Request storage"}],"name":"requiredExecutionGas","outputs":[{"name":"requiredGas","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"RequestLib.Request storage"}],"name":"isCancellable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"RequestLib.Request storage"}],"name":"cancel","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"RequestLib.Request storage"}],"name":"refundClaimDeposit","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"RequestLib.Request storage"}],"name":"sendFee","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"RequestLib.Request storage"}],"name":"sendBounty","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"RequestLib.Request storage"}],"name":"canSendOwnerEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"RequestLib.Request storage"}],"name":"sendOwnerEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"RequestLib.Request storage"},{"name":"recipient","type":"address"}],"name":"sendOwnerEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/RequestMetaLib.json b/lib/build/abi/RequestMetaLib.json deleted file mode 100644 index 0637a08..0000000 --- a/lib/build/abi/RequestMetaLib.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/lib/build/abi/RequestScheduleLib.json b/lib/build/abi/RequestScheduleLib.json deleted file mode 100644 index 0a6279c..0000000 --- a/lib/build/abi/RequestScheduleLib.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[{"name":"self","type":"RequestScheduleLib.ExecutionWindow storage"}],"name":"getNow","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_reservedWindowSize","type":"uint256"},{"name":"_windowSize","type":"uint256"}],"name":"validateReservedWindowSize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_temporalUnit","type":"RequestScheduleLib.TemporalUnit"},{"name":"_freezePeriod","type":"uint256"},{"name":"_windowStart","type":"uint256"}],"name":"validateWindowStart","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_temporalUnitAsUInt","type":"uint256"}],"name":"validateTemporalUnit","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/SafeMath.json b/lib/build/abi/SafeMath.json deleted file mode 100644 index 0637a08..0000000 --- a/lib/build/abi/SafeMath.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/lib/build/abi/SchedulerInterface.json b/lib/build/abi/SchedulerInterface.json deleted file mode 100644 index 4c7b493..0000000 --- a/lib/build/abi/SchedulerInterface.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_callData","type":"bytes"},{"name":"_uintArgs","type":"uint256[8]"}],"name":"schedule","outputs":[{"name":"","type":"address"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_bounty","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_callGas","type":"uint256"},{"name":"_callValue","type":"uint256"},{"name":"_gasPrice","type":"uint256"}],"name":"computeEndowment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/SimpleToken.json b/lib/build/abi/SimpleToken.json deleted file mode 100644 index ddacfe0..0000000 --- a/lib/build/abi/SimpleToken.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_initialSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buyTokens","outputs":[{"name":"success","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_who","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/TimestampScheduler.json b/lib/build/abi/TimestampScheduler.json deleted file mode 100644 index 56850fc..0000000 --- a/lib/build/abi/TimestampScheduler.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_callData","type":"bytes"},{"name":"_uintArgs","type":"uint256[8]"}],"name":"schedule","outputs":[{"name":"newRequest","type":"address"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"temporalUnit","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeRecipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_bounty","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_callGas","type":"uint256"},{"name":"_callValue","type":"uint256"},{"name":"_gasPrice","type":"uint256"}],"name":"computeEndowment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factoryAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_factoryAddress","type":"address"},{"name":"_feeRecipient","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"request","type":"address"}],"name":"NewRequest","type":"event"}] \ No newline at end of file diff --git a/lib/build/abi/TransactionRecorder.json b/lib/build/abi/TransactionRecorder.json deleted file mode 100644 index eaf0957..0000000 --- a/lib/build/abi/TransactionRecorder.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[],"name":"lastCaller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastCallGas","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastCallData","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wasCalled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastCallValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[],"name":"__reset__","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/TransactionRequestCore.json b/lib/build/abi/TransactionRequestCore.json deleted file mode 100644 index 10f29da..0000000 --- a/lib/build/abi/TransactionRequestCore.json +++ /dev/null @@ -1 +0,0 @@ -[{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"name":"addressArgs","type":"address[4]"},{"name":"uintArgs","type":"uint256[12]"},{"name":"callData","type":"bytes"}],"name":"initialize","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"execute","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"cancel","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"requestData","outputs":[{"name":"","type":"address[6]"},{"name":"","type":"bool[3]"},{"name":"","type":"uint256[15]"},{"name":"","type":"uint8[1]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"callData","outputs":[{"name":"data","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_data","type":"bytes"}],"name":"proxy","outputs":[{"name":"success","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"refundClaimDeposit","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"sendFee","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"sendBounty","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"}],"name":"sendOwnerEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"sendOwnerEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/lib/build/abi/TransactionRequestInterface.json b/lib/build/abi/TransactionRequestInterface.json deleted file mode 100644 index 34fa55a..0000000 --- a/lib/build/abi/TransactionRequestInterface.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":false,"inputs":[],"name":"execute","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"cancel","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"callData","type":"bytes"}],"name":"proxy","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"requestData","outputs":[{"name":"","type":"address[6]"},{"name":"","type":"bool[3]"},{"name":"","type":"uint256[15]"},{"name":"","type":"uint8[1]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"callData","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refundClaimDeposit","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"sendFee","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"sendBounty","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"sendOwnerEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"}],"name":"sendOwnerEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/lib/build/ethereum-alarm-clock.json b/lib/build/ethereum-alarm-clock.json deleted file mode 100644 index e583485..0000000 --- a/lib/build/ethereum-alarm-clock.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "ethereum-alarm-clock", - "version": "1.0.0-beta.3", - "description": "Service to schedule Ethereum transactions that will be executed in the future.", - "main": "index.js", - "directories": { - "doc": "docs", - "test": "tests" - }, - "scripts": { - "test": "truffle test", - "coverage": "./node_modules/.bin/solidity-coverage", - "lint": "./node_modules/eslint/bin/eslint.js .", - "solium": "./node_modules/solium/bin/solium.js -d contracts --fix", - "clean": "truffle networks --clean" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/chronologic/ethereum-alarm-clock.git" - }, - "author": "", - "license": "ISC", - "bugs": { - "url": "https://github.com/chronologic/ethereum-alarm-clock/issues" - }, - "homepage": "https://github.com/chronologic/ethereum-alarm-clock#readme", - "dependencies": { - "@optionality.io/clone-factory": "^0.1.2", - "ethereumjs-util": "^5.1.2", - "nconf": "^0.8.4", - "solc": "^0.4.21", - "solium": "^1.1.6", - "web3": "^1.0.0-beta.18" - }, - "devDependencies": { - "@digix/tempo": "^0.2.0", - "bignumber.js": "^4.1.0", - "chai": "^4.1.2", - "chai-as-promised": "^7.1.1", - "coveralls": "^3.0.0", - "eslint": "^4.16.0", - "eslint-config-airbnb-base": "^12.1.0", - "eslint-plugin-import": "^2.8.0", - "solidity-coverage": "^0.4.15" - }, - "pre-commit": [ - "clean", - "lint", - "solium" - ] -} diff --git a/lib/index.ts b/lib/index.ts index 36646b8..e030e54 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -27,12 +27,12 @@ const initPackage = (web3: any) => { Version, requestFactory: async () => { const chainName = await util.getChainName(); - const contracts = require(`./lib/assets/${chainName}.json`); + const contracts = require(`../static/assets/${chainName}.json`); return new RequestFactory(contracts.requestFactory, web3); }, scheduler: async () => { const chainName = await util.getChainName() - const contracts = require(`./lib/assets/${chainName}.json`) + const contracts = require(`../static/assets/${chainName}.json`); return new Scheduler( contracts.blockScheduler, contracts.timestampScheduler, diff --git a/lib/assets/kovan.json b/static/assets/kovan.json similarity index 100% rename from lib/assets/kovan.json rename to static/assets/kovan.json From d03b20ed3531c99647a6a6d9d390ca62be7505a0 Mon Sep 17 00:00:00 2001 From: lsaether Date: Mon, 30 Jul 2018 13:14:49 +0300 Subject: [PATCH 11/24] attempt to fix tests --- extractContractsInfo.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extractContractsInfo.js b/extractContractsInfo.js index c565995..ee5d3db 100644 --- a/extractContractsInfo.js +++ b/extractContractsInfo.js @@ -8,8 +8,8 @@ * Available networks: * mainnet, ropsten, rinkeby, kovan, development */ -const artifactsDir = './lib/build/contracts'; -const dest = './lib/build/abi' +const artifactsDir = './static/build/contracts'; +const dest = './static/build/abi' const fs = require('fs'); const path = require('path'); From bf4e95ddeb784c654a805680b27662435901da8b Mon Sep 17 00:00:00 2001 From: lsaether Date: Mon, 30 Jul 2018 13:19:37 +0300 Subject: [PATCH 12/24] attempt to fix tests 2/? --- deploy.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deploy.sh b/deploy.sh index b2cc1c1..09c1c88 100755 --- a/deploy.sh +++ b/deploy.sh @@ -6,11 +6,11 @@ truffle migrate --reset cd .. echo "Moving the generated contract files..." -rm -Rfv lib/build/* -cp -Rfv ethereum-alarm-clock/build/* lib/build/ -cp -fv ethereum-alarm-clock/package.json lib/build/ethereum-alarm-clock.json +rm -Rfv static/build/* +cp -Rfv ethereum-alarm-clock/build/* static/build/ +cp -fv ethereum-alarm-clock/package.json static/build/ethereum-alarm-clock.json node ./extractContractsInfo.js development -mv -fv contracts.json lib/assets/development.json || true +mv -fv contracts.json static/assets/development.json || true echo "Done." \ No newline at end of file From 208d6662c75ed07ecf461d2f148b5d18f0660bc4 Mon Sep 17 00:00:00 2001 From: lsaether Date: Mon, 30 Jul 2018 13:31:11 +0300 Subject: [PATCH 13/24] attempt to fix tests 3/? --- extractContractsInfo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extractContractsInfo.js b/extractContractsInfo.js index ee5d3db..a31f654 100644 --- a/extractContractsInfo.js +++ b/extractContractsInfo.js @@ -8,7 +8,7 @@ * Available networks: * mainnet, ropsten, rinkeby, kovan, development */ -const artifactsDir = './static/build/contracts'; +const artifactsDir = './static/build'; const dest = './static/build/abi' const fs = require('fs'); const path = require('path'); From 8941521dcda9e2fe6bcccc8a4d35bf7fd43fb752 Mon Sep 17 00:00:00 2001 From: lsaether Date: Mon, 30 Jul 2018 13:38:44 +0300 Subject: [PATCH 14/24] attempt to fix tests 4/? --- deploy.sh | 1 + extractContractsInfo.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/deploy.sh b/deploy.sh index 09c1c88..654d8d8 100755 --- a/deploy.sh +++ b/deploy.sh @@ -9,6 +9,7 @@ echo "Moving the generated contract files..." rm -Rfv static/build/* cp -Rfv ethereum-alarm-clock/build/* static/build/ cp -fv ethereum-alarm-clock/package.json static/build/ethereum-alarm-clock.json +ls static/build node ./extractContractsInfo.js development mv -fv contracts.json static/assets/development.json || true diff --git a/extractContractsInfo.js b/extractContractsInfo.js index a31f654..ee5d3db 100644 --- a/extractContractsInfo.js +++ b/extractContractsInfo.js @@ -8,7 +8,7 @@ * Available networks: * mainnet, ropsten, rinkeby, kovan, development */ -const artifactsDir = './static/build'; +const artifactsDir = './static/build/contracts'; const dest = './static/build/abi' const fs = require('fs'); const path = require('path'); From 7d152ccaf6bd6c44e8caf6db0e7dd565d4a4484d Mon Sep 17 00:00:00 2001 From: lsaether Date: Mon, 30 Jul 2018 13:42:23 +0300 Subject: [PATCH 15/24] attempt to fix tests 5/? --- deploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy.sh b/deploy.sh index 654d8d8..735ed98 100755 --- a/deploy.sh +++ b/deploy.sh @@ -7,7 +7,7 @@ cd .. echo "Moving the generated contract files..." rm -Rfv static/build/* -cp -Rfv ethereum-alarm-clock/build/* static/build/ +cp -Rfv ethereum-alarm-clock/build/* static/build/contracts cp -fv ethereum-alarm-clock/package.json static/build/ethereum-alarm-clock.json ls static/build From 7d7e8e0b9370c4866f18329c8df8143f5a6cf171 Mon Sep 17 00:00:00 2001 From: lsaether Date: Mon, 30 Jul 2018 13:44:56 +0300 Subject: [PATCH 16/24] attempt to fix tests 6/? --- deploy.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/deploy.sh b/deploy.sh index 735ed98..9f516f8 100755 --- a/deploy.sh +++ b/deploy.sh @@ -7,6 +7,7 @@ cd .. echo "Moving the generated contract files..." rm -Rfv static/build/* +mkdir static/build cp -Rfv ethereum-alarm-clock/build/* static/build/contracts cp -fv ethereum-alarm-clock/package.json static/build/ethereum-alarm-clock.json ls static/build From 35722ac69eb99abb062b7214d5a3cb87ef2bb030 Mon Sep 17 00:00:00 2001 From: lsaether Date: Mon, 30 Jul 2018 14:07:37 +0300 Subject: [PATCH 17/24] fix tests 7/? --- package-lock.json | 121 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 3 +- 2 files changed, 123 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 8795cab..78910ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,11 @@ "integrity": "sha512-jQ1p+SyF/z8ygPxfSPKZKMWazlCgTBSyIaC1UCUvkLHDdxdmPQtQFk02X4WFM31Z1BKMAS3MSAK0cRP2c92n6Q==", "dev": true }, + "aes-js": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.1.tgz", + "integrity": "sha512-cEA0gBelItZZV7iBiL8ApCiNgc+gBWJJ4uoORhbu6vOqAJ0UL9wIlxr4RI7ij9SSVzy6AnPwiu37kVYiHCl3nw==" + }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", @@ -40,6 +45,14 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "base-x": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", + "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==", + "requires": { + "safe-buffer": "5.1.2" + } + }, "bignumber.js": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-5.0.0.tgz", @@ -91,6 +104,24 @@ "safe-buffer": "5.1.2" } }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.4" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "4.0.1", + "create-hash": "1.2.0", + "safe-buffer": "5.1.2" + } + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -131,6 +162,22 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, + "coinstring": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/coinstring/-/coinstring-2.3.0.tgz", + "integrity": "sha1-zbYzY6lhUCQEolr7gsLibV/2J6Q=", + "requires": { + "bs58": "2.0.1", + "create-hash": "1.2.0" + }, + "dependencies": { + "bs58": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-2.0.1.tgz", + "integrity": "sha1-VZCNWPGYKrogCPob7Y+RmYopv40=" + } + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -221,6 +268,28 @@ "secp256k1": "3.5.0" } }, + "ethereumjs-wallet": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.1.tgz", + "integrity": "sha512-nNMpqrsCQ5H5cWPv81cQTHFqztca5WHEu/AG0sDhwSdYada7jHdmFG95HoovGCOSX8Euj4Aqd1NsDVjVVW+12Q==", + "requires": { + "aes-js": "3.1.1", + "bs58check": "2.1.2", + "ethereumjs-util": "5.2.0", + "hdkey": "0.8.0", + "safe-buffer": "5.1.2", + "scrypt.js": "0.2.0", + "utf8": "3.0.0", + "uuid": "3.3.2" + }, + "dependencies": { + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + } + } + }, "ethjs-abi": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.1.8.tgz", @@ -306,6 +375,16 @@ "minimalistic-assert": "1.0.1" } }, + "hdkey": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-0.8.0.tgz", + "integrity": "sha512-oYsdlK22eobT68N5faWI3776f6tOLyqxLLYwxMx+TP0rkWzuCs0oiOm2VbLWcxdpHFP4LtiRR8udaIX8VkEaZQ==", + "requires": { + "coinstring": "2.3.0", + "safe-buffer": "5.1.2", + "secp256k1": "3.5.0" + } + }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", @@ -535,6 +614,18 @@ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", "dev": true }, + "pbkdf2": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "requires": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", @@ -554,6 +645,31 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "scrypt": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", + "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", + "requires": { + "nan": "2.10.0" + } + }, + "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.3", + "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.16" + } + }, "secp256k1": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz", @@ -651,6 +767,11 @@ "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=", "dev": true }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, "web3": { "version": "0.20.6", "resolved": "https://registry.npmjs.org/web3/-/web3-0.20.6.tgz", diff --git a/package.json b/package.json index 747b022..d1e4dab 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ }, "dependencies": { "bignumber.js": "5.0.0", - "ethereumjs-util": "5.2.0" + "ethereumjs-util": "5.2.0", + "ethereumjs-wallet": "^0.6.1" } } From 3cdf84426684ef153d2c9dfa539514f295230c77 Mon Sep 17 00:00:00 2001 From: Bagaric Date: Mon, 30 Jul 2018 18:37:35 +0200 Subject: [PATCH 18/24] Fix hdwallet error --- ethereum-alarm-clock | 2 +- index.js | 2 +- package-lock.json | 6419 ++++++++++++++++++++++++++++++++++++++---- package.json | 5 +- test/txRequest.js | 2 +- 5 files changed, 5845 insertions(+), 585 deletions(-) diff --git a/ethereum-alarm-clock b/ethereum-alarm-clock index 50b116b..c0e69ad 160000 --- a/ethereum-alarm-clock +++ b/ethereum-alarm-clock @@ -1 +1 @@ -Subproject commit 50b116be35ee1b7c3658920623af98658591c4c1 +Subproject commit c0e69ad39e9ec5ddc3e08c752eee62db70e5559a diff --git a/index.js b/index.js index c90d0a7..7e1ba33 100644 --- a/index.js +++ b/index.js @@ -1 +1 @@ -module.exports = require("build/index"); +module.exports = require("./build/index"); diff --git a/package-lock.json b/package-lock.json index 78910ea..96389ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,10 +16,24 @@ "integrity": "sha512-jQ1p+SyF/z8ygPxfSPKZKMWazlCgTBSyIaC1UCUvkLHDdxdmPQtQFk02X4WFM31Z1BKMAS3MSAK0cRP2c92n6Q==", "dev": true }, - "aes-js": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.1.tgz", - "integrity": "sha512-cEA0gBelItZZV7iBiL8ApCiNgc+gBWJJ4uoORhbu6vOqAJ0UL9wIlxr4RI7ij9SSVzy6AnPwiu37kVYiHCl3nw==" + "abstract-leveldown": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz", + "integrity": "sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ==", + "dev": true, + "requires": { + "xtend": "4.0.1" + } + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "2.1.19", + "negotiator": "0.6.1" + } }, "ajv": { "version": "5.5.2", @@ -33,556 +47,5619 @@ "json-schema-traverse": "0.3.1" } }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "argsarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", + "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "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 + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "4.17.10" + } }, - "base-x": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", - "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==", + "async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "dev": true, "requires": { - "safe-buffer": "5.1.2" + "async": "2.6.1" } }, - "bignumber.js": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-5.0.0.tgz", - "integrity": "sha512-KWTu6ZMVk9sxlDJQh2YH1UOnfDP8O8TpxUxgQG/vKASoSnEjK9aVuOueFaPcQEYQ5fyNXNTOYwYw3099RYebWg==" + "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==", + "dev": true }, - "bindings": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", - "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, - "bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "requires": { - "safe-buffer": "5.1.2" - } + "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 }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.10", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" } }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, "requires": { - "base-x": "3.0.4" + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.10", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + } } }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, "requires": { - "bs58": "4.0.1", - "create-hash": "1.2.0", - "safe-buffer": "5.1.2" + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } }, - "chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", - "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "assertion-error": "1.1.0", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.0", - "type-detect": "4.0.8" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.10" } }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } }, - "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==", + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } }, - "coinstring": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/coinstring/-/coinstring-2.3.0.tgz", - "integrity": "sha1-zbYzY6lhUCQEolr7gsLibV/2J6Q=", + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, "requires": { - "bs58": "2.0.1", - "create-hash": "1.2.0" - }, - "dependencies": { - "bs58": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-2.0.1.tgz", - "integrity": "sha1-VZCNWPGYKrogCPob7Y+RmYopv40=" - } + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.4", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.10" } }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, - "crypto-js": { - "version": "3.1.9-1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz", - "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=", - "dev": true + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "type-detect": "4.0.8" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, - "drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, "requires": { - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "create-hmac": "1.1.7" + "babel-runtime": "6.26.0" } }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "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.1", - "minimalistic-crypto-utils": "1.0.1" + "babel-runtime": "6.26.0" } }, - "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=", + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", "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==", + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "ethjs-util": "0.1.4", - "keccak": "1.4.0", - "rlp": "2.0.0", - "safe-buffer": "5.1.2", - "secp256k1": "3.5.0" + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" } }, - "ethereumjs-wallet": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.1.tgz", - "integrity": "sha512-nNMpqrsCQ5H5cWPv81cQTHFqztca5WHEu/AG0sDhwSdYada7jHdmFG95HoovGCOSX8Euj4Aqd1NsDVjVVW+12Q==", + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, "requires": { - "aes-js": "3.1.1", - "bs58check": "2.1.2", - "ethereumjs-util": "5.2.0", - "hdkey": "0.8.0", - "safe-buffer": "5.1.2", - "scrypt.js": "0.2.0", - "utf8": "3.0.0", - "uuid": "3.3.2" - }, - "dependencies": { - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - } + "babel-runtime": "6.26.0" } }, - "ethjs-abi": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.1.8.tgz", - "integrity": "sha1-zSiFg+1ijN+tr4re+juh28vKbBg=", + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "bn.js": "4.11.6", - "js-sha3": "0.5.5", - "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=", - "dev": true - }, - "js-sha3": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", - "integrity": "sha1-uvDA6MVK1ZA0R9+Wreekobynmko=", - "dev": true - } + "babel-runtime": "6.26.0" } }, - "ethjs-util": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.4.tgz", - "integrity": "sha1-HItoeSV0RO9NPz+7rC3tEs2ZfZM=", + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.10" } }, - "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==", + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.2" + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.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 + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } }, - "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 + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, - "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==", + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "babel-runtime": "6.26.0" } }, - "hdkey": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-0.8.0.tgz", - "integrity": "sha512-oYsdlK22eobT68N5faWI3776f6tOLyqxLLYwxMx+TP0rkWzuCs0oiOm2VbLWcxdpHFP4LtiRR8udaIX8VkEaZQ==", + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, "requires": { - "coinstring": "2.3.0", - "safe-buffer": "5.1.2", - "secp256k1": "3.5.0" + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } }, - "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=" + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } }, - "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 + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, "requires": { - "bindings": "1.3.0", - "inherits": "2.0.3", - "nan": "2.10.0", - "safe-buffer": "5.1.2" + "babel-runtime": "6.26.0" } }, - "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, - "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=" + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "minimist": "0.0.8" + "regenerator-transform": "0.10.1" } }, - "mocha": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.1.tgz", - "integrity": "sha512-kKKs/H1KrMMQIEsWNxGmb4/BGsmj0dkeyotEvbrAuQ01FcWRLssUNXCEUZk6SZtyJBi6EE7SL0zDDtItw1rGhw==", + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "browser-stdout": "1.3.1", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "4.4.0" - }, - "dependencies": { - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "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" - } - }, - "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", - "dev": true - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "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" - } - } + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, - "nan": { - "version": "2.10.0", + "babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "3.2.8", + "invariant": "2.2.4", + "semver": "5.4.1" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.3", + "babel-runtime": "6.26.0", + "core-js": "2.5.7", + "home-or-tmp": "2.0.0", + "lodash": "4.17.10", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.7", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.10" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.10" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.10", + "to-fast-properties": "1.0.3" + } + }, + "babelify": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", + "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", + "dev": true, + "requires": { + "babel-core": "6.26.3", + "object-assign": "4.1.1" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "backoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", + "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", + "dev": true, + "requires": { + "precond": "0.2.3" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "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==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bignumber.js": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-5.0.0.tgz", + "integrity": "sha512-KWTu6ZMVk9sxlDJQh2YH1UOnfDP8O8TpxUxgQG/vKASoSnEjK9aVuOueFaPcQEYQ5fyNXNTOYwYw3099RYebWg==" + }, + "bindings": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", + "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" + }, + "bip39": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.4.0.tgz", + "integrity": "sha512-1++HywqIyPtWDo7gm4v0ylYbwkLvHkuwVSKbBlZBbTCP/mnkyrlARBny906VLAwxJbC5xw9EvuJasHFIZaIFMQ==", + "dev": true, + "requires": { + "create-hash": "1.2.0", + "pbkdf2": "3.0.16", + "randombytes": "2.0.6", + "safe-buffer": "5.1.2", + "unorm": "1.4.1" + } + }, + "bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bl": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", + "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=", + "dev": true, + "requires": { + "readable-stream": "1.0.34" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + } + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "dev": true, + "requires": { + "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": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "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=" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "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==", + "dev": true, + "requires": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" + } + }, + "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==", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sha3": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.1.tgz", + "integrity": "sha1-P/NKMAbvFcD7NWflQbkaI0ASPRE=", + "requires": { + "js-sha3": "0.3.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.1" + } + }, + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000865", + "electron-to-chromium": "1.3.52" + } + }, + "buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.0.tgz", + "integrity": "sha512-nUJyfChH7PMJy75eRDCCKtszSEFokUNXC1hNVSe+o+VdcgvDPLs20k3v8UXI8ruRYAJiYtyRea8mYyqPxoHWDw==", + "dev": true, + "requires": { + "base64-js": "1.3.0", + "ieee754": "1.1.12" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", + "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==", + "dev": true + }, + "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=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "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=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "bytewise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", + "integrity": "sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4=", + "dev": true, + "requires": { + "bytewise-core": "1.2.3", + "typewise": "1.0.3" + } + }, + "bytewise-core": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", + "integrity": "sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI=", + "dev": true, + "requires": { + "typewise-core": "1.2.0" + } + }, + "cachedown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cachedown/-/cachedown-1.0.0.tgz", + "integrity": "sha1-1D8DbkUQaWsxJG19sx6/D3rDLRU=", + "dev": true, + "requires": { + "abstract-leveldown": "2.7.2", + "lru-cache": "3.2.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", + "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "dev": true, + "requires": { + "xtend": "4.0.1" + } + } + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30000865", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz", + "integrity": "sha512-vs79o1mOSKRGv/1pSkp4EXgl4ZviWeYReXw60XfacPU64uQWZwJT6vZNmxRF9O+6zu71sJwMxLK5JXxbzuVrLw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "1.1.0", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.8" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "checkpoint-store": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", + "integrity": "sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY=", + "dev": true, + "requires": { + "functional-red-black-tree": "1.0.1" + } + }, + "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==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "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=", + "dev": true + }, + "coinstring": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/coinstring/-/coinstring-2.3.0.tgz", + "integrity": "sha1-zbYzY6lhUCQEolr7gsLibV/2J6Q=", + "requires": { + "bs58": "2.0.1", + "create-hash": "1.2.0" + }, + "dependencies": { + "bs58": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-2.0.1.tgz", + "integrity": "sha1-VZCNWPGYKrogCPob7Y+RmYopv40=" + } + } + }, + "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, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "1.1.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", + "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", + "dev": true + } + } + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "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==", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", + "dev": true + }, + "core-js": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "dev": true + }, + "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 + }, + "cors": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", + "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "vary": "1.1.2" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.4", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "cross-fetch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz", + "integrity": "sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=", + "dev": true, + "requires": { + "node-fetch": "2.1.2", + "whatwg-fetch": "2.0.4" + } + }, + "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==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.16", + "public-encrypt": "4.0.2", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } + }, + "crypto-js": { + "version": "3.1.9-1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz", + "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=", + "dev": true + }, + "d64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d64/-/d64-1.0.0.tgz", + "integrity": "sha1-QAKofoUMv8n52XBrYPymE6MzbpA=", + "dev": true + }, + "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" + } + }, + "debug": { + "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" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "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=", + "dev": true + }, + "decompress": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "dev": true, + "requires": { + "decompress-tar": "4.1.1", + "decompress-tarbz2": "4.1.1", + "decompress-targz": "4.1.1", + "decompress-unzip": "4.0.1", + "graceful-fs": "4.1.11", + "make-dir": "1.3.0", + "pify": "2.3.0", + "strip-dirs": "2.1.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "1.0.1" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "requires": { + "file-type": "5.2.0", + "is-stream": "1.1.0", + "tar-stream": "1.6.1" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "requires": { + "decompress-tar": "4.1.1", + "file-type": "6.2.0", + "is-stream": "1.1.0", + "seek-bzip": "1.0.5", + "unbzip2-stream": "1.2.5" + }, + "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==", + "dev": true + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "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=", + "dev": true, + "requires": { + "file-type": "3.9.0", + "get-stream": "2.3.1", + "pify": "2.3.0", + "yauzl": "2.10.0" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deferred-leveldown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", + "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", + "dev": true, + "requires": { + "abstract-leveldown": "2.6.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", + "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "dev": true, + "requires": { + "xtend": "4.0.1" + } + } + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.12" + }, + "dependencies": { + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "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 + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", + "dev": true + }, + "drbg.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", + "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", + "requires": { + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "create-hmac": "1.1.7" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.52", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz", + "integrity": "sha1-0tnxJwuko7lnuDHEDvcftNmrXOA=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "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.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "0.4.23" + } + }, + "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==", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "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=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eth-block-tracker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-3.0.1.tgz", + "integrity": "sha512-WUVxWLuhMmsfenfZvFO5sbl1qFY2IqUlw/FPVmjjdElpqLsZtSG+wPe9Dz7W/sB6e80HgFKknOmKk2eNlznHug==", + "dev": true, + "requires": { + "eth-query": "2.1.2", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "5.2.0", + "ethjs-util": "0.1.4", + "json-rpc-engine": "3.7.3", + "pify": "2.3.0", + "tape": "4.9.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "eth-json-rpc-infura": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-3.1.2.tgz", + "integrity": "sha512-IuK5Iowfs6taluA/3Okmu6EfZcFMq6MQuyrUL1PrCoJstuuBr3TvVeSy3keDyxfbrjFB34nCo538I8G+qMtsbw==", + "dev": true, + "requires": { + "cross-fetch": "2.2.2", + "eth-json-rpc-middleware": "1.6.0", + "json-rpc-engine": "3.7.3", + "json-rpc-error": "2.0.0", + "tape": "4.9.1" + } + }, + "eth-json-rpc-middleware": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz", + "integrity": "sha512-tDVCTlrUvdqHKqivYMjtFZsdD7TtpNLBCfKAcOpaVs7orBMS/A8HWro6dIzNtTZIR05FAbJ3bioFOnZpuCew9Q==", + "dev": true, + "requires": { + "async": "2.6.1", + "eth-query": "2.1.2", + "eth-tx-summary": "3.2.3", + "ethereumjs-block": "1.7.1", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "5.2.0", + "ethereumjs-vm": "2.3.5", + "fetch-ponyfill": "4.1.0", + "json-rpc-engine": "3.7.3", + "json-rpc-error": "2.0.0", + "json-stable-stringify": "1.0.1", + "promise-to-callback": "1.0.0", + "tape": "4.9.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-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==", + "dev": true, + "requires": { + "async": "2.6.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "5.2.0", + "merkle-patricia-tree": "2.3.1" + } + } + } + }, + "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==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0", + "keccakjs": "0.2.1", + "nano-json-stream-parser": "0.1.2", + "servify": "0.1.12", + "ws": "3.3.3", + "xhr-request-promise": "0.1.2" + } + }, + "eth-query": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", + "integrity": "sha1-1nQdkAAQa1FRDHLbktY2VFam2l4=", + "dev": true, + "requires": { + "json-rpc-random-id": "1.0.1", + "xtend": "4.0.1" + } + }, + "eth-sig-util": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", + "integrity": "sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=", + "dev": true, + "requires": { + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7", + "ethereumjs-util": "5.2.0" + } + }, + "eth-tx-summary": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/eth-tx-summary/-/eth-tx-summary-3.2.3.tgz", + "integrity": "sha512-1gZpA5fKarJOVSb5OUlPnhDQuIazqAkI61zlVvf5LdG47nEgw+/qhyZnuj3CUdE/TLTKuRzPLeyXLjaB4qWTRQ==", + "dev": true, + "requires": { + "async": "2.6.1", + "bn.js": "4.11.8", + "clone": "2.1.1", + "concat-stream": "1.6.2", + "end-of-stream": "1.4.1", + "eth-query": "2.1.2", + "ethereumjs-block": "1.7.1", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "5.2.0", + "ethereumjs-vm": "2.3.4", + "through2": "2.0.3", + "treeify": "1.1.0", + "web3-provider-engine": "13.8.0" + }, + "dependencies": { + "eth-block-tracker": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-2.3.1.tgz", + "integrity": "sha512-NamWuMBIl8kmkJFVj8WzGatySTzQPQag4Xr677yFxdVtIxACFbL/dQowk0MzEqIKk93U1TwY3MjVU6mOcwZnKA==", + "dev": true, + "requires": { + "async-eventemitter": "github:ahultgren/async-eventemitter#fa06e39e56786ba541c180061dbf2c0a5bbf951c", + "eth-query": "2.1.2", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "5.2.0", + "ethjs-util": "0.1.4", + "json-rpc-engine": "3.7.3", + "pify": "2.3.0", + "tape": "4.9.1" + }, + "dependencies": { + "async-eventemitter": { + "version": "github:ahultgren/async-eventemitter#fa06e39e56786ba541c180061dbf2c0a5bbf951c", + "dev": true, + "requires": { + "async": "2.6.1" + } + } + } + }, + "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-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==", + "dev": true, + "requires": { + "async": "2.6.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "5.2.0", + "merkle-patricia-tree": "2.3.1" + } + }, + "ethereumjs-vm": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.3.4.tgz", + "integrity": "sha512-Y4SlzNDqxrCO58jhp98HdnZVdjOqB+HC0hoU+N/DEp1aU+hFkRX/nru5F7/HkQRPIlA6aJlQp/xIA6xZs1kspw==", + "dev": true, + "requires": { + "async": "2.6.1", + "async-eventemitter": "0.2.4", + "ethereum-common": "0.2.0", + "ethereumjs-account": "2.0.5", + "ethereumjs-block": "1.7.1", + "ethereumjs-util": "5.2.0", + "fake-merkle-patricia-tree": "1.0.1", + "functional-red-black-tree": "1.0.1", + "merkle-patricia-tree": "2.3.1", + "rustbn.js": "0.1.2", + "safe-buffer": "5.1.2" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "web3-provider-engine": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-13.8.0.tgz", + "integrity": "sha512-fZXhX5VWwWpoFfrfocslyg6P7cN3YWPG/ASaevNfeO80R+nzgoPUBXcWQekSGSsNDkeRTis4aMmpmofYf1TNtQ==", + "dev": true, + "requires": { + "async": "2.6.1", + "clone": "2.1.1", + "eth-block-tracker": "2.3.1", + "eth-sig-util": "1.4.2", + "ethereumjs-block": "1.7.1", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "5.2.0", + "ethereumjs-vm": "2.3.4", + "fetch-ponyfill": "4.1.0", + "json-rpc-error": "2.0.0", + "json-stable-stringify": "1.0.1", + "promise-to-callback": "1.0.0", + "readable-stream": "2.3.6", + "request": "2.87.0", + "semaphore": "1.1.0", + "solc": "0.4.24", + "tape": "4.9.1", + "xhr": "2.5.0", + "xtend": "4.0.1" + } + } + } + }, + "ethereum-common": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.16.tgz", + "integrity": "sha1-mh4Wnq00q3XgifUMpRK/0PvRJlU=", + "dev": true + }, + "ethereumjs-abi": { + "version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "ethereumjs-util": "5.2.0" + } + }, + "ethereumjs-account": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", + "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", + "dev": true, + "requires": { + "ethereumjs-util": "5.2.0", + "rlp": "2.0.0", + "safe-buffer": "5.1.2" + } + }, + "ethereumjs-block": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.2.2.tgz", + "integrity": "sha1-LsdTSlkCG47JuDww5JaQxuuu3aE=", + "dev": true, + "requires": { + "async": "1.5.2", + "ethereum-common": "0.0.16", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "4.5.0", + "merkle-patricia-tree": "2.3.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": "4.5.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz", + "integrity": "sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "keccakjs": "0.2.1", + "rlp": "2.0.0", + "secp256k1": "3.5.0" + } + } + } + }, + "ethereumjs-tx": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", + "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", + "dev": true, + "requires": { + "ethereum-common": "0.0.18", + "ethereumjs-util": "5.2.0" + }, + "dependencies": { + "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-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.4", + "keccak": "1.4.0", + "rlp": "2.0.0", + "safe-buffer": "5.1.2", + "secp256k1": "3.5.0" + } + }, + "ethereumjs-vm": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.3.5.tgz", + "integrity": "sha512-AJ7x44+xqyE5+UO3Nns19WkTdZfyqFZ+sEjIEpvme7Ipbe3iBU1uwCcHEdiu/yY9bdhr3IfSa/NfIKNeXPaRVQ==", + "dev": true, + "requires": { + "async": "2.6.1", + "async-eventemitter": "0.2.4", + "ethereum-common": "0.2.0", + "ethereumjs-account": "2.0.5", + "ethereumjs-block": "1.7.1", + "ethereumjs-util": "5.2.0", + "fake-merkle-patricia-tree": "1.0.1", + "functional-red-black-tree": "1.0.1", + "merkle-patricia-tree": "2.3.1", + "rustbn.js": "0.1.2", + "safe-buffer": "5.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 + }, + "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==", + "dev": true, + "requires": { + "async": "2.6.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "5.2.0", + "merkle-patricia-tree": "2.3.1" + } + } + } + }, + "ethereumjs-wallet": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.0.tgz", + "integrity": "sha1-gnY7Fpfuenlr5xVdqd+0my+Yz9s=", + "requires": { + "aes-js": "0.2.4", + "bs58check": "1.3.4", + "ethereumjs-util": "4.5.0", + "hdkey": "0.7.1", + "scrypt.js": "0.2.0", + "utf8": "2.1.2", + "uuid": "2.0.3" + }, + "dependencies": { + "aes-js": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-0.2.4.tgz", + "integrity": "sha1-lLiBq3FyhtAV+iGeCPtmcJ3aWj0=" + }, + "base-x": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-1.1.0.tgz", + "integrity": "sha1-QtPXF0dPnqAiB/bRqh9CaRPut6w=" + }, + "bs58": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-3.1.0.tgz", + "integrity": "sha1-1MJjiL9IBMrHFBQbGUWqR+XrJI4=", + "requires": { + "base-x": "1.1.0" + } + }, + "bs58check": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-1.3.4.tgz", + "integrity": "sha1-xSVABzdJEXcU+gQsMEfrj5FRy/g=", + "requires": { + "bs58": "3.1.0", + "create-hash": "1.2.0" + } + }, + "ethereumjs-util": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz", + "integrity": "sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "keccakjs": "0.2.1", + "rlp": "2.0.0", + "secp256k1": "3.5.0" + } + }, + "hdkey": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-0.7.1.tgz", + "integrity": "sha1-yu5L6BqneSHpCbjSKN0PKayu5jI=", + "requires": { + "coinstring": "2.3.0", + "secp256k1": "3.5.0" + } + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" + } + } + }, + "ethjs-abi": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.1.8.tgz", + "integrity": "sha1-zSiFg+1ijN+tr4re+juh28vKbBg=", + "dev": true, + "requires": { + "bn.js": "4.11.6", + "js-sha3": "0.5.5", + "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=", + "dev": true + }, + "js-sha3": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", + "integrity": "sha1-uvDA6MVK1ZA0R9+Wreekobynmko=", + "dev": true + } + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "dev": true, + "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=", + "dev": true + } + } + }, + "ethjs-util": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.4.tgz", + "integrity": "sha1-HItoeSV0RO9NPz+7rC3tEs2ZfZM=", + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "eventemitter3": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", + "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=", + "dev": true + }, + "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.2" + } + }, + "express": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "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.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "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.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "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 + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fake-merkle-patricia-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", + "integrity": "sha1-S4w6z7Ugr635hgsfFM2M40As3dM=", + "dev": true, + "requires": { + "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 + }, + "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 + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, + "fetch-ponyfill": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz", + "integrity": "sha1-rjzl9zLGReq4fkroeTQUcJsjmJM=", + "dev": true, + "requires": { + "node-fetch": "1.7.3" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } + } + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "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" + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "1.1.4" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "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, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.19" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "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==", + "dev": true + }, + "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" + } + }, + "fs-promise": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz", + "integrity": "sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=", + "dev": true, + "requires": { + "any-promise": "1.3.0", + "fs-extra": "2.1.2", + "mz": "2.7.0", + "thenify-all": "1.6.0" + }, + "dependencies": { + "fs-extra": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", + "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "ganache-core": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.1.2.tgz", + "integrity": "sha512-em+s17KNr6VjPSc5uN+kDGjtScEqW6vKYWBVwjtuTbKLRMyKL90bs8qBm2VHLfZvErOymhNomILVKIis5Vn/mA==", + "dev": true, + "requires": { + "abstract-leveldown": "3.0.0", + "async": "2.6.1", + "bip39": "2.4.0", + "bn.js": "4.11.6", + "cachedown": "1.0.0", + "chai": "3.5.0", + "clone": "2.1.1", + "ethereumjs-account": "2.0.5", + "ethereumjs-block": "1.2.2", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "5.2.0", + "ethereumjs-vm": "2.3.5", + "ethereumjs-wallet": "0.6.0", + "fake-merkle-patricia-tree": "1.0.1", + "heap": "0.2.6", + "js-scrypt": "0.2.0", + "level-sublevel": "6.6.5", + "levelup": "1.3.9", + "localstorage-down": "0.6.7", + "lodash": "4.17.10", + "merkle-patricia-tree": "2.3.1", + "pify": "3.0.0", + "prepend-file": "1.3.1", + "seedrandom": "2.4.3", + "shebang-loader": "0.0.1", + "solc": "0.4.24", + "temp": "0.8.3", + "tmp": "0.0.31", + "web3": "1.0.0-beta.35", + "web3-provider-engine": "14.0.6", + "websocket": "1.0.26", + "yargs": "7.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "dev": true + }, + "chai": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", + "dev": true, + "requires": { + "assertion-error": "1.1.0", + "deep-eql": "0.1.3", + "type-detect": "1.0.0" + } + }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dev": true, + "requires": { + "type-detect": "0.1.1" + }, + "dependencies": { + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "dev": true + } + } + }, + "type-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", + "dev": true + }, + "web3": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.35.tgz", + "integrity": "sha512-xwDmUhvTcHQvvNnOPcPZZgCxKUsI2e+GbHy7JkTK3/Rmnutazy8x7fsAXT9myw7V1qpi3GgLoZ3fkglSUbg1Mg==", + "dev": true, + "requires": { + "web3-bzz": "1.0.0-beta.35", + "web3-core": "1.0.0-beta.35", + "web3-eth": "1.0.0-beta.35", + "web3-eth-personal": "1.0.0-beta.35", + "web3-net": "1.0.0-beta.35", + "web3-shh": "1.0.0-beta.35", + "web3-utils": "1.0.0-beta.35" + } + } + } + }, + "generic-pool": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.0.4.tgz", + "integrity": "sha1-+XGN7agvoSXtXEPjQcmiFadm2aM=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "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" + } + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "dev": true, + "requires": { + "min-document": "2.19.0", + "process": "0.5.2" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, + "requires": { + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-plain-obj": "1.1.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.1", + "p-cancelable": "0.3.0", + "p-timeout": "1.2.1", + "safe-buffer": "5.1.2", + "timed-out": "4.0.1", + "url-parse-lax": "1.0.0", + "url-to-options": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "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, + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-localstorage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-localstorage/-/has-localstorage-1.0.1.tgz", + "integrity": "sha1-/mJAbEdn+9bXhNrGkFkoEIuClxs=", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "has-symbol-support-x": "1.4.2" + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "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==", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "heap": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz", + "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=", + "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=", + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "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=", + "dev": true, + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" + } + }, + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=", + "dev": true + }, + "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.2" + } + }, + "humble-localstorage": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/humble-localstorage/-/humble-localstorage-1.4.2.tgz", + "integrity": "sha1-0Fqw1SbE7b3b98amDfb/WAUoNGk=", + "dev": true, + "requires": { + "has-localstorage": "1.0.1", + "localstorage-memory": "1.0.2" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true + }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "1.4.0" + } + }, + "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=", + "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=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "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" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "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=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", + "integrity": "sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw=", + "dev": true + }, + "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" + } + }, + "is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=", + "dev": true + }, + "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=" + }, + "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=", + "dev": true + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "dev": true + }, + "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=", + "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=", + "dev": true, + "requires": { + "has": "1.0.3" + } + }, + "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=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "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=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "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 + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "1.4.1", + "is-object": "1.0.1" + } + }, + "js-scrypt": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/js-scrypt/-/js-scrypt-0.2.0.tgz", + "integrity": "sha1-emK3AbRhbnCtDN5URiequ5nX/jk=", + "dev": true, + "requires": { + "generic-pool": "2.0.4" + } + }, + "js-sha3": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz", + "integrity": "sha1-hhIoAhQvCChQKg0d7h2V4lO7AkM=" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "json-rpc-engine": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-3.7.3.tgz", + "integrity": "sha512-+FO3UWu/wafh/+MZ6BXy0HZU+f5plwUn82FgxpC0scJkEh5snOjFrAAtqCITPDfvfLHRUFOG5pQDUx2pspfERQ==", + "dev": true, + "requires": { + "async": "2.6.1", + "babel-preset-env": "1.7.0", + "babelify": "7.3.0", + "clone": "2.1.1", + "json-rpc-error": "2.0.0", + "promise-to-callback": "1.0.0" + } + }, + "json-rpc-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/json-rpc-error/-/json-rpc-error-2.0.0.tgz", + "integrity": "sha1-p6+cICg4tekFxyUOVH8a/3cligI=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "json-rpc-random-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", + "integrity": "sha1-uknZat7RRE27jaPSA3SKy7zeyMg=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "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 + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "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 + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "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", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "keccak": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", + "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", + "requires": { + "bindings": "1.3.0", + "inherits": "2.0.3", + "nan": "2.10.0", + "safe-buffer": "5.1.2" + } + }, + "keccakjs": { + "version": "0.2.1", + "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.2" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "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" + } + }, + "level-codec": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", + "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==", + "dev": true + }, + "level-errors": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", + "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", + "dev": true, + "requires": { + "errno": "0.1.7" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", + "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" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + } + } + }, + "level-post": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/level-post/-/level-post-1.0.7.tgz", + "integrity": "sha512-PWYqG4Q00asOrLhX7BejSajByB4EmG2GaKHfj3h5UmmZ2duciXLPGYWIjBzLECFWUGOZWlm5B20h/n3Gs3HKew==", + "dev": true, + "requires": { + "ltgt": "2.2.1" + } + }, + "level-sublevel": { + "version": "6.6.5", + "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-6.6.5.tgz", + "integrity": "sha512-SBSR60x+dghhwGUxPKS+BvV1xNqnwsEUBKmnFepPaHJ6VkBXyPK9SImGc3K2BkwBfpxlt7GKkBNlCnrdufsejA==", + "dev": true, + "requires": { + "bytewise": "1.1.0", + "levelup": "0.19.1", + "ltgt": "2.1.3", + "pull-defer": "0.2.2", + "pull-level": "2.0.4", + "pull-stream": "3.6.8", + "typewiselite": "1.0.0", + "xtend": "4.0.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", + "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=", + "dev": true, + "requires": { + "xtend": "3.0.0" + }, + "dependencies": { + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true + } + } + }, + "deferred-leveldown": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", + "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=", + "dev": true, + "requires": { + "abstract-leveldown": "0.12.4" + } + }, + "levelup": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.19.1.tgz", + "integrity": "sha1-86anIFJyxLXzXkEv8ASgOgrt9Qs=", + "dev": true, + "requires": { + "bl": "0.8.2", + "deferred-leveldown": "0.2.0", + "errno": "0.1.7", + "prr": "0.0.0", + "readable-stream": "1.0.34", + "semver": "5.1.1", + "xtend": "3.0.0" + }, + "dependencies": { + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true + } + } + }, + "ltgt": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.1.3.tgz", + "integrity": "sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ=", + "dev": true + }, + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "semver": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.1.tgz", + "integrity": "sha1-oykqNz5vPgeY2gsgZBuanFvEfhk=", + "dev": true + } + } + }, + "level-ws": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", + "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "2.1.2" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "requires": { + "object-keys": "0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", + "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" + } + }, + "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=", + "dev": true, + "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" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "localstorage-down": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/localstorage-down/-/localstorage-down-0.6.7.tgz", + "integrity": "sha1-0Hmak7MebF+lGI7AYkLrHM6dbRU=", + "dev": true, + "requires": { + "abstract-leveldown": "0.12.3", + "argsarray": "0.0.1", + "buffer-from": "0.1.2", + "d64": "1.0.0", + "humble-localstorage": "1.4.2", + "inherits": "2.0.3", + "tiny-queue": "0.2.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.3.tgz", + "integrity": "sha1-EWsexcdxDvei1XBnaLvbREC+EHA=", + "dev": true, + "requires": { + "xtend": "3.0.0" + } + }, + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true + } + } + }, + "localstorage-memory": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/localstorage-memory/-/localstorage-memory-1.0.2.tgz", + "integrity": "sha1-zUqPIQ5V3VGckp9LTMgoKbWPmlE=", + "dev": true + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "looper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/looper/-/looper-2.0.0.tgz", + "integrity": "sha1-Zs0Md0rz1P7axTeU90LbVtqPCew=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", + "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", + "dev": true, + "requires": { + "pseudomap": "1.0.2" + } + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", + "dev": true + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "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.1", + "safe-buffer": "5.1.2" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", + "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "dev": true, + "requires": { + "xtend": "4.0.1" + } + } + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "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=", + "dev": true + }, + "merkle-patricia-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.1.tgz", + "integrity": "sha512-Qp9Mpb3xazznXzzGQBqHbqCpT2AR9joUOHYYPiQjYCarrdCPCnLWXo4BFv77y4xN26KR224xoU1n/qYY7RYYgw==", + "dev": true, + "requires": { + "async": "1.5.2", + "ethereumjs-util": "5.2.0", + "level-ws": "0.0.0", + "levelup": "1.3.9", + "memdown": "1.4.1", + "readable-stream": "2.3.6", + "rlp": "2.0.0", + "semaphore": "1.1.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "dev": true, + "requires": { + "mime-db": "1.35.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "requires": { + "dom-walk": "0.1.1" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "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=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "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=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, + "mocha": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.1.tgz", + "integrity": "sha512-kKKs/H1KrMMQIEsWNxGmb4/BGsmj0dkeyotEvbrAuQ01FcWRLssUNXCEUZk6SZtyJBi6EE7SL0zDDtItw1rGhw==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, + "dependencies": { + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "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" + } + }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "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" + } + } + } + }, + "mock-fs": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.5.0.tgz", + "integrity": "sha512-qqudNfOX7ZmX9vm1WIAU+gWlmxVNAnwY6UG3RkFutNywmRCUGP83tujP6IxX2DS1TmcaEZBOhYwDuYEmJYE+3w==", + "dev": true + }, + "mout": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz", + "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "1.3.0", + "object-assign": "4.1.1", + "thenify-all": "1.6.0" + } + }, + "nan": { + "version": "2.10.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" }, - "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=", + "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=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "node-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", + "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=", + "dev": true + }, + "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.7.1", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.3" + } + }, + "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=", + "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=", + "dev": true, + "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=", + "dev": true + } + } + }, + "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 + }, + "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 + }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "oboe": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.3.tgz", + "integrity": "sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=", + "dev": true, + "requires": { + "http-https": "1.0.0" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "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=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "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=", + "dev": true, + "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==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "dev": true, + "requires": { + "p-finally": "1.0.0" + } + }, + "parse-asn1": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "dev": true, + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.16" + } + }, + "parse-headers": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", + "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", + "dev": true, + "requires": { + "for-each": "0.3.3", + "trim": "0.0.1" + } + }, + "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.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "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" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "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-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=", + "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=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "pbkdf2": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "requires": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "precond": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", + "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=", + "dev": true + }, + "prepend-file": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/prepend-file/-/prepend-file-1.3.1.tgz", + "integrity": "sha1-g7FuC0rBkB/OiNvZRaIvTMgd9Xk=", + "dev": true, + "requires": { + "tmp": "0.0.31" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", + "dev": true + }, + "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 + }, + "promise-to-callback": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", + "integrity": "sha1-XSp0kBC/tn2WNZj805YHRqaP7vc=", + "dev": true, + "requires": { + "is-fn": "1.0.0", + "set-immediate-shim": "1.0.1" + } + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "dev": true, + "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 + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", + "randombytes": "2.0.6" + } + }, + "pull-cat": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/pull-cat/-/pull-cat-1.1.11.tgz", + "integrity": "sha1-tkLdElXaN2pwa220+pYvX9t0wxs=", + "dev": true + }, + "pull-defer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pull-defer/-/pull-defer-0.2.2.tgz", + "integrity": "sha1-CIew/7MK8ypW2+z6csFnInHwexM=", + "dev": true + }, + "pull-level": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pull-level/-/pull-level-2.0.4.tgz", + "integrity": "sha512-fW6pljDeUThpq5KXwKbRG3X7Ogk3vc75d5OQU/TvXXui65ykm+Bn+fiktg+MOx2jJ85cd+sheufPL+rw9QSVZg==", + "dev": true, + "requires": { + "level-post": "1.0.7", + "pull-cat": "1.1.11", + "pull-live": "1.0.1", + "pull-pushable": "2.2.0", + "pull-stream": "3.6.8", + "pull-window": "2.1.4", + "stream-to-pull-stream": "1.7.2" + } + }, + "pull-live": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pull-live/-/pull-live-1.0.1.tgz", + "integrity": "sha1-pOzuAeMwFV6RJLu89HYfIbOPUfU=", + "dev": true, + "requires": { + "pull-cat": "1.1.11", + "pull-stream": "3.6.8" + } + }, + "pull-pushable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pull-pushable/-/pull-pushable-2.2.0.tgz", + "integrity": "sha1-Xy867UethpGfAbEqLpnW8b13ZYE=", + "dev": true + }, + "pull-stream": { + "version": "3.6.8", + "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.8.tgz", + "integrity": "sha512-wQUIptQBcM0rFsUhZoEpOT3vUn73DtTGVq3NQ86c4T7iMOSprDzeKWYq2ksXnbwiuExTKvt+8G9fzNLFQuiO+A==", + "dev": true + }, + "pull-window": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/pull-window/-/pull-window-2.1.4.tgz", + "integrity": "sha1-/DuG/uvRkgx64pdpHiP3BfiFUvA=", + "dev": true, + "requires": { + "looper": "2.0.0" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "decode-uri-component": "0.2.0", + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" + } + }, + "randomhex": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", + "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=", + "dev": true + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.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=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "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.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + } + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.7.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.0.3", + "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.8.2", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "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=", + "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=", + "dev": true + }, + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "rlp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.0.0.tgz", + "integrity": "sha1-nbOE/0uJqPYVY9kjldhiWxjzr7A=" + }, + "rustbn.js": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.1.2.tgz", + "integrity": "sha512-bAkNqSHYdJdFsBC7Z11JgzYktL31HIpB2o70jZcGiL1U1TVtPyvaVhDrGWwS8uZtaqwW2k6NOPGZCqW/Dgh5Lg==", + "dev": true + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "scrypt": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", + "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", + "requires": { + "nan": "2.10.0" + } + }, + "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.3", + "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.16" + } + }, + "secp256k1": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz", + "integrity": "sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==", + "requires": { + "bindings": "1.3.0", + "bip66": "1.1.5", + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "drbg.js": "1.0.1", + "elliptic": "6.4.0", + "nan": "2.10.0", + "safe-buffer": "5.1.2" + } + }, + "seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "commander": "2.8.1" + } + }, + "semaphore": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", + "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", + "dev": true + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "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==", + "dev": true, + "requires": { + "body-parser": "1.18.3", + "cors": "2.8.4", + "express": "4.16.3", + "request": "2.87.0", + "xhr": "2.5.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "sha3": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz", + "integrity": "sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=", + "requires": { + "nan": "2.10.0" + } + }, + "shebang-loader": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shebang-loader/-/shebang-loader-0.0.1.tgz", + "integrity": "sha1-pAAEldRMzu++xjQ157FphWn6Uuw=", + "dev": true + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", + "dev": true + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "dev": true, + "requires": { + "decompress-response": "3.3.0", + "once": "1.4.0", + "simple-concat": "1.0.0" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "solc": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.24.tgz", + "integrity": "sha512-2xd7Cf1HeVwrIb6Bu1cwY2/TaLRodrppCq3l7rhLimFQgmxptXhTC3+/wesVLpB09F1A2kZgvbMOgH7wvhFnBQ==", + "dev": true, + "requires": { + "fs-extra": "0.30.0", + "memorystream": "0.3.1", + "require-from-string": "1.2.1", + "semver": "5.4.1", + "yargs": "4.8.1" + }, + "dependencies": { + "yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "dev": true, + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.3", + "lodash.assign": "4.2.0", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "window-size": "0.2.0", + "y18n": "3.2.1", + "yargs-parser": "2.4.1" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "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-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "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-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==", + "dev": true + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-to-pull-stream": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/stream-to-pull-stream/-/stream-to-pull-stream-1.7.2.tgz", + "integrity": "sha1-dXYJrhzr0zx0MtSvvjH/eGULnd4=", + "dev": true, + "requires": { + "looper": "3.0.0", + "pull-stream": "3.6.8" + }, + "dependencies": { + "looper": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/looper/-/looper-3.0.0.tgz", + "integrity": "sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k=", + "dev": true + } + } + }, + "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=", + "dev": true + }, + "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.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "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=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.12.0", + "function-bind": "1.1.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "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" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "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==", + "dev": true, + "requires": { + "is-natural-number": "4.0.1" + } + }, + "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=", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "swarm-js": { + "version": "0.1.37", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.37.tgz", + "integrity": "sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "buffer": "5.2.0", + "decompress": "4.2.0", + "eth-lib": "0.1.27", + "fs-extra": "2.1.2", + "fs-promise": "2.0.3", + "got": "7.1.0", + "mime-types": "2.1.19", + "mkdirp-promise": "5.0.1", + "mock-fs": "4.5.0", + "setimmediate": "1.0.5", + "tar.gz": "1.0.7", + "xhr-request-promise": "0.1.2" + }, + "dependencies": { + "fs-extra": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", + "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0" + } + } + } + }, + "tape": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.9.1.tgz", + "integrity": "sha512-6fKIXknLpoe/Jp4rzHKFPpJUHDHDqn8jus99IfPnHIjyz78HYlefTGD3b5EkbQzuLfaEvmfPK3IolLgq2xT3kw==", + "dev": true, + "requires": { + "deep-equal": "1.0.1", + "defined": "1.0.0", + "for-each": "0.3.3", + "function-bind": "1.1.1", + "glob": "7.1.2", + "has": "1.0.3", + "inherits": "2.0.3", + "minimist": "1.2.0", + "object-inspect": "1.6.0", + "resolve": "1.7.1", + "resumer": "0.0.0", + "string.prototype.trim": "1.1.2", + "through": "2.3.8" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", + "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", + "dev": true, + "requires": { + "bl": "1.2.2", + "buffer-alloc": "1.2.0", + "end-of-stream": "1.4.1", + "fs-constants": "1.0.0", + "readable-stream": "2.3.6", + "to-buffer": "1.1.1", + "xtend": "4.0.1" + }, + "dependencies": { + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2" + } + } + } + }, + "tar.gz": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tar.gz/-/tar.gz-1.0.7.tgz", + "integrity": "sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==", + "dev": true, + "requires": { + "bluebird": "2.11.0", + "commander": "2.8.1", + "fstream": "1.0.11", + "mout": "0.11.1", + "tar": "2.2.1" + }, + "dependencies": { + "bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", + "dev": true + } + } + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2", + "rimraf": "2.2.8" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + } + } + }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "dev": true, + "requires": { + "any-promise": "1.3.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": "3.3.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, + "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=", + "dev": true + }, + "tiny-queue": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.0.tgz", + "integrity": "sha1-xJ/LXIdVW+G0pd9+uHEB1beLydw=", + "dev": true + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "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==", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "dev": true + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "truffle-blockchain-utils": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.4.tgz", + "integrity": "sha512-wgRrhwqh0aea08Hz28hUV4tuF2uTVQH/e9kBou+WK04cqrutB5cxQVQ6HGjeZLltxBYOFvhrGOOq4l3WJFnPEA==", + "dev": true + }, + "truffle-contract": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/truffle-contract/-/truffle-contract-3.0.5.tgz", + "integrity": "sha512-lRayhvX73OrLJ6TDvc0iYbzcB+Y1F9FCj9N1FXQ2EKOkqyIjmgZNMZFHGjvfTws1gsmonYd6sND0ahipiUYy8g==", + "dev": true, + "requires": { + "ethjs-abi": "0.1.8", + "truffle-blockchain-utils": "0.0.4", + "truffle-contract-schema": "2.0.0", + "truffle-error": "0.0.2", + "web3": "0.20.6" + } + }, + "truffle-contract-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/truffle-contract-schema/-/truffle-contract-schema-2.0.0.tgz", + "integrity": "sha512-nLlspmu1GKDaluWksBwitHi/7Z3IpRjmBYeO9N+T1nVJD2V4IWJaptCKP1NqnPiJA+FChB7+F7pI6Br51/FtXQ==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "crypto-js": "3.1.9-1", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "truffle-error": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/truffle-error/-/truffle-error-0.0.2.tgz", + "integrity": "sha1-AbGJt4UFVmrhaJwjnHyi3RIc/kw=", + "dev": true + }, + "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.2" + } + }, + "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 + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.19" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": 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==", + "dev": true, + "requires": { + "is-typedarray": "1.0.0" + } + }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true + }, + "typewise": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", + "integrity": "sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE=", + "dev": true, + "requires": { + "typewise-core": "1.2.0" + } + }, + "typewise-core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", + "integrity": "sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU=", + "dev": true + }, + "typewiselite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typewiselite/-/typewiselite-1.0.0.tgz", + "integrity": "sha1-yIgvobsQksBgBal/NO9chQjjZk4=", + "dev": 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==", + "dev": true + }, + "unbzip2-stream": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz", + "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==", + "dev": true, + "requires": { + "buffer": "3.6.0", + "through": "2.3.8" + }, + "dependencies": { + "base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=", + "dev": true + }, + "buffer": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", + "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", + "dev": true, + "requires": { + "base64-js": "0.0.8", + "ieee754": "1.1.12", + "isarray": "1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true + }, + "unorm": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", + "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } + }, + "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=", + "dev": true + }, + "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=", + "dev": true + }, + "utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "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" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "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", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "web3": { + "version": "0.20.6", + "resolved": "https://registry.npmjs.org/web3/-/web3-0.20.6.tgz", + "integrity": "sha1-PpcwauAk+yThCj11yIQwJWIhUSA=", + "dev": true, + "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" + }, + "dependencies": { + "bignumber.js": { + "version": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934", + "dev": true + }, + "crypto-js": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", + "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=", + "dev": true + } + } + }, + "web3-bzz": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.35.tgz", + "integrity": "sha512-BhAU0qhlr8zltm4gs/+P1gki2VkxHJaM2Rrh4DGesDW0lzwufRoNvWFlwx1bKHoFPWNbSmm9PRkHOYOINL/Tgw==", + "dev": true, + "requires": { + "got": "7.1.0", + "swarm-js": "0.1.37", + "underscore": "1.8.3" + } + }, + "web3-core": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.35.tgz", + "integrity": "sha512-ayGavbgVk4KL9Y88Uv411fBJ0SVgVfKhKEBweKYzmP0zOqneMzWt6YsyD1n6kRvjAbqA0AfUPEOKyMNjcx2tjw==", + "dev": true, + "requires": { + "web3-core-helpers": "1.0.0-beta.35", + "web3-core-method": "1.0.0-beta.35", + "web3-core-requestmanager": "1.0.0-beta.35", + "web3-utils": "1.0.0-beta.35" + } + }, + "web3-core-helpers": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.35.tgz", + "integrity": "sha512-APOu3sEsamyqWt//8o4yq9KF25/uqGm+pQShson/sC4gKzmfJB07fLo2ond0X30E8fIqAPeVCotPXQxGciGUmA==", + "dev": true, + "requires": { + "underscore": "1.8.3", + "web3-eth-iban": "1.0.0-beta.35", + "web3-utils": "1.0.0-beta.35" + } + }, + "web3-core-method": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.35.tgz", + "integrity": "sha512-jidImCide8q0GpfsO4L73qoHrbkeWgwU3uOH5DKtJtv0ccmG086knNMRgryb/o9ZgetDWLmDEsJnHjBSoIwcbA==", + "dev": true, + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.35", + "web3-core-promievent": "1.0.0-beta.35", + "web3-core-subscriptions": "1.0.0-beta.35", + "web3-utils": "1.0.0-beta.35" + } + }, + "web3-core-promievent": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.35.tgz", + "integrity": "sha512-GvqXqKq07OmHuVi5uNRg6k79a1/CI0ViCC+EtNv4CORHtDRmYEt5Bvdv6z6FJEiaaQkD0lKbFwNhLxutx7HItw==", + "dev": true, + "requires": { + "any-promise": "1.3.0", + "eventemitter3": "1.1.1" + } + }, + "web3-core-requestmanager": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.35.tgz", + "integrity": "sha512-S+zW2h17ZZQU9oe3yaCJE0E7aJS4C3Kf4kGPDv+nXjW0gKhQQhgVhw1Doq/aYQGqNSWJp7f1VHkz5gQWwg6RRg==", + "dev": true, + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.35", + "web3-providers-http": "1.0.0-beta.35", + "web3-providers-ipc": "1.0.0-beta.35", + "web3-providers-ws": "1.0.0-beta.35" + } + }, + "web3-core-subscriptions": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.35.tgz", + "integrity": "sha512-gXzLrWvcGkGiWq1y33Z4Y80XI8XMrwowiQJkrPSjQ81K5PBKquOGwcMffLaKcwdmEy/NpsOXDeFo3eLE1Ghvvw==", + "dev": true, + "requires": { + "eventemitter3": "1.1.1", + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.35" + } + }, + "web3-eth": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.35.tgz", + "integrity": "sha512-04mcb2nGPXThawuuYICPOxv0xOHofvQKsjZeIq+89nyOC8DQMGTAErDkGyMHQYtjpth5XDhic0wuEsA80AmFZA==", + "dev": true, + "requires": { + "underscore": "1.8.3", + "web3-core": "1.0.0-beta.35", + "web3-core-helpers": "1.0.0-beta.35", + "web3-core-method": "1.0.0-beta.35", + "web3-core-subscriptions": "1.0.0-beta.35", + "web3-eth-abi": "1.0.0-beta.35", + "web3-eth-accounts": "1.0.0-beta.35", + "web3-eth-contract": "1.0.0-beta.35", + "web3-eth-iban": "1.0.0-beta.35", + "web3-eth-personal": "1.0.0-beta.35", + "web3-net": "1.0.0-beta.35", + "web3-utils": "1.0.0-beta.35" + } + }, + "web3-eth-abi": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.35.tgz", + "integrity": "sha512-KUDC+EtFFYG8z01ZleKrASdjj327/rtWHzEt6RWsEj7bBa0bGp9nEh+nqdZx/Sdgz1O8tnfFzJlrRcXpfr1vGg==", "dev": true, "requires": { "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.35", + "web3-utils": "1.0.0-beta.35" }, "dependencies": { "bn.js": { @@ -593,208 +5670,264 @@ } } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "web3-eth-accounts": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.35.tgz", + "integrity": "sha512-duIgRsfht/0kAW/eQ0X9lKtVIykbETrnM2H7EnvplCzPHtQLodpib4o9JXfh9n6ZDgdDC7cuJoiVB9QJg089ew==", "dev": true, "requires": { - "wrappy": "1.0.2" + "any-promise": "1.3.0", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.7", + "scrypt.js": "0.2.0", + "underscore": "1.8.3", + "uuid": "2.0.1", + "web3-core": "1.0.0-beta.35", + "web3-core-helpers": "1.0.0-beta.35", + "web3-core-method": "1.0.0-beta.35", + "web3-utils": "1.0.0-beta.35" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", + "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0", + "xhr-request-promise": "0.1.2" + } + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=", + "dev": true + } } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "pbkdf2": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", - "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "web3-eth-contract": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.35.tgz", + "integrity": "sha512-foPohOg5O1UCGKGZOIs+kQK5IZdV2QQ7pAWwNxH8WHplUA+fre1MurXNpoxknUmH6mYplFhXjqgYq2MsrBpHrA==", + "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "underscore": "1.8.3", + "web3-core": "1.0.0-beta.35", + "web3-core-helpers": "1.0.0-beta.35", + "web3-core-method": "1.0.0-beta.35", + "web3-core-promievent": "1.0.0-beta.35", + "web3-core-subscriptions": "1.0.0-beta.35", + "web3-eth-abi": "1.0.0-beta.35", + "web3-utils": "1.0.0-beta.35" } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "web3-eth-iban": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.35.tgz", + "integrity": "sha512-H5wkcNcAIc+h/WoDIKv7ZYmrM2Xqu3O7jBQl1IWo73EDVQji+AoB2i3J8tuwI1yZRInRwrfpI3Zuwuf54hXHmQ==", + "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "bn.js": "4.11.6", + "web3-utils": "1.0.0-beta.35" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "dev": true + } } }, - "rlp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.0.0.tgz", - "integrity": "sha1-nbOE/0uJqPYVY9kjldhiWxjzr7A=" - }, - "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==" - }, - "scrypt": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", - "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", + "web3-eth-personal": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.35.tgz", + "integrity": "sha512-AcM9nnlxu7ZRRxPvkrFB9eLxMM4A2cPfj2aCg21Wb2EpMnhR+b/O1cT33k7ApRowoMpM+T9M8vx2oPNwXfaCOQ==", + "dev": true, "requires": { - "nan": "2.10.0" + "web3-core": "1.0.0-beta.35", + "web3-core-helpers": "1.0.0-beta.35", + "web3-core-method": "1.0.0-beta.35", + "web3-net": "1.0.0-beta.35", + "web3-utils": "1.0.0-beta.35" } }, - "scrypt.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", - "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", + "web3-net": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.35.tgz", + "integrity": "sha512-bbwaQ/KohGjIJ6HAKbZ6KrklCAaG6/B7hIbAbVLSFLxF+Yz9lmAgQYaDInpidpC/NLb3WOmcbRF+P77J4qMVIA==", + "dev": true, "requires": { - "scrypt": "6.0.3", - "scryptsy": "1.2.1" + "web3-core": "1.0.0-beta.35", + "web3-core-method": "1.0.0-beta.35", + "web3-utils": "1.0.0-beta.35" } }, - "scryptsy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", - "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", + "web3-provider-engine": { + "version": "14.0.6", + "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-14.0.6.tgz", + "integrity": "sha512-tr5cGSyxfSC/JqiUpBlJtfZpwQf1yAA8L/zy1C6fDFm0ntR974pobJ4v4676atpZne4Ze5VFy3kPPahHe9gQiQ==", + "dev": true, "requires": { - "pbkdf2": "3.0.16" + "async": "2.6.1", + "backoff": "2.5.0", + "clone": "2.1.1", + "cross-fetch": "2.2.2", + "eth-block-tracker": "3.0.1", + "eth-json-rpc-infura": "3.1.2", + "eth-sig-util": "1.4.2", + "ethereumjs-block": "1.2.2", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "5.2.0", + "ethereumjs-vm": "2.3.5", + "json-rpc-error": "2.0.0", + "json-stable-stringify": "1.0.1", + "promise-to-callback": "1.0.0", + "readable-stream": "2.3.6", + "request": "2.87.0", + "semaphore": "1.1.0", + "tape": "4.9.1", + "ws": "5.2.2", + "xhr": "2.5.0", + "xtend": "4.0.1" + }, + "dependencies": { + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "1.0.0" + } + } } }, - "secp256k1": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz", - "integrity": "sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==", + "web3-providers-http": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.35.tgz", + "integrity": "sha512-DcIMFq52Fb08UpWyZ3ZlES6NsNqJnco4hBS/Ej6eOcASfuUayPI+GLkYVZsnF3cBYqlH+DOKuArcKSuIxK7jIA==", + "dev": true, "requires": { - "bindings": "1.3.0", - "bip66": "1.1.5", - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "drbg.js": "1.0.1", - "elliptic": "6.4.0", - "nan": "2.10.0", - "safe-buffer": "5.1.2" + "web3-core-helpers": "1.0.0-beta.35", + "xhr2-cookies": "1.1.0" } }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "web3-providers-ipc": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.35.tgz", + "integrity": "sha512-iB0FG0HcpUnayfa8pn4guqEQ4Y1nrroi/jffdtQgFkrNt0sD3fMSwwC0AbmECqj3tDLl0e1slBR0RENll+ZF0g==", + "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "oboe": "2.1.3", + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.35" } }, - "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=", + "web3-providers-ws": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.35.tgz", + "integrity": "sha512-Cx64NgDStynKaUGDIIOfaCd0fZusL8h5avKTkdTjUu2aHhFJhZoVBGVLhoDtUaqZGWIZGcBJOoVf2JkGUOjDRQ==", + "dev": true, "requires": { - "is-hex-prefixed": "1.0.0" + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.35", + "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" + }, + "dependencies": { + "websocket": { + "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "dev": true, + "requires": { + "debug": "2.6.9", + "nan": "2.10.0", + "typedarray-to-buffer": "3.1.5", + "yaeti": "0.0.6" + } + } } }, - "truffle-blockchain-utils": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.4.tgz", - "integrity": "sha512-wgRrhwqh0aea08Hz28hUV4tuF2uTVQH/e9kBou+WK04cqrutB5cxQVQ6HGjeZLltxBYOFvhrGOOq4l3WJFnPEA==", - "dev": true - }, - "truffle-contract": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/truffle-contract/-/truffle-contract-3.0.5.tgz", - "integrity": "sha512-lRayhvX73OrLJ6TDvc0iYbzcB+Y1F9FCj9N1FXQ2EKOkqyIjmgZNMZFHGjvfTws1gsmonYd6sND0ahipiUYy8g==", + "web3-shh": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.35.tgz", + "integrity": "sha512-8qSonk/x0xabERS9Sr6AIADN/Ty+5KwARkkGIfSYHKqFpdMDz+76F7cUCxtoCZoS8K04xgZlDKYe0TJXLYA0Fw==", "dev": true, "requires": { - "ethjs-abi": "0.1.8", - "truffle-blockchain-utils": "0.0.4", - "truffle-contract-schema": "2.0.0", - "truffle-error": "0.0.2", - "web3": "0.20.6" + "web3-core": "1.0.0-beta.35", + "web3-core-method": "1.0.0-beta.35", + "web3-core-subscriptions": "1.0.0-beta.35", + "web3-net": "1.0.0-beta.35" } }, - "truffle-contract-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/truffle-contract-schema/-/truffle-contract-schema-2.0.0.tgz", - "integrity": "sha512-nLlspmu1GKDaluWksBwitHi/7Z3IpRjmBYeO9N+T1nVJD2V4IWJaptCKP1NqnPiJA+FChB7+F7pI6Br51/FtXQ==", + "web3-utils": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.35.tgz", + "integrity": "sha512-Dq6f0SOKj3BDFRgOPnE6ALbzBDCKVIW8mKWVf7tGVhTDHf+wQaWwQSC3aArFSqdExB75BPBPyDpuMTNszhljpA==", "dev": true, "requires": { - "ajv": "5.5.2", - "crypto-js": "3.1.9-1", - "debug": "3.1.0" + "bn.js": "4.11.6", + "eth-lib": "0.1.27", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randomhex": "0.1.5", + "underscore": "1.8.3", + "utf8": "2.1.1" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "dev": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "utf8": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", + "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", "dev": true } } }, - "truffle-error": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/truffle-error/-/truffle-error-0.0.2.tgz", - "integrity": "sha1-AbGJt4UFVmrhaJwjnHyi3RIc/kw=", - "dev": true + "websocket": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.26.tgz", + "integrity": "sha512-fjcrYDPIQxpTnqFQ9JjxUQcdvR89MFAOjPBlF+vjOt49w/XW4fJknUoMz/mDIn2eK1AdslVojcaOxOqyZZV8rw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "nan": "2.10.0", + "typedarray-to-buffer": "3.1.5", + "yaeti": "0.0.6" + } }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", "dev": true }, - "utf8": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", - "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=", + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "dev": true }, - "web3": { - "version": "0.20.6", - "resolved": "https://registry.npmjs.org/web3/-/web3-0.20.6.tgz", - "integrity": "sha1-PpcwauAk+yThCj11yIQwJWIhUSA=", + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "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" - }, - "dependencies": { - "bignumber.js": { - "version": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934", - "dev": true - }, - "crypto-js": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", - "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=", - "dev": true - } + "string-width": "1.0.2", + "strip-ansi": "3.0.1" } }, "wrappy": { @@ -803,17 +5936,143 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2", + "ultron": "1.1.1" + } + }, + "xhr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", + "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", + "dev": true, + "requires": { + "global": "4.3.2", + "is-function": "1.0.1", + "parse-headers": "2.0.1", + "xtend": "4.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "buffer-to-arraybuffer": "0.0.5", + "object-assign": "4.1.1", + "query-string": "5.1.1", + "simple-get": "2.8.1", + "timed-out": "4.0.1", + "url-set-query": "1.0.0", + "xhr": "2.5.0" + } + }, + "xhr-request-promise": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", + "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", + "dev": true, + "requires": { + "xhr-request": "1.1.0" + } + }, "xhr2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=", "dev": true }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", + "dev": true, + "requires": { + "cookiejar": "2.1.2" + } + }, "xmlhttprequest": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "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=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.3", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + }, + "dependencies": { + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "lodash.assign": "4.2.0" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "fd-slicer": "1.1.0" + } } } } diff --git a/package.json b/package.json index d1e4dab..a784ac1 100644 --- a/package.json +++ b/package.json @@ -26,16 +26,17 @@ "homepage": "https://github.com/ethereum-alarm-clock/eac.js-lib#readme", "devDependencies": { "@digix/tempo": "0.2.0", - "@types/node": "^10.5.3", + "@types/node": "10.5.3", "chai": "4.1.2", "ganache-core": "2.1.2", "mocha": "5.1.1", "truffle-contract": "3.0.5", + "typescript": "2.9.2", "web3": "0.20.6" }, "dependencies": { "bignumber.js": "5.0.0", "ethereumjs-util": "5.2.0", - "ethereumjs-wallet": "^0.6.1" + "ethereumjs-wallet": "0.6.0" } } diff --git a/test/txRequest.js b/test/txRequest.js index 6c6671d..e247bc7 100644 --- a/test/txRequest.js +++ b/test/txRequest.js @@ -5,7 +5,7 @@ const { timetravel } = require('./helper/mine2') describe("TxRequest", () => { let eac - let delpoyed + let deployed let web3 before(async () => { From 12d0e468cf5b11b88d7075b2e069114258538fbb Mon Sep 17 00:00:00 2001 From: Bagaric Date: Mon, 30 Jul 2018 18:48:10 +0200 Subject: [PATCH 19/24] Fix imports --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 7e1ba33..6b3d2c3 100644 --- a/index.js +++ b/index.js @@ -1 +1 @@ -module.exports = require("./build/index"); +module.exports = require("./build/index").default; From cd64b1a1873fef67c3a1227d8a95bbc48092b66a Mon Sep 17 00:00:00 2001 From: Bagaric Date: Mon, 30 Jul 2018 18:57:02 +0200 Subject: [PATCH 20/24] Add ganache commands --- package.json | 3 ++- scripts/deploy_eac.sh | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100755 scripts/deploy_eac.sh diff --git a/package.json b/package.json index a784ac1..33faabd 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "lint": "tslint lib/**/*.ts", "lint-fix": "tslint lib/**/*.ts --fix", "test": "mocha", - "citest": "./scripts/citest.sh" + "deploy-eac": "sh scripts/deploy_eac.sh", + "ganache": "ganache-cli -m \"shove afford modify census bridge good random error fault floor fringe oblige\" -i 1002" }, "repository": { "type": "git", diff --git a/scripts/deploy_eac.sh b/scripts/deploy_eac.sh new file mode 100755 index 0000000..b6d0585 --- /dev/null +++ b/scripts/deploy_eac.sh @@ -0,0 +1,4 @@ +#!/bin/sh +git submodule init ethereum-alarm-clock +git submodule update +./deploy.sh \ No newline at end of file From 0a9551171746847c59662c163f085d53e2bbe0b7 Mon Sep 17 00:00:00 2001 From: lsaether Date: Mon, 30 Jul 2018 20:09:49 +0300 Subject: [PATCH 21/24] fix tests 8/? --- _test/dependencies.js | 24 +++ _test/helper/mine.js | 38 +++++ _test/helper/mine2.js | 26 +++ _test/requestFactory.js | 286 +++++++++++++++++++++++++++++++++ _test/scheduler.js | 158 ++++++++++++++++++ _test/txRequest.js | 122 ++++++++++++++ _test/util.js | 27 ++++ ethereum-alarm-clock | 2 +- lib/util.ts | 2 +- static/assets/development.json | 1 + static/assets/mock.json | 17 ++ test/RequestFactory.js | 26 +++ 12 files changed, 727 insertions(+), 2 deletions(-) create mode 100644 _test/dependencies.js create mode 100644 _test/helper/mine.js create mode 100644 _test/helper/mine2.js create mode 100644 _test/requestFactory.js create mode 100644 _test/scheduler.js create mode 100644 _test/txRequest.js create mode 100644 _test/util.js create mode 100644 static/assets/development.json create mode 100644 static/assets/mock.json create mode 100644 test/RequestFactory.js diff --git a/_test/dependencies.js b/_test/dependencies.js new file mode 100644 index 0000000..d5fad69 --- /dev/null +++ b/_test/dependencies.js @@ -0,0 +1,24 @@ +const packageJSON = require('../package.json'); +const expect = require("chai").expect + +// from https://docs.npmjs.com/files/package.json#dependencies +const nonExactPrefixes = ['~', '^', '>', '>=', '<', '<=']; + +describe('package.json', () => { + it('dependencies should not contain any non-exact versions', () => { + const deps = Object.values(packageJSON.dependencies); + deps.forEach(depVersion => { + nonExactPrefixes.forEach(badPrefix => { + expect(depVersion.includes(badPrefix)).to.be.false; + }); + }); + }); + it('devDependencies should not contain any non-exact versions', () => { + const deps = Object.values(packageJSON.devDependencies); + deps.forEach(depVersion => { + nonExactPrefixes.forEach(badPrefix => { + expect(depVersion.includes(badPrefix)).to.be.false; + }); + }); + }); +}); \ No newline at end of file diff --git a/_test/helper/mine.js b/_test/helper/mine.js new file mode 100644 index 0000000..b90a76b --- /dev/null +++ b/_test/helper/mine.js @@ -0,0 +1,38 @@ +module.exports = (web3) => { + function sendRpc(method, params) { + return new Promise((resolve) => { + web3.currentProvider.sendAsync({ + jsonrpc: '2.0', + method, + params: params || [], + id: new Date().getTime(), + }, (err, res) => { resolve(res); }); + }); + } + function waitUntilBlock(seconds, targetBlock) { + return new Promise((resolve) => { + const asyncIterator = () => { + return web3.eth.getBlock('latest', (e, { number }) => { + if (number >= targetBlock - 1) { + return sendRpc('evm_increaseTime', [seconds]) + .then(() => sendRpc('evm_mine')).then(resolve); + } + return sendRpc('evm_mine').then(asyncIterator); + }); + }; + asyncIterator(); + }); + } + function wait(seconds = 20, blocks = 1) { + return new Promise((resolve) => { + return web3.eth.getBlock('latest', (e, { number }) => { + resolve(blocks + number); + }); + }) + .then((targetBlock) => { + return waitUntilBlock(seconds, targetBlock); + }); + } + return { wait, waitUntilBlock }; + }; + \ No newline at end of file diff --git a/_test/helper/mine2.js b/_test/helper/mine2.js new file mode 100644 index 0000000..c10b79e --- /dev/null +++ b/_test/helper/mine2.js @@ -0,0 +1,26 @@ +const timetravel = (web3, seconds, targetBlock) => { + const sendRPC = (web3, method, params) => { + return new Promise((resolve) => { + web3.currentProvider.sendAsync({ + jsonrpc: '2.0', + method, + params: params || [], + id: new Date().getTime(), + }, (err, res) => resolve(res)) + }) + } + return new Promise((resolve) => { + const asyncIterator = () => { + return web3.eth.getBlock('latest', (err, { number }) => { + if (number >= targetBlock - 1) { + return sendRPC(web3, 'evm_increaseTime', [seconds]) + .then(() => sendRpc(web3, 'evm_mine')).then(resolve) + } + return sendRPC(web3, 'evm_mine').then(asyncIterator) + }) + } + asyncIterator() + }) +} + +module.exports.timetravel = timetravel \ No newline at end of file diff --git a/_test/requestFactory.js b/_test/requestFactory.js new file mode 100644 index 0000000..caee64e --- /dev/null +++ b/_test/requestFactory.js @@ -0,0 +1,286 @@ +const BigNumber = require("bignumber.js") +const Deployer = require("../deploy.js") +const expect = require("chai").expect + +describe("Request Factory", () => { + let eac + let web3 + + before(async () => { + const deployed = await Deployer() + web3 = deployed.web3 + eac = require('../index')(web3) + }) + + it("Ensures that requestFactory is valid", async () => { + const requestFactory = await eac.requestFactory() + expect(requestFactory.address).to.exist + }) + + it("tests RequestFactory.isKnownRequest()", async () => { + // To test `isKnownRequest()` we have to use the scheduler to deploy a + // new instance of a TxRequest. + const eacScheduler = await eac.scheduler() + + const toAddress = "0xDacC9C61754a0C4616FC5323dC946e89Eb272302" + const callData = "0x" + Buffer.from("callData").toString("hex") + const callGas = 3000000 + const callValue = 123454321 + const windowSize = 255 + const windowStart = (await eac.Util.getBlockNumber(web3)) + 25 + const gasPrice = web3.toWei("55", "gwei") + const fee = web3.toWei("120", "finney") + const bounty = web3.toWei("250", "finney") + const requiredDeposit = web3.toWei("50", "finney") + + const endowment = eacScheduler.calcEndowment( + new BigNumber(callGas), + new BigNumber(callValue), + new BigNumber(gasPrice), + new BigNumber(fee), + new BigNumber(bounty) + ) + + eacScheduler.initSender({ + from: web3.eth.defaultAccount, + gas: 3000000, + value: endowment, + }) + + const receipt = await eacScheduler.blockSchedule( + toAddress, + callData, + callGas, + callValue, + windowSize, + windowStart, + gasPrice, + fee, + bounty, + requiredDeposit + ) + + expect(Number(receipt.status)).to.equal(1) + + + const newRequestAddress = eac.Util.getTxRequestFromReceipt(receipt) + + const requestFactory = await eac.requestFactory() + + // Now that we've got the address of our new request, we can check it against + // the request factory. + const isKnown = await requestFactory.isKnownRequest(newRequestAddress) + expect(isKnown).to.be.true + }) + + it("tests RequestFactory.validateRequestParams()", async () => { + const requestFactory = await eac.requestFactory() + expect(requestFactory.address).to.exist + + // First test that `.parseIsValid()` works. + const testBools = [ + true, + false, + false, + true, + true, + false + ] + + const testBoolsTooLong = [...testBools, false] + const testBoolsTooShort = [true] + + const validationErrors = await requestFactory.parseIsValid(testBools) + + expect(validationErrors.length) + .to.equal(3) + + expect(validationErrors) + .to.have.members([ + 'ReservedWindowBiggerThanExecutionWindow', + 'InvalidTemporalUnit', + 'EmptyToAddress' + ]) + + expect(() => { + requestFactory.parseIsValid(testBoolsTooLong) + }) + .to.throw() + + expect(() => { + requestFactory.parseIsValid(testBoolsTooShort) + }) + .to.throw() + // End test `.parseIsValid()` + + const toAddress = "0xDacC9C61754a0C4616FC5323dC946e89Eb272302" + const callData = "0x" + Buffer.from("callData").toString("hex") + const callGas = 3000000 + const callValue = 123454321 + const windowSize = 255 + const windowStart = (await eac.Util.getBlockNumber(web3)) + 25 + const gasPrice = web3.toWei("55", "gwei") + const fee = web3.toWei("120", "finney") + const bounty = web3.toWei("250", "finney") + const requiredDeposit = web3.toWei("50", "finney") + + const addressArgs = [ + web3.eth.defaultAccount, //owner + "0xfffC9C61754a0C4616FC5323dC946e89Eb272302", //fee benefactor + toAddress + ] + + const uintArgs = [ + fee, + bounty, + 255, // claimWindowSize default + 10, // freezePeriod default + 16, // reservedWindowsize default + 1, // temporalUnit = blocks + windowSize, + windowStart, + callGas, + callValue, + gasPrice, + requiredDeposit + ] + + const endowment = eac.Util.calcEndowment( + new BigNumber(callGas), + new BigNumber(callValue), + new BigNumber(gasPrice), + new BigNumber(fee), + new BigNumber(bounty) + ) + + const isValid = await requestFactory.validateRequestParams( + addressArgs, + uintArgs, + endowment + ) + + isValid.forEach(bool => { + expect(bool).to.be.true + }) + + const test = requestFactory.parseIsValid(isValid) + expect(test.length) + .to.equal(0) + + // now that we are sure it produces a positive for good parameters, let's make it fail + // first let's subtract from the minimum calculated endowment, in this case + // the client would be trying to send less ether value than required + const isValidFail = await requestFactory.validateRequestParams( + addressArgs, + uintArgs, + endowment.sub('1000') + ) + + expect(isValidFail[0]) + .to.be.false + + isValidFail.slice(1).forEach(bool => { + expect(bool).to.be.true + }) + + //TODO test all failure cases + }) + + it("Tests getting logs", async () => { + const requestFactory = await eac.requestFactory() + expect(requestFactory.address).to.exist + + // Test getRequestCreatedLogs with no args + const logs = await requestFactory.getRequestCreatedLogs() + expect(logs).to.exist + + const owner = logs[0].args.owner + + const requests = await requestFactory.getRequests() + // Length of an address + expect(requests[0].length).to.equal(42) + + + const test1 = await requestFactory.getRequestsByOwner(owner) + expect(test1[0]) + .to.equal(requests[0]) + + const test2 = await requestFactory.getRequestsByOwner("0x92cb33fe17a75f0088a14c7718a29321fba026cd") + expect(test2.length).to.equal(0) + }) + + it("Tests watching logs", async () => { + let owner, ownerRequest; + const requestFactory = await eac.requestFactory() + expect(requestFactory.address).to.exist + + // Test watchRequestCreatedLogs with no args + let event; + event = await requestFactory.watchRequestCreatedLogs({},null, + async (error,log) => { + if (!owner){ + owner = log.args.owner; + } + expect(log).to.not.equal(null); + const stopped = await requestFactory.stopWatch(event); + expect(stopped).to.equal(true); + } + ); + + let requests; + requests = await requestFactory.watchRequests(null, + async (request) => { + if (!ownerRequest){ + ownerRequest = request; + } + expect(request.length).to.equal(42); + const stopped = await requestFactory.stopWatch(requests); + expect(stopped).to.equal(true); + } + ); + + let test1,compared; + test1 = await requestFactory.watchRequestsByOwner(owner, null, + async (request) => { + if (!compared) { + expect(request).to.equal(ownerRequest); + compared = true; + } + const stopped = await requestFactory.stopWatch(test1); + expect(stopped).to.equal(true); + } + ); + + const test2 = await requestFactory.watchRequestsByOwner("0x92cb33fe17a75f0088a14c7718a29321fba026cd", null, + async (request) => { + expect(request).to.not.exist; + } + ); + + setTimeout(async () => { + const stopped = await requestFactory.stopWatch(test2); + expect(stopped).to.equal(true); + },900); + }) + + it('tests bucket calculation', async () => { + const requestFactory = await eac.requestFactory() + expect(requestFactory.address).to.exist + + const test1 = requestFactory.calcBucket(3200, 1) + const res1 = await new Promise(resolve => { + requestFactory.instance.getBucket(3200, 1, (err,res) => { + if (!err) resolve(res) + }) + }) + expect(res1.toNumber()).to.equal(test1) + + const test2 = requestFactory.calcBucket(320000, 2) + const res2 = await new Promise(resolve => { + requestFactory.instance.getBucket(320000, 2, (err,res) => { + if (!err) resolve(res) + }) + }) + expect(res2.toNumber()).to.equal(test2) + }) +}) diff --git a/_test/scheduler.js b/_test/scheduler.js new file mode 100644 index 0000000..0554e37 --- /dev/null +++ b/_test/scheduler.js @@ -0,0 +1,158 @@ +const BigNumber = require("bignumber.js") +const Deployer = require("../deploy.js") +const expect = require("chai").expect + +describe("Scheduler", () => { + let eac + let web3 + + before(async () => { + const deployed = await Deployer() + web3 = deployed.web3 + eac = require('../index')(web3) + }) + + it("Calculates the expected endowment", () => { + const callGas = new BigNumber(3000000) + const callValue = new BigNumber(123454321) + const gasPrice = new BigNumber(web3.toWei("55", "gwei")) + const fee = new BigNumber(web3.toWei("120", "finney")) + const bounty = new BigNumber(web3.toWei("250", "finney")) + + const expectedEndowment = bounty + .plus(fee) + .plus(callGas.mul(gasPrice)) + .plus(gasPrice.mul(180000)) + .plus(callValue) + + const endowment = eac.Util.calcEndowment( + callGas, + callValue, + gasPrice, + fee, + bounty + ) + + expect(endowment.toString()).to.equal(expectedEndowment.toString()) + }) + + it("Schedules a transaction using calculated endowment", async () => { + const toAddress = "0xDacC9C61754a0C4616FC5323dC946e89Eb272302" + const callData = "0x" + Buffer.from("callData").toString("hex") + const callGas = 3000000 + const callValue = 123454321 + const windowSize = 255 + const windowStart = (await eac.Util.getBlockNumber()) + 25 + const gasPrice = web3.toWei("55", "gwei") + const fee = web3.toWei("120", "finney") + const bounty = web3.toWei("250", "finney") + const requiredDeposit = web3.toWei("50", "finney") + + const endowment = eac.Util.calcEndowment( + new BigNumber(callGas), + new BigNumber(callValue), + new BigNumber(gasPrice), + new BigNumber(fee), + new BigNumber(bounty) + ) + + const eacScheduler = await eac.scheduler() + + eacScheduler.initSender({ + from: web3.eth.defaultAccount, + gas: 3000000, + value: endowment, + }) + + const receipt = await eacScheduler.blockSchedule( + toAddress, + callData, + callGas, + callValue, + windowSize, + windowStart, + gasPrice, + fee, + bounty, + requiredDeposit + ) + + expect(Number(receipt.status)).to.equal(1) + }) + + it("Schedules a transaction using timestamp scheduling", async () => { + // Uses the same variables as blockScheduling but multiplies them by 15, + // which is a rough estimate of an average block time. THIS IS NOT + // WHAT YOU SHOULD DO IN PRODUCTION + const toAddress = "0xDacC9C61754a0C4616FC5323dC946e89Eb272302" + const callData = "0x" + Buffer.from("callData").toString("hex") + const callGas = 3000000 + const callValue = 123454321 + const windowSize = 255 * 15 + const windowStart = (await eac.Util.getTimestamp()) + 25 * 15 + const gasPrice = web3.toWei("55", "gwei") + const fee = web3.toWei("120", "finney") + const bounty = web3.toWei("250", "finney") + const requiredDeposit = web3.toWei("50", "finney") + + const endowment = eac.Util.calcEndowment( + new BigNumber(callGas), + new BigNumber(callValue), + new BigNumber(gasPrice), + new BigNumber(fee), + new BigNumber(bounty) + ) + + const eacScheduler = await eac.scheduler() + + eacScheduler.initSender({ + from: web3.eth.defaultAccount, + gas: 3000000, + value: endowment, + }) + + const receipt = await eacScheduler.timestampSchedule( + toAddress, + callData, + callGas, + callValue, + windowSize, + windowStart, + gasPrice, + fee, + bounty, + requiredDeposit + ) + + expect(Number(receipt.status)).to.equal(1) + + const txRequestAddr = eac.Util.getTxRequestFromReceipt(receipt) + + expect(txRequestAddr).to.exist + + const txRequest = await eac.transactionRequest(txRequestAddr) + await txRequest.fillData() + + const winStart = txRequest.windowStart + const now = await txRequest.now() + + expect(winStart.toNumber()).to.be.above(now.toNumber()) + + const secsToWait = winStart.minus(now) + const { wait, waitUntilBlock } = require("@digix/tempo")(web3) + await wait(secsToWait.toNumber(), 1) + + expect(await txRequest.inExecutionWindow()).to.be.true + + const executeGas = txRequest.callGas.add(180000) + + const executeReceipt = await txRequest.execute({ + from: web3.eth.defaultAccount, + value: 0, + gas: executeGas, + gasPrice: txRequest.gasPrice, + }) + + expect(Number(executeReceipt.status)).to.equal(1) + }) +}) diff --git a/_test/txRequest.js b/_test/txRequest.js new file mode 100644 index 0000000..6c6671d --- /dev/null +++ b/_test/txRequest.js @@ -0,0 +1,122 @@ +const BigNumber = require("bignumber.js") +const expect = require("chai").expect +const Deployer = require("../deploy") +const { timetravel } = require('./helper/mine2') + +describe("TxRequest", () => { + let eac + let delpoyed + let web3 + + before(async () => { + deployed = await Deployer() + web3 = deployed.web3 + eac = require('../index')(web3) + }) + + it("Schedules a transaction and correctly captures all variables", async () => { + const toAddress = "0xDacC9C61754a0C4616FC5323dC946e89Eb272302" + const callData = "0x" + Buffer.from("callData").toString("hex") + const callGas = 3000000 + const callValue = 123454321 + const windowSize = 255 + const windowStart = (await eac.Util.getBlockNumber()) + 25 + const gasPrice = web3.toWei("55", "gwei") + const fee = web3.toWei("120", "finney") + const bounty = web3.toWei("250", "finney") + const requiredDeposit = web3.toWei("50", "finney") + + const endowment = eac.Util.calcEndowment( + new BigNumber(callGas), + new BigNumber(callValue), + new BigNumber(gasPrice), + new BigNumber(fee), + new BigNumber(bounty) + ) + + const scheduler = await eac.scheduler() + + scheduler.initSender({ + from: web3.eth.defaultAccount, + gas: 3000000, + value: endowment, + }) + + const receipt = await scheduler.blockSchedule( + toAddress, + callData, + callGas, + callValue, + windowSize, + windowStart, + gasPrice, + fee, + bounty, + requiredDeposit + ) + + expect(Number(receipt.status)).to.equal(1) + + const newRequestAddress = eac.Util.getTxRequestFromReceipt(receipt) + + const txRequest = await eac.transactionRequest(newRequestAddress) + + expect(txRequest.address).to.exist + + expect(txRequest.address).to.equal(newRequestAddress) + + expect(await txRequest.fillData()).to.be.true + + // Check that all of the variables in `txRequest` matches up to the ones + // we set in `scheduler.blockSchedule` + + expect(txRequest.toAddress).to.equal(toAddress.toLowerCase()) + + expect(await txRequest.callData()).to.equal(callData) + + expect(txRequest.callGas.toNumber()).to.equal(callGas) + + expect(txRequest.callValue.toNumber()).to.equal(callValue) + + expect(txRequest.windowSize.toNumber()).to.equal(windowSize) + + expect(txRequest.windowStart.toNumber()).to.equal(windowStart) + + expect(txRequest.gasPrice.toString()).to.equal(gasPrice) + + expect(txRequest.fee.toString()).to.equal(fee) + + expect(txRequest.bounty.toString()).to.equal(bounty) + + expect(txRequest.requiredDeposit.toString()).to.equal(requiredDeposit) + + // Test the dynamic getters + expect(await eac.Util.getBlockNumber()).to.equal( + (await txRequest.now()).toNumber() + ) + expect(await txRequest.beforeClaimWindow()).to.be.false + expect(await txRequest.inClaimWindow()).to.be.true + expect(await txRequest.inFreezePeriod()).to.be.false + expect(await txRequest.inExecutionWindow()).to.be.false + expect(await txRequest.inReservedWindow()).to.be.false + expect(await txRequest.afterExecutionWindow()).to.be.false + + // Now wait until freeze window + const freezeStart = txRequest.freezePeriodStart + // console.log(freezeStart) + // await timetravel( + // web3, + // 10, + // freezeStart + // ) + // console.log(await eac.Util.getBlockNumber(), + // (await txRequest.now()).toNumber() + // ) + // expect(await txRequest.beforeClaimWindow()).to.be.false + // expect(await txRequest.inClaimWindow()).to.be.false + // expect(await txRequest.inFreezePeriod()).to.be.true + // expect(await txRequest.inExecutionWindow()).to.be.false + // expect(await txRequest.inReservedWindow()).to.be.false + // expect(await txRequest.afterExecutionWindow()).to.be.fals + }) +}) diff --git a/_test/util.js b/_test/util.js new file mode 100644 index 0000000..ebd57e5 --- /dev/null +++ b/_test/util.js @@ -0,0 +1,27 @@ +const BigNumber = require("bignumber.js") +const Deployer = require("../deploy.js") +const expect = require("chai").expect + +describe("Util", () => { + let eac + let web3 + + before(async () => { + const deployed = await Deployer() + web3 = deployed.web3 + eac = require('../index')(web3) + }) + + it('tests init without a parameter', () => { + const util = require('../index')().Util + expect(util) + .to.exist + // console.log(util) + }) + + // it('tests init', async () => { + // const chainName = await eac.Util.getChainName() + // console.log(chainName) + + // }) +}) \ No newline at end of file diff --git a/ethereum-alarm-clock b/ethereum-alarm-clock index c0e69ad..50b116b 160000 --- a/ethereum-alarm-clock +++ b/ethereum-alarm-clock @@ -1 +1 @@ -Subproject commit c0e69ad39e9ec5ddc3e08c752eee62db70e5559a +Subproject commit 50b116be35ee1b7c3658920623af98658591c4c1 diff --git a/lib/util.ts b/lib/util.ts index 31b4613..85db637 100644 --- a/lib/util.ts +++ b/lib/util.ts @@ -85,7 +85,7 @@ export default class Util { } public getABI(name: string): {} { - return require(`${__dirname}/build/abi/${name}.json`); + return require(`../static/build/abi/${name}.json`); } public getBalance(address: Address): Promise { diff --git a/static/assets/development.json b/static/assets/development.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/static/assets/development.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/static/assets/mock.json b/static/assets/mock.json new file mode 100644 index 0000000..d5e4475 --- /dev/null +++ b/static/assets/mock.json @@ -0,0 +1,17 @@ +{ + "baseScheduler": "0xa5b77caa4f414a9f1a350d1ae2c2c9f66c9b1e44", + "blockScheduler": "0x394ce9fe06c72f18e5a845842974f0c1224b1ff5", + "claimLib": "0x7a764bb00fe101c53450a97519ad191e3c4830c5", + "executionLib": "0x4069bd5286f1287173f683295683e97783913fc4", + "iterTools": "0x97a614f0dfd6e034e081b79fbaa1c6531e3956ee", + "mathLib": "0xea5c9406c8ee832fed3d82348a9992c20640eaee", + "paymentLib": "0x4c767bb10b5b0f4aafd68d6a26513082152444c4", + "requestFactory": "0x98c128b3d8a0ac240f7b7dd4969ea0ad54f9d330", + "requestLib": "0x3381d072c9672747c69342c78f1fc97b1db3db84", + "requestMetaLib": "0x3fef9e4c267b6d1d508ee547fca9e474787ef68e", + "requestScheduleLib": "0x4206938c8c3853898fc7bc227aaf420bfca32aa2", + "safeMath": "0x656aa18a8cd4e2e60470f1a01080ad0a8bed4781", + "timestampScheduler": "0x31bbbf5180f2bd9c213e2e1d91a439677243268a", + "transactionRequestCore": "0x54d4a85e85a54d21168ebf37fa22e32eb79b8d3f", + "transactionRecorder": "0xcf5aa253bb5bd2d38ebc659ded8a4c3846b5471e" +} \ No newline at end of file diff --git a/test/RequestFactory.js b/test/RequestFactory.js new file mode 100644 index 0000000..4ea5179 --- /dev/null +++ b/test/RequestFactory.js @@ -0,0 +1,26 @@ +// const Bignumber = require("bignumber.js"); +// const { expect } = require("chai"); + +// const initEacjs = require("../index"); + +// const mockWeb3 = { +// version: { +// getNetwork: (cb) => { +// return () +// } +// } +// }; + +// describe("RequestFactory", () => { +// let eacjs; + +// before(() => { +// eacjs = initEacjs(mockWeb3); +// }) + + +// it("Creates a new instance of RequestFactory", async () => { +// const rFactory = await eacjs.requestFactory(); +// expect(rFactory.addess).to.exist; +// }) +// }) \ No newline at end of file From a23361ca60d9e9e1f16d86722d07fd577e46441f Mon Sep 17 00:00:00 2001 From: lsaether Date: Mon, 30 Jul 2018 20:13:34 +0300 Subject: [PATCH 22/24] fix tests 9/? --- deploy.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy.js b/deploy.js index 8505276..985de17 100644 --- a/deploy.js +++ b/deploy.js @@ -10,7 +10,7 @@ const web3 = new Web3(provider) const TruffleContract = require('truffle-contract') const getArtifact = name => { - const contract = TruffleContract(require(`./lib/build/contracts/${name}.json`)) + const contract = TruffleContract(require(`./static/build/contracts/${name}.json`)) contract.setProvider(provider) contract.detectNetwork() return contract @@ -150,7 +150,7 @@ async function main() { timestampScheduler: timestampScheduler.address } const fs = require('fs') - fs.writeFileSync('./lib/assets/tester.json', JSON.stringify(contracts)) + fs.writeFileSync('./static/assets/tester.json', JSON.stringify(contracts)) resolve({ // Ganache attached web3 web3: web3, From 91a9561f6bab5bccf84391fa835ffe976bca825c Mon Sep 17 00:00:00 2001 From: lsaether Date: Mon, 30 Jul 2018 20:17:44 +0300 Subject: [PATCH 23/24] fix tests 10/? --- .travis.yml | 1 + index.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ba7484b..f465e86 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,7 @@ install: npm install script: - npm i -g truffle - sh deploy.sh + - npm run build - npm test git: submodules: true diff --git a/index.js b/index.js index 6b3d2c3..f6762e6 100644 --- a/index.js +++ b/index.js @@ -1 +1 @@ -module.exports = require("./build/index").default; +module.exports = require("./build/index.js").default; From 52e5e4213e4d876d7ccd6dc4d2f0e9d1202ab387 Mon Sep 17 00:00:00 2001 From: lsaether Date: Wed, 1 Aug 2018 23:19:58 +0300 Subject: [PATCH 24/24] add buckets, types --- _test/txRequest.js | 122 -------- deploy.js => archive/deploy.js | 0 deploy.sh => archive/deploy.sh | 0 {docs => archive/docs}/API/constants.md | 0 {docs => archive/docs}/API/index.md | 0 {docs => archive/docs}/API/requestFactory.md | 0 {docs => archive/docs}/API/requestTracker.md | 0 {docs => archive/docs}/API/scheduler.md | 0 {docs => archive/docs}/API/txRequest.md | 0 {docs => archive/docs}/API/util.md | 0 {docs => archive/docs}/Changelog.md | 0 {docs => archive/docs}/Executing_Tut.md | 0 .../docs}/GUI_Implementer_Guide.md | 0 {docs => archive/docs}/index.md | 0 {docs => archive/docs}/old/Executing_Tut.md | 0 {docs => archive/docs}/old/Tutorial_Geth.txt | 0 {docs => archive/docs}/old/spec.txt | 0 {example => archive/example}/webpack/.babelrc | 0 .../example}/webpack/README.md | 0 .../example}/webpack/index.html | 0 .../example}/webpack/package-lock.json | 0 .../example}/webpack/package.json | 0 .../example}/webpack/server.js | 0 .../example}/webpack/src/components/app.js | 0 .../example}/webpack/src/components/index.js | 0 .../example}/webpack/webpack.config.js | 0 .../example}/webpack/yarn.lock | 0 .../extractContractsInfo.js | 0 mkdocs.yml => archive/mkdocs.yml | 0 script.js => archive/script.js | 0 {test => archive/test}/RequestFactory.js | 0 {_test => archive/test}/dependencies.js | 0 {_test => archive/test}/helper/mine.js | 0 {_test => archive/test}/helper/mine2.js | 0 {_test => archive/test}/requestFactory.js | 2 +- {_test => archive/test}/scheduler.js | 0 {test => archive/test}/txRequest.js | 0 {_test => archive/test}/util.js | 0 ethereum-alarm-clock | 1 - package.json | 4 +- src/Buckets/IBucketPair.ts | 8 + src/Buckets/IBuckets.ts | 6 + src/Buckets/consts.ts | 4 + src/Buckets/index.ts | 3 + {lib => src}/RequestFactory/index.ts | 51 ++-- {lib => src}/Scheduler/index.ts | 0 {lib => src}/TransactionRequest/index.ts | 0 .../TransactionRequest/requestData.ts | 6 +- {lib => src}/TransactionRequest/txRequest.ts | 83 ++--- src/Types/index.ts | 11 + {lib => src}/Version/index.ts | 0 {lib => src}/constants.ts | 0 {lib => src}/global.d.ts | 0 {lib => src}/index.ts | 15 +- {lib => src}/util.ts | 0 test/dependencies.js | 24 -- test/helper/mine.js | 38 --- test/helper/mine2.js | 26 -- test/requestFactory.js | 286 ------------------ test/scheduler.js | 158 ---------- test/util.js | 27 -- 61 files changed, 116 insertions(+), 759 deletions(-) delete mode 100644 _test/txRequest.js rename deploy.js => archive/deploy.js (100%) rename deploy.sh => archive/deploy.sh (100%) rename {docs => archive/docs}/API/constants.md (100%) rename {docs => archive/docs}/API/index.md (100%) rename {docs => archive/docs}/API/requestFactory.md (100%) rename {docs => archive/docs}/API/requestTracker.md (100%) rename {docs => archive/docs}/API/scheduler.md (100%) rename {docs => archive/docs}/API/txRequest.md (100%) rename {docs => archive/docs}/API/util.md (100%) rename {docs => archive/docs}/Changelog.md (100%) rename {docs => archive/docs}/Executing_Tut.md (100%) rename {docs => archive/docs}/GUI_Implementer_Guide.md (100%) rename {docs => archive/docs}/index.md (100%) rename {docs => archive/docs}/old/Executing_Tut.md (100%) rename {docs => archive/docs}/old/Tutorial_Geth.txt (100%) rename {docs => archive/docs}/old/spec.txt (100%) rename {example => archive/example}/webpack/.babelrc (100%) rename {example => archive/example}/webpack/README.md (100%) rename {example => archive/example}/webpack/index.html (100%) rename {example => archive/example}/webpack/package-lock.json (100%) rename {example => archive/example}/webpack/package.json (100%) rename {example => archive/example}/webpack/server.js (100%) rename {example => archive/example}/webpack/src/components/app.js (100%) rename {example => archive/example}/webpack/src/components/index.js (100%) rename {example => archive/example}/webpack/webpack.config.js (100%) rename {example => archive/example}/webpack/yarn.lock (100%) rename extractContractsInfo.js => archive/extractContractsInfo.js (100%) rename mkdocs.yml => archive/mkdocs.yml (100%) rename script.js => archive/script.js (100%) rename {test => archive/test}/RequestFactory.js (100%) rename {_test => archive/test}/dependencies.js (100%) rename {_test => archive/test}/helper/mine.js (100%) rename {_test => archive/test}/helper/mine2.js (100%) rename {_test => archive/test}/requestFactory.js (99%) rename {_test => archive/test}/scheduler.js (100%) rename {test => archive/test}/txRequest.js (100%) rename {_test => archive/test}/util.js (100%) delete mode 160000 ethereum-alarm-clock create mode 100644 src/Buckets/IBucketPair.ts create mode 100644 src/Buckets/IBuckets.ts create mode 100644 src/Buckets/consts.ts create mode 100644 src/Buckets/index.ts rename {lib => src}/RequestFactory/index.ts (82%) rename {lib => src}/Scheduler/index.ts (100%) rename {lib => src}/TransactionRequest/index.ts (100%) rename {lib => src}/TransactionRequest/requestData.ts (96%) rename {lib => src}/TransactionRequest/txRequest.ts (86%) create mode 100644 src/Types/index.ts rename {lib => src}/Version/index.ts (100%) rename {lib => src}/constants.ts (100%) rename {lib => src}/global.d.ts (100%) rename {lib => src}/index.ts (86%) rename {lib => src}/util.ts (100%) delete mode 100644 test/dependencies.js delete mode 100644 test/helper/mine.js delete mode 100644 test/helper/mine2.js delete mode 100644 test/requestFactory.js delete mode 100644 test/scheduler.js delete mode 100644 test/util.js diff --git a/_test/txRequest.js b/_test/txRequest.js deleted file mode 100644 index 6c6671d..0000000 --- a/_test/txRequest.js +++ /dev/null @@ -1,122 +0,0 @@ -const BigNumber = require("bignumber.js") -const expect = require("chai").expect -const Deployer = require("../deploy") -const { timetravel } = require('./helper/mine2') - -describe("TxRequest", () => { - let eac - let delpoyed - let web3 - - before(async () => { - deployed = await Deployer() - web3 = deployed.web3 - eac = require('../index')(web3) - }) - - it("Schedules a transaction and correctly captures all variables", async () => { - const toAddress = "0xDacC9C61754a0C4616FC5323dC946e89Eb272302" - const callData = "0x" + Buffer.from("callData").toString("hex") - const callGas = 3000000 - const callValue = 123454321 - const windowSize = 255 - const windowStart = (await eac.Util.getBlockNumber()) + 25 - const gasPrice = web3.toWei("55", "gwei") - const fee = web3.toWei("120", "finney") - const bounty = web3.toWei("250", "finney") - const requiredDeposit = web3.toWei("50", "finney") - - const endowment = eac.Util.calcEndowment( - new BigNumber(callGas), - new BigNumber(callValue), - new BigNumber(gasPrice), - new BigNumber(fee), - new BigNumber(bounty) - ) - - const scheduler = await eac.scheduler() - - scheduler.initSender({ - from: web3.eth.defaultAccount, - gas: 3000000, - value: endowment, - }) - - const receipt = await scheduler.blockSchedule( - toAddress, - callData, - callGas, - callValue, - windowSize, - windowStart, - gasPrice, - fee, - bounty, - requiredDeposit - ) - - expect(Number(receipt.status)).to.equal(1) - - const newRequestAddress = eac.Util.getTxRequestFromReceipt(receipt) - - const txRequest = await eac.transactionRequest(newRequestAddress) - - expect(txRequest.address).to.exist - - expect(txRequest.address).to.equal(newRequestAddress) - - expect(await txRequest.fillData()).to.be.true - - // Check that all of the variables in `txRequest` matches up to the ones - // we set in `scheduler.blockSchedule` - - expect(txRequest.toAddress).to.equal(toAddress.toLowerCase()) - - expect(await txRequest.callData()).to.equal(callData) - - expect(txRequest.callGas.toNumber()).to.equal(callGas) - - expect(txRequest.callValue.toNumber()).to.equal(callValue) - - expect(txRequest.windowSize.toNumber()).to.equal(windowSize) - - expect(txRequest.windowStart.toNumber()).to.equal(windowStart) - - expect(txRequest.gasPrice.toString()).to.equal(gasPrice) - - expect(txRequest.fee.toString()).to.equal(fee) - - expect(txRequest.bounty.toString()).to.equal(bounty) - - expect(txRequest.requiredDeposit.toString()).to.equal(requiredDeposit) - - // Test the dynamic getters - expect(await eac.Util.getBlockNumber()).to.equal( - (await txRequest.now()).toNumber() - ) - expect(await txRequest.beforeClaimWindow()).to.be.false - expect(await txRequest.inClaimWindow()).to.be.true - expect(await txRequest.inFreezePeriod()).to.be.false - expect(await txRequest.inExecutionWindow()).to.be.false - expect(await txRequest.inReservedWindow()).to.be.false - expect(await txRequest.afterExecutionWindow()).to.be.false - - // Now wait until freeze window - const freezeStart = txRequest.freezePeriodStart - // console.log(freezeStart) - // await timetravel( - // web3, - // 10, - // freezeStart - // ) - // console.log(await eac.Util.getBlockNumber(), - // (await txRequest.now()).toNumber() - // ) - // expect(await txRequest.beforeClaimWindow()).to.be.false - // expect(await txRequest.inClaimWindow()).to.be.false - // expect(await txRequest.inFreezePeriod()).to.be.true - // expect(await txRequest.inExecutionWindow()).to.be.false - // expect(await txRequest.inReservedWindow()).to.be.false - // expect(await txRequest.afterExecutionWindow()).to.be.fals - }) -}) diff --git a/deploy.js b/archive/deploy.js similarity index 100% rename from deploy.js rename to archive/deploy.js diff --git a/deploy.sh b/archive/deploy.sh similarity index 100% rename from deploy.sh rename to archive/deploy.sh diff --git a/docs/API/constants.md b/archive/docs/API/constants.md similarity index 100% rename from docs/API/constants.md rename to archive/docs/API/constants.md diff --git a/docs/API/index.md b/archive/docs/API/index.md similarity index 100% rename from docs/API/index.md rename to archive/docs/API/index.md diff --git a/docs/API/requestFactory.md b/archive/docs/API/requestFactory.md similarity index 100% rename from docs/API/requestFactory.md rename to archive/docs/API/requestFactory.md diff --git a/docs/API/requestTracker.md b/archive/docs/API/requestTracker.md similarity index 100% rename from docs/API/requestTracker.md rename to archive/docs/API/requestTracker.md diff --git a/docs/API/scheduler.md b/archive/docs/API/scheduler.md similarity index 100% rename from docs/API/scheduler.md rename to archive/docs/API/scheduler.md diff --git a/docs/API/txRequest.md b/archive/docs/API/txRequest.md similarity index 100% rename from docs/API/txRequest.md rename to archive/docs/API/txRequest.md diff --git a/docs/API/util.md b/archive/docs/API/util.md similarity index 100% rename from docs/API/util.md rename to archive/docs/API/util.md diff --git a/docs/Changelog.md b/archive/docs/Changelog.md similarity index 100% rename from docs/Changelog.md rename to archive/docs/Changelog.md diff --git a/docs/Executing_Tut.md b/archive/docs/Executing_Tut.md similarity index 100% rename from docs/Executing_Tut.md rename to archive/docs/Executing_Tut.md diff --git a/docs/GUI_Implementer_Guide.md b/archive/docs/GUI_Implementer_Guide.md similarity index 100% rename from docs/GUI_Implementer_Guide.md rename to archive/docs/GUI_Implementer_Guide.md diff --git a/docs/index.md b/archive/docs/index.md similarity index 100% rename from docs/index.md rename to archive/docs/index.md diff --git a/docs/old/Executing_Tut.md b/archive/docs/old/Executing_Tut.md similarity index 100% rename from docs/old/Executing_Tut.md rename to archive/docs/old/Executing_Tut.md diff --git a/docs/old/Tutorial_Geth.txt b/archive/docs/old/Tutorial_Geth.txt similarity index 100% rename from docs/old/Tutorial_Geth.txt rename to archive/docs/old/Tutorial_Geth.txt diff --git a/docs/old/spec.txt b/archive/docs/old/spec.txt similarity index 100% rename from docs/old/spec.txt rename to archive/docs/old/spec.txt diff --git a/example/webpack/.babelrc b/archive/example/webpack/.babelrc similarity index 100% rename from example/webpack/.babelrc rename to archive/example/webpack/.babelrc diff --git a/example/webpack/README.md b/archive/example/webpack/README.md similarity index 100% rename from example/webpack/README.md rename to archive/example/webpack/README.md diff --git a/example/webpack/index.html b/archive/example/webpack/index.html similarity index 100% rename from example/webpack/index.html rename to archive/example/webpack/index.html diff --git a/example/webpack/package-lock.json b/archive/example/webpack/package-lock.json similarity index 100% rename from example/webpack/package-lock.json rename to archive/example/webpack/package-lock.json diff --git a/example/webpack/package.json b/archive/example/webpack/package.json similarity index 100% rename from example/webpack/package.json rename to archive/example/webpack/package.json diff --git a/example/webpack/server.js b/archive/example/webpack/server.js similarity index 100% rename from example/webpack/server.js rename to archive/example/webpack/server.js diff --git a/example/webpack/src/components/app.js b/archive/example/webpack/src/components/app.js similarity index 100% rename from example/webpack/src/components/app.js rename to archive/example/webpack/src/components/app.js diff --git a/example/webpack/src/components/index.js b/archive/example/webpack/src/components/index.js similarity index 100% rename from example/webpack/src/components/index.js rename to archive/example/webpack/src/components/index.js diff --git a/example/webpack/webpack.config.js b/archive/example/webpack/webpack.config.js similarity index 100% rename from example/webpack/webpack.config.js rename to archive/example/webpack/webpack.config.js diff --git a/example/webpack/yarn.lock b/archive/example/webpack/yarn.lock similarity index 100% rename from example/webpack/yarn.lock rename to archive/example/webpack/yarn.lock diff --git a/extractContractsInfo.js b/archive/extractContractsInfo.js similarity index 100% rename from extractContractsInfo.js rename to archive/extractContractsInfo.js diff --git a/mkdocs.yml b/archive/mkdocs.yml similarity index 100% rename from mkdocs.yml rename to archive/mkdocs.yml diff --git a/script.js b/archive/script.js similarity index 100% rename from script.js rename to archive/script.js diff --git a/test/RequestFactory.js b/archive/test/RequestFactory.js similarity index 100% rename from test/RequestFactory.js rename to archive/test/RequestFactory.js diff --git a/_test/dependencies.js b/archive/test/dependencies.js similarity index 100% rename from _test/dependencies.js rename to archive/test/dependencies.js diff --git a/_test/helper/mine.js b/archive/test/helper/mine.js similarity index 100% rename from _test/helper/mine.js rename to archive/test/helper/mine.js diff --git a/_test/helper/mine2.js b/archive/test/helper/mine2.js similarity index 100% rename from _test/helper/mine2.js rename to archive/test/helper/mine2.js diff --git a/_test/requestFactory.js b/archive/test/requestFactory.js similarity index 99% rename from _test/requestFactory.js rename to archive/test/requestFactory.js index caee64e..e7753e6 100644 --- a/_test/requestFactory.js +++ b/archive/test/requestFactory.js @@ -7,7 +7,7 @@ describe("Request Factory", () => { let web3 before(async () => { - const deployed = await Deployer() + const deployed = await Deployer(); web3 = deployed.web3 eac = require('../index')(web3) }) diff --git a/_test/scheduler.js b/archive/test/scheduler.js similarity index 100% rename from _test/scheduler.js rename to archive/test/scheduler.js diff --git a/test/txRequest.js b/archive/test/txRequest.js similarity index 100% rename from test/txRequest.js rename to archive/test/txRequest.js diff --git a/_test/util.js b/archive/test/util.js similarity index 100% rename from _test/util.js rename to archive/test/util.js diff --git a/ethereum-alarm-clock b/ethereum-alarm-clock deleted file mode 160000 index 50b116b..0000000 --- a/ethereum-alarm-clock +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 50b116be35ee1b7c3658920623af98658591c4c1 diff --git a/package.json b/package.json index 33faabd..87e45d9 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "main": "index.js", "scripts": { "build": "tsc", - "lint": "tslint lib/**/*.ts", - "lint-fix": "tslint lib/**/*.ts --fix", + "lint": "tslint src/**/*.ts", + "lint-fix": "tslint src/**/*.ts --fix", "test": "mocha", "deploy-eac": "sh scripts/deploy_eac.sh", "ganache": "ganache-cli -m \"shove afford modify census bridge good random error fault floor fringe oblige\" -i 1002" diff --git a/src/Buckets/IBucketPair.ts b/src/Buckets/IBucketPair.ts new file mode 100644 index 0000000..1724966 --- /dev/null +++ b/src/Buckets/IBucketPair.ts @@ -0,0 +1,8 @@ +type Bucket = number; + +interface IBucketPair { + blockBucket: Bucket; + timestampBucket: Bucket; +} + +export { Bucket, IBucketPair }; diff --git a/src/Buckets/IBuckets.ts b/src/Buckets/IBuckets.ts new file mode 100644 index 0000000..f8faa04 --- /dev/null +++ b/src/Buckets/IBuckets.ts @@ -0,0 +1,6 @@ +import { IBucketPair } from "./IBucketPair"; + +export interface IBuckets { + currentBuckets: IBucketPair; + nextBuckets: IBucketPair; +} diff --git a/src/Buckets/consts.ts b/src/Buckets/consts.ts new file mode 100644 index 0000000..1ffd6a9 --- /dev/null +++ b/src/Buckets/consts.ts @@ -0,0 +1,4 @@ +export const BucketSize = { + block: 240, + timestamp: 3600, +}; diff --git a/src/Buckets/index.ts b/src/Buckets/index.ts new file mode 100644 index 0000000..1061e4a --- /dev/null +++ b/src/Buckets/index.ts @@ -0,0 +1,3 @@ +export { Bucket, IBucketPair } from "./IBucketPair"; +export { IBuckets } from "./IBuckets"; +export { BucketSize } from "./consts"; diff --git a/lib/RequestFactory/index.ts b/src/RequestFactory/index.ts similarity index 82% rename from lib/RequestFactory/index.ts rename to src/RequestFactory/index.ts index 427e1ff..50553fa 100644 --- a/lib/RequestFactory/index.ts +++ b/src/RequestFactory/index.ts @@ -1,7 +1,17 @@ +import { Bucket, BucketSize } from "../Buckets"; import initUtil from "../util"; type Address = string; +enum RequestFactoryError { + INIT_NULL_ADDR = "Cannot initialize a RequestFactory from null address.", +} + +enum TemporalUnit { + Block = 1, + TimeStamp = 2, +} + export default class RequestFactory { public instance: any; public util: any; @@ -9,7 +19,7 @@ export default class RequestFactory { constructor(address: Address, web3: any) { if (!this.util.checkNotNullAddress(address)) { - throw new Error(`Cannot initialize a RequestFactory from address ${address}`); + throw new Error(RequestFactoryError.INIT_NULL_ADDR); } this.web3 = web3; @@ -130,7 +140,7 @@ export default class RequestFactory { }); } - public async getRequestsByBucket(bucket: any): Promise { + public async getRequestsByBucket(bucket: Bucket): Promise { const logs = await this.getRequestCreatedLogs({ bucket, }, 0, 0); @@ -144,7 +154,7 @@ export default class RequestFactory { return requests; } - public async watchRequestsByBucket(bucket: any, cb: any): Promise { + public async watchRequestsByBucket(bucket: Bucket, cb: any): Promise { return await this.watchRequestCreatedLogs({ bucket, }, "", @@ -159,12 +169,15 @@ export default class RequestFactory { } // Assume the temporalUnit is blocks if not timestamp. - public calcBucket(windowStart: number, temporalUnit: number) { - let bucketSize = 240; // block bucketsize + public calcBucket(windowStart: number, temporalUnit: TemporalUnit) { + // Assume block as default unit. + let bucketSize = BucketSize.block; + // TODO make constant let sign = -1; // block sign if (temporalUnit === 2) { - bucketSize = 3600; // timestamp bucketsize + bucketSize = BucketSize.timestamp; + // TODO make constant sign = 1; // timestamp sign } @@ -189,7 +202,7 @@ export default class RequestFactory { }); } - public async getRequestsByOwner(owner: string, startBlock: number, endBlock: number) { + public async getRequestsByOwner(owner: Address, startBlock: number, endBlock: number) { const logs = await this.getRequestCreatedLogs({ owner, }, startBlock, endBlock); @@ -200,7 +213,7 @@ export default class RequestFactory { return requests; } - public async watchRequestsByOwner(owner: string, startBlock: number, callback: any): Promise { + public async watchRequestsByOwner(owner: Address, startBlock: number, callback: any): Promise { return await this.watchRequestCreatedLogs({ owner, }, startBlock, (error: any, log: any) => { @@ -209,26 +222,4 @@ export default class RequestFactory { } }); } - - /** - * Chain inits - */ - - // static initMainnet() { - // throw new Error("Not implemented.") - // } - - // static initRopsten(web3) { - // const address = require("../assets/ropsten.json").requestFactory - // return new RequestFactory(address, web3) - // } - - // static initRinkeby() { - // throw new Error("Not implemented.") - // } - - // static initKovan(web3) { - // const address = require("../assets/kovan.json").requestFactory - // return new RequestFactory(address, web3) - // } } diff --git a/lib/Scheduler/index.ts b/src/Scheduler/index.ts similarity index 100% rename from lib/Scheduler/index.ts rename to src/Scheduler/index.ts diff --git a/lib/TransactionRequest/index.ts b/src/TransactionRequest/index.ts similarity index 100% rename from lib/TransactionRequest/index.ts rename to src/TransactionRequest/index.ts diff --git a/lib/TransactionRequest/requestData.ts b/src/TransactionRequest/requestData.ts similarity index 96% rename from lib/TransactionRequest/requestData.ts rename to src/TransactionRequest/requestData.ts index e01637f..5993e3c 100644 --- a/lib/TransactionRequest/requestData.ts +++ b/src/TransactionRequest/requestData.ts @@ -1,5 +1,7 @@ import BigNumber from "bignumber.js"; +import { TemporalUnit } from "../Types"; + interface IClaimData { claimedBy: string; claimDeposit: BigNumber; @@ -28,7 +30,7 @@ interface ISchedule { claimWindowSize: BigNumber; freezePeriod: BigNumber; reservedWindowSize: BigNumber; - temporalUnit: number; + temporalUnit: TemporalUnit; windowSize: BigNumber; windowStart: BigNumber; } @@ -120,7 +122,7 @@ export default class RequestData implements IRequestData { }; } - public refresh() { + public refresh(): Promise { return new Promise((resolve, reject) => { this.txRequest.requestData.call((err: any, data: any) => { if (err) { diff --git a/lib/TransactionRequest/txRequest.ts b/src/TransactionRequest/txRequest.ts similarity index 86% rename from lib/TransactionRequest/txRequest.ts rename to src/TransactionRequest/txRequest.ts index 33dfdad..e05f6aa 100644 --- a/lib/TransactionRequest/txRequest.ts +++ b/src/TransactionRequest/txRequest.ts @@ -1,6 +1,7 @@ import BigNumber from "bignumber.js"; import Constants from "../constants"; +import { Address, TemporalUnit } from "../Types"; import initUtil from "../util"; import RequestData from "./requestData"; @@ -14,7 +15,7 @@ export default class TxRequest { public util: any; public web3: any; - constructor(address: any, web3: any) { + constructor(address: Address, web3: any) { if (!this.util.checkNotNullAddress(address)) { throw new Error(TXREQUEST_ERROR.NULL_ADDRESS); } @@ -26,7 +27,7 @@ export default class TxRequest { .at(address); } - get address() { + get address(): Address { return this.instance.address; } @@ -34,62 +35,62 @@ export default class TxRequest { * Window centric getters */ - get claimWindowSize() { + get claimWindowSize(): BigNumber { this.checkData(); return this.data.schedule.claimWindowSize; } - get claimWindowStart() { + get claimWindowStart(): BigNumber { this.checkData(); return this.windowStart.minus(this.freezePeriod).minus(this.claimWindowSize); } - get claimWindowEnd() { + get claimWindowEnd(): BigNumber { this.checkData(); return this.claimWindowStart.plus(this.claimWindowSize); } - get freezePeriod() { + get freezePeriod(): BigNumber { this.checkData(); return this.data.schedule.freezePeriod; } - get freezePeriodStart() { + get freezePeriodStart(): BigNumber { this.checkData(); return this.windowStart.plus(this.claimWindowSize); } - get freezePeriodEnd() { + get freezePeriodEnd(): BigNumber { this.checkData(); return this.claimWindowEnd.plus(this.freezePeriod); } - get temporalUnit() { + get temporalUnit(): TemporalUnit { this.checkData(); return this.data.schedule.temporalUnit; } - get windowSize() { + get windowSize(): BigNumber { this.checkData(); return this.data.schedule.windowSize; } - get windowStart() { + get windowStart(): BigNumber { this.checkData(); return this.data.schedule.windowStart; } - get reservedWindowSize() { + get reservedWindowSize(): BigNumber { this.checkData(); return this.data.schedule.reservedWindowSize; } - get reservedWindowEnd() { + get reservedWindowEnd(): BigNumber { this.checkData(); return this.windowStart.plus(this.reservedWindowSize); } - get executionWindowEnd() { + get executionWindowEnd(): BigNumber { this.checkData(); return this.windowStart.plus(this.windowSize); } @@ -98,7 +99,7 @@ export default class TxRequest { * Dynamic getters */ - public async now() { + public async now(): Promise { if (this.temporalUnit === 1) { return new BigNumber(await this.util.getBlockNumber(this.web3)); } else if (this.temporalUnit === 2) { @@ -108,12 +109,12 @@ export default class TxRequest { throw new Error(`Unrecognized temporal unit: ${this.temporalUnit}`); } - public async beforeClaimWindow() { + public async beforeClaimWindow(): Promise { const now = await this.now(); return this.claimWindowStart.greaterThan(now); } - public async inClaimWindow() { + public async inClaimWindow(): Promise { const now = await this.now(); return ( this.claimWindowStart.lessThanOrEqualTo(now) && @@ -121,7 +122,7 @@ export default class TxRequest { ); } - public async inFreezePeriod() { + public async inFreezePeriod(): Promise { const now = await this.now(); return ( this.claimWindowEnd.lessThanOrEqualTo(now) && @@ -129,7 +130,7 @@ export default class TxRequest { ); } - public async inExecutionWindow() { + public async inExecutionWindow(): Promise { const now = await this.now(); return ( this.windowStart.lessThanOrEqualTo(now) && @@ -137,7 +138,7 @@ export default class TxRequest { ); } - public async inReservedWindow() { + public async inReservedWindow(): Promise { const now = await this.now(); return ( this.windowStart.lessThanOrEqualTo(now) && @@ -145,16 +146,16 @@ export default class TxRequest { ); } - public async afterExecutionWindow() { + public async afterExecutionWindow(): Promise { const now = await this.now(); return this.executionWindowEnd.lessThan(now); } - public async executedAt() { + public async executedAt(): Promise { return ((await this.getExecutedEvent()) as any).blockNumber; } - public getExecutedEvent() { + public getExecutedEvent(): any|Promise { if (!this.wasCalled) { return {blockNumber: 0}; } @@ -195,27 +196,27 @@ export default class TxRequest { * Claim props/methods */ - get claimedBy() { + get claimedBy(): Address { this.checkData(); return this.data.claimData.claimedBy; } - get isClaimed() { + get isClaimed(): boolean { this.checkData(); return this.data.claimData.claimedBy !== Constants.NULL_ADDRESS; } - public isClaimedBy(address: any) { + public isClaimedBy(address: any): boolean { this.checkData(); return this.claimedBy === address; } - get requiredDeposit() { + get requiredDeposit(): BigNumber { this.checkData(); return this.data.claimData.requiredDeposit; } - public async claimPaymentModifier() { + public async claimPaymentModifier(): Promise { const now = await this.now(); const elapsed = now.minus(this.claimWindowStart); return elapsed.times(100).dividedToIntegerBy(this.claimWindowSize); @@ -225,22 +226,22 @@ export default class TxRequest { * Meta */ - get isCancelled() { + get isCancelled(): boolean { this.checkData(); return this.data.meta.isCancelled; } - get wasCalled() { + get wasCalled(): boolean { this.checkData(); return this.data.meta.wasCalled; } - get wasSuccessful() { + get wasSuccessful(): boolean { this.checkData(); return this.data.meta.wasSuccessful; } - get owner() { + get owner(): Address { this.checkData(); return this.data.meta.owner; } @@ -249,32 +250,32 @@ export default class TxRequest { * TxData */ - get toAddress() { + get toAddress(): Address { this.checkData(); return this.data.txData.toAddress; } - get callGas() { + get callGas(): BigNumber { this.checkData(); return this.data.txData.callGas; } - get callValue() { + get callValue(): BigNumber { this.checkData(); return this.data.txData.callValue; } - get gasPrice() { + get gasPrice(): BigNumber { this.checkData(); return this.data.txData.gasPrice; } - get fee() { + get fee(): BigNumber { this.checkData(); return this.data.paymentData.fee; } - get bounty() { + get bounty(): BigNumber { this.checkData(); return this.data.paymentData.bounty; } @@ -283,7 +284,7 @@ export default class TxRequest { * Call Data */ - public callData() { + public callData(): Promise { return new Promise((resolve, reject) => { this.instance.callData.call((err: any, callData: any) => { if (!err) { @@ -299,13 +300,13 @@ export default class TxRequest { * Data management */ - public async fillData() { + public async fillData(): Promise { const requestData = await RequestData.from(this.instance); this.data = requestData; return true; } - public async refreshData() { + public async refreshData(): Promise { if (!this.data) { return this.fillData(); } diff --git a/src/Types/index.ts b/src/Types/index.ts new file mode 100644 index 0000000..0d9cd9f --- /dev/null +++ b/src/Types/index.ts @@ -0,0 +1,11 @@ +type Address = string; + +enum TemporalUnit { + Block = 1, + TimeStamp = 2, +} + +export { + Address, + TemporalUnit, +}; diff --git a/lib/Version/index.ts b/src/Version/index.ts similarity index 100% rename from lib/Version/index.ts rename to src/Version/index.ts diff --git a/lib/constants.ts b/src/constants.ts similarity index 100% rename from lib/constants.ts rename to src/constants.ts diff --git a/lib/global.d.ts b/src/global.d.ts similarity index 100% rename from lib/global.d.ts rename to src/global.d.ts diff --git a/lib/index.ts b/src/index.ts similarity index 86% rename from lib/index.ts rename to src/index.ts index e030e54..5443f43 100644 --- a/lib/index.ts +++ b/src/index.ts @@ -1,3 +1,10 @@ +import { + Bucket, + BucketSize, + IBucketPair, + IBuckets, +} from "./Buckets"; + import Constants from "./constants"; import RequestFactory from "./RequestFactory"; import Scheduler from "./Scheduler"; @@ -31,7 +38,7 @@ const initPackage = (web3: any) => { return new RequestFactory(contracts.requestFactory, web3); }, scheduler: async () => { - const chainName = await util.getChainName() + const chainName = await util.getChainName(); const contracts = require(`../static/assets/${chainName}.json`); return new Scheduler( contracts.blockScheduler, @@ -46,3 +53,9 @@ const initPackage = (web3: any) => { }; export default initPackage; +export { + Bucket, + BucketSize, + IBucketPair, + IBuckets, +}; diff --git a/lib/util.ts b/src/util.ts similarity index 100% rename from lib/util.ts rename to src/util.ts diff --git a/test/dependencies.js b/test/dependencies.js deleted file mode 100644 index d5fad69..0000000 --- a/test/dependencies.js +++ /dev/null @@ -1,24 +0,0 @@ -const packageJSON = require('../package.json'); -const expect = require("chai").expect - -// from https://docs.npmjs.com/files/package.json#dependencies -const nonExactPrefixes = ['~', '^', '>', '>=', '<', '<=']; - -describe('package.json', () => { - it('dependencies should not contain any non-exact versions', () => { - const deps = Object.values(packageJSON.dependencies); - deps.forEach(depVersion => { - nonExactPrefixes.forEach(badPrefix => { - expect(depVersion.includes(badPrefix)).to.be.false; - }); - }); - }); - it('devDependencies should not contain any non-exact versions', () => { - const deps = Object.values(packageJSON.devDependencies); - deps.forEach(depVersion => { - nonExactPrefixes.forEach(badPrefix => { - expect(depVersion.includes(badPrefix)).to.be.false; - }); - }); - }); -}); \ No newline at end of file diff --git a/test/helper/mine.js b/test/helper/mine.js deleted file mode 100644 index b90a76b..0000000 --- a/test/helper/mine.js +++ /dev/null @@ -1,38 +0,0 @@ -module.exports = (web3) => { - function sendRpc(method, params) { - return new Promise((resolve) => { - web3.currentProvider.sendAsync({ - jsonrpc: '2.0', - method, - params: params || [], - id: new Date().getTime(), - }, (err, res) => { resolve(res); }); - }); - } - function waitUntilBlock(seconds, targetBlock) { - return new Promise((resolve) => { - const asyncIterator = () => { - return web3.eth.getBlock('latest', (e, { number }) => { - if (number >= targetBlock - 1) { - return sendRpc('evm_increaseTime', [seconds]) - .then(() => sendRpc('evm_mine')).then(resolve); - } - return sendRpc('evm_mine').then(asyncIterator); - }); - }; - asyncIterator(); - }); - } - function wait(seconds = 20, blocks = 1) { - return new Promise((resolve) => { - return web3.eth.getBlock('latest', (e, { number }) => { - resolve(blocks + number); - }); - }) - .then((targetBlock) => { - return waitUntilBlock(seconds, targetBlock); - }); - } - return { wait, waitUntilBlock }; - }; - \ No newline at end of file diff --git a/test/helper/mine2.js b/test/helper/mine2.js deleted file mode 100644 index c10b79e..0000000 --- a/test/helper/mine2.js +++ /dev/null @@ -1,26 +0,0 @@ -const timetravel = (web3, seconds, targetBlock) => { - const sendRPC = (web3, method, params) => { - return new Promise((resolve) => { - web3.currentProvider.sendAsync({ - jsonrpc: '2.0', - method, - params: params || [], - id: new Date().getTime(), - }, (err, res) => resolve(res)) - }) - } - return new Promise((resolve) => { - const asyncIterator = () => { - return web3.eth.getBlock('latest', (err, { number }) => { - if (number >= targetBlock - 1) { - return sendRPC(web3, 'evm_increaseTime', [seconds]) - .then(() => sendRpc(web3, 'evm_mine')).then(resolve) - } - return sendRPC(web3, 'evm_mine').then(asyncIterator) - }) - } - asyncIterator() - }) -} - -module.exports.timetravel = timetravel \ No newline at end of file diff --git a/test/requestFactory.js b/test/requestFactory.js deleted file mode 100644 index caee64e..0000000 --- a/test/requestFactory.js +++ /dev/null @@ -1,286 +0,0 @@ -const BigNumber = require("bignumber.js") -const Deployer = require("../deploy.js") -const expect = require("chai").expect - -describe("Request Factory", () => { - let eac - let web3 - - before(async () => { - const deployed = await Deployer() - web3 = deployed.web3 - eac = require('../index')(web3) - }) - - it("Ensures that requestFactory is valid", async () => { - const requestFactory = await eac.requestFactory() - expect(requestFactory.address).to.exist - }) - - it("tests RequestFactory.isKnownRequest()", async () => { - // To test `isKnownRequest()` we have to use the scheduler to deploy a - // new instance of a TxRequest. - const eacScheduler = await eac.scheduler() - - const toAddress = "0xDacC9C61754a0C4616FC5323dC946e89Eb272302" - const callData = "0x" + Buffer.from("callData").toString("hex") - const callGas = 3000000 - const callValue = 123454321 - const windowSize = 255 - const windowStart = (await eac.Util.getBlockNumber(web3)) + 25 - const gasPrice = web3.toWei("55", "gwei") - const fee = web3.toWei("120", "finney") - const bounty = web3.toWei("250", "finney") - const requiredDeposit = web3.toWei("50", "finney") - - const endowment = eacScheduler.calcEndowment( - new BigNumber(callGas), - new BigNumber(callValue), - new BigNumber(gasPrice), - new BigNumber(fee), - new BigNumber(bounty) - ) - - eacScheduler.initSender({ - from: web3.eth.defaultAccount, - gas: 3000000, - value: endowment, - }) - - const receipt = await eacScheduler.blockSchedule( - toAddress, - callData, - callGas, - callValue, - windowSize, - windowStart, - gasPrice, - fee, - bounty, - requiredDeposit - ) - - expect(Number(receipt.status)).to.equal(1) - - - const newRequestAddress = eac.Util.getTxRequestFromReceipt(receipt) - - const requestFactory = await eac.requestFactory() - - // Now that we've got the address of our new request, we can check it against - // the request factory. - const isKnown = await requestFactory.isKnownRequest(newRequestAddress) - expect(isKnown).to.be.true - }) - - it("tests RequestFactory.validateRequestParams()", async () => { - const requestFactory = await eac.requestFactory() - expect(requestFactory.address).to.exist - - // First test that `.parseIsValid()` works. - const testBools = [ - true, - false, - false, - true, - true, - false - ] - - const testBoolsTooLong = [...testBools, false] - const testBoolsTooShort = [true] - - const validationErrors = await requestFactory.parseIsValid(testBools) - - expect(validationErrors.length) - .to.equal(3) - - expect(validationErrors) - .to.have.members([ - 'ReservedWindowBiggerThanExecutionWindow', - 'InvalidTemporalUnit', - 'EmptyToAddress' - ]) - - expect(() => { - requestFactory.parseIsValid(testBoolsTooLong) - }) - .to.throw() - - expect(() => { - requestFactory.parseIsValid(testBoolsTooShort) - }) - .to.throw() - // End test `.parseIsValid()` - - const toAddress = "0xDacC9C61754a0C4616FC5323dC946e89Eb272302" - const callData = "0x" + Buffer.from("callData").toString("hex") - const callGas = 3000000 - const callValue = 123454321 - const windowSize = 255 - const windowStart = (await eac.Util.getBlockNumber(web3)) + 25 - const gasPrice = web3.toWei("55", "gwei") - const fee = web3.toWei("120", "finney") - const bounty = web3.toWei("250", "finney") - const requiredDeposit = web3.toWei("50", "finney") - - const addressArgs = [ - web3.eth.defaultAccount, //owner - "0xfffC9C61754a0C4616FC5323dC946e89Eb272302", //fee benefactor - toAddress - ] - - const uintArgs = [ - fee, - bounty, - 255, // claimWindowSize default - 10, // freezePeriod default - 16, // reservedWindowsize default - 1, // temporalUnit = blocks - windowSize, - windowStart, - callGas, - callValue, - gasPrice, - requiredDeposit - ] - - const endowment = eac.Util.calcEndowment( - new BigNumber(callGas), - new BigNumber(callValue), - new BigNumber(gasPrice), - new BigNumber(fee), - new BigNumber(bounty) - ) - - const isValid = await requestFactory.validateRequestParams( - addressArgs, - uintArgs, - endowment - ) - - isValid.forEach(bool => { - expect(bool).to.be.true - }) - - const test = requestFactory.parseIsValid(isValid) - expect(test.length) - .to.equal(0) - - // now that we are sure it produces a positive for good parameters, let's make it fail - // first let's subtract from the minimum calculated endowment, in this case - // the client would be trying to send less ether value than required - const isValidFail = await requestFactory.validateRequestParams( - addressArgs, - uintArgs, - endowment.sub('1000') - ) - - expect(isValidFail[0]) - .to.be.false - - isValidFail.slice(1).forEach(bool => { - expect(bool).to.be.true - }) - - //TODO test all failure cases - }) - - it("Tests getting logs", async () => { - const requestFactory = await eac.requestFactory() - expect(requestFactory.address).to.exist - - // Test getRequestCreatedLogs with no args - const logs = await requestFactory.getRequestCreatedLogs() - expect(logs).to.exist - - const owner = logs[0].args.owner - - const requests = await requestFactory.getRequests() - // Length of an address - expect(requests[0].length).to.equal(42) - - - const test1 = await requestFactory.getRequestsByOwner(owner) - expect(test1[0]) - .to.equal(requests[0]) - - const test2 = await requestFactory.getRequestsByOwner("0x92cb33fe17a75f0088a14c7718a29321fba026cd") - expect(test2.length).to.equal(0) - }) - - it("Tests watching logs", async () => { - let owner, ownerRequest; - const requestFactory = await eac.requestFactory() - expect(requestFactory.address).to.exist - - // Test watchRequestCreatedLogs with no args - let event; - event = await requestFactory.watchRequestCreatedLogs({},null, - async (error,log) => { - if (!owner){ - owner = log.args.owner; - } - expect(log).to.not.equal(null); - const stopped = await requestFactory.stopWatch(event); - expect(stopped).to.equal(true); - } - ); - - let requests; - requests = await requestFactory.watchRequests(null, - async (request) => { - if (!ownerRequest){ - ownerRequest = request; - } - expect(request.length).to.equal(42); - const stopped = await requestFactory.stopWatch(requests); - expect(stopped).to.equal(true); - } - ); - - let test1,compared; - test1 = await requestFactory.watchRequestsByOwner(owner, null, - async (request) => { - if (!compared) { - expect(request).to.equal(ownerRequest); - compared = true; - } - const stopped = await requestFactory.stopWatch(test1); - expect(stopped).to.equal(true); - } - ); - - const test2 = await requestFactory.watchRequestsByOwner("0x92cb33fe17a75f0088a14c7718a29321fba026cd", null, - async (request) => { - expect(request).to.not.exist; - } - ); - - setTimeout(async () => { - const stopped = await requestFactory.stopWatch(test2); - expect(stopped).to.equal(true); - },900); - }) - - it('tests bucket calculation', async () => { - const requestFactory = await eac.requestFactory() - expect(requestFactory.address).to.exist - - const test1 = requestFactory.calcBucket(3200, 1) - const res1 = await new Promise(resolve => { - requestFactory.instance.getBucket(3200, 1, (err,res) => { - if (!err) resolve(res) - }) - }) - expect(res1.toNumber()).to.equal(test1) - - const test2 = requestFactory.calcBucket(320000, 2) - const res2 = await new Promise(resolve => { - requestFactory.instance.getBucket(320000, 2, (err,res) => { - if (!err) resolve(res) - }) - }) - expect(res2.toNumber()).to.equal(test2) - }) -}) diff --git a/test/scheduler.js b/test/scheduler.js deleted file mode 100644 index 0554e37..0000000 --- a/test/scheduler.js +++ /dev/null @@ -1,158 +0,0 @@ -const BigNumber = require("bignumber.js") -const Deployer = require("../deploy.js") -const expect = require("chai").expect - -describe("Scheduler", () => { - let eac - let web3 - - before(async () => { - const deployed = await Deployer() - web3 = deployed.web3 - eac = require('../index')(web3) - }) - - it("Calculates the expected endowment", () => { - const callGas = new BigNumber(3000000) - const callValue = new BigNumber(123454321) - const gasPrice = new BigNumber(web3.toWei("55", "gwei")) - const fee = new BigNumber(web3.toWei("120", "finney")) - const bounty = new BigNumber(web3.toWei("250", "finney")) - - const expectedEndowment = bounty - .plus(fee) - .plus(callGas.mul(gasPrice)) - .plus(gasPrice.mul(180000)) - .plus(callValue) - - const endowment = eac.Util.calcEndowment( - callGas, - callValue, - gasPrice, - fee, - bounty - ) - - expect(endowment.toString()).to.equal(expectedEndowment.toString()) - }) - - it("Schedules a transaction using calculated endowment", async () => { - const toAddress = "0xDacC9C61754a0C4616FC5323dC946e89Eb272302" - const callData = "0x" + Buffer.from("callData").toString("hex") - const callGas = 3000000 - const callValue = 123454321 - const windowSize = 255 - const windowStart = (await eac.Util.getBlockNumber()) + 25 - const gasPrice = web3.toWei("55", "gwei") - const fee = web3.toWei("120", "finney") - const bounty = web3.toWei("250", "finney") - const requiredDeposit = web3.toWei("50", "finney") - - const endowment = eac.Util.calcEndowment( - new BigNumber(callGas), - new BigNumber(callValue), - new BigNumber(gasPrice), - new BigNumber(fee), - new BigNumber(bounty) - ) - - const eacScheduler = await eac.scheduler() - - eacScheduler.initSender({ - from: web3.eth.defaultAccount, - gas: 3000000, - value: endowment, - }) - - const receipt = await eacScheduler.blockSchedule( - toAddress, - callData, - callGas, - callValue, - windowSize, - windowStart, - gasPrice, - fee, - bounty, - requiredDeposit - ) - - expect(Number(receipt.status)).to.equal(1) - }) - - it("Schedules a transaction using timestamp scheduling", async () => { - // Uses the same variables as blockScheduling but multiplies them by 15, - // which is a rough estimate of an average block time. THIS IS NOT - // WHAT YOU SHOULD DO IN PRODUCTION - const toAddress = "0xDacC9C61754a0C4616FC5323dC946e89Eb272302" - const callData = "0x" + Buffer.from("callData").toString("hex") - const callGas = 3000000 - const callValue = 123454321 - const windowSize = 255 * 15 - const windowStart = (await eac.Util.getTimestamp()) + 25 * 15 - const gasPrice = web3.toWei("55", "gwei") - const fee = web3.toWei("120", "finney") - const bounty = web3.toWei("250", "finney") - const requiredDeposit = web3.toWei("50", "finney") - - const endowment = eac.Util.calcEndowment( - new BigNumber(callGas), - new BigNumber(callValue), - new BigNumber(gasPrice), - new BigNumber(fee), - new BigNumber(bounty) - ) - - const eacScheduler = await eac.scheduler() - - eacScheduler.initSender({ - from: web3.eth.defaultAccount, - gas: 3000000, - value: endowment, - }) - - const receipt = await eacScheduler.timestampSchedule( - toAddress, - callData, - callGas, - callValue, - windowSize, - windowStart, - gasPrice, - fee, - bounty, - requiredDeposit - ) - - expect(Number(receipt.status)).to.equal(1) - - const txRequestAddr = eac.Util.getTxRequestFromReceipt(receipt) - - expect(txRequestAddr).to.exist - - const txRequest = await eac.transactionRequest(txRequestAddr) - await txRequest.fillData() - - const winStart = txRequest.windowStart - const now = await txRequest.now() - - expect(winStart.toNumber()).to.be.above(now.toNumber()) - - const secsToWait = winStart.minus(now) - const { wait, waitUntilBlock } = require("@digix/tempo")(web3) - await wait(secsToWait.toNumber(), 1) - - expect(await txRequest.inExecutionWindow()).to.be.true - - const executeGas = txRequest.callGas.add(180000) - - const executeReceipt = await txRequest.execute({ - from: web3.eth.defaultAccount, - value: 0, - gas: executeGas, - gasPrice: txRequest.gasPrice, - }) - - expect(Number(executeReceipt.status)).to.equal(1) - }) -}) diff --git a/test/util.js b/test/util.js deleted file mode 100644 index ebd57e5..0000000 --- a/test/util.js +++ /dev/null @@ -1,27 +0,0 @@ -const BigNumber = require("bignumber.js") -const Deployer = require("../deploy.js") -const expect = require("chai").expect - -describe("Util", () => { - let eac - let web3 - - before(async () => { - const deployed = await Deployer() - web3 = deployed.web3 - eac = require('../index')(web3) - }) - - it('tests init without a parameter', () => { - const util = require('../index')().Util - expect(util) - .to.exist - // console.log(util) - }) - - // it('tests init', async () => { - // const chainName = await eac.Util.getChainName() - // console.log(chainName) - - // }) -}) \ No newline at end of file