From af4d46dac9c36d83a23924ed163d9896bbd5a215 Mon Sep 17 00:00:00 2001 From: 4000D Date: Tue, 27 Aug 2019 07:37:41 +0900 Subject: [PATCH 01/30] vapp: sort local storage by resource --- vapp/localstorage.js | 177 ++++++++++++++++++++++--------------------- 1 file changed, 91 insertions(+), 86 deletions(-) diff --git a/vapp/localstorage.js b/vapp/localstorage.js index ec2e5b9..dfd0377 100644 --- a/vapp/localstorage.js +++ b/vapp/localstorage.js @@ -1,55 +1,54 @@ const LocalStorage = require('node-localstorage').LocalStorage; localStorage = new LocalStorage('./localstorage'); +// Vk function getViewingKey (key) { - return localStorage.getItem(`${key}viewingkey`); + return localStorage.getItem(`${key}-viewingkey`); } -function getAccounts (key) { - return localStorage.getItem(`${key}accounts`); +function setViewingKey (key, viewingKey) { + localStorage.setItem(`${key}-viewingkey`, viewingKey); } -function getNotes (account) { - return localStorage.getItem(`${account}notes`); +// Accounts +function getAccounts (key) { + return localStorage.getItem(`${key}-accounts`); } -function getTransferNotes (account) { - return localStorage.getItem(`${account}transfernotes`); +function addAccount (key, account) { + let accounts = getAccounts(key); + if (!accounts) { + accounts = []; + } else { + accounts = JSON.parse(accounts); + } + accounts.push(account); + _setAccounts(key, JSON.stringify(accounts)); } -function getOrder (id) { - let orders = getOrders(); - if (!orders) { +function deleteAccount (key, address) { + let accounts = getAccounts(key); + if (!accounts) { return; } else { - orders = JSON.parse(orders); + accounts = JSON.parse(accounts); } - - for (let i = 0; i < orders.length; i++) { - if (orders[i].orderId.toString() === id) { - return orders[i]; + for (let i = 0; i < accounts.length; i++) { + if (accounts[i].address === address) { + accounts.splice(i, 1); + break; } } - return null; -} - -function getOrdersByAccount (account) { - return localStorage.getItem(`${account}orders`); + _setAccounts(key, JSON.stringify(accounts)); } -function getOrders () { - return localStorage.getItem('orders'); +function _setAccounts (key, notes) { + localStorage.setItem(`${key}-accounts`, notes); } -function addAccount (key, account) { - let accounts = getAccounts(key); - if (!accounts) { - accounts = []; - } else { - accounts = JSON.parse(accounts); - } - accounts.push(account); - _setAccounts(key, JSON.stringify(accounts)); +// Notes +function getNotes (account) { + return localStorage.getItem(`${account}-notes`); } function addNote (account, note) { @@ -63,6 +62,10 @@ function addNote (account, note) { _setNotes(account, JSON.stringify(notes)); } +function getTransferNotes (account) { + return localStorage.getItem(`${account}-transfernotes`); +} + function addTransferNote (account, note) { let notes = getTransferNotes(account); if (!notes) { @@ -74,68 +77,77 @@ function addTransferNote (account, note) { _setTransferNotes(account, JSON.stringify(notes)); } -function addOrderByAccount (account, order) { - let orders = getOrdersByAccount(account); - if (!orders) { - orders = []; +function updateNote (account, note) { + let notes = getNotes(account); + if (!notes) { + return; } else { - orders = JSON.parse(orders); + notes = JSON.parse(notes); } - orders.push(order); - _setOrdersByAccount(account, JSON.stringify(orders)); -} -function addOrder (order) { - let orders = getOrders('orders'); - if (!orders) { - orders = []; - } else { - orders = JSON.parse(orders); + for (let i = 0; i < notes.length; i++) { + if (notes[i].hash === note.hash) { + notes.splice(i, 1, note); + break; + } } - orders.push(order); - _setOrders(JSON.stringify(orders)); -} - -function setViewingKey (key, viewingKey) { - localStorage.setItem(`${key}viewingkey`, viewingKey); -} -function _setAccounts (key, notes) { - localStorage.setItem(`${key}accounts`, notes); + _setNotes(account, JSON.stringify(notes)); } function _setNotes (key, notes) { - localStorage.setItem(`${key}notes`, notes); + localStorage.setItem(`${key}-notes`, notes); } function _setTransferNotes (key, notes) { - localStorage.setItem(`${key}transfernotes`, notes); + localStorage.setItem(`${key}-transfernotes`, notes); } -function _setOrders (orders) { - localStorage.setItem('orders', orders); +// Orders +function getOrder (id) { + let orders = getOrders(); + if (!orders) { + return; + } else { + orders = JSON.parse(orders); + } + + for (let i = 0; i < orders.length; i++) { + if (orders[i].orderId.toString() === id) { + return orders[i]; + } + } + return null; } -function _setOrdersByAccount (account, orders) { - localStorage.setItem(`${account}orders`, orders); +function getOrdersByAccount (account) { + return localStorage.getItem(`${account}-orders`); } -function updateNote (account, note) { - let notes = getNotes(account); - if (!notes) { - return; +function getOrders () { + return localStorage.getItem('orders'); +} + +function addOrderByAccount (account, order) { + let orders = getOrdersByAccount(account); + if (!orders) { + orders = []; } else { - notes = JSON.parse(notes); + orders = JSON.parse(orders); } + orders.push(order); + _setOrdersByAccount(account, JSON.stringify(orders)); +} - for (let i = 0; i < notes.length; i++) { - if (notes[i].hash === note.hash) { - notes.splice(i, 1, note); - break; - } +function addOrder (order) { + let orders = getOrders('orders'); + if (!orders) { + orders = []; + } else { + orders = JSON.parse(orders); } - - _setNotes(account, JSON.stringify(notes)); + orders.push(order); + _setOrders(JSON.stringify(orders)); } function updateOrderByAccount (account, order) { @@ -174,23 +186,16 @@ function updateOrder (order) { _setOrders(JSON.stringify(orders)); } -function deleteAccount (key, address) { - let accounts = getAccounts(key); - if (!accounts) { - return; - } else { - accounts = JSON.parse(accounts); - } - for (let i = 0; i < accounts.length; i++) { - if (accounts[i].address === address) { - accounts.splice(i, 1); - break; - } - } - _setAccounts(key, JSON.stringify(accounts)); +function _setOrders (orders) { + localStorage.setItem('orders', orders); +} + +function _setOrdersByAccount (account, orders) { + localStorage.setItem(`${account}-orders`, orders); } module.exports = { + localStorage, getViewingKey, getAccounts, getNotes, From 62ee35d7cd98d7aaa49a0334a22fc0ff39711e63 Mon Sep 17 00:00:00 2001 From: 4000D Date: Fri, 30 Aug 2019 12:43:54 +0900 Subject: [PATCH 02/30] contracts/ZkDex: add timestamp --- contracts/ZkDex.sol | 19 +++++++++++++------ contracts/test/MockDai.sol | 4 ++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/contracts/ZkDex.sol b/contracts/ZkDex.sol index 762f99a..d05d2d6 100644 --- a/contracts/ZkDex.sol +++ b/contracts/ZkDex.sol @@ -27,14 +27,18 @@ contract ZkDex is ZkDai { bytes32 takerNoteToMaker; bytes32 parentNote; + uint64 createdAt; + uint64 takendAt; + uint64 settledAt; + OrderState state; } Order[] public orders; - event OrderCreated(uint256 orderId, uint256 sourceToken, uint256 targetToken); - event OrderTaken(uint256 orderId, bytes32 takerNoteToMaker, bytes32 parentNote); - event OrderSettled(uint256 orderId, bytes32 rewardNote, bytes32 paymentNote, bytes32 changeNote); + event OrderCreated(uint256 orderId, uint256 sourceToken, uint256 targetToken, uint256 createdAt); + event OrderTaken(uint256 orderId, bytes32 takerNoteToMaker, bytes32 parentNote, uint256 takenAt); + event OrderSettled(uint256 orderId, bytes32 rewardNote, bytes32 paymentNote, bytes32 changeNote, uint256 settledAt); constructor( bool _development, @@ -89,13 +93,14 @@ contract ZkDex is ZkDai { order.targetToken = targetToken; order.price = price; order.state = OrderState.Created; + order.createdAt = uint64(block.timestamp); notes[makerNote] = State.Traiding; emit NoteStateChange(makerNote, State.Traiding); // NOTE: cannot compile below line due to stack too deep error.. - // emit OrderCreated(orderId, input[2], targetToken); + // emit OrderCreated(orderId, input[2], targetToken, block.timestamp); } @@ -148,10 +153,11 @@ contract ZkDex is ZkDai { order.parentNote = parentNote; order.takerNoteToMaker = takerNoteToMaker; order.state = OrderState.Taken; + order.takendAt = uint64(block.timestamp); emit NoteStateChange(parentNote, State.Traiding); emit NoteStateChange(takerNoteToMaker, State.Traiding); - emit OrderTaken(orderId, takerNoteToMaker, parentNote); + emit OrderTaken(orderId, takerNoteToMaker, parentNote, block.timestamp); } /** @@ -229,6 +235,7 @@ contract ZkDex is ZkDai { encryptedNotes[calcHash(input[16], input[17])] = encList[2].toBytes(); order.state = OrderState.Settled; + order.settledAt = uint64(block.timestamp); emit NoteStateChange(calcHash(input[6], input[7]), State.Valid); emit NoteStateChange(calcHash(input[11], input[12]), State.Valid); @@ -238,7 +245,7 @@ contract ZkDex is ZkDai { emit NoteStateChange(order.parentNote, State.Spent); emit NoteStateChange(order.takerNoteToMaker, State.Spent); - emit OrderSettled(orderId, calcHash(input[6], input[7]), calcHash(input[11], input[12]), calcHash(input[16], input[17])); + emit OrderSettled(orderId, calcHash(input[6], input[7]), calcHash(input[11], input[12]), calcHash(input[16], input[17]), block.timestamp); } function hashOrder(Order memory order) internal view returns (bytes32) { diff --git a/contracts/test/MockDai.sol b/contracts/test/MockDai.sol index 687ce6c..a5daed2 100644 --- a/contracts/test/MockDai.sol +++ b/contracts/test/MockDai.sol @@ -4,10 +4,10 @@ import 'openzeppelin-solidity/contracts/token/ERC20/ERC20.sol'; contract MockDai is ERC20 { constructor() public { - _mint(msg.sender, 100 * 10**18); + _mint(msg.sender, 1000000 * 10**18); } function mint() public { - _mint(msg.sender, 100 * 10**18); + _mint(msg.sender, 1000000 * 10**18); } } \ No newline at end of file From 64a69a405bfb559c4353404a252b64d77559a377 Mon Sep 17 00:00:00 2001 From: 4000D Date: Fri, 30 Aug 2019 12:45:19 +0900 Subject: [PATCH 03/30] scripts/lib: update utils --- scripts/lib/Note.js | 135 ++++++++++++++++++++++++++++++++----- scripts/lib/Wallet.js | 10 ++- scripts/lib/dockerUtils.js | 20 ++++++ scripts/lib/util.js | 13 ++-- 4 files changed, 156 insertions(+), 22 deletions(-) diff --git a/scripts/lib/Note.js b/scripts/lib/Note.js index 69ff00c..b660d51 100644 --- a/scripts/lib/Note.js +++ b/scripts/lib/Note.js @@ -4,7 +4,6 @@ const Web3Utils = require('web3-utils'); const util = require('./util'); const noteHelper = require('../helper/noteHelper'); -const mode = 'aes-256-cbc'; const ETH_TOKEN_TYPE = Web3Utils.padLeft('0x0', 32); const DAI_TOKEN_TYPE = Web3Utils.padLeft('0x1', 32); @@ -12,6 +11,7 @@ const DAI_TOKEN_TYPE = Web3Utils.padLeft('0x1', 32); const { BN } = Web3Utils; const SCALING_FACTOR = new BN('1000000000000000000'); +const MODE = 'aes-256-cbc'; const sampleProof = `{ "proof": { @@ -54,7 +54,30 @@ class Note { this.token = Web3Utils.padLeft(Web3Utils.toHex(token), 32); this.viewingKey = Web3Utils.padLeft(Web3Utils.toHex(viewingKey), 64); this.salt = Web3Utils.padLeft(Web3Utils.toHex(salt), 32); - this.isSmart = Web3Utils.padLeft(isSmart ? '0x1' : '0x0', 32); + if (typeof isSmart === 'string') { + isSmart = Web3Utils.toBN(isSmart) + } + if (BN.isBN(isSmart)) { + isSmart = isSmart.cmp(new BN('1')) === 0; + } + this.isSmart = Web3Utils.padLeft((isSmart) ? '0x1' : '0x0', 32); + } + + static hashFromJSON(v) { + return this.fromJSON(v).hash(); + } + + static fromJSON(v) { + const { + owner, + value, + token, + viewingKey, + salt, + isSmart, + } = typeof v === 'object' ? v : JSON.parse(v); + + return new Note(owner, value, token, viewingKey, salt, isSmart); } getOwner() { @@ -84,11 +107,23 @@ class Note { return JSON.stringify(this); } - encrypt(encKey) { - const cipher = crypto.createCipher(mode, encKey); + encrypt(_encKey) { + const encKey = marshalEncDecKey(_encKey); + + const v = this.toString(); + + let cipher; + let r1; + let r2; + try { + cipher = crypto.createCipher(MODE, encKey); + r1 = cipher.update(v, 'utf8', 'base64'); + r2 = cipher.final('base64'); + } catch (e) { + throw new EncryptError("Failed to encrypt", v, encKey); + } - const r1 = cipher.update(this.toString(), 'utf8', 'base64'); - const r2 = cipher.final('base64'); + // console.warn(`Note#${this.hash()} is encrypted by ${encKey}`); return util.marshal( Web3Utils.fromAscii(r1 + r2), @@ -96,21 +131,68 @@ class Note { } } -function decrypt(v, decKey) { +function marshalEncDecKey(_key) { + const key = util.unmarshal(_key.toLowerCase()); + const reg = new RegExp(/^0*(.+)/, 'g'); + const match = reg.exec(key); + + let res = match[1]; + + if (!res) { + throw new Error("Failed to marshal key:", _key); + } + + if (res.length % 2 === 1) { + res = '0' + res; + } + + return res; +} + +class DecryptError extends Error { + constructor(message, value, key) { + super(message); + this.value = value; + this.key = key; + Error.captureStackTrace(this, this.constructor); + } +} +class EncryptError extends DecryptError {} + +function decrypt(v, _decKey) { + const decKey = marshalEncDecKey(_decKey); + if (!v) { throw new Error(`invalid value to decrypt: ${v}`); } - const decipher = crypto.createDecipher(mode, decKey); + let decipher; + let r1; + let r2; - const r1 = decipher.update(Web3Utils.toAscii(v), 'base64', 'utf8'); - const r2 = decipher.final('utf8'); + try { + decipher = crypto.createDecipher(MODE, decKey); + r1 = decipher.update(Web3Utils.toAscii(v), 'base64', 'utf8'); + r2 = decipher.final('utf8'); + } catch (e) { + throw new DecryptError(`Failed to decrypt`, v, decKey) + } + + const str = r1 + r2; + + try { + const note = JSON.parse(str); + return new Note(note.owner, note.value, note.token, note.viewingKey, note.salt, note.isSmart); + } catch (e) { + console.error("Failed to parse decrypted note JSON", e); + return null; + } - const note = JSON.parse(r1 + r2); - return new Note(note.owner, note.value, note.token, note.viewingKey, note.salt); } function dummyProofCreateNote(note) { + note = Note.fromJSON(note); + const proof = JSON.parse(sampleProof); proof.input = [ @@ -126,6 +208,11 @@ function dummyProofCreateNote(note) { function dummyProofSpendNote(oldNote, newNote1, newNote2, originalNote = null) { const proof = JSON.parse(sampleProof); + oldNote = Note.fromJSON(oldNote); + newNote1 = Note.fromJSON(newNote1); + newNote2 = Note.fromJSON(newNote2); + originalNote = originalNote && Note.fromJSON(originalNote); + proof.input = [ ...oldNote.hashArr(), ...newNote1.hashArr(), @@ -139,7 +226,8 @@ function dummyProofSpendNote(oldNote, newNote1, newNote2, originalNote = null) { function dummyProofMakeOrder(makerNote) { const proof = JSON.parse(sampleProof); - const hash = util.unmarshal(makerNote.hash()); + + makerNote = Note.fromJSON(makerNote); proof.input = [ ...makerNote.hashArr(), @@ -150,24 +238,35 @@ function dummyProofMakeOrder(makerNote) { return util.parseProofObj(proof); } -function dummyProofTakeOrder(makerNote, parentNote, stakeNote) { +function dummyProofTakeOrder(makerNoteHash, parentNote, stakeNote) { const proof = JSON.parse(sampleProof); + parentNote = Note.fromJSON(parentNote); + stakeNote = Note.fromJSON(stakeNote); + proof.input = [ ...parentNote.hashArr(), parentNote.token, ...stakeNote.hashArr(), stakeNote.token, - ...makerNote.hashArr(), + ...util.split32BytesTo16BytesArr(makerNoteHash), 1, ]; return util.parseProofObj(proof); } -function dummyProofSettleOrder(makerNote, parentNote, stakeNote, rewardNote, paymentNote, changeNote, price) { +function dummyProofSettleOrder(makerNote, parentNoteOrHash, stakeNote, rewardNote, paymentNote, changeNote, price) { const proof = JSON.parse(sampleProof); + makerNote = Note.fromJSON(makerNote); + stakeNote = Note.fromJSON(stakeNote); + rewardNote = Note.fromJSON(rewardNote); + paymentNote = Note.fromJSON(paymentNote); + changeNote = Note.fromJSON(changeNote); + + parentNoteOrHash = parentNoteOrHash instanceof Note ? parentNoteOrHash.hash() : parentNoteOrHash; + proof.input = [ ...makerNote.hashArr(), makerNote.token, @@ -177,7 +276,7 @@ function dummyProofSettleOrder(makerNote, parentNote, stakeNote, rewardNote, pay ...rewardNote.hashArr(), rewardNote.token, - ...parentNote.hashArr(), + ...util.split32BytesTo16BytesArr(parentNoteOrHash), ...paymentNote.hashArr(), paymentNote.token, @@ -208,6 +307,8 @@ module.exports = { }, NoteState, Note, + DecryptError, + EncryptError, decrypt, createProof: { dummyProofCreateNote, diff --git a/scripts/lib/Wallet.js b/scripts/lib/Wallet.js index a57e7f8..168d1b8 100644 --- a/scripts/lib/Wallet.js +++ b/scripts/lib/Wallet.js @@ -91,7 +91,11 @@ class Wallet { } - async init(zkdexAddress) { + async init(zkdexAddress, provider = null) { + if (provider) { + ZkDex.setProvider(web3.currentProvider); + } + this.zkdex = await ZkDex.at(zkdexAddress); this._listen(); } @@ -119,6 +123,10 @@ class Wallet { let decryptedNote; try { decryptedNote = decrypt(encryptedNote, vk); + // ignore invalid decription + if (!decryptedNote) { + return; + } } catch (e) { // ignore error return; diff --git a/scripts/lib/dockerUtils.js b/scripts/lib/dockerUtils.js index d565232..54d34d3 100644 --- a/scripts/lib/dockerUtils.js +++ b/scripts/lib/dockerUtils.js @@ -207,6 +207,25 @@ function hash(note) { )); } +function initialized() { + const MAX_TRY = 100; + let i = 0; + + return new Promise((resolve, reject) => { + const timer = () => setTimeout(() => { + i++; + if (i >= MAX_TRY) { + reject("Out of time"); + } + + if (!c) return timer(); + return resolve(); + }, 500); + + timer(); + }); +} + (async () => { try { const containers = await docker.listContainers(); @@ -228,4 +247,5 @@ module.exports = { getMakeOrderProof, getTakeOrderProof, getSettleOrderProof, + initialized, }; diff --git a/scripts/lib/util.js b/scripts/lib/util.js index e3ac216..610c2b4 100644 --- a/scripts/lib/util.js +++ b/scripts/lib/util.js @@ -41,13 +41,18 @@ function parseProofObj(obj) { } function marshal(str) { - if (str.slice(0, 2) === '0x') return str; - return '0x'.concat(str); + if (!str) throw new Error("Cannot marshal empty string"); + + return '0x' + unmarshal(str); } function unmarshal(str) { - if (str.slice(0, 2) === '0x') return str.slice(2); - return str; + // console.warn("unmarshal", 'str', str) + str = str.trim(); + if (!str) throw new Error("Cannot unmarshal empty string"); + const i = str.lastIndexOf("0x"); + if (i < 0) return str; + return str.slice(i+2); } function calcHash(h0, h1) { From 8494b6122e0aab37f09561b97caf1dc81a08d3f6 Mon Sep 17 00:00:00 2001 From: 4000D Date: Fri, 30 Aug 2019 12:46:00 +0900 Subject: [PATCH 04/30] vapp: update and install npm packages --- vapp/package-lock.json | 7004 ++++++++++++++++++++++++---------------- vapp/package.json | 13 +- 2 files changed, 4281 insertions(+), 2736 deletions(-) diff --git a/vapp/package-lock.json b/vapp/package-lock.json index d2a1a7c..ecf1155 100644 --- a/vapp/package-lock.json +++ b/vapp/package-lock.json @@ -917,6 +917,16 @@ "to-fast-properties": "^2.0.0" } }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, "@hapi/address": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz", @@ -975,6 +985,215 @@ "postcss": "^7.0.0" } }, + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/core": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "slash": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/reporters": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.4.2", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + } + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -991,6 +1210,11 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, "@soda/friendly-errors-webpack-plugin": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz", @@ -1044,6 +1268,55 @@ } } }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/babel__core": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", + "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", + "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", + "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -1061,6 +1334,31 @@ "@types/node": "*" } }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -1085,6 +1383,27 @@ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", "dev": true }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/yargs": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.2.tgz", + "integrity": "sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw==", + "dev": true + }, "@vue/babel-helper-vue-jsx-merge-props": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz", @@ -1715,6 +2034,12 @@ "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", "dev": true }, + "abab": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", + "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1745,6 +2070,24 @@ "acorn": "^5.0.0" } }, + "acorn-globals": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.3.tgz", + "integrity": "sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "dev": true + } + } + }, "acorn-jsx": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", @@ -1924,6 +2267,12 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, "array-filter": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", @@ -2047,10 +2396,9 @@ "dev": true }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz", + "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==" }, "async-each": { "version": "1.0.3", @@ -2235,6 +2583,21 @@ } } }, + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", + "dev": true, + "requires": { + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + } + }, "babel-loader": { "version": "8.0.6", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", @@ -2256,6 +2619,72 @@ "object.assign": "^4.1.0" } }, + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, "babel-plugin-module-resolver": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz", @@ -2269,10 +2698,21 @@ "resolve": "^1.4.0" } }, + "babel-preset-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "base": { "version": "0.11.2", @@ -2406,6 +2846,7 @@ "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.0" } @@ -2489,6 +2930,7 @@ "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" @@ -2528,6 +2970,29 @@ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -2621,6 +3086,15 @@ "node-releases": "^1.1.25" } }, + "bser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", + "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, "buefy": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/buefy/-/buefy-0.8.2.tgz", @@ -2767,17 +3241,51 @@ } } }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, + "normalize-url": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz", + "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==" + } + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, "requires": { "callsites": "^2.0.0" }, @@ -2859,6 +3367,15 @@ "integrity": "sha512-n5tKOjMaZ1fksIpQbjERuqCyfgec/m9pferkFQbLmWtqLUdmt12hNhjSwsmPdqeiG2NkITOQhr1VYIwWSAceiA==", "dev": true }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, "case-sensitive-paths-webpack-plugin": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz", @@ -2917,8 +3434,7 @@ "chownr": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", - "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", - "dev": true + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" }, "chrome-trace-event": { "version": "1.0.2", @@ -3077,12 +3593,19 @@ "shallow-clone": "^1.0.0" } }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "optional": true + "dev": true }, "coa": { "version": "2.0.2", @@ -3157,7 +3680,8 @@ "commander": { "version": "2.20.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true }, "commondir": { "version": "1.0.1", @@ -3221,7 +3745,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", @@ -3832,6 +4357,21 @@ } } }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, "current-script-polyfill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz", @@ -3853,6 +4393,15 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -3861,6 +4410,30 @@ "assert-plus": "^1.0.0" } }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -4044,6 +4617,11 @@ "clone": "^1.0.2" } }, + "defer-to-connect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz", + "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==" + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -4161,12 +4739,24 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, "detect-node": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", "dev": true }, + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "dev": true + }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -4256,6 +4846,15 @@ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, "domhandler": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", @@ -4478,6 +5077,35 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.50", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", + "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -4489,6 +5117,34 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "escodegen": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, "eslint": { "version": "5.16.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", @@ -4947,9 +5603,9 @@ } }, "ethers": { - "version": "4.0.33", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.33.tgz", - "integrity": "sha512-lAHkSPzBe0Vj+JrhmkEHLtUEKEheVktIjGDyE9gbzF4zf1vibjYgB57LraDHu4/ItqWVkztgsm8GWqcDMN+6vQ==", + "version": "4.0.36", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.36.tgz", + "integrity": "sha512-rWdchEhUyXx01GiwexH6Sha97CQ9tJdQwe6FtYKxShC7VEZV41nuKt+lzCQ4OqvQwZK5PcAKaAZv2GDsCH33SA==", "requires": { "@types/node": "^10.3.2", "aes-js": "3.0.0", @@ -4964,9 +5620,9 @@ }, "dependencies": { "@types/node": { - "version": "10.14.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.13.tgz", - "integrity": "sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ==" + "version": "10.14.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.16.tgz", + "integrity": "sha512-/opXIbfn0P+VLt+N8DE4l8Mn8rbhiJgabU96ZJ0p9mxOkIks5gh6RUnpHak7Yh0SFkyjO/ODbxsQQPV2bpMmyA==" }, "elliptic": { "version": "6.3.3", @@ -5025,8 +5681,7 @@ "eventemitter3": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", - "dev": true + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" }, "events": { "version": "3.0.0", @@ -5052,6 +5707,12 @@ "safe-buffer": "^5.1.1" } }, + "exec-sh": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "dev": true + }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -5067,6 +5728,12 @@ "strip-eof": "^1.0.0" } }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -5117,6 +5784,20 @@ } } }, + "expect": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" + } + }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -5327,6 +6008,15 @@ "websocket-driver": ">=0.5.1" } }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, + "requires": { + "bser": "^2.0.0" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -5577,6 +6267,12 @@ "mime-types": "^2.1.12" } }, + "formidable": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", + "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==", + "dev": true + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -5622,34 +6318,12 @@ "universalify": "^0.1.0" } }, - "fs-promise": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz", - "integrity": "sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=", + "fs-minipass": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", "requires": { - "any-promise": "^1.3.0", - "fs-extra": "^2.0.0", - "mz": "^2.6.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=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "^4.1.6" - } - } + "minipass": "^2.2.1" } }, "fs-write-stream-atomic": { @@ -5667,7 +6341,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "1.2.9", @@ -5689,8 +6364,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -5711,14 +6385,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5733,20 +6405,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -5863,8 +6532,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -5876,7 +6544,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5891,7 +6558,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5899,14 +6565,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -5925,7 +6589,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -6006,8 +6669,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -6019,7 +6681,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -6105,8 +6766,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -6142,7 +6802,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6162,7 +6821,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6206,14 +6864,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -6221,6 +6877,7 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -6239,348 +6896,1604 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "ganache-cli": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.6.0.tgz", + "integrity": "sha512-6egwnHYLaROx9z1NjmyX/wAqhkqg+CleRh5cegiUn+2za17kZnmeYiSfjMfmo0hUf/d8LsvwZ9xuBhRjoXr51Q==", "dev": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "ethereumjs-util": "6.1.0", + "source-map-support": "0.5.12", + "yargs": "13.2.4" }, "dependencies": { "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "4.1.0", + "bundled": true, "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=", + "ansi-styles": { + "version": "3.2.1", + "bundled": true, "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "color-convert": "^1.9.0" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "bindings": { + "version": "1.5.0", + "bundled": true, "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "file-uri-to-path": "1.0.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "bip66": { + "version": "1.1.5", + "bundled": true, "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "safe-buffer": "^5.0.1" } - } - } - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + }, + "bn.js": { + "version": "4.11.8", + "bundled": true, + "dev": true + }, + "brorand": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "buffer-from": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "bundled": true, + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "cliui": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "bundled": true, + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "create-hash": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "bundled": true, + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "decamelize": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "drbg.js": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "browserify-aes": "^1.0.6", + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4" + } + }, + "elliptic": { + "version": "6.5.0", + "bundled": true, + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "bundled": true, + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "ethereumjs-util": { + "version": "6.1.0", + "bundled": true, + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "0.1.6", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + }, + "ethjs-util": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "find-up": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "bundled": true, + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "hash-base": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "invert-kv": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-hex-prefixed": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "keccak": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "bindings": "^1.2.1", + "inherits": "^2.0.3", + "nan": "^2.2.1", + "safe-buffer": "^5.1.0" + } + }, + "lcid": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mem": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "nan": { + "version": "2.14.0", + "bundled": true, + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-locale": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "p-limit": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "bundled": true, + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "pump": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "ripemd160": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.3", + "bundled": true, + "dev": true, + "requires": { + "bn.js": "^4.11.1", + "safe-buffer": "^5.1.1" + } + }, + "safe-buffer": { + "version": "5.2.0", + "bundled": true, + "dev": true + }, + "secp256k1": { + "version": "3.7.1", + "bundled": true, + "dev": true, + "requires": { + "bindings": "^1.5.0", + "bip66": "^1.1.5", + "bn.js": "^4.11.8", + "create-hash": "^1.2.0", + "drbg.js": "^1.0.1", + "elliptic": "^6.4.1", + "nan": "^2.14.0", + "safe-buffer": "^5.1.2" + } + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + }, + "source-map-support": { + "version": "0.5.12", + "bundled": true, + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "string-width": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "strip-hex-prefix": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "which": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "y18n": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "yargs": { + "version": "13.2.4", + "bundled": true, + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + } + }, + "yargs-parser": { + "version": "13.1.1", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "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.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "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.0.0" + } + } + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "^2.19.0", + "process": "~0.5.1" + }, + "dependencies": { + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "graceful-fs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dev": true, "requires": { - "assert-plus": "^1.0.0" + "duplexer": "^0.1.1", + "pify": "^4.0.1" + } + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "dev": true + }, + "handlebars": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "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==", + "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.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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==" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.1", + "safe-buffer": "^5.0.1" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "highlight.js": { + "version": "9.15.8", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.8.tgz", + "integrity": "sha512-RrapkKQWwE+wKdF73VsOa2RQdIoO3mxwJ4P8mhbI6KYJUraUHRKM5w5zQQKXNk0xNL4UVRdulV9SBJcmzJNzVA==", + "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.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true + }, + "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 + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + } } }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" }, "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "http-cache-semantics": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", + "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==" + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", "dev": true }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" } } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, + "requires": { + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" + } + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, - "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" }, "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true } } }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", "dev": true, "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" + "resolve-from": "^3.0.0" }, "dependencies": { - "get-stream": { + "resolve-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true } } }, - "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" } }, - "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", - "dev": true + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, - "har-schema": { + "in-publish": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "repeating": "^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==", + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { - "function-bind": "^1.1.1" + "once": "^1.3.0", + "wrappy": "1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, + "optional": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "dependencies": { "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^3.0.0" + } } } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "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==" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, "requires": { - "has-symbol-support-x": "^1.4.1" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "dependencies": { + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + } } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "loose-envify": "^1.0.0" } }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -6588,902 +8501,1041 @@ } } }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "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-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "binary-extensions": "^1.0.0" } }, - "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "ci-info": "^1.5.0" } }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "hex-color-regex": { + "is-color-stop": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "highlight.js": { - "version": "9.15.8", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.8.tgz", - "integrity": "sha512-RrapkKQWwE+wKdF73VsOa2RQdIoO3mxwJ4P8mhbI6KYJUraUHRKM5w5zQQKXNk0xNL4UVRdulV9SBJcmzJNzVA==", - "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=", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" } }, - "hoopy": { + "is-data-descriptor": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true - }, - "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 - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, - "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", - "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=" }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } } }, - "html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "html-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", - "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "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": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", - "util.promisify": "1.0.0" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - } + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" } }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "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=" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "kind-of": "^3.0.2" }, "dependencies": { - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "is-buffer": "^1.1.5" } } } }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" }, - "http-parser-js": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", - "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true }, - "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dev": true, "requires": { - "eventemitter3": "^3.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "is-path-inside": "^2.1.0" } }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" + "path-is-inside": "^1.0.2" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "isobject": "^3.0.1" } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "has": "^1.0.1" } }, - "icss-replace-symbols": { + "is-resolvable": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", "dev": true, "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "html-comment-regex": "^1.1.0" } }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" - } + "has-symbols": "^1.0.0" } }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { - "import-from": "^2.1.0" + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" }, "dependencies": { - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "caller-callsite": "^2.0.0" + "has-flag": "^3.0.0" } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true } } }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" }, "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", "dev": true, "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "handlebars": "^4.1.2" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "requires": { - "repeating": "^2.0.0" + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" } }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "javascript-stringify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz", + "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", "dev": true, - "optional": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" + "import-local": "^2.0.0", + "jest-cli": "^24.9.0" }, "dependencies": { - "ansi-regex": { + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, - "optional": true + "requires": { + "locate-path": "^3.0.0" + } }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, - "optional": true, "requires": { - "ansi-regex": "^3.0.0" + "ci-info": "^2.0.0" } - } - } - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "dependencies": { - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + }, + "jest-cli": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", "dev": true, "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^13.3.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" } } - } - }, - "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.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true + } }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true + "jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.9.0", + "realpath-native": "^1.1.0" + } }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" + "jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true + "jest-docblock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "jest-each": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "jest-environment-jsdom": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", + "jsdom": "^11.5.1" + } }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "jest-environment-node": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", "dev": true }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", "dev": true, "requires": { - "ci-info": "^1.5.0" + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" } }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "jest-jasmine2": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", "dev": true, "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.9.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", + "throat": "^4.0.0" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "jest-leak-detector": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, - "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=" + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0" + } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", "dev": true }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "jest-resolve-dependencies": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "@jest/types": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.9.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=" - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "jest-runner": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^13.3.0" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "locate-path": "^3.0.0" } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "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=" + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + } + } }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", "dev": true }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "jest-snapshot": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", "dev": true, "requires": { - "is-path-inside": "^2.1.0" + "@babel/types": "^7.0.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", "dev": true, "requires": { - "path-is-inside": "^1.0.2" + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "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=" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", "dev": true, "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "jest-watcher": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", "dev": true, "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "^1.0.0" + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.9.0", + "string-length": "^2.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "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=" - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "javascript-stringify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz", - "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", - "dev": true - }, "js-base64": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", @@ -7537,12 +9589,62 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + }, + "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" + } + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -7589,11 +9691,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } }, + "jsonic": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/jsonic/-/jsonic-0.3.1.tgz", + "integrity": "sha512-5Md4EK3vPAMvP2sXY6M3/vQEPeX3LxEQBJuF979uypddXjsUlEoAI9/Nojh8tbw+YU5FjMoqSElO6oyjrAuprw==" + }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", @@ -7661,6 +9767,14 @@ } } }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -7673,6 +9787,12 @@ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, "launch-editor": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz", @@ -7701,6 +9821,18 @@ "invert-kv": "^2.0.0" } }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -7837,10 +9969,9 @@ } }, "lodash": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz", - "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==", - "dev": true + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "lodash.defaultsdeep": { "version": "4.6.1", @@ -7866,6 +9997,12 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, "lodash.tail": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", @@ -7948,6 +10085,15 @@ "semver": "^5.6.0" } }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -8068,6 +10214,12 @@ } } }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "merge2": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", @@ -8197,6 +10349,7 @@ "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.7" } @@ -8207,6 +10360,23 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, + "minipass": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.4.0.tgz", + "integrity": "sha512-6PmOuSP4NnZXzs2z6rbwzLJu/c5gdzYg1mRI/WIYdx45iiX7T+a4esOzavD6V/KmBzAaopFSTZPZcUx73bqKWA==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "requires": { + "minipass": "^2.2.1" + } + }, "mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", @@ -8292,11 +10462,6 @@ "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.10.1.tgz", "integrity": "sha512-w22rOL5ZYu6HbUehB5deurghGM0hS/xBVyHMGKOuQctkk93J9z9VEOhDsiWrXOprVNQpP9uzGKdl8v9mFspKuw==" }, - "mout": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz", - "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=" - }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -8311,6 +10476,12 @@ "run-queue": "^1.0.3" } }, + "moxios": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/moxios/-/moxios-0.4.0.tgz", + "integrity": "sha1-/A2ixlR31yXKa5Z51YNw7QxS9Ts=", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -8342,6 +10513,7 @@ "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.0.0", "object-assign": "^4.0.1", @@ -8394,6 +10566,11 @@ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -8443,6 +10620,12 @@ } } }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, "node-ipc": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz", @@ -8501,6 +10684,25 @@ "write-file-atomic": "^1.1.4" } }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, "node-releases": { "version": "1.1.25", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.25.tgz", @@ -8700,6 +10902,12 @@ } } }, + "nwsapi": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", + "dev": true + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -8825,15 +11033,7 @@ "define-properties": "^1.1.3", "es-abstract": "^1.12.0", "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "oboe": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.3.tgz", - "integrity": "sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=", - "requires": { - "http-https": "^1.0.0" + "has": "^1.0.3" } }, "obuf": { @@ -8897,6 +11097,30 @@ "is-wsl": "^1.1.0" } }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", @@ -8973,17 +11197,21 @@ "os-tmpdir": "^1.0.0" } }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" - }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -9019,6 +11247,12 @@ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, "p-retry": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", @@ -9155,7 +11389,8 @@ "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=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-is-inside": { "version": "1.0.2", @@ -9238,6 +11473,15 @@ "pinkie": "^2.0.0" } }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -9308,6 +11552,12 @@ "dev": true, "optional": true }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, "portfinder": { "version": "1.0.21", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.21.tgz", @@ -9319,6 +11569,12 @@ "mkdirp": "0.5.x" }, "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -9874,8 +12130,7 @@ "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, "prettier": { "version": "1.16.3", @@ -9893,6 +12148,18 @@ "utila": "~0.4" } }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + } + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -9922,6 +12189,16 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, + "prompts": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", + "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" + } + }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -9976,7 +12253,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -10203,6 +12479,15 @@ "readable-stream": "^2.0.2" } }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", @@ -10520,6 +12805,14 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -10558,6 +12851,7 @@ "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -10580,6 +12874,12 @@ "safe-buffer": "^5.1.1" } }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -10602,8 +12902,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true, - "optional": true + "dev": true }, "rx-lite-aggregates": { "version": "4.0.8", @@ -10643,6 +12942,23 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + } + }, "sass-graph": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", @@ -10848,23 +13164,6 @@ "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" }, - "scrypt.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", - "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", - "requires": { - "scrypt": "^6.0.2", - "scryptsy": "^1.2.1" - } - }, - "scryptsy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", - "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", - "requires": { - "pbkdf2": "^3.0.3" - } - }, "scss-tokenizer": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", @@ -11181,6 +13480,12 @@ "jsonify": "~0.0.0" } }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -11219,6 +13524,12 @@ } } }, + "sisteransi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", + "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==", + "dev": true + }, "sjcl": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/sjcl/-/sjcl-1.0.6.tgz", @@ -11587,6 +13898,12 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "dev": true + }, "stackframe": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", @@ -11678,6 +13995,33 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -11821,6 +14165,51 @@ } } }, + "superagent": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", + "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "dev": true, + "requires": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + } + } + }, + "supertest": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", + "integrity": "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==", + "dev": true, + "requires": { + "methods": "^1.1.2", + "superagent": "^3.8.3" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -11858,77 +14247,11 @@ "util.promisify": "~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==", - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "decompress": "^4.0.0", - "eth-lib": "^0.1.26", - "fs-extra": "^2.1.2", - "fs-promise": "^2.0.0", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar.gz": "^1.0.5", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "eth-lib": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", - "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "keccakjs": "^0.2.1", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } - } + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true }, "table": { "version": "4.0.2", @@ -11991,6 +14314,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, "requires": { "block-stream": "*", "fstream": "^1.0.12", @@ -12011,25 +14335,6 @@ "xtend": "^4.0.0" } }, - "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==", - "requires": { - "bluebird": "^2.9.34", - "commander": "^2.8.1", - "fstream": "^1.0.8", - "mout": "^0.11.0", - "tar": "^2.1.1" - }, - "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" - } - } - }, "terser": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.2.tgz", @@ -12046,42 +14351,144 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==", - "dev": true, - "requires": { - "cacache": "^11.3.2", - "find-cache-dir": "^2.0.0", - "is-wsl": "^1.1.0", - "loader-utils": "^1.2.3", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.7.0", - "source-map": "^0.6.1", - "terser": "^4.0.0", - "webpack-sources": "^1.3.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + } + } + }, + "terser-webpack-plugin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz", + "integrity": "sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==", + "dev": true, + "requires": { + "cacache": "^11.3.2", + "find-cache-dir": "^2.0.0", + "is-wsl": "^1.1.0", + "loader-utils": "^1.2.3", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1", + "terser": "^4.0.0", + "webpack-sources": "^1.3.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "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 + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true } } @@ -12096,6 +14503,7 @@ "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.0.0" } @@ -12104,6 +14512,7 @@ "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.1.0 < 4" } @@ -12119,6 +14528,12 @@ "neo-async": "^2.6.0" } }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -12169,6 +14584,12 @@ "os-tmpdir": "~1.0.2" } }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -12206,408 +14627,116 @@ } } }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "toposort": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "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 - }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, - "requires": { - "glob": "^7.1.2" - } - }, - "truffle-blockchain-utils": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.10.tgz", - "integrity": "sha512-gVvagLCvYD0QXfnkxy6I48P6O+d7TEY0smc2VFuwldl1/clLVWE+KfBO/jFMaAz+nupTQeKvPhNTeyh3JAsCeA==" - }, - "truffle-contract": { - "version": "4.0.25", - "resolved": "https://registry.npmjs.org/truffle-contract/-/truffle-contract-4.0.25.tgz", - "integrity": "sha512-ngy+ljTCSs/Arv4/9xUjq6mBdAHvQjFvJGqMcBDoNZSXUdvuW4qmX9gu/cOFEt2hdsBcpt0sx7DrXGlY4O97ww==", - "requires": { - "bignumber.js": "^7.2.1", - "ethers": "^4.0.0-beta.1", - "truffle-blockchain-utils": "^0.0.10", - "truffle-contract-schema": "^3.0.11", - "truffle-error": "^0.0.5", - "truffle-interface-adapter": "^0.2.0", - "web3": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - }, - "dependencies": { - "@types/node": { - "version": "10.14.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.13.tgz", - "integrity": "sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ==" - }, - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "eth-lib": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", - "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "keccakjs": "^0.2.1", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "eventemitter3": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", - "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=" - }, - "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.0" - } - }, - "scrypt-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", - "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" - }, - "scrypt.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", - "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", - "requires": { - "scrypt": "^6.0.2", - "scryptsy": "^1.2.1" - } - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - }, - "web3": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.37.tgz", - "integrity": "sha512-8XLgUspdzicC/xHG82TLrcF/Fxzj2XYNJ1KTYnepOI77bj5rvpsxxwHYBWQ6/JOjk0HkZqoBfnXWgcIHCDhZhQ==", - "requires": { - "web3-bzz": "1.0.0-beta.37", - "web3-core": "1.0.0-beta.37", - "web3-eth": "1.0.0-beta.37", - "web3-eth-personal": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-shh": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-core": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.37.tgz", - "integrity": "sha512-cIwEqCj7OJyefQNauI0HOgW4sSaOQ98V99H2/HEIlnCZylsDzfw7gtQUdwnRFiIyIxjbWy3iWsjwDPoXNPZBYg==", - "requires": { - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-requestmanager": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-core-helpers": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.37.tgz", - "integrity": "sha512-efaLOzN28RMnbugnyelgLwPWWaSwElQzcAJ/x3PZu+uPloM/lE5x0YuBKvIh7/PoSMlHqtRWj1B8CpuQOUQ5Ew==", - "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-core-method": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.37.tgz", - "integrity": "sha512-pKWFUeqnVmzx3VrZg+CseSdrl/Yrk2ioid/HzolNXZE6zdoITZL0uRjnsbqXGEzgRRd1Oe/pFndpTlRsnxXloA==", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-core-subscriptions": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.37.tgz", - "integrity": "sha512-FdXl8so9kwkRRWziuCSpFsAuAdg9KvpXa1fQlT16uoGcYYfxwFO/nkwyBGQzkZt7emShI2IRugcazyPCZDwkOA==", - "requires": { - "eventemitter3": "1.1.1", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37" - } - }, - "web3-eth": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.37.tgz", - "integrity": "sha512-Eb3aGtkz3G9q+Z9DKgSQNbn/u8RtcZQQ0R4sW9hy5KK47GoT6vab5c6DiD3QWzI0BzitHzR5Ji+3VHf/hPUGgw==", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-eth-accounts": "1.0.0-beta.37", - "web3-eth-contract": "1.0.0-beta.37", - "web3-eth-ens": "1.0.0-beta.37", - "web3-eth-iban": "1.0.0-beta.37", - "web3-eth-personal": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-eth-abi": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.37.tgz", - "integrity": "sha512-g9DKZGM2OqwKp/tX3W/yihcj7mQCtJ6CXyZXEIZfuDyRBED/iSEIFfieDOd+yo16sokLMig6FG7ADhhu+19hdA==", - "requires": { - "ethers": "4.0.0-beta.1", - "underscore": "1.8.3", - "web3-utils": "1.0.0-beta.37" - }, - "dependencies": { - "elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" - } - }, - "ethers": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.1.tgz", - "integrity": "sha512-SoYhktEbLxf+fiux5SfCEwdzWENMvgIbMZD90I62s4GZD9nEjgEWy8ZboI3hck193Vs0bDoTohDISx84f2H2tw==", - "requires": { - "@types/node": "^10.3.2", - "aes-js": "3.0.0", - "bn.js": "^4.4.0", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.3", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - } - } - } - }, - "web3-eth-accounts": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.37.tgz", - "integrity": "sha512-uvbHL62/zwo4GDmwKdqH9c/EgYd8QVnAfpVw8D3epSISpgbONNY7Hr4MRMSd/CqAP12l2Ls9JVQGLhhC83bW6g==", - "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.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - }, - "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=", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - } - } - }, - "web3-eth-contract": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.37.tgz", - "integrity": "sha512-h1B3A8Z/C7BlnTCHkrWbXZQTViDxfR12lKMeTkT8Sqj5phFmxrBlPE4ORy4lf1Dk5b23mZYE0r/IRACx4ThCrQ==", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-eth-ens": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.37.tgz", - "integrity": "sha512-dR3UkrVzdRrJhfP57xBPx0CMiVnCcYFvh+u2XMkGydrhHgupSUkjqGr89xry/j1T0BkuN9mikpbyhdCVMXqMbg==", - "requires": { - "eth-ens-namehash": "2.0.8", - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-eth-contract": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-eth-iban": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.37.tgz", - "integrity": "sha512-WQRniGJFxH/XCbd7miO6+jnUG+6bvuzfeufPIiOtCbeIC1ypp1kSqER8YVBDrTyinU1xnf1U5v0KBZ2yiWBJxQ==", - "requires": { - "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-eth-personal": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.37.tgz", - "integrity": "sha512-B4dZpGbD+nGnn48i6nJBqrQ+HB7oDmd+Q3wGRKOsHSK5HRWO/KwYeA7wgwamMAElkut50lIsT9EJl4Apfk3G5Q==", - "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-net": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.37.tgz", - "integrity": "sha512-xG/uBtMdDa1UMXw9KjDUgf3fXA/fDEJUYUS0TDn+U9PMgngA+UVECHNNvQTrVVDxEky38V3sahwIDiopNsQdsw==", - "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-shh": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.37.tgz", - "integrity": "sha512-h5STG/xqZNQWtCLYOu7NiMqwqPea8SfkKQUPUFxXKIPVCFVKpHuQEwW1qcPQRJMLhlQIv17xuoUe1A+RzDNbrw==", - "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37" - } - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" } } }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "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 + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "truffle-blockchain-utils": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.10.tgz", + "integrity": "sha512-gVvagLCvYD0QXfnkxy6I48P6O+d7TEY0smc2VFuwldl1/clLVWE+KfBO/jFMaAz+nupTQeKvPhNTeyh3JAsCeA==" + }, + "truffle-contract": { + "version": "4.0.30", + "resolved": "https://registry.npmjs.org/truffle-contract/-/truffle-contract-4.0.30.tgz", + "integrity": "sha512-kQDqqhT6IPu1Vj111PzQvQ3xQiXx//cwFgMDZjaqRpBGuXGa5i80RxW+Vxfdn5pTrYk4pP0P7ZPyka9PJ248vw==", + "requires": { + "bignumber.js": "^7.2.1", + "ethers": "^4.0.0-beta.1", + "truffle-blockchain-utils": "^0.0.10", + "truffle-contract-schema": "^3.0.13", + "truffle-error": "^0.0.5", + "truffle-interface-adapter": "^0.2.4", + "web3": "1.2.1", + "web3-core-promievent": "1.2.1", + "web3-eth-abi": "1.2.1", + "web3-utils": "1.2.1" + } + }, "truffle-contract-schema": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/truffle-contract-schema/-/truffle-contract-schema-3.0.11.tgz", - "integrity": "sha512-YcgSOlrufi6VtnXg8LU5Ma7JHzHpnZQxzB1PSWnb+JOTc1nL02XRoCWTgEO7PkJnFgf6yrwOpW0ajSwHk3zQ7Q==", + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/truffle-contract-schema/-/truffle-contract-schema-3.0.13.tgz", + "integrity": "sha512-joF6oiG35xkRalc9Jeuq1NJ43jE3T0LVoWQ/8EhhGyE5E9PxYbUjNtdcj8ycOpn3BYFiomX2UUsgmt4W2U1Qtg==", "requires": { "ajv": "^6.10.0", "crypto-js": "^3.1.9-1", @@ -12620,328 +14749,14 @@ "integrity": "sha512-JpzPLMPSCE0vaZ3vH5NO5u42GpMj/Y1SRBkQ6b69PSw3xMSH1umApN32cEcg1nnh8q5FNYc5FnKu0m4tiBffyQ==" }, "truffle-interface-adapter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/truffle-interface-adapter/-/truffle-interface-adapter-0.2.0.tgz", - "integrity": "sha512-NMj2gGr96/Ny5P2CvVzvkMAYXFjZfkdLCLt0kOiYGltoTt7EVP+HVLpYUfvxHjmEYytGdjXjrt/1srCfbPbAsQ==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/truffle-interface-adapter/-/truffle-interface-adapter-0.2.4.tgz", + "integrity": "sha512-y1iu4aHI4VEjTcK1vaGOULApvk7QfFlF+zXLVYSJnJux6hqMmgq/F1+flCL73XEhO0zrtLjusnZrPUBYOVvWdw==", "requires": { "bn.js": "^4.11.8", "ethers": "^4.0.32", - "web3": "1.0.0-beta.37" - }, - "dependencies": { - "@types/node": { - "version": "10.14.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.13.tgz", - "integrity": "sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ==" - }, - "eth-lib": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", - "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "keccakjs": "^0.2.1", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "eventemitter3": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", - "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=" - }, - "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.0" - } - }, - "scrypt-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", - "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" - }, - "scrypt.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", - "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", - "requires": { - "scrypt": "^6.0.2", - "scryptsy": "^1.2.1" - } - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - }, - "web3": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.37.tgz", - "integrity": "sha512-8XLgUspdzicC/xHG82TLrcF/Fxzj2XYNJ1KTYnepOI77bj5rvpsxxwHYBWQ6/JOjk0HkZqoBfnXWgcIHCDhZhQ==", - "requires": { - "web3-bzz": "1.0.0-beta.37", - "web3-core": "1.0.0-beta.37", - "web3-eth": "1.0.0-beta.37", - "web3-eth-personal": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-shh": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-core": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.37.tgz", - "integrity": "sha512-cIwEqCj7OJyefQNauI0HOgW4sSaOQ98V99H2/HEIlnCZylsDzfw7gtQUdwnRFiIyIxjbWy3iWsjwDPoXNPZBYg==", - "requires": { - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-requestmanager": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-core-helpers": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.37.tgz", - "integrity": "sha512-efaLOzN28RMnbugnyelgLwPWWaSwElQzcAJ/x3PZu+uPloM/lE5x0YuBKvIh7/PoSMlHqtRWj1B8CpuQOUQ5Ew==", - "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-core-method": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.37.tgz", - "integrity": "sha512-pKWFUeqnVmzx3VrZg+CseSdrl/Yrk2ioid/HzolNXZE6zdoITZL0uRjnsbqXGEzgRRd1Oe/pFndpTlRsnxXloA==", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-core-subscriptions": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.37.tgz", - "integrity": "sha512-FdXl8so9kwkRRWziuCSpFsAuAdg9KvpXa1fQlT16uoGcYYfxwFO/nkwyBGQzkZt7emShI2IRugcazyPCZDwkOA==", - "requires": { - "eventemitter3": "1.1.1", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37" - } - }, - "web3-eth": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.37.tgz", - "integrity": "sha512-Eb3aGtkz3G9q+Z9DKgSQNbn/u8RtcZQQ0R4sW9hy5KK47GoT6vab5c6DiD3QWzI0BzitHzR5Ji+3VHf/hPUGgw==", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-eth-accounts": "1.0.0-beta.37", - "web3-eth-contract": "1.0.0-beta.37", - "web3-eth-ens": "1.0.0-beta.37", - "web3-eth-iban": "1.0.0-beta.37", - "web3-eth-personal": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-eth-abi": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.37.tgz", - "integrity": "sha512-g9DKZGM2OqwKp/tX3W/yihcj7mQCtJ6CXyZXEIZfuDyRBED/iSEIFfieDOd+yo16sokLMig6FG7ADhhu+19hdA==", - "requires": { - "ethers": "4.0.0-beta.1", - "underscore": "1.8.3", - "web3-utils": "1.0.0-beta.37" - }, - "dependencies": { - "elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" - } - }, - "ethers": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.1.tgz", - "integrity": "sha512-SoYhktEbLxf+fiux5SfCEwdzWENMvgIbMZD90I62s4GZD9nEjgEWy8ZboI3hck193Vs0bDoTohDISx84f2H2tw==", - "requires": { - "@types/node": "^10.3.2", - "aes-js": "3.0.0", - "bn.js": "^4.4.0", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.3", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - } - } - } - }, - "web3-eth-accounts": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.37.tgz", - "integrity": "sha512-uvbHL62/zwo4GDmwKdqH9c/EgYd8QVnAfpVw8D3epSISpgbONNY7Hr4MRMSd/CqAP12l2Ls9JVQGLhhC83bW6g==", - "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.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - }, - "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=", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - } - } - }, - "web3-eth-contract": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.37.tgz", - "integrity": "sha512-h1B3A8Z/C7BlnTCHkrWbXZQTViDxfR12lKMeTkT8Sqj5phFmxrBlPE4ORy4lf1Dk5b23mZYE0r/IRACx4ThCrQ==", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-eth-ens": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.37.tgz", - "integrity": "sha512-dR3UkrVzdRrJhfP57xBPx0CMiVnCcYFvh+u2XMkGydrhHgupSUkjqGr89xry/j1T0BkuN9mikpbyhdCVMXqMbg==", - "requires": { - "eth-ens-namehash": "2.0.8", - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-eth-contract": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-eth-iban": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.37.tgz", - "integrity": "sha512-WQRniGJFxH/XCbd7miO6+jnUG+6bvuzfeufPIiOtCbeIC1ypp1kSqER8YVBDrTyinU1xnf1U5v0KBZ2yiWBJxQ==", - "requires": { - "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.37" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "web3-eth-personal": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.37.tgz", - "integrity": "sha512-B4dZpGbD+nGnn48i6nJBqrQ+HB7oDmd+Q3wGRKOsHSK5HRWO/KwYeA7wgwamMAElkut50lIsT9EJl4Apfk3G5Q==", - "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-net": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.37.tgz", - "integrity": "sha512-xG/uBtMdDa1UMXw9KjDUgf3fXA/fDEJUYUS0TDn+U9PMgngA+UVECHNNvQTrVVDxEky38V3sahwIDiopNsQdsw==", - "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-shh": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.37.tgz", - "integrity": "sha512-h5STG/xqZNQWtCLYOu7NiMqwqPea8SfkKQUPUFxXKIPVCFVKpHuQEwW1qcPQRJMLhlQIv17xuoUe1A+RzDNbrw==", - "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37" - } - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } + "lodash": "^4.17.13", + "web3": "1.2.1" } }, "tryer": { @@ -12975,6 +14790,11 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, + "type": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz", + "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==" + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -13062,11 +14882,6 @@ } } }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" - }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -13140,8 +14955,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "unpipe": { "version": "1.0.0", @@ -13272,21 +15086,6 @@ "requires-port": "^1.0.0" } }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "^1.0.1" - }, - "dependencies": { - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - } - } - }, "url-set-query": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", @@ -13303,11 +15102,6 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" - }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -13490,921 +15284,605 @@ "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.1.tgz", "integrity": "sha512-ER5moSbLZuNSMBFnEBVGhQ1uCBNJslH9W/Dw2W7GZN23UQA69uapP5GTT9Vm8Trc0PzBSVt6LzF3hGjmv41xcg==" }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "dev": true, - "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "wcwidth": { + "w3c-hr-time": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", "dev": true, "requires": { - "defaults": "^1.0.3" - } - }, - "web3": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.37.tgz", - "integrity": "sha512-8XLgUspdzicC/xHG82TLrcF/Fxzj2XYNJ1KTYnepOI77bj5rvpsxxwHYBWQ6/JOjk0HkZqoBfnXWgcIHCDhZhQ==", - "requires": { - "web3-bzz": "1.0.0-beta.37", - "web3-core": "1.0.0-beta.37", - "web3-eth": "1.0.0-beta.37", - "web3-eth-personal": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-shh": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - } - } - } - }, - "web3-bzz": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.37.tgz", - "integrity": "sha512-E+dho49Nsm/QpQvYWOF35YDsQrMvLB19AApENxhlQsu6HpWQt534DQul0t3Y/aAh8rlKD6Kanxt8LhHDG3vejQ==", - "requires": { - "got": "7.1.0", - "swarm-js": "0.1.37", - "underscore": "1.8.3" + "browser-process-hrtime": "^0.1.2" } }, - "web3-core": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.37.tgz", - "integrity": "sha512-cIwEqCj7OJyefQNauI0HOgW4sSaOQ98V99H2/HEIlnCZylsDzfw7gtQUdwnRFiIyIxjbWy3iWsjwDPoXNPZBYg==", - "requires": { - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-requestmanager": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - } - } + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" } }, - "web3-core-helpers": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.37.tgz", - "integrity": "sha512-efaLOzN28RMnbugnyelgLwPWWaSwElQzcAJ/x3PZu+uPloM/lE5x0YuBKvIh7/PoSMlHqtRWj1B8CpuQOUQ5Ew==", + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - } - } + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, - "web3-core-method": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.37.tgz", - "integrity": "sha512-pKWFUeqnVmzx3VrZg+CseSdrl/Yrk2ioid/HzolNXZE6zdoITZL0uRjnsbqXGEzgRRd1Oe/pFndpTlRsnxXloA==", + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - } - } + "minimalistic-assert": "^1.0.0" } }, - "web3-core-promievent": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.37.tgz", - "integrity": "sha512-GTF2r1lP8nJBeA5Gxq5yZpJy9l8Fb9CXGZPfF8jHvaRdQHtm2Z+NDhqYmF833lcdkokRSyfPcXlz1mlWeClFpg==", + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, "requires": { - "any-promise": "1.3.0", - "eventemitter3": "1.1.1" - }, - "dependencies": { - "eventemitter3": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", - "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=" - } + "defaults": "^1.0.3" } }, - "web3-core-requestmanager": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.37.tgz", - "integrity": "sha512-66VUqye5BGp1Zz1r8psCxdNH+GtTjaFwroum2Osx+wbC5oRjAiXkkadiitf6wRb+edodjEMPn49u7B6WGNuewQ==", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37", - "web3-providers-http": "1.0.0-beta.37", - "web3-providers-ipc": "1.0.0-beta.37", - "web3-providers-ws": "1.0.0-beta.37" + "web3": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.1.tgz", + "integrity": "sha512-nNMzeCK0agb5i/oTWNdQ1aGtwYfXzHottFP2Dz0oGIzavPMGSKyVlr8ibVb1yK5sJBjrWVnTdGaOC2zKDFuFRw==", + "requires": { + "web3-bzz": "1.2.1", + "web3-core": "1.2.1", + "web3-eth": "1.2.1", + "web3-eth-personal": "1.2.1", + "web3-net": "1.2.1", + "web3-shh": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "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==", + "buffer": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.0.tgz", + "integrity": "sha512-Xpgy0IwHK2N01ncykXTy6FpCWuM+CJSHoPVBLyNqyrWxsedpLvwsYUhf0ME3WRFNUhos0dMamz9cOS/xRDtU5g==", "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "keccakjs": "^0.2.1", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" } }, - "web3-core-helpers": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.37.tgz", - "integrity": "sha512-efaLOzN28RMnbugnyelgLwPWWaSwElQzcAJ/x3PZu+uPloM/lE5x0YuBKvIh7/PoSMlHqtRWj1B8CpuQOUQ5Ew==", + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "web3-eth-iban": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.37.tgz", - "integrity": "sha512-WQRniGJFxH/XCbd7miO6+jnUG+6bvuzfeufPIiOtCbeIC1ypp1kSqER8YVBDrTyinU1xnf1U5v0KBZ2yiWBJxQ==", + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "requires": { - "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.37" + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "swarm-js": { + "version": "0.1.39", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", + "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", + "requires": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "decompress": "^4.0.0", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request-promise": "^0.1.2" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + } + }, + "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==" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } + } } }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "tar": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", + "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", "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" + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" } }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "prepend-http": "^2.0.0" } - } - } - }, - "web3-core-subscriptions": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.37.tgz", - "integrity": "sha512-FdXl8so9kwkRRWziuCSpFsAuAdg9KvpXa1fQlT16uoGcYYfxwFO/nkwyBGQzkZt7emShI2IRugcazyPCZDwkOA==", - "requires": { - "eventemitter3": "1.1.1", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37" - }, - "dependencies": { - "eventemitter3": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", - "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=" - } - } - }, - "web3-eth": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.37.tgz", - "integrity": "sha512-Eb3aGtkz3G9q+Z9DKgSQNbn/u8RtcZQQ0R4sW9hy5KK47GoT6vab5c6DiD3QWzI0BzitHzR5Ji+3VHf/hPUGgw==", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-eth-accounts": "1.0.0-beta.37", - "web3-eth-contract": "1.0.0-beta.37", - "web3-eth-ens": "1.0.0-beta.37", - "web3-eth-iban": "1.0.0-beta.37", - "web3-eth-personal": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "web3-bzz": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.1.tgz", + "integrity": "sha512-LdOO44TuYbGIPfL4ilkuS89GQovxUpmLz6C1UC7VYVVRILeZS740FVB3j9V4P4FHUk1RenaDfKhcntqgVCHtjw==", "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" + "got": "9.6.0", + "swarm-js": "0.1.39", + "underscore": "1.9.1" } } } }, - "web3-eth-abi": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.37.tgz", - "integrity": "sha512-g9DKZGM2OqwKp/tX3W/yihcj7mQCtJ6CXyZXEIZfuDyRBED/iSEIFfieDOd+yo16sokLMig6FG7ADhhu+19hdA==", + "web3-core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.1.tgz", + "integrity": "sha512-5ODwIqgl8oIg/0+Ai4jsLxkKFWJYE0uLuE1yUKHNVCL4zL6n3rFjRMpKPokd6id6nJCNgeA64KdWQ4XfpnjdMg==", "requires": { - "ethers": "4.0.0-beta.1", - "underscore": "1.8.3", - "web3-utils": "1.0.0-beta.37" + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-core-requestmanager": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { - "@types/node": { - "version": "10.14.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.13.tgz", - "integrity": "sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ==" - }, - "elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", + "oboe": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", + "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" + "http-https": "^1.0.0" } }, - "ethers": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.1.tgz", - "integrity": "sha512-SoYhktEbLxf+fiux5SfCEwdzWENMvgIbMZD90I62s4GZD9nEjgEWy8ZboI3hck193Vs0bDoTohDISx84f2H2tw==", - "requires": { - "@types/node": "^10.3.2", - "aes-js": "3.0.0", - "bn.js": "^4.4.0", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.3", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - } + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" }, - "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==", + "web3-core-requestmanager": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.1.tgz", + "integrity": "sha512-xfknTC69RfYmLKC+83Jz73IC3/sS2ZLhGtX33D4Q5nQ8yc39ElyAolxr9sJQS8kihOcM6u4J+8gyGMqsLcpIBg==", "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1", + "web3-providers-http": "1.2.1", + "web3-providers-ipc": "1.2.1", + "web3-providers-ws": "1.2.1" } }, - "scrypt-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", - "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - } - } - }, - "web3-eth-accounts": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.37.tgz", - "integrity": "sha512-uvbHL62/zwo4GDmwKdqH9c/EgYd8QVnAfpVw8D3epSISpgbONNY7Hr4MRMSd/CqAP12l2Ls9JVQGLhhC83bW6g==", - "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.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - }, - "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=", + "web3-providers-http": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.1.tgz", + "integrity": "sha512-BDtVUVolT9b3CAzeGVA/np1hhn7RPUZ6YYGB/sYky+GjeO311Yoq8SRDUSezU92x8yImSC2B+SMReGhd1zL+bQ==", "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" + "web3-core-helpers": "1.2.1", + "xhr2-cookies": "1.1.0" } }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "eth-lib": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", - "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "keccakjs": "^0.2.1", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - } + "web3-providers-ipc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.1.tgz", + "integrity": "sha512-oPEuOCwxVx8L4CPD0TUdnlOUZwGBSRKScCz/Ws2YHdr9Ium+whm+0NLmOZjkjQp5wovQbyBzNa6zJz1noFRvFA==", + "requires": { + "oboe": "2.1.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1" } }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "web3-providers-ws": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.1.tgz", + "integrity": "sha512-oqsQXzu+ejJACVHy864WwIyw+oB21nw/pI65/sD95Zi98+/HQzFfNcIFneF1NC4bVF3VNX4YHTNq2I2o97LAiA==", "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1", + "websocket": "github:web3-js/WebSocket-Node#905deb4812572b344f5801f8c9ce8bb02799d82e" } } } }, - "web3-eth-contract": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.37.tgz", - "integrity": "sha512-h1B3A8Z/C7BlnTCHkrWbXZQTViDxfR12lKMeTkT8Sqj5phFmxrBlPE4ORy4lf1Dk5b23mZYE0r/IRACx4ThCrQ==", + "web3-core-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.1.tgz", + "integrity": "sha512-Gx3sTEajD5r96bJgfuW377PZVFmXIH4TdqDhgGwd2lZQCcMi+DA4TgxJNJGxn0R3aUVzyyE76j4LBrh412mXrw==", "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "underscore": "1.9.1", + "web3-eth-iban": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - } + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" } } }, - "web3-eth-ens": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.37.tgz", - "integrity": "sha512-dR3UkrVzdRrJhfP57xBPx0CMiVnCcYFvh+u2XMkGydrhHgupSUkjqGr89xry/j1T0BkuN9mikpbyhdCVMXqMbg==", + "web3-core-method": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.1.tgz", + "integrity": "sha512-Ghg2WS23qi6Xj8Od3VCzaImLHseEA7/usvnOItluiIc5cKs00WYWsNy2YRStzU9a2+z8lwQywPYp0nTzR/QXdQ==", "requires": { - "eth-ens-namehash": "2.0.8", - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-eth-contract": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1", + "web3-core-promievent": "1.2.1", + "web3-core-subscriptions": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "web3-core-promievent": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz", + "integrity": "sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw==", "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" + "any-promise": "1.3.0", + "eventemitter3": "3.1.2" } } } }, - "web3-eth-iban": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.37.tgz", - "integrity": "sha512-WQRniGJFxH/XCbd7miO6+jnUG+6bvuzfeufPIiOtCbeIC1ypp1kSqER8YVBDrTyinU1xnf1U5v0KBZ2yiWBJxQ==", + "web3-core-promievent": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz", + "integrity": "sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw==", "requires": { - "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.37" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - } - } + "any-promise": "1.3.0", + "eventemitter3": "3.1.2" } }, - "web3-eth-personal": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.37.tgz", - "integrity": "sha512-B4dZpGbD+nGnn48i6nJBqrQ+HB7oDmd+Q3wGRKOsHSK5HRWO/KwYeA7wgwamMAElkut50lIsT9EJl4Apfk3G5Q==", + "web3-core-subscriptions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.1.tgz", + "integrity": "sha512-nmOwe3NsB8V8UFsY1r+sW6KjdOS68h8nuh7NzlWxBQT/19QSUGiERRTaZXWu5BYvo1EoZRMxCKyCQpSSXLc08g==", "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "eventemitter3": "3.1.2", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - } + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" } } }, - "web3-net": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.37.tgz", - "integrity": "sha512-xG/uBtMdDa1UMXw9KjDUgf3fXA/fDEJUYUS0TDn+U9PMgngA+UVECHNNvQTrVVDxEky38V3sahwIDiopNsQdsw==", + "web3-eth": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.1.tgz", + "integrity": "sha512-/2xly4Yry5FW1i+uygPjhfvgUP/MS/Dk+PDqmzp5M88tS86A+j8BzKc23GrlA8sgGs0645cpZK/999LpEF5UdA==", "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "underscore": "1.9.1", + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-core-subscriptions": "1.2.1", + "web3-eth-abi": "1.2.1", + "web3-eth-accounts": "1.2.1", + "web3-eth-contract": "1.2.1", + "web3-eth-ens": "1.2.1", + "web3-eth-iban": "1.2.1", + "web3-eth-personal": "1.2.1", + "web3-net": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - } + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" } } }, - "web3-providers-http": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.37.tgz", - "integrity": "sha512-FM/1YDB1jtZuTo78habFj7S9tNHoqt0UipdyoQV29b8LkGKZV9Vs3is8L24hzuj1j/tbwkcAH+ewIseHwu0DTg==", + "web3-eth-abi": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.1.tgz", + "integrity": "sha512-jI/KhU2a/DQPZXHjo2GW0myEljzfiKOn+h1qxK1+Y9OQfTcBMxrQJyH5AP89O6l6NZ1QvNdq99ThAxBFoy5L+g==", "requires": { - "web3-core-helpers": "1.0.0-beta.37", - "xhr2-cookies": "1.1.0" + "ethers": "4.0.0-beta.3", + "underscore": "1.9.1", + "web3-utils": "1.2.1" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + "@types/node": { + "version": "10.14.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.16.tgz", + "integrity": "sha512-/opXIbfn0P+VLt+N8DE4l8Mn8rbhiJgabU96ZJ0p9mxOkIks5gh6RUnpHak7Yh0SFkyjO/ODbxsQQPV2bpMmyA==" }, - "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==", + "elliptic": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", + "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "keccakjs": "^0.2.1", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "inherits": "^2.0.1" } }, - "web3-core-helpers": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.37.tgz", - "integrity": "sha512-efaLOzN28RMnbugnyelgLwPWWaSwElQzcAJ/x3PZu+uPloM/lE5x0YuBKvIh7/PoSMlHqtRWj1B8CpuQOUQ5Ew==", + "ethers": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.3.tgz", + "integrity": "sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog==", "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "@types/node": "^10.3.2", + "aes-js": "3.0.0", + "bn.js": "^4.4.0", + "elliptic": "6.3.3", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.3", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" } }, - "web3-eth-iban": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.37.tgz", - "integrity": "sha512-WQRniGJFxH/XCbd7miO6+jnUG+6bvuzfeufPIiOtCbeIC1ypp1kSqER8YVBDrTyinU1xnf1U5v0KBZ2yiWBJxQ==", + "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": { - "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.37" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - } + "scrypt-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", + "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" } } }, - "web3-providers-ipc": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.37.tgz", - "integrity": "sha512-NdRPRxYMIU0C3u18NI8u4bwbhI9pCg5nRgDGYcmSAx5uOBxiYcQy+hb0WkJRRhBoyIXJmy+s26FoH8904+UnPg==", + "web3-eth-accounts": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.1.tgz", + "integrity": "sha512-26I4qq42STQ8IeKUyur3MdQ1NzrzCqPsmzqpux0j6X/XBD7EjZ+Cs0lhGNkSKH5dI3V8CJasnQ5T1mNKeWB7nQ==", "requires": { - "oboe": "2.1.3", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37" + "any-promise": "1.3.0", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.7", + "scryptsy": "2.1.0", + "semver": "6.2.0", + "underscore": "1.9.1", + "uuid": "3.3.2", + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, "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==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", + "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", "requires": { "bn.js": "^4.11.6", "elliptic": "^6.4.0", - "keccakjs": "^0.2.1", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", "xhr-request-promise": "^0.1.2" } }, - "web3-core-helpers": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.37.tgz", - "integrity": "sha512-efaLOzN28RMnbugnyelgLwPWWaSwElQzcAJ/x3PZu+uPloM/lE5x0YuBKvIh7/PoSMlHqtRWj1B8CpuQOUQ5Ew==", - "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-eth-iban": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.37.tgz", - "integrity": "sha512-WQRniGJFxH/XCbd7miO6+jnUG+6bvuzfeufPIiOtCbeIC1ypp1kSqER8YVBDrTyinU1xnf1U5v0KBZ2yiWBJxQ==", - "requires": { - "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.37" - } + "scryptsy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz", + "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==" }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - } + "semver": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", + "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==" }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" } } }, - "web3-providers-ws": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.37.tgz", - "integrity": "sha512-8p6ZLv+1JYa5Vs8oBn33Nn3VGFBbF+wVfO+b78RJS1Qf1uIOzjFVDk3XwYDD7rlz9G5BKpxhaQw+6EGQ7L02aw==", + "web3-eth-contract": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.1.tgz", + "integrity": "sha512-kYFESbQ3boC9bl2rYVghj7O8UKMiuKaiMkxvRH5cEDHil8V7MGEGZNH0slSdoyeftZVlaWSMqkRP/chfnKND0g==", "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37", - "websocket": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible" + "underscore": "1.9.1", + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-core-promievent": "1.2.1", + "web3-core-subscriptions": "1.2.1", + "web3-eth-abi": "1.2.1", + "web3-utils": "1.2.1" }, "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": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "eth-lib": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", - "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "keccakjs": "^0.2.1", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "web3-core-helpers": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.37.tgz", - "integrity": "sha512-efaLOzN28RMnbugnyelgLwPWWaSwElQzcAJ/x3PZu+uPloM/lE5x0YuBKvIh7/PoSMlHqtRWj1B8CpuQOUQ5Ew==", - "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-eth-iban": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.37.tgz", - "integrity": "sha512-WQRniGJFxH/XCbd7miO6+jnUG+6bvuzfeufPIiOtCbeIC1ypp1kSqER8YVBDrTyinU1xnf1U5v0KBZ2yiWBJxQ==", - "requires": { - "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "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" - } + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" }, - "websocket": { - "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "from": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible", + "web3-core-promievent": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz", + "integrity": "sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw==", "requires": { - "debug": "^2.2.0", - "nan": "^2.3.3", - "typedarray-to-buffer": "^3.1.2", - "yaeti": "^0.0.6" + "any-promise": "1.3.0", + "eventemitter3": "3.1.2" } + } + } + }, + "web3-eth-ens": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.1.tgz", + "integrity": "sha512-lhP1kFhqZr2nnbu3CGIFFrAnNxk2veXpOXBY48Tub37RtobDyHijHgrj+xTh+mFiPokyrapVjpFsbGa+Xzye4Q==", + "requires": { + "eth-ens-namehash": "2.0.8", + "underscore": "1.9.1", + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-promievent": "1.2.1", + "web3-eth-abi": "1.2.1", + "web3-eth-contract": "1.2.1", + "web3-utils": "1.2.1" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "web3-core-promievent": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz", + "integrity": "sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw==", "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "any-promise": "1.3.0", + "eventemitter3": "3.1.2" } } } }, + "web3-eth-iban": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.1.tgz", + "integrity": "sha512-9gkr4QPl1jCU+wkgmZ8EwODVO3ovVj6d6JKMos52ggdT2YCmlfvFVF6wlGLwi0VvNa/p+0BjJzaqxnnG/JewjQ==", + "requires": { + "bn.js": "4.11.8", + "web3-utils": "1.2.1" + } + }, + "web3-eth-personal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.1.tgz", + "integrity": "sha512-RNDVSiaSoY4aIp8+Hc7z+X72H7lMb3fmAChuSBADoEc7DsJrY/d0R5qQDK9g9t2BO8oxgLrLNyBP/9ub2Hc6Bg==", + "requires": { + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-net": "1.2.1", + "web3-utils": "1.2.1" + } + }, + "web3-net": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.1.tgz", + "integrity": "sha512-Yt1Bs7WgnLESPe0rri/ZoPWzSy55ovioaP35w1KZydrNtQ5Yq4WcrAdhBzcOW7vAkIwrsLQsvA+hrOCy7mNauw==", + "requires": { + "web3-core": "1.2.1", + "web3-core-method": "1.2.1", + "web3-utils": "1.2.1" + } + }, "web3-shh": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.37.tgz", - "integrity": "sha512-h5STG/xqZNQWtCLYOu7NiMqwqPea8SfkKQUPUFxXKIPVCFVKpHuQEwW1qcPQRJMLhlQIv17xuoUe1A+RzDNbrw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.1.tgz", + "integrity": "sha512-/3Cl04nza5kuFn25bV3FJWa0s3Vafr5BlT933h26xovQ6HIIz61LmvNQlvX1AhFL+SNJOTcQmK1SM59vcyC8bA==", "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37" + "web3-core": "1.2.1", + "web3-core-method": "1.2.1", + "web3-core-subscriptions": "1.2.1", + "web3-net": "1.2.1" } }, "web3-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0.tgz", - "integrity": "sha512-zm0gdLXLk54ldwxxBMNPS62EuqHI2PaJohEGijTowacNS0BS2vEXdriNA8gp1+EplP2WgoHE0uRVmQIfpAyV+Q==", - "dev": true, + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", "requires": { "bn.js": "4.11.8", "eth-lib": "0.2.7", @@ -14419,7 +15897,6 @@ "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.6", "elliptic": "^6.4.0", @@ -14429,17 +15906,21 @@ "underscore": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" }, "utf8": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" } } }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, "webpack": { "version": "4.28.4", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.4.tgz", @@ -14787,6 +16268,32 @@ } } }, + "websocket": { + "version": "github:web3-js/WebSocket-Node#905deb4812572b344f5801f8c9ce8bb02799d82e", + "from": "github:web3-js/WebSocket-Node#polyfill/globalThis", + "requires": { + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "nan": "^2.14.0", + "typedarray-to-buffer": "^3.1.5", + "yaeti": "^0.0.6" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "websocket-driver": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", @@ -14804,6 +16311,32 @@ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", "dev": true }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -14942,6 +16475,12 @@ "cookiejar": "^2.1.1" } }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, "xmlhttprequest": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", @@ -14966,8 +16505,7 @@ "yallist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" }, "yargs": { "version": "13.2.4", diff --git a/vapp/package.json b/vapp/package.json index f231959..874bc84 100644 --- a/vapp/package.json +++ b/vapp/package.json @@ -14,21 +14,23 @@ "initialize:zokrates": "docker exec -it --workdir /home/zokrates/circuit zokrates /bin/bash /home/zokrates/circuit/zk-initialize.sh" }, "dependencies": { + "async": "^3.1.0", "axios": "^0.19.0", "body-parser": "^1.19.0", "buefy": "^0.8.2", "core-js": "^2.6.5", "cors": "^2.8.5", "express": "^4.17.1", + "jsonic": "^0.3.1", "keythereum": "^1.0.4", "node-localstorage": "^1.3.1", "rlp": "^2.2.3", - "truffle-contract": "^4.0.25", + "truffle-contract": "^4.0.30", "vue": "^2.6.10", "vue-router": "^3.0.7", "vue-template-compiler": "^2.6.10", "vuex": "^3.1.1", - "web3": "^1.0.0-beta.37" + "web3": "^1.2.1" }, "devDependencies": { "@vue/babel-preset-app": "^3.9.2", @@ -39,9 +41,14 @@ "eslint": "^5.16.0", "eslint-plugin-es-beautifier": "^1.0.1", "eslint-plugin-vue": "^5.2.3", + "ganache-cli": "^6.6.0", + "jest": "^24.9.0", + "lodash": "^4.17.15", + "moxios": "^0.4.0", "node-sass": "^4.12.0", "sass-loader": "^7.1.0", - "web3-utils": "^1.0.0" + "supertest": "^4.0.2", + "web3-utils": "^1.2.1" }, "postcss": { "plugins": { From a5cd30b5368821de1cc85ec1ea93305b819ab5f7 Mon Sep 17 00:00:00 2001 From: 4000D Date: Fri, 30 Aug 2019 12:47:11 +0900 Subject: [PATCH 05/30] vapp: refactor localStorage and express routes --- vapp/app.js | 7 +- vapp/localstorage.js | 474 ++++++++++++++++++++++++++++------------ vapp/router/accounts.js | 64 ++++-- vapp/router/circuits.js | 39 +++- vapp/router/index.js | 11 + vapp/router/notes.js | 30 +-- vapp/router/orders.js | 43 +--- vapp/router/vk.js | 25 ++- 8 files changed, 467 insertions(+), 226 deletions(-) create mode 100644 vapp/router/index.js diff --git a/vapp/app.js b/vapp/app.js index 328cc9b..18a449f 100644 --- a/vapp/app.js +++ b/vapp/app.js @@ -1,17 +1,14 @@ const express = require('express'); const cors = require('cors'); const bodyParser = require('body-parser'); +const router = require('./router'); const app = express(); app.use(cors()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); -app.use('/circuits', require('./router/circuits')); -app.use('/vk', require('./router/vk')); -app.use('/accounts', require('./router/accounts')); -app.use('/notes', require('./router/notes')); -app.use('/orders', require('./router/orders')); +app.use(router()); app.use(function (err, req, res, next) { console.error(err.stack); diff --git a/vapp/localstorage.js b/vapp/localstorage.js index dfd0377..96ff446 100644 --- a/vapp/localstorage.js +++ b/vapp/localstorage.js @@ -1,175 +1,400 @@ -const LocalStorage = require('node-localstorage').LocalStorage; +const { toHex, toBN } = require('web3-utils'); + +const { LocalStorage } = require('node-localstorage'); + +const { marshal } = require('../scripts/lib/util'); +const { Note } = require('../scripts/lib/Note'); + localStorage = new LocalStorage('./localstorage'); +if (typeof localStorage === 'undefined' || localStorage === null) { + global.localStorage = new LocalStorage('./scratch'); +} + + +// zk-dex service +function getLastBlockNumber () { + const n = localStorage.getItem('lastBlockNumber') || 0; + return toBN(n); +} +module.exports.getLastBlockNumber = getLastBlockNumber; + +function setLastBlockNumber (n) { + const pre = getLastBlockNumber(); + const cur = toBN(n); + if (cur.cmp(pre) > 0) { + localStorage.setItem('lastBlockNumber', toHex(n)); + } + return cur; +} +module.exports.setLastBlockNumber = setLastBlockNumber; + +function getUserKeys () { + const res = localStorage.getItem('userKeys'); + if (!res) { + return []; + } + return JSON.parse(res); +} +module.exports.getUserKeys = getUserKeys; + +function addUserKey (_userKey) { + const userKey = marshal(_userKey); + const userKeys = getUserKeys(); + if (userKeys.indexOf(userKey) < 0) { + userKeys.push(userKey); + localStorage.setItem('userKeys', JSON.stringify(userKeys)); + } +} +module.exports.addUserKey = addUserKey; // Vk -function getViewingKey (key) { - return localStorage.getItem(`${key}-viewingkey`); +function getViewingKeys (_userKey) { + const userKey = marshal(_userKey); + const res = localStorage.getItem(`${userKey}-viewingkeys`); + if (!res) { + return []; + } + return JSON.parse(res); } +module.exports.getViewingKeys = getViewingKeys; -function setViewingKey (key, viewingKey) { - localStorage.setItem(`${key}-viewingkey`, viewingKey); +function addViewingKeys (_userKey, viewingKey) { + const userKey = marshal(_userKey); + const viewingKeys = getViewingKeys(userKey); + if (viewingKeys.indexOf(viewingKey) < 0) { + viewingKeys.push(viewingKey); + localStorage.setItem(`${userKey}-viewingkeys`, JSON.stringify(viewingKeys)); + } + return viewingKeys; } +module.exports.addViewingKeys = addViewingKeys; // Accounts -function getAccounts (key) { - return localStorage.getItem(`${key}-accounts`); +function getAccounts (_userKey) { + const userKey = marshal(_userKey); + const res = localStorage.getItem(`${userKey}-accounts`); + if (!res) { + return []; + } + + return JSON.parse(res); } +module.exports.getAccounts = getAccounts; -function addAccount (key, account) { - let accounts = getAccounts(key); - if (!accounts) { - accounts = []; - } else { - accounts = JSON.parse(accounts); +function getAccountByAddress (userKey, _address) { + const address = marshal(_address); + + const accounts = getAccounts(userKey); + const account = accounts.find(({ address: a }) => marshal(a) === address); + if (!account) { + throw new Error(`Account ${address} not exists`); } + return account; +} +module.exports.getAccountByAddress = getAccountByAddress; + +function addAccount (_userKey, account) { + const userKey = marshal(_userKey); + const accounts = getAccounts(userKey); accounts.push(account); - _setAccounts(key, JSON.stringify(accounts)); + _setAccounts(userKey, accounts); } +module.exports.addAccount = addAccount; + +function deleteAccount (_userKey, _address) { + const userKey = marshal(_userKey); + const address = marshal(_address); + + const accounts = getAccounts(userKey); -function deleteAccount (key, address) { - let accounts = getAccounts(key); if (!accounts) { - return; - } else { - accounts = JSON.parse(accounts); + throw new Error('There is no account'); } - for (let i = 0; i < accounts.length; i++) { - if (accounts[i].address === address) { - accounts.splice(i, 1); - break; - } + + const i = accounts.findIndex(({ address: a }) => marshal(a) === address); + if (i < 0) { + throw new Error(`Account ${address} not exists`); } - _setAccounts(key, JSON.stringify(accounts)); + + accounts.splice(i, 1); + + _setAccounts(userKey, accounts); } +module.exports.deleteAccount = deleteAccount; -function _setAccounts (key, notes) { - localStorage.setItem(`${key}-accounts`, notes); +function _setAccounts (userKey, accounts) { + localStorage.setItem(`${userKey}-accounts`, JSON.stringify(accounts)); } // Notes -function getNotes (account) { - return localStorage.getItem(`${account}-notes`); +function getNotes (_userKey) { + const userKey = marshal(_userKey); + + const res = localStorage.getItem(`${userKey}-notes`); + if (!res) { + return []; + } + return JSON.parse(res); } +module.exports.getNotes = getNotes; -function addNote (account, note) { - let notes = getNotes(account); - if (!notes) { - notes = []; - } else { - notes = JSON.parse(notes); +function indexOfNote (_userKey, note) { + const userKey = marshal(_userKey); + const notes = getNotes(userKey); + const noteHash = Note.hashFromJSON(note); + + return notes.findIndex(n => Note.hashFromJSON(n) === noteHash); +} +module.exports.indexOfNote = indexOfNote; + +function addNote (_userKey, _note) { + const note = Note.fromJSON(_note); + const userKey = marshal(_userKey); + const notes = getNotes(userKey); + + const noteHash = note.hash(); + + if (notes.findIndex(n => Note.hashFromJSON(n) === noteHash) < 0) { + notes.push(note); + // console.warn('Note added', noteHash); + _setNotes(userKey, notes); + setNoteByHash(userKey, note); + return true; } - notes.push(note); - _setNotes(account, JSON.stringify(notes)); + return false; } +module.exports.addNote = addNote; -function getTransferNotes (account) { - return localStorage.getItem(`${account}-transfernotes`); +function keyNoteByHash (userKey, noteHash) { + return `user-${marshal(userKey)}-note-${marshal(noteHash)}`; +} +function getNoteByHash (userKey, noteHash) { + const res = localStorage.getItem(keyNoteByHash(userKey, noteHash)); + if (!res) return null; + return JSON.parse(res); } +module.exports.getNoteByHash = getNoteByHash; -function addTransferNote (account, note) { - let notes = getTransferNotes(account); - if (!notes) { - notes = []; - } else { - notes = JSON.parse(notes); +function setNoteByHash (userKey, note) { + // console.error(`setNoteByHash User${userKey} Note${note.hash()}`); + const noteHash = note.hash(); + localStorage.setItem(keyNoteByHash(userKey, noteHash), JSON.stringify(note)); +} +module.exports.setNoteByHash = setNoteByHash; + +function updateNote (_userKey, note) { + const userKey = marshal(_userKey); + const notes = getNotes(userKey); + const i = notes.findIndex(n => n.hash() === note.hash()); + + if (i >= 0) { + notes.splice(i, 1, note); + _setNotes(userKey, notes); } - notes.push(note); - _setTransferNotes(account, JSON.stringify(notes)); } +module.exports.updateNote = updateNote; -function updateNote (account, note) { - let notes = getNotes(account); - if (!notes) { - return; - } else { - notes = JSON.parse(notes); +function _setNotes (_userKey, notes) { + const userKey = marshal(_userKey); + localStorage.setItem(`${userKey}-notes`, JSON.stringify(notes)); +} + + +const TransferHistoryState = { + Init: 'init', + Deleted: 'deleted', + Transferred: 'transferred', +}; +class TransferHistory { + constructor (input, output1, output2, state = TransferHistoryState.Init) { + this.input = input; + this.output1 = output1; + this.output2 = output2; + this.state = state; } - for (let i = 0; i < notes.length; i++) { - if (notes[i].hash === note.hash) { - notes.splice(i, 1, note); - break; + toString () { + JSON.stringify(this); + } + + static _keyHistory (h0) { + return `transfer-history-${marshal(h0)}`; + } + + static getHistory (h0) { + const res = localStorage.getItem(TransferHistory._keyHistory(h0)); + + if (!res) return null; + const obj = JSON.parse(res); + return new TransferHistory(obj.input, obj.output1, obj.output2, obj.state); + } + + // NOTE: this would override previous another temporary history + setHistory () { + // console.error('save~!'); + localStorage.setItem(this.getKey(), JSON.stringify(this)); + } + + getKey () { + return TransferHistory._keyHistory( + Note.hashFromJSON(this.input), + ); + } + + setState (state, timestamp = null) { + let found = false; + for (const s of Object.values(TransferHistoryState)) { + if (s === state) { + found = true; + break; + } + } + if (!found) throw new Error(`Undefined Transfer History State: ${state}`); + + if (timestamp) { + this.timestamp = timestamp; } + + this.state = state; + this.setHistory(); } - _setNotes(account, JSON.stringify(notes)); -} -function _setNotes (key, notes) { - localStorage.setItem(`${key}-notes`, notes); -} + // by user + static _keyHistoryByUser (userKey) { + console.error('_keyHistoryByUser', userKey); + + return `transfer-history-user-${marshal(userKey)}`; + } + + static getHistoriesByUser (userKey) { + const res = localStorage.getItem(TransferHistory._keyHistoryByUser(userKey)); + + if (!res) return []; + return JSON.parse(res); + } + + addHistoryByUser (userKey) { + console.error('addHistoryByUser ~'); -function _setTransferNotes (key, notes) { - localStorage.setItem(`${key}-transfernotes`, notes); + const histories = TransferHistory.getHistoriesByUser(userKey); + histories.push(this); + + localStorage.setItem(TransferHistory._keyHistoryByUser(userKey), JSON.stringify(histories)); + } } +module.exports.TransferHistoryState = TransferHistoryState; +module.exports.TransferHistory = TransferHistory; + // Orders -function getOrder (id) { - let orders = getOrders(); - if (!orders) { - return; - } else { - orders = JSON.parse(orders); - } +const keyOrderCount = 'order-count'; - for (let i = 0; i < orders.length; i++) { - if (orders[i].orderId.toString() === id) { - return orders[i]; - } +function getOrderCount () { + const res = localStorage.getItem(keyOrderCount); + if (!res) { + return toBN('0'); } - return null; + return toBN(res); } +module.exports.getOrderCount = getOrderCount; -function getOrdersByAccount (account) { - return localStorage.getItem(`${account}-orders`); +function increaseOrderCount () { + localStorage.setItem(keyOrderCount, toHex(getOrderCount().add(toBN(1)))); } +module.exports.increaseOrderCount = increaseOrderCount; + +const keyOrders = 'orders'; function getOrders () { - return localStorage.getItem('orders'); + const res = localStorage.getItem(keyOrders); + if (!res) { + return []; + } + return JSON.parse(res); } +module.exports.getOrders = getOrders; -function addOrderByAccount (account, order) { - let orders = getOrdersByAccount(account); - if (!orders) { - orders = []; - } else { - orders = JSON.parse(orders); - } - orders.push(order); - _setOrdersByAccount(account, JSON.stringify(orders)); +function _setOrders (orders) { + localStorage.setItem(keyOrders, JSON.stringify(orders)); } function addOrder (order) { - let orders = getOrders('orders'); - if (!orders) { - orders = []; - } else { - orders = JSON.parse(orders); + const orders = getOrders(); + + if (orders.findIndex(o => o.orderId === order.orderId) < 0) { + orders.push(order); + _setOrders(orders); } - orders.push(order); - _setOrders(JSON.stringify(orders)); } +module.exports.addOrder = addOrder; -function updateOrderByAccount (account, order) { - let orders = getOrdersByAccount(account); - if (!orders) { - return; - } else { - orders = JSON.parse(orders); +function updateOrder (order) { + const orders = getOrders(); + + const i = orders.findIndex(o => o.orderId === order.orderId); + if (i >= 0) { + orders.splice(i, 1, order); + _setOrders(orders); } +} +module.exports.updateOrder = updateOrder; - for (let i = 0; i < orders.length; i++) { - if (orders[i].orderId === order.orderId) { - orders.splice(i, 1, order); - break; - } +function getOrder (id) { + const orders = getOrders(); + return orders.find(o => Number(o.orderId) === Number(id)); +} +module.exports.getOrder = getOrder; + + +function keyOrdersByUser (_userKey) { + return `${marshal(_userKey)}-orders`; +} + +function getOrdersByUser (userKey) { + const res = localStorage.getItem(keyOrdersByUser(userKey)); + if (!res) return []; + return JSON.parse(res); +} +module.exports.getOrdersByUser = getOrdersByUser; + +function addOrUpdateOrderByUser (userKey, order) { + const orders = getOrdersByUser(userKey); + const i = orders.findIndex(o => Number(o.orderId) === Number(order.orderId)); + + if (i < 0) { + orders.push(order); + } else { + orders.splice(i, 1, order); } - _setOrdersByAccount(account, JSON.stringify(orders)); + return localStorage.setItem(keyOrdersByUser(userKey), JSON.stringify(orders)); } +module.exports.addOrUpdateOrderByUser = addOrUpdateOrderByUser; -function updateOrder (order) { - let orders = getOrders(); + +function _setOrdersByAccount (_userKey, orders) { + const userKey = marshal(_userKey); + localStorage.setItem(`${userKey}-orders`, JSON.stringify(orders)); +} + + +function addOrderByAccount (_userKey, order) { + const userKey = marshal(_userKey); + const orders = getOrdersByUser(userKey); + + if (orders.findIndex(o => o.orderId === order.orderId) !== -1) { + orders.push(order); + _setOrdersByAccount(userKey, orders); + } +} +module.exports.addOrderByAccount = addOrderByAccount; + + +function updateOrderByAccount (_userKey, order) { + const userKey = marshal(_userKey); + + let orders = getOrdersByUser(userKey); if (!orders) { return; } else { @@ -183,34 +408,7 @@ function updateOrder (order) { } } - _setOrders(JSON.stringify(orders)); + _setOrdersByAccount(userKey, orders); } +module.exports.updateOrderByAccount = updateOrderByAccount; -function _setOrders (orders) { - localStorage.setItem('orders', orders); -} - -function _setOrdersByAccount (account, orders) { - localStorage.setItem(`${account}-orders`, orders); -} - -module.exports = { - localStorage, - getViewingKey, - getAccounts, - getNotes, - getTransferNotes, - getOrdersByAccount, - getOrder, - getOrders, - addAccount, - addNote, - addTransferNote, - addOrderByAccount, - addOrder, - setViewingKey, - updateNote, - updateOrderByAccount, - updateOrder, - deleteAccount, -}; diff --git a/vapp/router/accounts.js b/vapp/router/accounts.js index e380e59..39fbfa4 100644 --- a/vapp/router/accounts.js +++ b/vapp/router/accounts.js @@ -1,11 +1,18 @@ const express = require('express'); +const { + marshal, + unmarshal, +} = require('../../scripts/lib/util'); const asyncWrap = require('../lib/asyncWrap'); const { + localStorage: db, getAccounts, + getAccountByAddress, addAccount, deleteAccount, + getOrdersByUser, } = require('../localstorage'); const { @@ -15,32 +22,47 @@ const { const router = express.Router(); -router.get('/:key', asyncWrap( +router.get('/:userKey', asyncWrap( async function (req, res) { - const key = req.params.key; - const accounts = getAccounts(key); + const userKey = req.params.userKey; + const accounts = getAccounts(userKey); return res.status(200).json({ accounts, }); } )); -router.post('/', asyncWrap( +router.post('/:userKey', asyncWrap( async function (req, res) { + const userKey = req.params.userKey; const passphrase = req.body.passphrase; - const address = createAccount(passphrase); + const account = createAccount(passphrase); + addAccount(userKey, account); return res.status(200).json({ - address, + address: marshal(account.address), }); } )); -// TODO: params should be {passphrase, address} -router.post('/unlock', asyncWrap( +router.get('/:userKey/orders', asyncWrap( async function (req, res) { - const passphrase = req.body.passphrase; - const keystore = req.body.keystore; - const privateKey = unlockAccount(passphrase, keystore); + const userKey = req.params.userKey; + const orders = getOrdersByUser(userKey); + return res.status(200).json({ + orders, + }); + } +)); + +router.post('/unlock/:userKey', asyncWrap( + async function (req, res) { + const { + passphrase, + address, + } = req.body; + + const account = getAccountByAddress(unmarshal(address)); + const privateKey = unlockAccount(passphrase, account); return res.status(200).json({ privateKey, @@ -48,21 +70,25 @@ router.post('/unlock', asyncWrap( } )); -router.post('/import', asyncWrap( +// TODO: import account by userKey +router.post('/import/:userKey', asyncWrap( async function (req, res) { - const key = req.body.key; + const userKey = req.params.userKey; const account = req.body.account; - addAccount(key, account); + addAccount(userKey, account); return res.status(200).json({}); } )); -router.delete('/', asyncWrap( +// TODO: delete account by userKey +router.delete('/:userKey', asyncWrap( async function (req, res) { - const key = req.body.key; - const address = req.body.address; - deleteAccount(key, address); - return res.status(200).json({}); + const userKey = req.params.userKey; + const address = unmarshal(req.body.address); + deleteAccount(userKey, address); + return res.status(200).json({ + address: marshal(address), + }); } )); diff --git a/vapp/router/circuits.js b/vapp/router/circuits.js index d321445..49068e0 100644 --- a/vapp/router/circuits.js +++ b/vapp/router/circuits.js @@ -10,6 +10,10 @@ const { getSettleOrderProof, } = require('../../scripts/lib/dockerUtils'); +const { Note, createProof } = require('../../scripts/lib/Note'); + +const { TransferHistory, TransferHistoryState } = require('../localstorage'); + const router = express.Router(); const generators = { @@ -20,17 +24,46 @@ const generators = { settleOrder: getSettleOrderProof, }; -router.post('/', asyncWrap( +const dummyGenerators = { + mintNBurnNote: createProof.dummyProofCreateNote, + transferNote: createProof.dummyProofSpendNote, + makeOrder: createProof.dummyProofMakeOrder, + takeOrder: createProof.dummyProofTakeOrder, + settleOrder: createProof.dummyProofSettleOrder, +}; + +console.log('process.env.USE_DUMMY', process.env.USE_DUMMY); + +const useDummy = process.env.USE_DUMMY || false; + +router.post('/:circuit', asyncWrap( async function (req, res) { - const circuit = req.body.circuit; + const circuit = req.params.circuit; const params = req.body.params; - const generator = generators[circuit]; + // console.log('params', JSON.stringify(params)); + + const generator = useDummy + ? dummyGenerators[circuit] + : generators[circuit]; + if (!generator) { throw new Error('Unknown circuit ' + circuit); } const proof = await generator(...params); + + if (circuit === 'transferNote') { + const input = Note.fromJSON(params[0]); + const output1 = Note.fromJSON(params[1]); + const output2 = Note.fromJSON(params[2]); + + const history = TransferHistory.getHistory(input.hash()); + if (!history) { + (new TransferHistory(input, output1, output2)).setHistory(); + } + } + return res.status(200).json({ proof, }); diff --git a/vapp/router/index.js b/vapp/router/index.js new file mode 100644 index 0000000..eaf7044 --- /dev/null +++ b/vapp/router/index.js @@ -0,0 +1,11 @@ +const express = require('express'); + +module.exports = (router = new express.Router()) => { + router.use('/circuits', require('./circuits')); + router.use('/vk', require('./vk')); + router.use('/accounts', require('./accounts')); + router.use('/notes', require('./notes')); + router.use('/orders', require('./orders')); + + return router; +}; diff --git a/vapp/router/notes.js b/vapp/router/notes.js index 172bba2..08a58ed 100644 --- a/vapp/router/notes.js +++ b/vapp/router/notes.js @@ -8,54 +8,56 @@ const { addNote, addTransferNote, updateNote, + TransferHistory, } = require('../localstorage'); const router = express.Router(); -router.get('/:account', asyncWrap( +router.get('/:userKey', asyncWrap( async function (req, res) { - const account = req.params.account; - const notes = getNotes(account); + const userKey = req.params.userKey; + const notes = getNotes(userKey); return res.status(200).json({ notes, }); } )); -router.get('/transfer/:account', asyncWrap( +router.get('/:userKey/history', asyncWrap( async function (req, res) { - const account = req.params.account; - const notes = getTransferNotes(account); + const userKey = req.params.userKey; + const histories = TransferHistory.getHistoriesByUser(userKey); + return res.status(200).json({ - notes, + histories, }); } )); router.post('/', asyncWrap( async function (req, res) { - const account = req.body.account; + const userKey = req.body.userKey; const note = req.body.note; - addNote(account, note); + addNote(userKey, note); return res.status(200).json({}); } )); -router.post('/transfer', asyncWrap( +router.post('/transfer/:userKey', asyncWrap( async function (req, res) { - const account = req.body.account; + const userKey = req.params.userKey; const note = req.body.note; - addTransferNote(account, note); + addTransferNote(userKey, note); return res.status(200).json({}); } )); router.put('/', asyncWrap( async function (req, res) { - const account = req.body.account; + const userKey = req.body.userKey; const note = req.body.note; - updateNote(account, note); + updateNote(userKey, note); return res.status(200).json({}); } )); diff --git a/vapp/router/orders.js b/vapp/router/orders.js index 4485e02..2c4b6b4 100644 --- a/vapp/router/orders.js +++ b/vapp/router/orders.js @@ -5,7 +5,7 @@ const asyncWrap = require('../lib/asyncWrap'); const { getOrder, getOrders, - getOrdersByAccount, + getOrdersByUser, addOrder, addOrderByAccount, updateOrder, @@ -23,26 +23,6 @@ router.get('/', asyncWrap( } )); -router.get('/:id', asyncWrap( - async function (req, res) { - const id = req.params.id; - const order = getOrder(id); - return res.status(200).json({ - order, - }); - } -)); - -router.get('/:account', asyncWrap( - async function (req, res) { - const account = req.params.account; - const orders = getOrdersByAccount(account); - return res.status(200).json({ - orders, - }); - } -)); - router.post('/', asyncWrap( async function (req, res) { const order = req.body.order; @@ -51,22 +31,13 @@ router.post('/', asyncWrap( } )); -router.post('/:account', asyncWrap( - async function (req, res) { - const account = req.params.account; - const order = req.body.order; - addOrderByAccount(account, order); - return res.status(200).json({}); - } -)); - - -router.put('/:account', asyncWrap( +router.get('/:id', asyncWrap( async function (req, res) { - const account = req.params.account; - const order = req.body.order; - updateOrderByAccount(account, order); - return res.status(200).json({}); + const id = req.params.id; + const order = getOrder(id); + return res.status(200).json({ + order, + }); } )); diff --git a/vapp/router/vk.js b/vapp/router/vk.js index 73d0639..10f76f7 100644 --- a/vapp/router/vk.js +++ b/vapp/router/vk.js @@ -3,29 +3,32 @@ const express = require('express'); const asyncWrap = require('../lib/asyncWrap'); const { - getViewingKey, - setViewingKey, + getViewingKeys, + addViewingKeys, + addUserKey, } = require('../localstorage'); const router = express.Router(); -router.get('/:key', asyncWrap( +router.get('/:userKey', asyncWrap( async function (req, res) { - const key = req.params.key; - const vk = getViewingKey(key); - + const userKey = req.params.userKey; + const vks = getViewingKeys(userKey); return res.status(200).json({ - vk, + vks, }); } )); -router.post('/', asyncWrap( +router.post('/:userKey', asyncWrap( async function (req, res) { - const key = req.body.key; + const userKey = req.params.userKey; const vk = req.body.vk; - setViewingKey(key, vk); - return res.status(200).json({}); + const vks = addViewingKeys(userKey, vk); + addUserKey(userKey); + return res.status(200).json({ + vks, + }); } )); From ebd7e69f72fcb5f8cbba4774d5b315b0755d9ac8 Mon Sep 17 00:00:00 2001 From: 4000D Date: Fri, 30 Aug 2019 12:47:22 +0900 Subject: [PATCH 06/30] vapp: add vapp api server test --- vapp/app.test.js | 733 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 733 insertions(+) create mode 100644 vapp/app.test.js diff --git a/vapp/app.test.js b/vapp/app.test.js new file mode 100644 index 0000000..d86cd0f --- /dev/null +++ b/vapp/app.test.js @@ -0,0 +1,733 @@ +const express = require('express'); +const bodyParser = require('body-parser'); +const keythereum = require('keythereum'); +const { range } = require('lodash'); +const Contract = require('truffle-contract'); +const rlp = require('rlp'); + +const moxios = require('moxios'); +const request = require('supertest'); +const Web3 = require('web3'); +const web3Utils = require('web3-utils'); + +const router = require('./router'); +const { initialized } = require('../scripts/lib/dockerUtils'); +const { constants, Note } = require('../scripts/lib/Note'); +const { marshal, unmarshal } = require('../scripts/lib/util'); +const { ZkDexService } = require('./zkdex-service'); +const db = require('./localstorage'); + +const PROVIDER_URL = 'ws://localhost:8545'; +const web3 = new Web3(PROVIDER_URL); + +const ZkDex = Contract(require('../build/contracts/ZkDex.json')); +const Dai = Contract(require('../build/contracts/MockDai.json')); + +ZkDex.setProvider(web3.currentProvider); +Dai.setProvider(web3.currentProvider); + +const { BN, toBN, padRight } = web3Utils; + +process.env.USE_DUMMY = true; +console.log('process.env.USE_DUMMY', process.env.USE_DUMMY); + +const initApp = async () => { + const app = express(); + app.use(bodyParser.json()); + app.use(bodyParser.urlencoded({ extended: true })); + // app.use(router()); + router(app); + app.use(function (err, req, res, next) { + console.error(err.stack); + console.error('error', err.message); + res.status(400).json({ + message: err.message, + }); + }); + + const zkdexService = new ZkDexService(); + await zkdexService.init(PROVIDER_URL); + + return { app, zkdexService }; +}; + +const pks = range(10) + .map(() => keythereum.create({ keyBytes: 32, ivBytes: 16 })) + .map(({ privateKey }) => privateKey.toString('hex')); + +const ether = n => web3Utils.toBN(n).mul(web3Utils.toBN(1e18.toString(10))); + +describe('Vapp API Router', () => { + // contract instances + let zkdex; + let dai; + + // express app + let app; + + let zkdexService; + + const userKey = web3Utils.randomHex(16); + + const vk = web3Utils.randomHex(16); + + const key = pks[0]; + const passphrase = 'test-passphrase'; + + const zkdexAddresses = []; + let zkdexAccounts; + + let ethAccounts; + + beforeAll(async () => { + const res = await initApp(); + app = res.app; + zkdexService = res.zkdexService; + + await initialized(); + moxios.install(); + + ethAccounts = await web3.eth.getAccounts(); + zkdex = await ZkDex.deployed(); + dai = await Dai.deployed(); + + await Promise.all(ethAccounts.map(a => dai.mint({ from: a }))); + await Promise.all(ethAccounts.map(a => + dai.approve(zkdex.address, ether(10000), { + from: a, + })) + ); + }); + + afterAll(() => { + moxios.uninstall(); + zkdexService.close(); + }); + + describe('Without Circuit', () => { + describe('/vk', () => { + test('it should create new vk', () => request(app) + .post(`/vk/${userKey}`) + .send({ vk }) + .expect(200)); + + test('it should get vk', () => request(app) + .get(`/vk/${userKey}`) + .expect(200, { vks: [vk] })); + }); + + describe('/accounts', () => { + test('it should create new account', done => request(app) + .post(`/accounts/${userKey}`) + .send({ passphrase }) + .end((err, res) => { + if (err) return done(err); + expect(res.status).toEqual(200); + zkdexAddresses.push(res.body.address); + done(); + })); + + test('it should create second account', done => request(app) + .post(`/accounts/${userKey}`) + .send({ passphrase }) + .end((err, res) => { + if (err) return done(err); + expect(res.status).toEqual(200); + zkdexAddresses.push(res.body.address); + done(); + })); + + test('it should fetch 2 accounts', done => request(app) + .get(`/accounts/${userKey}`) + .send({ passphrase }) + .end((err, res) => { + if (err) return done(err); + expect(res.status).toEqual(200); + expect(res.body.accounts).toEqual(db.getAccounts(userKey)); + expect(res.body.accounts.length).toEqual(2); + zkdexAccounts = res.body.accounts; + done(); + })); + + test('it should delete account', (done) => { + const address = zkdexAddresses[0]; + return request(app) + .delete(`/accounts/${userKey}`) + .send({ address }) + .end((err, res) => { + if (err) return done(err); + expect(res.status).toEqual(200); + expect(res.body.address).toEqual(address); + zkdexAddresses.shift(0); + zkdexAccounts = db.getAccounts(userKey); + done(); + }); + }); + + test('it should delete account', (done) => { + const address = zkdexAddresses[0]; + return request(app) + .delete(`/accounts/${userKey}`) + .send({ address }) + .end((err, res) => { + if (err) return done(err); + + expect(res.status).toEqual(200); + expect(res.body.address).toEqual(address); + zkdexAddresses.shift(0); + zkdexAccounts = db.getAccounts(vk); + done(); + }); + }); + + test('it should fetch empty accounts', done => request(app) + .get(`/accounts/${userKey}`) + .send({ passphrase }) + .end((err, res) => { + if (err) return done(err); + expect(res.status).toEqual(200); + expect(res.body.accounts).toEqual([]); + done(); + })); + + test('it should create new account again', done => request(app) + .post(`/accounts/${userKey}`) + .send({ passphrase }) + .end((err, res) => { + if (err) return done(err); + expect(res.status).toEqual(200); + zkdexAddresses.push(res.body.address); + done(); + })); + + test('it should create new account again', done => request(app) + .post(`/accounts/${userKey}`) + .send({ passphrase }) + .end((err, res) => { + if (err) return done(err); + expect(res.status).toEqual(200); + zkdexAddresses.push(res.body.address); + done(); + })); + + test('it should fetch 2 accounts', done => request(app) + .get(`/accounts/${userKey}`) + .send({ passphrase }) + .end((err, res) => { + if (err) return done(err); + expect(res.status).toEqual(200); + expect(res.body.accounts).toEqual(db.getAccounts(userKey)); + expect(res.body.accounts.length).toEqual(2); + zkdexAccounts = res.body.accounts; + done(); + })); + + // TODO: import, unlock + }); + }); + + + describe('With Circuit', () => { + const TIMEOUT = process.env.USE_DUMMY ? 10000 : 360000; // 1 hour + const makerUserKey = web3Utils.randomHex(16); + const takerUserKey = web3Utils.randomHex(16); + const makerVk = web3Utils.randomHex(16); + const takerVk = web3Utils.randomHex(16); + + let makerZkAddress; + let takerZkAddress; + + + // make note + let daiNote; + let ethNote; + const daiAmount = ether('20'); + const ethAmount = ether('100'); + + // spend note + let daiNote0; // maker note + let daiNote1; // taker note + const spendDaiNoteAmount = daiAmount.div(toBN('2')); + + // over payment order + const price = toBN('2'); + const stakeEthAmount = ethAmount; + const rewardDaiAmount = spendDaiNoteAmount; + const paymentEthAmount = spendDaiNoteAmount.mul(price); + const changeEthAmount = stakeEthAmount.sub(paymentEthAmount); + let changeNoteOwner; + + let makerNote; + let takerNote; + + let stakeNote; + + let orderId; + let order; + + + beforeAll(async () => { + let res; + + // register maker / taker vk + await request(app) + .post(`/vk/${makerUserKey}`) + .send({ vk: makerVk }).expect(200); + + await request(app) + .post(`/vk/${takerUserKey}`) + .send({ vk: takerVk }).expect(200); + + // create account for maker and taker + res = await request(app) + .post(`/accounts/${makerUserKey}`) + .send({ passphrase }) + .expect(200); + makerZkAddress = res.body.address; + + res = await request(app) + .post(`/accounts/${takerUserKey}`) + .send({ passphrase }) + .expect(200); + takerZkAddress = res.body.address; + + + console.log(` + makerVk: ${makerVk} + takerVk: ${takerVk} + + makerUserKey: ${makerUserKey} + takerUserKey: ${takerUserKey} + + makerZkAddress: ${makerZkAddress} + takerZkAddress: ${takerZkAddress} + `); + }); + + // helper functions + async function getProof (url, params) { + console.log('get proof', url); + const res = await request(app) + .post(url) + .send({ params }) + .expect(200); + return res.body.proof; + } + + function waitNotes (notes, checkHash = true) { + let cnt = 0; + const len = notes.length; + + return new Promise((resolve, reject) => { + zkdexService.on('note', function (err, decryptedNote) { + cnt++; + + if (cnt === len) { + this.removeAllListeners(); + } + + const note = notes.shift(); + + if (err) return reject(err); + + // console.error(` + // expected note: ${note.toString()} + // decrypted note: ${decryptedNote.toString()} + // `); + + + if (checkHash && (note.hash() !== decryptedNote.hash())) { + return reject(new Error('decrypted hash mismatach')); + } + + if (cnt === len) { + resolve(); + } + }); + + wait(15 * len).then(() => { + if (cnt !== len) reject(new Error(`ZkDex service did not received Note#${notes[0].hash()}`)); + }).catch(reject); + }); + } + + function waitOrder (orderId, e = 'order') { + orderId = toBN(orderId).toNumber(); + let resolved = false; + return new Promise((resolve, reject) => { + zkdexService.on(e, function (order) { + if (order.orderId === orderId) { + this.removeAllListeners(); + resolved = true; + resolve(order); + } + }); + + wait(15).then(() => { + if (!resolved) reject(new Error(`ZkDex service did not received Order#${orderId}`)); + }).catch(reject); + }); + } + + async function createNote (owner, tokenType, value, from) { + const note = new Note(owner, value, tokenType, '0x00', getSalt(), false); + const proof = await getProof('/circuits/mintNBurnNote', [note]); + + const prom = waitNotes([note]); + + await zkdex.mint(...proof, note.encrypt(owner), { + from, + value: tokenType === constants.ETH_TOKEN_TYPE ? value : 0, + }); + + await prom; + + return note; + } + + describe('/notes', () => { + test('it should create a DAI note', async () => { + daiNote = await createNote(makerZkAddress, constants.DAI_TOKEN_TYPE, daiAmount, ethAccounts[0]); + }, TIMEOUT); + + test('it should fetch maker\'s DAI note', done => request(app) + .get(`/notes/${makerUserKey}`) + .end((err, res) => { + if (err) return done(err); + expect(res.status).toEqual(200); + expect(res.body.notes.length).toEqual(1); + expect(Note.hashFromJSON(res.body.notes[0])).toEqual(daiNote.hash()); + done(); + })); + + test('it should create a ETH note', async () => { + ethNote = await createNote(takerZkAddress, constants.ETH_TOKEN_TYPE, ethAmount, ethAccounts[1]); + }, TIMEOUT); + + test('it should fetch taker\'s ETH notes', done => request(app) + .get(`/notes/${takerUserKey}`) + .end((err, res) => { + if (err) return done(err); + expect(res.status).toEqual(200); + expect(res.body.notes.length).toEqual(1); + expect(Note.hashFromJSON(res.body.notes[0])).toEqual(ethNote.hash()); + done(); + })); + + test('it should spend a DAI note', async () => { + daiNote0 = new Note(makerZkAddress, spendDaiNoteAmount, constants.DAI_TOKEN_TYPE, '0x00', getSalt(), false); + daiNote1 = new Note(makerZkAddress, spendDaiNoteAmount, constants.DAI_TOKEN_TYPE, '0x00', getSalt(), false); + + const proof = await getProof('/circuits/transferNote', [ + daiNote, + daiNote0, + daiNote1, + null, + ]); + + await zkdex.spend( + ...proof, + daiNote0.encrypt(daiNote0.owner), + daiNote1.encrypt(daiNote1.owner), + { + from: ethAccounts[0], + } + ); + + await waitNotes([daiNote0, daiNote1]); + }, TIMEOUT); + + test('it should fetch maker\'s 3 notes', done => request(app) + .get(`/notes/${makerUserKey}`) + .end((err, res) => { + if (err) return done(err); + expect(res.status).toEqual(200); + expect(res.body.notes.length).toEqual(3); + expect(Note.hashFromJSON(res.body.notes[0])).toEqual(daiNote.hash()); + expect(Note.hashFromJSON(res.body.notes[1])).toEqual(daiNote0.hash()); + expect(Note.hashFromJSON(res.body.notes[2])).toEqual(daiNote1.hash()); + done(); + })); + + // conflict with make order? + test('it should fetch maker\'s transfer history', done => request(app) + .get(`/notes/${makerUserKey}/history`) + .end((err, res) => { + if (err) return done(err); + expect(res.status).toEqual(200); + expect(res.body.histories.length).toEqual(1); + + const histories = res.body.histories; + + expect(Note.hashFromJSON(histories[0].input)).toEqual(daiNote.hash()); + expect(Note.hashFromJSON(histories[0].output1)).toEqual(daiNote0.hash()); + expect(Note.hashFromJSON(histories[0].output2)).toEqual(daiNote1.hash()); + done(); + })); + }); + + describe('/orders', () => { + beforeAll(() => { + makerNote = daiNote0; + takerNote = ethNote; + + stakeNote = new Note(makerNote.hash(), stakeEthAmount, constants.ETH_TOKEN_TYPE, takerVk, getSalt(), true); + changeNoteOwner = takerNote.hash(); + }); + + describe('Make Order', () => { + test('it should make a new order#0', async () => { + const proof = await getProof('/circuits/makeOrder', [makerNote]); + + orderId = Number(await zkdex.getOrderCount()); + + await zkdex.makeOrder( + makerVk, + constants.ETH_TOKEN_TYPE, + price, + ...proof, + { + from: ethAccounts[0], + } + ); + order = await waitOrder(orderId, 'order:created'); + }, TIMEOUT); + + test('it should fetch all orders', done => request(app) + .get('/orders') + .expect(200) + .end((err, res) => { + if (err) return done(err); + order = res.body.orders.pop(); + expect(order).not.toBeUndefined(); + expect(order.makerViewingKey).toEqual(padRight(makerVk, 64)); + expect(order.makerNote).toEqual(makerNote.hash()); + + done(); + }) + ); + + test('it should fetch new order by id', done => request(app) + .get(`/orders/${orderId}`) + .expect(200) + .end((err, res) => { + if (err) return done(err); + expect(res.body.order).not.toBeUndefined(); + expect(res.body.order.makerViewingKey).toEqual(padRight(makerVk, 64)); + expect(res.body.order.makerNote).toEqual(makerNote.hash()); + order = res.body.order; + + done(); + }) + ); + + test('it should fetch orders by maker', done => request(app) + .get(`/accounts/${makerUserKey}/orders`) + .expect(200) + .end((err, res) => { + if (err) return done(err); + expect(res.body.orders.length).toEqual(1); + order = res.body.orders.pop(); + expect(order).not.toBeUndefined(); + expect(order.orderId).toEqual(orderId); + + // maker info + expect(order.makerInfo.makerUserKey).toEqual(makerUserKey); + expect(Note.hashFromJSON(order.makerInfo.makerNote)).toEqual(makerNote.hash()); + + done(); + }) + ); + }); + + describe('Take Order', () => { + test('it should take order', async () => { + const proof = await getProof('/circuits/takeOrder', [ + order.makerNote, + takerNote, + stakeNote, + ]); + + await zkdex.takeOrder( + orderId, + ...proof, + stakeNote.encrypt(makerVk), + { + from: ethAccounts[0], + } + ); + + order = await waitOrder(orderId, 'order:taken'); + }, TIMEOUT); + + test('make should have new vk', done => request(app) + .get(`/vk/${makerUserKey}`) + .expect(200) + .end((err, res) => { + if (err) return done(err); + const vks = res.body.vks; + const i = vks.indexOf(makerVk); + const newVk = vks[i + 1]; + expect(newVk).not.toBeUndefined(); + done(); + }) + ); + + test('it should fetch orders by taker', done => request(app) + .get(`/accounts/${takerUserKey}/orders`) + .expect(200) + .end((err, res) => { + if (err) return done(err); + expect(res.body.orders.length).toEqual(1); + order = res.body.orders.pop(); + expect(order).not.toBeUndefined(); + expect(order.orderId).toEqual(orderId); + + // maker info + expect(order.takerInfo.takerUserKey).toEqual(takerUserKey); + expect(Note.hashFromJSON(order.takerInfo.takerNote)).toEqual(takerNote.hash()); + + done(); + }) + ); + + test('it should fetch orders by maker', done => request(app) + .get(`/accounts/${makerUserKey}/orders`) + .expect(200) + .end((err, res) => { + if (err) return done(err); + + expect(res.body.orders.length).toEqual(1); + order = res.body.orders.pop(); + expect(order).not.toBeUndefined(); + expect(order.orderId).toEqual(orderId); + expect(order.taken).toEqual(true); + + // maker info + expect(order.makerInfo.makerUserKey).toEqual(makerUserKey); + expect(Note.hashFromJSON(order.makerInfo.stakeNote)).toEqual(stakeNote.hash()); + + // notes used to settle + expect(web3Utils.hexToNumberString(order.makerInfo.rewardNote.value)) + .toEqual(web3Utils.hexToNumberString(rewardDaiAmount)); + expect(web3Utils.hexToNumberString(order.makerInfo.paymentNote.value)) + .toEqual(web3Utils.hexToNumberString(paymentEthAmount)); + expect(web3Utils.hexToNumberString(order.makerInfo.changeNote.value)) + .toEqual(web3Utils.hexToNumberString(changeEthAmount)); + + expect(order.makerInfo.changeNote.owner).toEqual(changeNoteOwner); + + done(); + }) + ); + }); + + + describe('Settle Order', () => { + test('should settle order', async () => { + console.log(JSON.stringify(order, null, 2)); + + const proof = await getProof('/circuits/settleOrder', [ + order.makerInfo.makerNote, + order.parentNote, + order.makerInfo.stakeNote, + order.makerInfo.rewardNote, + order.makerInfo.paymentNote, + order.makerInfo.changeNote, + price, + ]); + + // console.error(`settleorder proof length: ${proof.length}`); + + await zkdex.settleOrder( + orderId, + ...proof, + rlp.encode([ + Note.fromJSON(order.makerInfo.rewardNote).encrypt(order.makerInfo.rewardNoteEncKey), + Note.fromJSON(order.makerInfo.paymentNote).encrypt(order.makerInfo.paymentNoteEncKey), + Note.fromJSON(order.makerInfo.changeNote).encrypt(order.makerInfo.changeNoteEncKey), + ]), + { + from: ethAccounts[0], + } + ); + + order = await waitOrder(orderId, 'order:settled'); + }, TIMEOUT); + + test('should fetch order by id', done => request(app) + .get(`/orders/${orderId}`) + .expect(200) + .end((err, res) => { + if (err) return done(err); + expect(res.body.order.settled).toEqual(true); + expect(res.body.order.taken).toEqual(true); + done(); + }), TIMEOUT); + }); + + + // test('should fetch creaetd order',); + }); + }); + + + // describe('/accounts', () => { + // test('it should create new account', async () => { + // key = pks[0]; + + // const res = await request(app).post('/accounts') + // .send({ key }); + + // if (res.status !== 200) { + // console.log(res.text); + // } + + // expect(res.status).toEqual(200); + // }); + // }); + + // test('it should fetch empty accounts list', async () => { + // moxios.stubRequest('/accounts', { + // status: 200, + // response: { + // accounts: [], + // }, + // }); + + + // const res = await request(app).get('/accounts'); + // expect(res.status).toEqual(200); + // }); + // }); +}); + +function getSalt () { + return web3Utils.randomHex(16); +} + +async function waitBlock (n) { + n = web3Utils.toBN(n); + const bn1 = await web3.eth.getBlockNumber(); + const expected = bn1 + n; + + return new Promise(async (resolve) => { + const f = () => setTimeout(async () => { + const bn2 = await web3.eth.getBlockNumber(); + + if (bn2 < expected) { + return f(); + } + resolve(); + }, 500); + + f(); + }); +} + +function wait (t) { + const sec = t * 1000; + return new Promise((resolve) => { + setTimeout(resolve, sec); + }); +} From cf397bb16270bd0a5120a8589ea63c8fc5c4c1f4 Mon Sep 17 00:00:00 2001 From: 4000D Date: Fri, 30 Aug 2019 12:47:41 +0900 Subject: [PATCH 07/30] vapp: add zkdex-service to handle ZkDex events --- vapp/zkdex-service.js | 396 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 396 insertions(+) create mode 100644 vapp/zkdex-service.js diff --git a/vapp/zkdex-service.js b/vapp/zkdex-service.js new file mode 100644 index 0000000..de7a1d3 --- /dev/null +++ b/vapp/zkdex-service.js @@ -0,0 +1,396 @@ +const EventEmitter = require('events'); +const Web3 = require('web3'); +const { toHex, toBN, hexToNumberString, randomHex } = require('web3-utils'); +const { throttle } = require('lodash'); +const PQ = require('async/priorityQueue'); + +const db = require('./localstorage'); +const ZkDex = require('truffle-contract')(require('../build/contracts/ZkDex.json')); +const { + marshal, + unmarshal, +} = require('../scripts/lib/util'); +const { + constants, + Note, + DecryptError, + NoteState, + decrypt, +} = require('../scripts/lib/Note'); + +const { TransferHistory, TransferHistoryState } = db; + +const targetEvents = [ + 'NoteStateChange', + 'OrderTaken', + 'OrderSettled', +]; + +const PRIORITY_FETCH_ORDER = 1; +const PRIORITY_NOTE_STATE_CHANGE = 3; +const PRIORITY_ORDER_TAKEN = 4; +const PRIORITY_ORDER_SETTLED = 4; + +class ZkDexService extends EventEmitter { + async init (providerUrl, zkdexAddress = '') { + this._fetchOrders = throttle(this._fetchOrders.bind(this), 500); + + this.web3 = new Web3(providerUrl); + ZkDex.setProvider(this.web3.currentProvider); + if (!zkdexAddress) { + this.zkdex = await ZkDex.deployed(); + } else { + this.zkdex = await ZkDex.at(zkdexAddress); + } + + console.log('ZkDex is deployed at', this.zkdex.address); + + // get event handlers + const getHandlerName = e => `_handle${e}`; + this._handlers = { + + }; + for (const eventName of targetEvents) { + this._handlers[eventName] = this[getHandlerName(eventName)].bind(this); + } + + this.queue = PQ(async (data) => { + if (data === this._fetchOrders) return this._fetchOrders(); + + console.log(`event ${data.event} fired`); + + this[getHandlerName(data.event)](data); + }); + + // initialize queue + this._fetchOrders(); + + this.emitters = {}; + this._listen(); + } + + close () { + this.closed = true; + + for (const emitter of this.emitters) { + emitter.removeAllListeners(); + } + + this.removeAllListeners(); + } + + _listen () { + const NoteStateChange = this.zkdex.NoteStateChange(); + const OrderTaken = this.zkdex.OrderTaken(); + const OrderSettled = this.zkdex.OrderSettled(); + + const self = this; + + // TOOD: handle when event is removed + NoteStateChange.on('data', function (data) { + self.emitters.NoteStateChange = this; + self.queue.push(data, PRIORITY_NOTE_STATE_CHANGE); + }); + + OrderTaken.on('data', async function (data) { + self.emitters.OrderTaken = this; + await wait(5); + self.queue.push(data, PRIORITY_ORDER_TAKEN); + }); + + OrderSettled.on('data', async function (data) { + self.emitters.OrderSettled = this; + await wait(5); + self.queue.push(data, PRIORITY_ORDER_SETTLED); + }); + } + + async _handleNoteStateChange (data) { + const { note: noteHash, state } = data.args; + const isSpent = state.cmp(NoteState.Spent) === 0; + + console.log(`[Note#${noteHash}] ${NoteState.toString(state)} isSpent(${isSpent})`); + + + const userKeys = db.getUserKeys(); + let found = false; + // console.log('userKeys', userKeys); + + for (const userKey of userKeys) { + if (found) return; + + const note = db.getNoteByHash(userKey, noteHash); + // console.warn(`getNoteByHash User${userKey} Note${noteHash}`); + + if (note) { + found = true; + + // console.error('NOTE STATE, ', state); + // console.error(`[Note#${noteHash}] ${NoteState.toString(state)} isSpent(${isSpent})`); + // console.error('isSpent', isSpent); + + if (isSpent) { + // send history + const history = TransferHistory.getHistory(noteHash); + // console.error(`history: ${history && history.toString()}`); + + if (history && history.state === TransferHistoryState.Init) { + const timestamp = await this.web3.eth.getBlock(data.blockNumber); + history.setState(TransferHistoryState.Transferred, timestamp); + history.addHistoryByUser(userKey); + } + } + } + + const encryptedNote = await this.zkdex.encryptedNotes(noteHash); + + // short circuit for unknown encrypted note + if (!encryptedNote) return; + + let decryptedNote; + const f = (v) => { + if (found) return; + try { + decryptedNote = decrypt(encryptedNote, v); + + // ignore invalid decryption + if (!decryptedNote) return; + + if (db.addNote(userKey, decryptedNote)) { + console.log(`[User ${userKey}] has Note#${noteHash} isSmart${decryptedNote.isSmart}`); + this.emit('note', null, decryptedNote); + } + } catch (e) { + if (e instanceof DecryptError) { + return; + } + throw e; + } + found = true; + }; + + const vks = db.getViewingKeys(userKey); + // console.log('decrypt with view keys', vks); + vks.forEach(f); + + if (found) return; + + const accounts = db.getAccounts(userKey); + // console.log('decrypt with view address', accounts.map(({ address }) => address)); + accounts.map(({ address }) => address).forEach(f); + } + + if (!found) this.emit('note', new Error(`Note#${noteHash} cannot be decrypted`), null); + } + + async _handleOrderTaken (data) { + const { + orderId, + takerNoteToMaker: stakeNoteHash, + parentNote: takerNoteHash, + takenAt, + } = data.args; + + const order = db.getOrder(orderId); + if (!order) { + console.error('Failed to get order!'); + return; + } + + order.takerNoteToMaker = stakeNoteHash; + order.parentNote = takerNoteHash; + order.takenAt = takenAt; + + const userKeys = db.getUserKeys(); + + // TODO: takerInfo and makerInfo should be separated with order data. + for (const userKey of userKeys) { + // for taker + const takerNote = db.getNoteByHash(userKey, takerNoteHash); + if (takerNote) { + // console.error('_handleOrderTaken - taker'); + order.takerInfo = { + takerUserKey: userKey, + takerNote: takerNote, + }; + + order.taken = true; + db.addOrUpdateOrderByUser(userKey, order); + db.updateOrder(order); + } + + // for maker + const stakeNote = db.getNoteByHash(userKey, stakeNoteHash); + if (stakeNote) { + if (!order.makerInfo) { + throw new Error('order.makerInfo is not instantiated'); + } + + order.makerInfo.stakeNote = stakeNote; + + const makerNote = Note.fromJSON(order.makerInfo.makerNote); + order.makerInfo.takerViewingKey = stakeNote.viewingKey; + + const newMakerVk = randomHex(20); + db.addViewingKeys(userKey, newMakerVk); + + // calculate change note + const makerAmount = toBN(makerNote.value); + const stakeAmount = toBN(stakeNote.value); + const price = toBN(order.price); + + const maxTakerAmount = makerAmount.mul(price); + const isOverPayment = maxTakerAmount.cmp(stakeAmount) < 0; + + let rewardAmount; // source token amount to taker + let paymentAmount; // target token amount to maker + let changeAmount; // source token amount to maker or target token amount to taker + + let changeNoteOwner; + let changeTokenType; + let changeNoteEncKey; + + if (!isOverPayment) { + rewardAmount = stakeAmount.div(price); + paymentAmount = stakeAmount; + changeAmount = makerAmount.sub(rewardAmount); + + changeNoteOwner = order.makerNote; + changeTokenType = makerNote.token; + changeNoteEncKey = newMakerVk; + } else { + rewardAmount = makerAmount; + paymentAmount = makerAmount.mul(price); + changeAmount = stakeAmount.sub(paymentAmount); + + changeNoteOwner = takerNoteHash; + changeTokenType = stakeNote.token; + changeNoteEncKey = order.makerInfo.takerViewingKey; + } + + order.makerInfo.rewardNote = new Note(takerNoteHash, rewardAmount, order.sourceToken, '0x00', getSalt(), true); + order.makerInfo.paymentNote = new Note(makerNote.hash(), paymentAmount, order.targetToken, '0x00', getSalt(), true); + order.makerInfo.changeNote = new Note(changeNoteOwner, changeAmount, changeTokenType, changeNoteEncKey, getSalt(), true); + + order.makerInfo.rewardNoteEncKey = order.makerInfo.takerViewingKey; + order.makerInfo.paymentNoteEncKey = newMakerVk; + order.makerInfo.changeNoteEncKey = changeNoteEncKey; + + order.taken = true; + + db.addOrUpdateOrderByUser(userKey, order); + db.updateOrder(order); + this.emit('order:taken', order); + } + } + } + async _handleOrderSettled (data) { + const { + orderId, + rewardNote: rewardNoteHash, + paymentNote: paymentNoteHash, + changeNote: changeNoteHash, + settledAt, + } = data.args; + + const order = db.getOrder(orderId); + if (!order) { + throw new Error(`failed to read Order#${orderId}`); + } + + order.rewardNote = rewardNoteHash; + order.paymentNote = paymentNoteHash; + order.changeNote = changeNoteHash; + order.settledAt = settledAt; + order.settled = true; + + db.updateOrder(order); + + if (order.takerInfo) { + const userKey = order.takerInfo.takerUserKey; + + order.takerInfo.rewardNote = db.getNoteByHash(userKey, rewardNoteHash); + order.takerInfo.changeNote = db.getNoteByHash(userKey, changeNoteHash); + + db.addOrUpdateOrderByUser(userKey, order); + db.updateOrder(order); + } + + if (order.makerInfo) { + const userKey = order.makerInfo.makerUserKey; + + order.makerInfo.paymentNote = db.getNoteByHash(userKey, paymentNoteHash); + order.makerInfo.changeNote = db.getNoteByHash(userKey, changeNoteHash); + + db.addOrUpdateOrderByUser(userKey, order); + db.updateOrder(order); + } + + this.emit('order:settled', order); + } + + + async _fetchOrders () { + if (this.closed) return; + + this.queue.push(this._fetchOrders, PRIORITY_FETCH_ORDER); + + const numOrderContract = toBN(await this.zkdex.getOrderCount()).toNumber(); + const numOrderDB = db.getOrderCount().toNumber(); + + // console.error(` + // fetchOrder + // numOrderContract: ${numOrderContract} + // numOrderDB: ${numOrderDB} + // `); + + const userKeys = db.getUserKeys(); + + for (let i = numOrderDB; i < numOrderContract; i++) { + const order = await this.zkdex.orders(i); + console.log(`Order#${i} fetched`); + + order.sourceToken = hexToNumberString(toHex(order.sourceToken)); + order.targetToken = hexToNumberString(toHex(order.targetToken)); + order.state = hexToNumberString(toHex(order.state)); + order.orderId = i; + order.orderMaker = null; + order.type = 'Sell'; + order.amount = null; + + db.increaseOrderCount(); + await db.addOrder(order); + this.emit('order', order); + + for (const userKey of userKeys) { + // console.error('userKey, order.makerNote', userKey, order.makerNote); + const makerNote = db.getNoteByHash(userKey, order.makerNote); + if (makerNote) { + order.makerInfo = { + makerUserKey: userKey, + makerNote: makerNote, + }; + db.addOrUpdateOrderByUser(userKey, order); + db.updateOrder(order); + this.emit('order:created', order); + return; + } + } + } + } +} + +function getSalt () { + return randomHex(20); +} + +function wait (t) { + const sec = t * 1000; + return new Promise((resolve) => { + setTimeout(resolve, sec); + }); +} + +module.exports = { + ZkDexService, +}; From 7025b12ef55a2c625a76706743eb9928672ace09 Mon Sep 17 00:00:00 2001 From: 4000D Date: Fri, 30 Aug 2019 12:48:30 +0900 Subject: [PATCH 08/30] vapp/src: rename getOrdersByAccount to getOrdersByUser --- vapp/src/api/index.js | 4 ++-- vapp/src/components/OrderRequestMake.vue | 1 + vapp/src/views/ExchangePage.vue | 4 ++-- vapp/src/views/HistoryOrderPage.vue | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/vapp/src/api/index.js b/vapp/src/api/index.js index 3ce8f8d..a5d2d5a 100644 --- a/vapp/src/api/index.js +++ b/vapp/src/api/index.js @@ -29,7 +29,7 @@ async function getTransferNotes (account) { return JSON.parse(res.data.notes); } -async function getOrdersByAccount (account) { +async function getOrdersByUser (account) { const res = await instance.get(`/orders/${account}`); if (res.data === null) { return []; @@ -149,7 +149,7 @@ export { getNotes, getTransferNotes, getOrder, - getOrdersByAccount, + getOrdersByUser, getOrders, addAccount, unlockAccount, diff --git a/vapp/src/components/OrderRequestMake.vue b/vapp/src/components/OrderRequestMake.vue index 96741ed..b2ace20 100644 --- a/vapp/src/components/OrderRequestMake.vue +++ b/vapp/src/components/OrderRequestMake.vue @@ -125,6 +125,7 @@ export default { const orderId = (await this.dex.getOrderCount()) - 1; const order = await this.dex.orders(orderId); + order.orderId = orderId; order.sourceToken = Web3Utils.hexToNumberString(Web3Utils.toHex(order.sourceToken)); order.targetToken = Web3Utils.hexToNumberString(Web3Utils.toHex(order.targetToken)); order.state = Web3Utils.hexToNumberString(Web3Utils.toHex(order.state)); diff --git a/vapp/src/views/ExchangePage.vue b/vapp/src/views/ExchangePage.vue index dc0bfe9..9d3a0df 100644 --- a/vapp/src/views/ExchangePage.vue +++ b/vapp/src/views/ExchangePage.vue @@ -30,7 +30,7 @@ import OrderListHistory from '../components/OrderListHistory.vue'; import { getAccounts, getNotes, - getOrdersByAccount, + getOrdersByUser, getOrders, } from '../api/index'; @@ -99,7 +99,7 @@ export default { if (n != null) { notes.push(...n); } - const o = await getOrdersByAccount(accounts[i].address); + const o = await getOrdersByUser(accounts[i].address); if (o != null) { orders.push(...o); } diff --git a/vapp/src/views/HistoryOrderPage.vue b/vapp/src/views/HistoryOrderPage.vue index e45ac6b..ed1f3a3 100644 --- a/vapp/src/views/HistoryOrderPage.vue +++ b/vapp/src/views/HistoryOrderPage.vue @@ -10,7 +10,7 @@ import OrderListOngoing from '../components/OrderListOngoing.vue'; import OrderListHistory from '../components/OrderListHistory.vue'; import { mapState } from 'vuex'; -import { getAccounts, getOrdersByAccount } from '../api/index'; +import { getAccounts, getOrdersByUser } from '../api/index'; export default { components: { @@ -38,7 +38,7 @@ export default { if (accounts !== null) { const orders = []; for (let i = 0; i < accounts.length; i++) { - const o = await getOrdersByAccount(accounts[i].address); + const o = await getOrdersByUser(accounts[i].address); if (o != null) { orders.push(...o); } From c7ee2bf314654abcc60996c8bf27ada2184d48a8 Mon Sep 17 00:00:00 2001 From: 4000D Date: Fri, 30 Aug 2019 12:49:32 +0900 Subject: [PATCH 09/30] update truffle-contract --- package-lock.json | 1698 +++++++++++++++++++++++++++++---------------- package.json | 2 +- 2 files changed, 1108 insertions(+), 592 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5a65170..e4630d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,10 +24,25 @@ "js-tokens": "^4.0.0" } }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, "@types/node": { - "version": "10.14.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.13.tgz", - "integrity": "sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ==", + "version": "10.14.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.16.tgz", + "integrity": "sha512-/opXIbfn0P+VLt+N8DE4l8Mn8rbhiJgabU96ZJ0p9mxOkIks5gh6RUnpHak7Yh0SFkyjO/ODbxsQQPV2bpMmyA==", "dev": true }, "JSONStream": { @@ -328,9 +343,9 @@ } }, "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==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true }, "bcrypt-pbkdf": { @@ -378,15 +393,6 @@ "safe-buffer": "^5.1.1" } }, - "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.0" - } - }, "bluebird": { "version": "3.5.5", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", @@ -551,9 +557,9 @@ } }, "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.2.tgz", + "integrity": "sha512-iy9koArjAFCzGnx3ZvNA6Z0clIbbFgbdWQ0mKD3hO0krOrZh8UgA6qMKcZvwLJxS+D6iVR76+5/pV56yMNYTag==", "dev": true, "requires": { "base64-js": "^1.0.2", @@ -630,6 +636,48 @@ } } }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -794,6 +842,15 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -1014,6 +1071,16 @@ "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=", "dev": true }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -1154,6 +1221,12 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "defer-to-connect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz", + "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==", + "dev": true + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1512,11 +1585,43 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.50", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", + "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, "es6-promise": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=" }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1849,9 +1954,9 @@ } }, "ethers": { - "version": "4.0.33", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.33.tgz", - "integrity": "sha512-lAHkSPzBe0Vj+JrhmkEHLtUEKEheVktIjGDyE9gbzF4zf1vibjYgB57LraDHu4/ItqWVkztgsm8GWqcDMN+6vQ==", + "version": "4.0.36", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.36.tgz", + "integrity": "sha512-rWdchEhUyXx01GiwexH6Sha97CQ9tJdQwe6FtYKxShC7VEZV41nuKt+lzCQ4OqvQwZK5PcAKaAZv2GDsCH33SA==", "dev": true, "requires": { "@types/node": "^10.3.2", @@ -1955,9 +2060,9 @@ } }, "eventemitter3": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", - "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", "dev": true }, "evp_bytestokey": { @@ -2298,25 +2403,23 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "fs-promise": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz", - "integrity": "sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=", + "fs-minipass": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", "dev": true, "requires": { - "any-promise": "^1.3.0", - "fs-extra": "^2.0.0", - "mz": "^2.6.0", - "thenify-all": "^1.6.0" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -2786,18 +2889,6 @@ } } }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -2887,25 +2978,43 @@ "dev": true }, "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dev": true, "requires": { - "decompress-response": "^3.2.0", + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "graceful-fs": { @@ -3094,6 +3203,12 @@ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true }, + "http-cache-semantics": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", + "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==", + "dev": true + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -3532,6 +3647,12 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -3556,9 +3677,9 @@ "dev": true }, "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { "graceful-fs": "^4.1.6" @@ -3591,6 +3712,15 @@ "sha3": "^1.2.2" } }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -3843,6 +3973,33 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, + "minipass": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.4.0.tgz", + "integrity": "sha512-6PmOuSP4NnZXzs2z6rbwzLJu/c5gdzYg1mRI/WIYdx45iiX7T+a4esOzavD6V/KmBzAaopFSTZPZcUx73bqKWA==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "dev": true, + "requires": { + "minipass": "^2.2.1" + } + }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", @@ -3902,12 +4059,6 @@ "integrity": "sha512-w22rOL5ZYu6HbUehB5deurghGM0hS/xBVyHMGKOuQctkk93J9z9VEOhDsiWrXOprVNQpP9uzGKdl8v9mFspKuw==", "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", @@ -3919,17 +4070,6 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "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.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", @@ -3988,6 +4128,12 @@ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -4093,6 +4239,12 @@ "remove-trailing-separator": "^1.0.1" } }, + "normalize-url": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz", + "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==", + "dev": true + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -4237,9 +4389,9 @@ } }, "oboe": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.3.tgz", - "integrity": "sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", + "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", "dev": true, "requires": { "http-https": "^1.0.0" @@ -4346,9 +4498,9 @@ "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, "p-finally": { @@ -4565,9 +4717,9 @@ "dev": true }, "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, "preserve": { @@ -5158,6 +5310,15 @@ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -5262,39 +5423,17 @@ "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.0.8" - } - }, "scrypt-js": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", "dev": true }, - "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.2", - "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.3" - } + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz", + "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==", + "dev": true }, "secp256k1": { "version": "3.7.1", @@ -5977,31 +6116,73 @@ } }, "swarm-js": { - "version": "0.1.37", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.37.tgz", - "integrity": "sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==", + "version": "0.1.39", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", + "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", "dev": true, "requires": { "bluebird": "^3.5.0", "buffer": "^5.0.5", "decompress": "^4.0.0", "eth-lib": "^0.1.26", - "fs-extra": "^2.1.2", - "fs-promise": "^2.0.0", + "fs-extra": "^4.0.2", "got": "^7.1.0", "mime-types": "^2.1.16", "mkdirp-promise": "^5.0.1", "mock-fs": "^4.1.0", "setimmediate": "^1.0.5", - "tar.gz": "^1.0.5", + "tar": "^4.0.2", "xhr-request-promise": "^0.1.2" }, "dependencies": { + "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.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + } + }, + "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 + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "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.1" + } } } }, @@ -6076,14 +6257,26 @@ } }, "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", + "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", "dev": true, "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } } }, "tar-fs": { @@ -6111,50 +6304,11 @@ "xtend": "^4.0.0" } }, - "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.9.34", - "commander": "^2.8.1", - "fstream": "^1.0.8", - "mout": "^0.11.0", - "tar": "^2.1.1" - }, - "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - } - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, - "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.0.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.1.0 < 4" - } - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -6188,6 +6342,12 @@ "kind-of": "^3.0.2" } }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", @@ -6312,56 +6472,82 @@ "dev": true }, "truffle-contract": { - "version": "4.0.25", - "resolved": "https://registry.npmjs.org/truffle-contract/-/truffle-contract-4.0.25.tgz", - "integrity": "sha512-ngy+ljTCSs/Arv4/9xUjq6mBdAHvQjFvJGqMcBDoNZSXUdvuW4qmX9gu/cOFEt2hdsBcpt0sx7DrXGlY4O97ww==", + "version": "4.0.30", + "resolved": "https://registry.npmjs.org/truffle-contract/-/truffle-contract-4.0.30.tgz", + "integrity": "sha512-kQDqqhT6IPu1Vj111PzQvQ3xQiXx//cwFgMDZjaqRpBGuXGa5i80RxW+Vxfdn5pTrYk4pP0P7ZPyka9PJ248vw==", "dev": true, "requires": { "bignumber.js": "^7.2.1", "ethers": "^4.0.0-beta.1", "truffle-blockchain-utils": "^0.0.10", - "truffle-contract-schema": "^3.0.11", + "truffle-contract-schema": "^3.0.13", "truffle-error": "^0.0.5", - "truffle-interface-adapter": "^0.2.0", - "web3": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "truffle-interface-adapter": "^0.2.4", + "web3": "1.2.1", + "web3-core-promievent": "1.2.1", + "web3-eth-abi": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "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.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", "dev": true, "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", + "bn.js": "4.11.8", + "eth-lib": "0.2.7", "ethjs-unit": "0.1.6", "number-to-bn": "1.7.0", "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" + "underscore": "1.9.1", + "utf8": "3.0.0" } } } }, "truffle-contract-schema": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/truffle-contract-schema/-/truffle-contract-schema-3.0.11.tgz", - "integrity": "sha512-YcgSOlrufi6VtnXg8LU5Ma7JHzHpnZQxzB1PSWnb+JOTc1nL02XRoCWTgEO7PkJnFgf6yrwOpW0ajSwHk3zQ7Q==", + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/truffle-contract-schema/-/truffle-contract-schema-3.0.13.tgz", + "integrity": "sha512-joF6oiG35xkRalc9Jeuq1NJ43jE3T0LVoWQ/8EhhGyE5E9PxYbUjNtdcj8ycOpn3BYFiomX2UUsgmt4W2U1Qtg==", "dev": true, "requires": { "ajv": "^6.10.0", @@ -6417,14 +6603,15 @@ "dev": true }, "truffle-interface-adapter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/truffle-interface-adapter/-/truffle-interface-adapter-0.2.0.tgz", - "integrity": "sha512-NMj2gGr96/Ny5P2CvVzvkMAYXFjZfkdLCLt0kOiYGltoTt7EVP+HVLpYUfvxHjmEYytGdjXjrt/1srCfbPbAsQ==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/truffle-interface-adapter/-/truffle-interface-adapter-0.2.4.tgz", + "integrity": "sha512-y1iu4aHI4VEjTcK1vaGOULApvk7QfFlF+zXLVYSJnJux6hqMmgq/F1+flCL73XEhO0zrtLjusnZrPUBYOVvWdw==", "dev": true, "requires": { "bn.js": "^4.11.8", "ethers": "^4.0.32", - "web3": "1.0.0-beta.37" + "lodash": "^4.17.13", + "web3": "1.2.1" }, "dependencies": { "bn.js": { @@ -6432,6 +6619,12 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true } } }, @@ -6456,6 +6649,12 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "type": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz", + "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==", + "dev": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -6549,6 +6748,12 @@ } } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -6611,12 +6816,12 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, "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=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "dev": true, "requires": { - "prepend-http": "^1.0.1" + "prepend-http": "^2.0.0" } }, "url-set-query": { @@ -6687,276 +6892,430 @@ } }, "web3": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.37.tgz", - "integrity": "sha512-8XLgUspdzicC/xHG82TLrcF/Fxzj2XYNJ1KTYnepOI77bj5rvpsxxwHYBWQ6/JOjk0HkZqoBfnXWgcIHCDhZhQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.1.tgz", + "integrity": "sha512-nNMzeCK0agb5i/oTWNdQ1aGtwYfXzHottFP2Dz0oGIzavPMGSKyVlr8ibVb1yK5sJBjrWVnTdGaOC2zKDFuFRw==", "dev": true, "requires": { - "web3-bzz": "1.0.0-beta.37", - "web3-core": "1.0.0-beta.37", - "web3-eth": "1.0.0-beta.37", - "web3-eth-personal": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-shh": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "web3-bzz": "1.2.1", + "web3-core": "1.2.1", + "web3-eth": "1.2.1", + "web3-eth-personal": "1.2.1", + "web3-net": "1.2.1", + "web3-shh": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "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.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", "dev": true, "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", + "bn.js": "4.11.8", + "eth-lib": "0.2.7", "ethjs-unit": "0.1.6", "number-to-bn": "1.7.0", "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" + "underscore": "1.9.1", + "utf8": "3.0.0" } } } }, "web3-bzz": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.37.tgz", - "integrity": "sha512-E+dho49Nsm/QpQvYWOF35YDsQrMvLB19AApENxhlQsu6HpWQt534DQul0t3Y/aAh8rlKD6Kanxt8LhHDG3vejQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.1.tgz", + "integrity": "sha512-LdOO44TuYbGIPfL4ilkuS89GQovxUpmLz6C1UC7VYVVRILeZS740FVB3j9V4P4FHUk1RenaDfKhcntqgVCHtjw==", "dev": true, "requires": { - "got": "7.1.0", - "swarm-js": "0.1.37", - "underscore": "1.8.3" + "got": "9.6.0", + "swarm-js": "0.1.39", + "underscore": "1.9.1" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "dev": true + } } }, "web3-core": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.37.tgz", - "integrity": "sha512-cIwEqCj7OJyefQNauI0HOgW4sSaOQ98V99H2/HEIlnCZylsDzfw7gtQUdwnRFiIyIxjbWy3iWsjwDPoXNPZBYg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.1.tgz", + "integrity": "sha512-5ODwIqgl8oIg/0+Ai4jsLxkKFWJYE0uLuE1yUKHNVCL4zL6n3rFjRMpKPokd6id6nJCNgeA64KdWQ4XfpnjdMg==", "dev": true, "requires": { - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-requestmanager": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-core-requestmanager": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "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.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", "dev": true, "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", + "bn.js": "4.11.8", + "eth-lib": "0.2.7", "ethjs-unit": "0.1.6", "number-to-bn": "1.7.0", "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" + "underscore": "1.9.1", + "utf8": "3.0.0" } } } }, "web3-core-helpers": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.37.tgz", - "integrity": "sha512-efaLOzN28RMnbugnyelgLwPWWaSwElQzcAJ/x3PZu+uPloM/lE5x0YuBKvIh7/PoSMlHqtRWj1B8CpuQOUQ5Ew==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.1.tgz", + "integrity": "sha512-Gx3sTEajD5r96bJgfuW377PZVFmXIH4TdqDhgGwd2lZQCcMi+DA4TgxJNJGxn0R3aUVzyyE76j4LBrh412mXrw==", "dev": true, "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "underscore": "1.9.1", + "web3-eth-iban": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "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.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", "dev": true, "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", + "bn.js": "4.11.8", + "eth-lib": "0.2.7", "ethjs-unit": "0.1.6", "number-to-bn": "1.7.0", "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" + "underscore": "1.9.1", + "utf8": "3.0.0" } } } }, "web3-core-method": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.37.tgz", - "integrity": "sha512-pKWFUeqnVmzx3VrZg+CseSdrl/Yrk2ioid/HzolNXZE6zdoITZL0uRjnsbqXGEzgRRd1Oe/pFndpTlRsnxXloA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.1.tgz", + "integrity": "sha512-Ghg2WS23qi6Xj8Od3VCzaImLHseEA7/usvnOItluiIc5cKs00WYWsNy2YRStzU9a2+z8lwQywPYp0nTzR/QXdQ==", "dev": true, "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1", + "web3-core-promievent": "1.2.1", + "web3-core-subscriptions": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "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.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", "dev": true, "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", + "bn.js": "4.11.8", + "eth-lib": "0.2.7", "ethjs-unit": "0.1.6", "number-to-bn": "1.7.0", "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" + "underscore": "1.9.1", + "utf8": "3.0.0" } } } }, "web3-core-promievent": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.37.tgz", - "integrity": "sha512-GTF2r1lP8nJBeA5Gxq5yZpJy9l8Fb9CXGZPfF8jHvaRdQHtm2Z+NDhqYmF833lcdkokRSyfPcXlz1mlWeClFpg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz", + "integrity": "sha512-IVUqgpIKoeOYblwpex4Hye6npM0aMR+kU49VP06secPeN0rHMyhGF0ZGveWBrGvf8WDPI7jhqPBFIC6Jf3Q3zw==", "dev": true, "requires": { "any-promise": "1.3.0", - "eventemitter3": "1.1.1" + "eventemitter3": "3.1.2" } }, "web3-core-requestmanager": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.37.tgz", - "integrity": "sha512-66VUqye5BGp1Zz1r8psCxdNH+GtTjaFwroum2Osx+wbC5oRjAiXkkadiitf6wRb+edodjEMPn49u7B6WGNuewQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.1.tgz", + "integrity": "sha512-xfknTC69RfYmLKC+83Jz73IC3/sS2ZLhGtX33D4Q5nQ8yc39ElyAolxr9sJQS8kihOcM6u4J+8gyGMqsLcpIBg==", "dev": true, "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37", - "web3-providers-http": "1.0.0-beta.37", - "web3-providers-ipc": "1.0.0-beta.37", - "web3-providers-ws": "1.0.0-beta.37" + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1", + "web3-providers-http": "1.2.1", + "web3-providers-ipc": "1.2.1", + "web3-providers-ws": "1.2.1" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "dev": true + } } }, "web3-core-subscriptions": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.37.tgz", - "integrity": "sha512-FdXl8so9kwkRRWziuCSpFsAuAdg9KvpXa1fQlT16uoGcYYfxwFO/nkwyBGQzkZt7emShI2IRugcazyPCZDwkOA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.1.tgz", + "integrity": "sha512-nmOwe3NsB8V8UFsY1r+sW6KjdOS68h8nuh7NzlWxBQT/19QSUGiERRTaZXWu5BYvo1EoZRMxCKyCQpSSXLc08g==", "dev": true, "requires": { - "eventemitter3": "1.1.1", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37" + "eventemitter3": "3.1.2", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "dev": true + } } }, "web3-eth": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.37.tgz", - "integrity": "sha512-Eb3aGtkz3G9q+Z9DKgSQNbn/u8RtcZQQ0R4sW9hy5KK47GoT6vab5c6DiD3QWzI0BzitHzR5Ji+3VHf/hPUGgw==", - "dev": true, - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-eth-accounts": "1.0.0-beta.37", - "web3-eth-contract": "1.0.0-beta.37", - "web3-eth-ens": "1.0.0-beta.37", - "web3-eth-iban": "1.0.0-beta.37", - "web3-eth-personal": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.1.tgz", + "integrity": "sha512-/2xly4Yry5FW1i+uygPjhfvgUP/MS/Dk+PDqmzp5M88tS86A+j8BzKc23GrlA8sgGs0645cpZK/999LpEF5UdA==", + "dev": true, + "requires": { + "underscore": "1.9.1", + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-core-subscriptions": "1.2.1", + "web3-eth-abi": "1.2.1", + "web3-eth-accounts": "1.2.1", + "web3-eth-contract": "1.2.1", + "web3-eth-ens": "1.2.1", + "web3-eth-iban": "1.2.1", + "web3-eth-personal": "1.2.1", + "web3-net": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "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.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", "dev": true, "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", + "bn.js": "4.11.8", + "eth-lib": "0.2.7", "ethjs-unit": "0.1.6", "number-to-bn": "1.7.0", "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" + "underscore": "1.9.1", + "utf8": "3.0.0" } } } }, "web3-eth-abi": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.37.tgz", - "integrity": "sha512-g9DKZGM2OqwKp/tX3W/yihcj7mQCtJ6CXyZXEIZfuDyRBED/iSEIFfieDOd+yo16sokLMig6FG7ADhhu+19hdA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.1.tgz", + "integrity": "sha512-jI/KhU2a/DQPZXHjo2GW0myEljzfiKOn+h1qxK1+Y9OQfTcBMxrQJyH5AP89O6l6NZ1QvNdq99ThAxBFoy5L+g==", "dev": true, "requires": { - "ethers": "4.0.0-beta.1", - "underscore": "1.8.3", - "web3-utils": "1.0.0-beta.37" + "ethers": "4.0.0-beta.3", + "underscore": "1.9.1", + "web3-utils": "1.2.1" }, "dependencies": { "bn.js": { @@ -6965,10 +7324,38 @@ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, + "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.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + }, + "dependencies": { + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + } + } + }, "ethers": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.1.tgz", - "integrity": "sha512-SoYhktEbLxf+fiux5SfCEwdzWENMvgIbMZD90I62s4GZD9nEjgEWy8ZboI3hck193Vs0bDoTohDISx84f2H2tw==", + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.3.tgz", + "integrity": "sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog==", "dev": true, "requires": { "@types/node": "^10.3.2", @@ -7005,53 +7392,200 @@ "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=", "dev": true }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", "dev": true, "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", + "bn.js": "4.11.8", + "eth-lib": "0.2.7", "ethjs-unit": "0.1.6", "number-to-bn": "1.7.0", "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" - }, - "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 - } + "underscore": "1.9.1", + "utf8": "3.0.0" } } } }, "web3-eth-accounts": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.37.tgz", - "integrity": "sha512-uvbHL62/zwo4GDmwKdqH9c/EgYd8QVnAfpVw8D3epSISpgbONNY7Hr4MRMSd/CqAP12l2Ls9JVQGLhhC83bW6g==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.1.tgz", + "integrity": "sha512-26I4qq42STQ8IeKUyur3MdQ1NzrzCqPsmzqpux0j6X/XBD7EjZ+Cs0lhGNkSKH5dI3V8CJasnQ5T1mNKeWB7nQ==", "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.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "scryptsy": "2.1.0", + "semver": "6.2.0", + "underscore": "1.9.1", + "uuid": "3.3.2", + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-utils": "1.2.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "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.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "semver": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", + "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "dev": true + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "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 + }, + "web3-utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "eth-lib": "0.2.7", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randomhex": "0.1.5", + "underscore": "1.9.1", + "utf8": "3.0.0" + } + } + } + }, + "web3-eth-contract": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.1.tgz", + "integrity": "sha512-kYFESbQ3boC9bl2rYVghj7O8UKMiuKaiMkxvRH5cEDHil8V7MGEGZNH0slSdoyeftZVlaWSMqkRP/chfnKND0g==", + "dev": true, + "requires": { + "underscore": "1.9.1", + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-core-promievent": "1.2.1", + "web3-core-subscriptions": "1.2.1", + "web3-eth-abi": "1.2.1", + "web3-utils": "1.2.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "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.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "dev": true + }, + "web3-utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "eth-lib": "0.2.7", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randomhex": "0.1.5", + "underscore": "1.9.1", + "utf8": "3.0.0" + } + } + } + }, + "web3-eth-ens": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.1.tgz", + "integrity": "sha512-lhP1kFhqZr2nnbu3CGIFFrAnNxk2veXpOXBY48Tub37RtobDyHijHgrj+xTh+mFiPokyrapVjpFsbGa+Xzye4Q==", + "dev": true, + "requires": { + "eth-ens-namehash": "2.0.8", + "underscore": "1.9.1", + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-promievent": "1.2.1", + "web3-eth-abi": "1.2.1", + "web3-eth-contract": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { "bn.js": { @@ -7086,305 +7620,286 @@ "xhr-request-promise": "^0.1.2" } }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", "dev": true, "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", + "bn.js": "4.11.8", + "eth-lib": "0.2.7", "ethjs-unit": "0.1.6", "number-to-bn": "1.7.0", "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" - }, - "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 - }, - "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.6", - "elliptic": "^6.4.0", - "keccakjs": "^0.2.1", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - } + "underscore": "1.9.1", + "utf8": "3.0.0" } } } }, - "web3-eth-contract": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.37.tgz", - "integrity": "sha512-h1B3A8Z/C7BlnTCHkrWbXZQTViDxfR12lKMeTkT8Sqj5phFmxrBlPE4ORy4lf1Dk5b23mZYE0r/IRACx4ThCrQ==", - "dev": true, - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "web3-eth-iban": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.1.tgz", + "integrity": "sha512-9gkr4QPl1jCU+wkgmZ8EwODVO3ovVj6d6JKMos52ggdT2YCmlfvFVF6wlGLwi0VvNa/p+0BjJzaqxnnG/JewjQ==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "web3-utils": "1.2.1" }, "dependencies": { "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", - "dev": true + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "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.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" + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" } - } - } - }, - "web3-eth-ens": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.37.tgz", - "integrity": "sha512-dR3UkrVzdRrJhfP57xBPx0CMiVnCcYFvh+u2XMkGydrhHgupSUkjqGr89xry/j1T0BkuN9mikpbyhdCVMXqMbg==", - "dev": true, - "requires": { - "eth-ens-namehash": "2.0.8", - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-eth-contract": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - }, - "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 }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", "dev": true, "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", + "bn.js": "4.11.8", + "eth-lib": "0.2.7", "ethjs-unit": "0.1.6", "number-to-bn": "1.7.0", "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" + "underscore": "1.9.1", + "utf8": "3.0.0" } } } }, - "web3-eth-iban": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.37.tgz", - "integrity": "sha512-WQRniGJFxH/XCbd7miO6+jnUG+6bvuzfeufPIiOtCbeIC1ypp1kSqER8YVBDrTyinU1xnf1U5v0KBZ2yiWBJxQ==", + "web3-eth-personal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.1.tgz", + "integrity": "sha512-RNDVSiaSoY4aIp8+Hc7z+X72H7lMb3fmAChuSBADoEc7DsJrY/d0R5qQDK9g9t2BO8oxgLrLNyBP/9ub2Hc6Bg==", "dev": true, "requires": { - "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.37" + "web3-core": "1.2.1", + "web3-core-helpers": "1.2.1", + "web3-core-method": "1.2.1", + "web3-net": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", - "dev": true + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "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.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" + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" } - } - } - }, - "web3-eth-personal": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.37.tgz", - "integrity": "sha512-B4dZpGbD+nGnn48i6nJBqrQ+HB7oDmd+Q3wGRKOsHSK5HRWO/KwYeA7wgwamMAElkut50lIsT9EJl4Apfk3G5Q==", - "dev": true, - "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - }, - "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 }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", "dev": true, "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", + "bn.js": "4.11.8", + "eth-lib": "0.2.7", "ethjs-unit": "0.1.6", "number-to-bn": "1.7.0", "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" + "underscore": "1.9.1", + "utf8": "3.0.0" } } } }, "web3-net": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.37.tgz", - "integrity": "sha512-xG/uBtMdDa1UMXw9KjDUgf3fXA/fDEJUYUS0TDn+U9PMgngA+UVECHNNvQTrVVDxEky38V3sahwIDiopNsQdsw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.1.tgz", + "integrity": "sha512-Yt1Bs7WgnLESPe0rri/ZoPWzSy55ovioaP35w1KZydrNtQ5Yq4WcrAdhBzcOW7vAkIwrsLQsvA+hrOCy7mNauw==", "dev": true, "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" + "web3-core": "1.2.1", + "web3-core-method": "1.2.1", + "web3-utils": "1.2.1" }, "dependencies": { "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "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.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", "dev": true, "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", + "bn.js": "4.11.8", + "eth-lib": "0.2.7", "ethjs-unit": "0.1.6", "number-to-bn": "1.7.0", "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" + "underscore": "1.9.1", + "utf8": "3.0.0" } } } }, "web3-providers-http": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.37.tgz", - "integrity": "sha512-FM/1YDB1jtZuTo78habFj7S9tNHoqt0UipdyoQV29b8LkGKZV9Vs3is8L24hzuj1j/tbwkcAH+ewIseHwu0DTg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.1.tgz", + "integrity": "sha512-BDtVUVolT9b3CAzeGVA/np1hhn7RPUZ6YYGB/sYky+GjeO311Yoq8SRDUSezU92x8yImSC2B+SMReGhd1zL+bQ==", "dev": true, "requires": { - "web3-core-helpers": "1.0.0-beta.37", + "web3-core-helpers": "1.2.1", "xhr2-cookies": "1.1.0" } }, "web3-providers-ipc": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.37.tgz", - "integrity": "sha512-NdRPRxYMIU0C3u18NI8u4bwbhI9pCg5nRgDGYcmSAx5uOBxiYcQy+hb0WkJRRhBoyIXJmy+s26FoH8904+UnPg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.1.tgz", + "integrity": "sha512-oPEuOCwxVx8L4CPD0TUdnlOUZwGBSRKScCz/Ws2YHdr9Ium+whm+0NLmOZjkjQp5wovQbyBzNa6zJz1noFRvFA==", "dev": true, "requires": { - "oboe": "2.1.3", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37" + "oboe": "2.1.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "dev": true + } } }, "web3-providers-ws": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.37.tgz", - "integrity": "sha512-8p6ZLv+1JYa5Vs8oBn33Nn3VGFBbF+wVfO+b78RJS1Qf1uIOzjFVDk3XwYDD7rlz9G5BKpxhaQw+6EGQ7L02aw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.1.tgz", + "integrity": "sha512-oqsQXzu+ejJACVHy864WwIyw+oB21nw/pI65/sD95Zi98+/HQzFfNcIFneF1NC4bVF3VNX4YHTNq2I2o97LAiA==", "dev": true, "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37", - "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" + "underscore": "1.9.1", + "web3-core-helpers": "1.2.1", + "websocket": "github:web3-js/WebSocket-Node#905deb4812572b344f5801f8c9ce8bb02799d82e" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "dev": true + } } }, "web3-shh": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.37.tgz", - "integrity": "sha512-h5STG/xqZNQWtCLYOu7NiMqwqPea8SfkKQUPUFxXKIPVCFVKpHuQEwW1qcPQRJMLhlQIv17xuoUe1A+RzDNbrw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.1.tgz", + "integrity": "sha512-/3Cl04nza5kuFn25bV3FJWa0s3Vafr5BlT933h26xovQ6HIIz61LmvNQlvX1AhFL+SNJOTcQmK1SM59vcyC8bA==", "dev": true, "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37" + "web3-core": "1.2.1", + "web3-core-method": "1.2.1", + "web3-core-subscriptions": "1.2.1", + "web3-net": "1.2.1" } }, "web3-utils": { @@ -7443,13 +7958,14 @@ } }, "websocket": { - "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "from": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible", + "version": "github:web3-js/WebSocket-Node#905deb4812572b344f5801f8c9ce8bb02799d82e", + "from": "github:web3-js/WebSocket-Node#polyfill/globalThis", "dev": true, "requires": { "debug": "^2.2.0", - "nan": "^2.3.3", - "typedarray-to-buffer": "^3.1.2", + "es5-ext": "^0.10.50", + "nan": "^2.14.0", + "typedarray-to-buffer": "^3.1.5", "yaeti": "^0.0.6" }, "dependencies": { diff --git a/package.json b/package.json index ebed830..07f75dd 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "openzeppelin-test-helpers": "^0.4.0", "rlp": "^2.2.3", "truffle": "^5.0.27", - "truffle-contract": "^4.0.25", + "truffle-contract": "^4.0.30", "web3-utils": "^1.0.0" }, "dependencies": { From ee0ecd75fc3c683382dceaf7771bf0d4ebbcd6be Mon Sep 17 00:00:00 2001 From: 4000D Date: Tue, 17 Sep 2019 14:29:17 +0900 Subject: [PATCH 10/30] temp --- package-lock.json | 245 ++++++++++++++++++++------------ package.json | 4 +- scripts/helper/accountHelper.js | 28 +++- scripts/lib/dockerUtils.js | 19 --- scripts/lib/util.js | 25 +++- vapp/app.test.js | 66 ++++++--- vapp/lib/accounts.js | 61 +++++--- vapp/localstorage.js | 14 +- vapp/router/accounts.js | 21 +-- vapp/router/circuits.js | 1 + 10 files changed, 316 insertions(+), 168 deletions(-) diff --git a/package-lock.json b/package-lock.json index f51f2cd..47dd31d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -205,7 +205,6 @@ "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.0.0", "inherits": "^2.0.1", @@ -215,8 +214,7 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" } } }, @@ -358,6 +356,14 @@ } } }, + "base-x": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.6.tgz", + "integrity": "sha512-4PaF8u2+AlViJxRVjurkLTxpp7CaFRD/jo5rPT9ONnKxyhQ8f59yzamEvq7EkriG56yn5On4ONyaG75HLqr46w==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", @@ -494,7 +500,6 @@ "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.0.4", "browserify-des": "^1.0.0", @@ -505,7 +510,6 @@ "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.1", "des.js": "^1.0.0", @@ -517,7 +521,6 @@ "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.1.0", "randombytes": "^2.0.1" @@ -526,8 +529,7 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" } } }, @@ -553,7 +555,6 @@ "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.1.1", "browserify-rsa": "^4.0.0", @@ -567,11 +568,18 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" } } }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "^3.0.2" + } + }, "buffer": { "version": "5.4.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.2.tgz", @@ -620,8 +628,7 @@ "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 + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" }, "buffer-xor": { "version": "1.0.3", @@ -1015,7 +1022,6 @@ "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.1.0", "elliptic": "^6.0.0" @@ -1024,8 +1030,7 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" } } }, @@ -1071,7 +1076,6 @@ "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.0", "browserify-sign": "^4.0.0", @@ -1149,7 +1153,6 @@ "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" } @@ -1252,7 +1255,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -1320,7 +1322,6 @@ "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.1", "minimalistic-assert": "^1.0.0" @@ -1341,7 +1342,6 @@ "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.1.0", "miller-rabin": "^4.0.0", @@ -1351,8 +1351,7 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" } } }, @@ -1433,8 +1432,7 @@ "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 + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" }, "drbg.js": { "version": "1.0.1", @@ -1531,7 +1529,6 @@ "version": "6.3.3", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", - "dev": true, "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -1542,8 +1539,7 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" } } }, @@ -1585,7 +1581,6 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", @@ -1599,7 +1594,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -2039,7 +2033,6 @@ "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" @@ -2048,8 +2041,7 @@ "bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "dev": true + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" } } }, @@ -2363,7 +2355,6 @@ "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.3" } @@ -2913,8 +2904,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -2986,7 +2976,6 @@ "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.1" @@ -3100,7 +3089,6 @@ "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" } @@ -3119,8 +3107,7 @@ "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" }, "has-to-string-tag-x": { "version": "1.4.1", @@ -3421,8 +3408,7 @@ "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, "is-data-descriptor": { "version": "0.1.4", @@ -3435,8 +3421,7 @@ "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 + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-descriptor": { "version": "0.1.6", @@ -3487,8 +3472,7 @@ "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 + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" }, "is-glob": { "version": "2.0.1", @@ -3501,8 +3485,7 @@ "is-hex-prefixed": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", - "dev": true + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" }, "is-natural-number": { "version": "4.0.1", @@ -3565,7 +3548,6 @@ "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" } @@ -3585,7 +3567,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, "requires": { "has-symbols": "^1.0.0" } @@ -3723,6 +3704,17 @@ "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.2.1", + "inherits": "^2.0.3", + "nan": "^2.2.1", + "safe-buffer": "^5.1.0" + } + }, "keccakjs": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", @@ -3916,7 +3908,6 @@ "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.0.0", "brorand": "^1.0.1" @@ -3925,8 +3916,7 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" } } }, @@ -3959,14 +3949,12 @@ "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 + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, "requires": { "dom-walk": "^0.1.0" } @@ -4283,7 +4271,6 @@ "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" @@ -4292,8 +4279,7 @@ "bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "dev": true + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" } } }, @@ -4331,8 +4317,7 @@ "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", @@ -4572,7 +4557,6 @@ "version": "5.1.4", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", - "dev": true, "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", @@ -4597,7 +4581,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", - "dev": true, "requires": { "for-each": "^0.3.3", "string.prototype.trim": "^1.1.2" @@ -4670,7 +4653,6 @@ "version": "3.0.17", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dev": true, "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -4751,8 +4733,7 @@ "process": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "dev": true + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" }, "process-nextick-args": { "version": "2.0.0", @@ -4803,7 +4784,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -4816,8 +4796,7 @@ "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" } } }, @@ -4846,7 +4825,6 @@ "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.0", @@ -4879,7 +4857,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -4888,7 +4865,6 @@ "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.5", "safe-buffer": "^5.1.0" @@ -4897,8 +4873,7 @@ "randomhex": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=", - "dev": true + "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" }, "range-parser": { "version": "1.2.1", @@ -5444,6 +5419,14 @@ "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.0.8" + } + }, "scrypt-js": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", @@ -5674,20 +5657,23 @@ "simple-concat": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", - "dev": true + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" }, "simple-get": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "dev": true, "requires": { "decompress-response": "^3.3.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, + "sjcl": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/sjcl/-/sjcl-1.0.6.tgz", + "integrity": "sha1-ZBVGKmPMDUIVxJuuydP6DBtTUg8=" + }, "slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", @@ -6052,8 +6038,7 @@ "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 + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, "string-width": { "version": "2.1.1", @@ -6069,7 +6054,6 @@ "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.5.0", @@ -6117,7 +6101,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "dev": true, "requires": { "is-hex-prefixed": "1.0.0" } @@ -6338,8 +6321,7 @@ "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 + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, "tmp": { "version": "0.0.33", @@ -6848,8 +6830,7 @@ "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 + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" }, "url-to-options": { "version": "1.0.1", @@ -6865,8 +6846,7 @@ "utf8": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, "util-deprecate": { "version": "1.0.2", @@ -8097,7 +8077,6 @@ "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.0", "is-function": "^1.0.1", @@ -8109,7 +8088,6 @@ "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", @@ -8124,7 +8102,6 @@ "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.0.1" } @@ -8174,6 +8151,94 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "zk-dex-keystore": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/zk-dex-keystore/-/zk-dex-keystore-0.0.3.tgz", + "integrity": "sha512-zGSfbLFKQTb0e/xV2Bs2mRqJnAnSCv2kAXkgoZidpEkZlXxIgdcRt7DCIA7NjsArH3BMP4X4WyWLhoztz0q1yg==", + "requires": { + "babyjubjub": "^1.0.2", + "bs58": "^4.0.1", + "crypto-browserify": "3.12.0", + "keccak": "1.4.0", + "scrypt": "6.0.3", + "secp256k1": "3.5.0", + "sjcl": "1.0.6", + "uuid": "3.0.0", + "web3-utils": "^1.2.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "eth-lib": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", + "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + }, + "dependencies": { + "elliptic": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + } + } + }, + "secp256k1": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz", + "integrity": "sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==", + "requires": { + "bindings": "^1.2.1", + "bip66": "^1.1.3", + "bn.js": "^4.11.3", + "create-hash": "^1.1.2", + "drbg.js": "^1.0.1", + "elliptic": "^6.2.3", + "nan": "^2.2.1", + "safe-buffer": "^5.1.0" + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + }, + "uuid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.0.tgz", + "integrity": "sha1-Zyj8BFnEUNeWqZwxg3VpvfZy1yg=" + }, + "web3-utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.1.tgz", + "integrity": "sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA==", + "requires": { + "bn.js": "4.11.8", + "eth-lib": "0.2.7", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randomhex": "0.1.5", + "underscore": "1.9.1", + "utf8": "3.0.0" + } + } + } } } } diff --git a/package.json b/package.json index d9eb763..2e835a4 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "dependencies": { "babyjubjub": "^1.0.2", "bn.js": "^5.0.0", + "bs58": "^4.0.1", "child-process-promise": "^2.2.1", "dockerode": "^2.5.8", "dockerode-promise": "^0.1.0", @@ -43,6 +44,7 @@ "ethlint": "^1.2.2", "node-docker-api": "^1.1.22", "secp256k1": "^3.6.1", - "truffle": "^5.0.0-beta.1" + "truffle": "^5.0.0-beta.1", + "zk-dex-keystore": "0.0.3" } } diff --git a/scripts/helper/accountHelper.js b/scripts/helper/accountHelper.js index ef9b7c1..1f2ada2 100644 --- a/scripts/helper/accountHelper.js +++ b/scripts/helper/accountHelper.js @@ -1,13 +1,19 @@ -const BN = require('bn.js'); +const bs58 = require('bs58'); const { PublicKey, PrivateKey } = require('babyjubjub'); const crypto = require('crypto'); const Web3Utils = require('web3-utils'); +const { marshal, unmarshal } = require('../lib/util'); + function getSk() { let sk = PrivateKey.getRandObj().field; return sk; } +function getSkHex() { + return PrivateKey.getRandObj().hexString; +} + function getPrivKey(sk) { return new PrivateKey(sk); } @@ -25,9 +31,29 @@ function getOwner(sk) { return [pubKeyX, pubKeyY] } +/** + * @param {String} hexString hex-encoded string + * @returns {String} base58-encoded string + */ +function encodeBase58(hexString) { + return bs58.encode(Buffer.from(unmarshal(hexString), 'hex')); +} + +/** + * + * @param {String} base58String base58-encoded string + * @returns {String} hex-encoded string + */ +function decodeBase58(base58String) { + return bs58.decode(base58String).toString('hex'); +} + module.exports = { getSk, + getSkHex, getPrivKey, getPubKey, getOwner, + encodeBase58, + decodeBase58, } \ No newline at end of file diff --git a/scripts/lib/dockerUtils.js b/scripts/lib/dockerUtils.js index 2cb7529..70c5766 100644 --- a/scripts/lib/dockerUtils.js +++ b/scripts/lib/dockerUtils.js @@ -255,25 +255,6 @@ function initialized() { }); } -function initialized() { - const MAX_TRY = 100; - let i = 0; - - return new Promise((resolve, reject) => { - const timer = () => setTimeout(() => { - i++; - if (i >= MAX_TRY) { - reject("Out of time"); - } - - if (!c) return timer(); - return resolve(); - }, 500); - - timer(); - }); -} - (async () => { try { const containers = await docker.listContainers(); diff --git a/scripts/lib/util.js b/scripts/lib/util.js index ac153b6..382b99b 100644 --- a/scripts/lib/util.js +++ b/scripts/lib/util.js @@ -41,18 +41,29 @@ function parseProofObj(obj) { } function marshal(str) { - if (!str) throw new Error("Cannot marshal empty string"); + if (!str) throw new Error("Cannot add hex prefix empty string"); return '0x' + unmarshal(str); } -function unmarshal(str) { - // console.warn("unmarshal", 'str', str) - str = str.trim(); - if (!str) throw new Error("Cannot unmarshal empty string"); +function unmarshal(_str) { + let str; + if (_str instanceof Buffer) { + str = _str.toString('hex'); + } else { + str = _str.trim(); + } + + if (!str) throw new Error("Cannot remove hex prefix empty string"); + const i = str.lastIndexOf("0x"); - if (i < 0) return str; - return str.slice(i+2); + if (i >= 0) str = str.slice(i+2); + + if (str.length % 2 === 1) { + str = '0' + str; + } + + return str; } function calcHash(h0, h1) { diff --git a/vapp/app.test.js b/vapp/app.test.js index d86cd0f..11b64a2 100644 --- a/vapp/app.test.js +++ b/vapp/app.test.js @@ -1,3 +1,5 @@ +// run with jest + const express = require('express'); const bodyParser = require('body-parser'); const keythereum = require('keythereum'); @@ -11,6 +13,8 @@ const Web3 = require('web3'); const web3Utils = require('web3-utils'); const router = require('./router'); + +const { fromKeyStoreObject } = require('./lib/accounts'); const { initialized } = require('../scripts/lib/dockerUtils'); const { constants, Note } = require('../scripts/lib/Note'); const { marshal, unmarshal } = require('../scripts/lib/util'); @@ -51,10 +55,6 @@ const initApp = async () => { return { app, zkdexService }; }; -const pks = range(10) - .map(() => keythereum.create({ keyBytes: 32, ivBytes: 16 })) - .map(({ privateKey }) => privateKey.toString('hex')); - const ether = n => web3Utils.toBN(n).mul(web3Utils.toBN(1e18.toString(10))); describe('Vapp API Router', () => { @@ -71,7 +71,6 @@ describe('Vapp API Router', () => { const vk = web3Utils.randomHex(16); - const key = pks[0]; const passphrase = 'test-passphrase'; const zkdexAddresses = []; @@ -149,7 +148,8 @@ describe('Vapp API Router', () => { done(); })); - test('it should delete account', (done) => { + test('it should delete 1st account', (done) => { + console.log('zkdexAddresses', zkdexAddresses); const address = zkdexAddresses[0]; return request(app) .delete(`/accounts/${userKey}`) @@ -164,8 +164,9 @@ describe('Vapp API Router', () => { }); }); - test('it should delete account', (done) => { + test('it should delete 2nd account', (done) => { const address = zkdexAddresses[0]; + expect(address).toBeTruthy(); return request(app) .delete(`/accounts/${userKey}`) .send({ address }) @@ -234,10 +235,19 @@ describe('Vapp API Router', () => { const makerVk = web3Utils.randomHex(16); const takerVk = web3Utils.randomHex(16); + + // ZkDexPrivateKey + let maker; + let taker; + + // ZkDexPublicKey + let makerPubKey; + let takerPubKey; + + // base58-encoded zk-address let makerZkAddress; let takerZkAddress; - // make note let daiNote; let ethNote; @@ -250,10 +260,10 @@ describe('Vapp API Router', () => { const spendDaiNoteAmount = daiAmount.div(toBN('2')); // over payment order - const price = toBN('2'); + const price = ether('2'); const stakeEthAmount = ethAmount; const rewardDaiAmount = spendDaiNoteAmount; - const paymentEthAmount = spendDaiNoteAmount.mul(price); + const paymentEthAmount = spendDaiNoteAmount.mul(price).div(ether('1')); const changeEthAmount = stakeEthAmount.sub(paymentEthAmount); let changeNoteOwner; @@ -291,6 +301,18 @@ describe('Vapp API Router', () => { .expect(200); takerZkAddress = res.body.address; + res = await request(app) + .get(`/accounts/${makerUserKey}`); + const makerAccount = res.body.accounts[0]; + maker = fromKeyStoreObject(makerAccount, passphrase); + makerPubKey = maker.toPubKey(); + + res = await request(app) + .get(`/accounts/${takerUserKey}`); + const takerAccount = res.body.accounts[0]; + taker = fromKeyStoreObject(takerAccount, passphrase); + takerPubKey = taker.toPubKey(); + console.log(` makerVk: ${makerVk} @@ -299,8 +321,12 @@ describe('Vapp API Router', () => { makerUserKey: ${makerUserKey} takerUserKey: ${takerUserKey} - makerZkAddress: ${makerZkAddress} - takerZkAddress: ${takerZkAddress} + maker: ${maker.toHex()} + taker: ${taker.toHex()} + + + makerPubKey: ${makerPubKey.xToHex()}, ${makerPubKey.yToHex()} + takerPubKey: ${takerPubKey.xToHex()}, ${takerPubKey.yToHex()} `); }); @@ -369,8 +395,8 @@ describe('Vapp API Router', () => { }); } - async function createNote (owner, tokenType, value, from) { - const note = new Note(owner, value, tokenType, '0x00', getSalt(), false); + async function createNote (owner0, owner1, tokenType, value, from) { + const note = new Note(owner0, owner1, value, tokenType, '0x00', getSalt()); const proof = await getProof('/circuits/mintNBurnNote', [note]); const prom = waitNotes([note]); @@ -386,11 +412,11 @@ describe('Vapp API Router', () => { } describe('/notes', () => { - test('it should create a DAI note', async () => { - daiNote = await createNote(makerZkAddress, constants.DAI_TOKEN_TYPE, daiAmount, ethAccounts[0]); + test.only('it should create a DAI note', async () => { + daiNote = await createNote(maker, constants.DAI_TOKEN_TYPE, daiAmount, ethAccounts[0]); }, TIMEOUT); - test('it should fetch maker\'s DAI note', done => request(app) + test.only('it should fetch maker\'s DAI note', done => request(app) .get(`/notes/${makerUserKey}`) .end((err, res) => { if (err) return done(err); @@ -401,7 +427,7 @@ describe('Vapp API Router', () => { })); test('it should create a ETH note', async () => { - ethNote = await createNote(takerZkAddress, constants.ETH_TOKEN_TYPE, ethAmount, ethAccounts[1]); + ethNote = await createNote(taker, constants.ETH_TOKEN_TYPE, ethAmount, ethAccounts[1]); }, TIMEOUT); test('it should fetch taker\'s ETH notes', done => request(app) @@ -415,8 +441,8 @@ describe('Vapp API Router', () => { })); test('it should spend a DAI note', async () => { - daiNote0 = new Note(makerZkAddress, spendDaiNoteAmount, constants.DAI_TOKEN_TYPE, '0x00', getSalt(), false); - daiNote1 = new Note(makerZkAddress, spendDaiNoteAmount, constants.DAI_TOKEN_TYPE, '0x00', getSalt(), false); + daiNote0 = new Note(maker, spendDaiNoteAmount, constants.DAI_TOKEN_TYPE, '0x00', getSalt(), false); + daiNote1 = new Note(maker, spendDaiNoteAmount, constants.DAI_TOKEN_TYPE, '0x00', getSalt(), false); const proof = await getProof('/circuits/transferNote', [ daiNote, diff --git a/vapp/lib/accounts.js b/vapp/lib/accounts.js index 109445e..bcf87ac 100644 --- a/vapp/lib/accounts.js +++ b/vapp/lib/accounts.js @@ -1,38 +1,67 @@ -const keythereum = require('keythereum'); +const crypto = require('crypto'); +const KeyStore = require('zk-dex-keystore'); +const ZkDexPrivateKey = KeyStore.ZkDexPrivateKey; function createAccount (passphrase) { - const params = { keyBytes: 32, ivBytes: 16 }; - const dk = keythereum.create(params); + const dk = KeyStore.create(); - const options = { - kdf: 'pbkdf2', - cipher: 'aes-128-ctr', - kdfparams: { c: 262144, dklen: 32, prf: 'hmac-sha256' }, - }; - - const keyObject = keythereum.dump( + const keyObj = KeyStore.dump( passphrase, dk.privateKey, dk.salt, dk.iv, - options ); - return keyObject; + return keyObj; } -function unlockAccount (passphrase, keystore) { +// TODO: unlocked private key should be located only in server side, and should not be returned. +function unlockAccount (passphrase, keyObj) { let privateKey; + try { - privateKey = keythereum.recover(passphrase, keystore); + privateKey = KeyStore.recover(passphrase, keyObj); } catch (err) { throw new Error('Failed to unlock account: ' + err.message); } + return privateKey; } +/** + * @param {Object=} options Encryption parameters. + * @param {string=} options.kdf Key derivation function (default: pbkdf2). + * @param {string=} options.cipher Symmetric cipher (default: constants.cipher). + * @param {Object=} options.kdfparams KDF parameters (default: constants.). + * @param {string|Buffer} password User-supplied password. + * @returns {ZkDexPrivateKey} + */ +function fromKeyStoreObject (options, password = '') { + const privBuf = KeyStore.recover(password, options); + return new ZkDexPrivateKey(privBuf); +} + +/** + * @param {ZkDexPrivateKey} privKey private key + * @param {String} password password to encrypt key object + * @returns {Object} + */ +function toKeyStoreObject (privKey, password = '') { + if (!(privKey instanceof ZkDexPrivateKey)) { + throw new Error('Private Key is not instance of ZkDexPrivateKey'); + } + + const saltLen = KeyStore.constants.keyBytes + KeyStore.constants.ivBytes; + const ivLen = KeyStore.constants.ivBytes; + + const randomBytes = crypto.randomBytes(saltLen + ivLen); + + return KeyStore.dump(password, privKey.toHex().slice(2), randomBytes.slice(saltLen), randomBytes.slice(saltLen, saltLen + ivLen)); +} + module.exports = { createAccount, unlockAccount, -} -; + fromKeyStoreObject, + toKeyStoreObject, +}; diff --git a/vapp/localstorage.js b/vapp/localstorage.js index 4f57451..13256d1 100644 --- a/vapp/localstorage.js +++ b/vapp/localstorage.js @@ -2,6 +2,12 @@ const { toHex, toBN } = require('web3-utils'); const { LocalStorage } = require('node-localstorage'); +const { + addZkPrefix, + removeZkPrefix, +} = require('zk-dex-keystore/lib/utils'); + + const { marshal } = require('../scripts/lib/util'); const { Note } = require('../scripts/lib/Note'); @@ -82,10 +88,10 @@ function getAccounts (_userKey) { module.exports.getAccounts = getAccounts; function getAccountByAddress (userKey, _address) { - const address = marshal(_address); + const address = removeZkPrefix(_address); const accounts = getAccounts(userKey); - const account = accounts.find(({ address: a }) => marshal(a) === address); + const account = accounts.find(({ address: a }) => a === address); if (!account) { throw new Error(`Account ${address} not exists`); } @@ -103,7 +109,7 @@ module.exports.addAccount = addAccount; function deleteAccount (_userKey, _address) { const userKey = marshal(_userKey); - const address = marshal(_address); + const address = removeZkPrefix(_address); const accounts = getAccounts(userKey); @@ -111,7 +117,7 @@ function deleteAccount (_userKey, _address) { throw new Error('There is no account'); } - const i = accounts.findIndex(({ address: a }) => marshal(a) === address); + const i = accounts.findIndex(({ address: a }) => a === address); if (i < 0) { throw new Error(`Account ${address} not exists`); } diff --git a/vapp/router/accounts.js b/vapp/router/accounts.js index 39fbfa4..ff5ce58 100644 --- a/vapp/router/accounts.js +++ b/vapp/router/accounts.js @@ -1,9 +1,10 @@ const express = require('express'); - const { - marshal, - unmarshal, -} = require('../../scripts/lib/util'); + addZkPrefix, + removeZkPrefix, +} = require('zk-dex-keystore/lib/utils'); + + const asyncWrap = require('../lib/asyncWrap'); const { @@ -39,7 +40,7 @@ router.post('/:userKey', asyncWrap( const account = createAccount(passphrase); addAccount(userKey, account); return res.status(200).json({ - address: marshal(account.address), + address: addZkPrefix(account.address), }); } )); @@ -61,7 +62,7 @@ router.post('/unlock/:userKey', asyncWrap( address, } = req.body; - const account = getAccountByAddress(unmarshal(address)); + const account = getAccountByAddress(removeZkPrefix(address)); const privateKey = unlockAccount(passphrase, account); return res.status(200).json({ @@ -70,7 +71,7 @@ router.post('/unlock/:userKey', asyncWrap( } )); -// TODO: import account by userKey +// TODO: use zk-dex-keystore router.post('/import/:userKey', asyncWrap( async function (req, res) { const userKey = req.params.userKey; @@ -80,14 +81,14 @@ router.post('/import/:userKey', asyncWrap( } )); -// TODO: delete account by userKey +// TODO: use zk-dex-keystore router.delete('/:userKey', asyncWrap( async function (req, res) { const userKey = req.params.userKey; - const address = unmarshal(req.body.address); + const address = removeZkPrefix(req.body.address); deleteAccount(userKey, address); return res.status(200).json({ - address: marshal(address), + address: addZkPrefix(address), }); } )); diff --git a/vapp/router/circuits.js b/vapp/router/circuits.js index 49068e0..1fc9122 100644 --- a/vapp/router/circuits.js +++ b/vapp/router/circuits.js @@ -36,6 +36,7 @@ console.log('process.env.USE_DUMMY', process.env.USE_DUMMY); const useDummy = process.env.USE_DUMMY || false; +// TODO: get private key from DB. router.post('/:circuit', asyncWrap( async function (req, res) { const circuit = req.params.circuit; From 0391a3077c1bd3f2d976bfd8b712c82ab3c17f6a Mon Sep 17 00:00:00 2001 From: Geonwoo Shin Date: Fri, 30 Aug 2019 13:54:20 +0900 Subject: [PATCH 11/30] vapp: init zkdex service --- vapp/app.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vapp/app.js b/vapp/app.js index 18a449f..caa5983 100644 --- a/vapp/app.js +++ b/vapp/app.js @@ -2,6 +2,7 @@ const express = require('express'); const cors = require('cors'); const bodyParser = require('body-parser'); const router = require('./router'); +const { ZkDexService } = require('./zkdex-service'); const app = express(); app.use(cors()); @@ -18,5 +19,6 @@ app.use(function (err, req, res, next) { }); app.listen(3000, function () { + ZkDexService.init('http://127.0.0.1:8545'); console.log('Example app listening on port 3000!'); }); From ea5c448e2e127f94fa8054eb8550ce2789eeae23 Mon Sep 17 00:00:00 2001 From: Geonwoo Shin Date: Fri, 30 Aug 2019 13:54:42 +0900 Subject: [PATCH 12/30] npm: update package-lock --- vapp/package-lock.json | 158 +++++++++++++++-------------------------- 1 file changed, 57 insertions(+), 101 deletions(-) diff --git a/vapp/package-lock.json b/vapp/package-lock.json index ecf1155..95f85a5 100644 --- a/vapp/package-lock.json +++ b/vapp/package-lock.json @@ -4393,15 +4393,6 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -5077,35 +5068,6 @@ "is-symbol": "^1.0.2" } }, - "es5-ext": { - "version": "0.10.50", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", - "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "^1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -6364,7 +6326,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -6385,12 +6348,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6405,17 +6370,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -6532,7 +6500,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -6544,6 +6513,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -6558,6 +6528,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -6565,12 +6536,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -6589,6 +6562,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -6669,7 +6643,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -6681,6 +6656,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -6766,7 +6742,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -6802,6 +6779,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6821,6 +6799,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6864,12 +6843,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -10566,11 +10547,6 @@ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -12902,7 +12878,8 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true + "dev": true, + "optional": true }, "rx-lite-aggregates": { "version": "4.0.8", @@ -14790,11 +14767,6 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, - "type": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz", - "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==" - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -14825,14 +14797,6 @@ "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==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, "uglify-js": { "version": "3.4.10", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", @@ -15502,6 +15466,19 @@ "web3-utils": "1.2.1" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, "oboe": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", @@ -15552,8 +15529,18 @@ "integrity": "sha512-oqsQXzu+ejJACVHy864WwIyw+oB21nw/pI65/sD95Zi98+/HQzFfNcIFneF1NC4bVF3VNX4YHTNq2I2o97LAiA==", "requires": { "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "websocket": "github:web3-js/WebSocket-Node#905deb4812572b344f5801f8c9ce8bb02799d82e" + "web3-core-helpers": "1.2.1" + } + }, + "websocket": { + "version": "github:web3-js/WebSocket-Node#905deb4812572b344f5801f8c9ce8bb02799d82e", + "from": "github:web3-js/WebSocket-Node#905deb4812572b344f5801f8c9ce8bb02799d82e", + "requires": { + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "nan": "^2.14.0", + "typedarray-to-buffer": "^3.1.5", + "yaeti": "^0.0.6" } } } @@ -16268,32 +16255,6 @@ } } }, - "websocket": { - "version": "github:web3-js/WebSocket-Node#905deb4812572b344f5801f8c9ce8bb02799d82e", - "from": "github:web3-js/WebSocket-Node#polyfill/globalThis", - "requires": { - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "nan": "^2.14.0", - "typedarray-to-buffer": "^3.1.5", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, "websocket-driver": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", @@ -16497,11 +16458,6 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - }, "yallist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", From c8f17431e42da0c0704b9f8d4a628dcd7fc63960 Mon Sep 17 00:00:00 2001 From: Geonwoo Shin Date: Fri, 30 Aug 2019 13:54:53 +0900 Subject: [PATCH 13/30] vapp: modify account api --- vapp/package-lock.json | 92 +++++++++++++++++++++++++++++++++++++++++- vapp/src/api/index.js | 16 ++++---- 2 files changed, 98 insertions(+), 10 deletions(-) diff --git a/vapp/package-lock.json b/vapp/package-lock.json index 95f85a5..e56df64 100644 --- a/vapp/package-lock.json +++ b/vapp/package-lock.json @@ -4393,6 +4393,15 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -5068,6 +5077,35 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -5817,6 +5855,21 @@ } } }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -10547,6 +10600,11 @@ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -14767,6 +14825,11 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -14797,6 +14860,14 @@ "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==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, "uglify-js": { "version": "3.4.10", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", @@ -15529,7 +15600,21 @@ "integrity": "sha512-oqsQXzu+ejJACVHy864WwIyw+oB21nw/pI65/sD95Zi98+/HQzFfNcIFneF1NC4bVF3VNX4YHTNq2I2o97LAiA==", "requires": { "underscore": "1.9.1", - "web3-core-helpers": "1.2.1" + "web3-core-helpers": "1.2.1", + "websocket": "github:web3-js/WebSocket-Node#polyfill/globalThis" + }, + "dependencies": { + "websocket": { + "version": "github:web3-js/WebSocket-Node#905deb4812572b344f5801f8c9ce8bb02799d82e", + "from": "github:web3-js/WebSocket-Node#polyfill/globalThis", + "requires": { + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "nan": "^2.14.0", + "typedarray-to-buffer": "^3.1.5", + "yaeti": "^0.0.6" + } + } } }, "websocket": { @@ -16458,6 +16543,11 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" + }, "yallist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", diff --git a/vapp/src/api/index.js b/vapp/src/api/index.js index 75f316d..32ee3f2 100644 --- a/vapp/src/api/index.js +++ b/vapp/src/api/index.js @@ -16,7 +16,7 @@ async function getViewingKey (key) { async function getAccounts (key) { const res = await instance.get(`/accounts/${key}`); - return JSON.parse(res.data.accounts); + return res.data.accounts; } async function getNoteByNoteHash (account, hash) { @@ -62,9 +62,8 @@ async function getOrders () { } // post -async function addAccount (key, account) { - const res = await instance.post('/accounts/import', { - key, +function addAccount (userKey, account) { + const res = instance.post(`/accounts/import/${userKey}`, { account, }); return res.data.accounts; @@ -107,8 +106,8 @@ async function setViewingKey (key, vk) { }); } -function createAccount (passphrase) { - return instance.post('/accounts', { +function createAccount (userKey, passphrase) { + return instance.post(`/accounts/${userKey}`, { passphrase, }); } @@ -165,10 +164,9 @@ async function updateOrderTaker (orderId, orderTaker) { return res.data.orders; } -async function deleteAccount (key, address) { - const res = await instance.delete('/accounts', { +function deleteAccount (userKey, address) { + return instance.delete(`/accounts/${userKey}`, { data: { - key, address, }, }); From 10037bb7ff8d98ce37aaf609d2f0af3101a361c2 Mon Sep 17 00:00:00 2001 From: thomashin Date: Mon, 11 Nov 2019 15:17:23 +0900 Subject: [PATCH 14/30] vapp: renew vapp --- package-lock.json | 155 ++----- vapp/localstorage.js | 5 +- vapp/package-lock.json | 93 ++++ vapp/package.json | 2 + vapp/router/accounts.js | 8 +- vapp/src/App.vue | 144 ++++-- vapp/src/api/index.js | 20 +- vapp/src/assets/icons/components/balance.png | Bin 0 -> 463 bytes vapp/src/assets/icons/components/key.png | Bin 0 -> 1482 bytes .../icons/components/keystore-selected.png | Bin 0 -> 2308 bytes vapp/src/assets/icons/components/keystore.png | Bin 0 -> 7282 bytes vapp/src/assets/icons/components/note.png | Bin 0 -> 501 bytes vapp/src/assets/icons/components/plus.png | Bin 0 -> 3741 bytes .../icons/components/private-key-selected.png | Bin 0 -> 1924 bytes .../icons/components/recentnotetransfer.png | Bin 0 -> 313 bytes vapp/src/assets/icons/components/transfer.png | Bin 0 -> 313 bytes vapp/src/assets/icons/exchange/allnotes.png | Bin 0 -> 501 bytes .../assets/icons/exchange/ongoingorders.png | Bin 0 -> 319 bytes vapp/src/assets/icons/exchange/orderbook.png | Bin 0 -> 252 bytes .../assets/icons/exchange/orderhistory.png | Bin 0 -> 231 bytes vapp/src/assets/icons/exchange/pricechart.png | Bin 0 -> 246 bytes vapp/src/assets/icons/exchange/trade.png | Bin 0 -> 407 bytes .../assets/icons/exchange/tradehistory.png | Bin 0 -> 231 bytes vapp/src/assets/icons/menu/account.png | Bin 0 -> 185 bytes vapp/src/assets/icons/menu/arrow.png | Bin 0 -> 373 bytes vapp/src/assets/icons/menu/history.png | Bin 0 -> 231 bytes vapp/src/assets/icons/menu/summary.png | Bin 0 -> 299 bytes vapp/src/assets/icons/menu/wallet.png | Bin 0 -> 564 bytes .../CreateAccountModal.scss | 111 +++++ .../CreateAccountModal/CreateAccountModal.vue | 70 +++ .../components/CreateAccountModal/index.js | 1 + .../DropdownAccountSelector.scss | 73 +++ .../DropdownAccountSelector.vue | 54 +++ .../DropdownAccountSelector/index.js | 1 + .../DropdownTokenSelector.scss | 73 +++ .../DropdownTokenSelector.vue | 69 +++ .../components/DropdownTokenSelector/index.js | 1 + .../Inputs/InputAccount/InputAccount.scss | 76 +++ .../Inputs/InputAccount/InputAccount.vue | 26 ++ .../components/Inputs/InputAccount/index.js | 1 + .../Inputs/InputText/InputText.scss | 95 ++++ .../components/Inputs/InputText/InputText.vue | 41 ++ vapp/src/components/Inputs/InputText/index.js | 1 + vapp/src/components/OrderChart.vue | 12 - .../components/RadioButton/RadioButton.scss | 95 ++++ .../components/RadioButton/RadioButton.vue | 53 +++ vapp/src/components/RadioButton/index.js | 1 + .../StandardTable/StandardTable.scss | 49 ++ .../StandardTable/StandardTable.vue | 432 ++++++++++++++++++ vapp/src/components/StandardTable/index.js | 1 + .../FooterContainer/FooterContainer.scss | 51 +++ .../FooterContainer/FooterContainer.vue | 37 ++ vapp/src/containers/FooterContainer/index.js | 1 + .../HeaderContainer/HeaderContainer.scss | 93 ++++ .../HeaderContainer/HeaderContainer.vue | 39 ++ vapp/src/containers/HeaderContainer/index.js | 1 + vapp/src/helpers/note.js | 11 + .../AccountDeleteLayout.scss | 3 + .../AccountDeleteLayout.vue | 24 + vapp/src/layouts/AccountDeleteLayout/index.js | 1 + .../AccountExportLayout.scss | 27 ++ .../AccountExportLayout.vue | 24 + vapp/src/layouts/AccountExportLayout/index.js | 1 + .../AccountImportLayout.scss | 104 +++++ .../AccountImportLayout.vue | 90 ++++ vapp/src/layouts/AccountImportLayout/index.js | 1 + .../DashboardLayout/DashboardLayout.scss | 16 + .../DashboardLayout/DashboardLayout.vue | 20 + .../AccountContainer/AccountContainer.scss | 14 + .../AccountContainer/AccountContainer.vue | 86 ++++ .../containers/AccountContainer/index.js | 1 + .../AccountDeleteContainer.scss | 100 ++++ .../AccountDeleteContainer.vue | 37 ++ .../AccountDeleteContainer/index.js | 1 + .../AccountExportContainer.scss | 50 ++ .../AccountExportContainer.vue | 46 ++ .../AccountExportContainer/index.js | 1 + .../BalanceContainer/BalanceContainer.scss | 14 + .../BalanceContainer/BalanceContainer.vue | 52 +++ .../containers/BalanceContainer/index.js | 1 + .../CreateNoteContainer.scss | 28 ++ .../CreateNoteContainer.vue | 123 +++++ .../containers/CreateNoteContainer/index.js | 1 + .../DashboardMenu/DashboardMenu.scss | 134 ++++++ .../DashboardMenu/DashboardMenu.vue | 110 +++++ .../containers/DashboardMenu/index.js | 1 + .../LiquidateNoteContainer.scss | 20 + .../LiquidateNoteContainer.vue | 111 +++++ .../LiquidateNoteContainer/index.js | 1 + .../NoteCombineContainer.scss | 19 + .../NoteCombineContainer.vue | 146 ++++++ .../containers/NoteCombineContainer/index.js | 1 + .../NoteContainer/NoteContainer.scss | 11 + .../NoteContainer/NoteContainer.vue | 35 ++ .../containers/NoteContainer/index.js | 1 + .../NoteTransferContainer.scss | 16 + .../NoteTransferContainer.vue | 137 ++++++ .../containers/NoteTransferContainer/index.js | 1 + .../NoteTransferHistoryContainer.scss | 7 + .../NoteTransferHistoryContainer.vue | 34 ++ .../NoteTransferHistoryContainer/index.js | 1 + .../OrderHistoryContainer.scss | 9 + .../OrderHistoryContainer.vue | 28 ++ .../containers/OrderHistoryContainer/index.js | 1 + .../OrderOngoingContainer.scss | 9 + .../OrderOngoingContainer.vue | 29 ++ .../containers/OrderOngoingContainer/index.js | 1 + vapp/src/layouts/DashboardLayout/index.js | 1 + .../ExchangeLayout/ExchangeLayout.scss | 99 ++++ .../layouts/ExchangeLayout/ExchangeLayout.vue | 47 ++ .../components/Market/Market.scss | 36 ++ .../components/Market/Market.vue | 16 + .../ExchangeLayout/components/Market/index.js | 1 + .../components/PriceChart/PriceChart.scss | 37 ++ .../components/PriceChart/PriceChart.vue | 362 +++++++++++++++ .../components/PriceChart/index.js | 1 + .../NoteContainer/NoteContainer.scss | 12 + .../NoteContainer/NoteContainer.vue | 29 ++ .../containers/NoteContainer/index.js | 1 + .../OrderBookContainer.scss | 11 + .../OrderBookContainer/OrderBookContainer.vue | 29 ++ .../containers/OrderBookContainer/index.js | 1 + .../OrderHistoryContainer.scss | 13 + .../OrderHistoryContainer.vue | 28 ++ .../containers/OrderHistoryContainer/index.js | 1 + .../OrderOngoingContainer.scss | 13 + .../OrderOngoingContainer.vue | 224 +++++++++ .../containers/OrderOngoingContainer/index.js | 1 + .../PriceChartContainer.scss | 18 + .../PriceChartContainer.vue | 31 ++ .../containers/PriceChartContainer/index.js | 1 + .../TradeContainer/TradeContainer.scss | 32 ++ .../TradeContainer/TradeContainer.vue | 257 +++++++++++ .../containers/TradeContainer/index.js | 1 + .../TradeHistoryContainer.scss | 11 + .../TradeHistoryContainer.vue | 30 ++ .../containers/TradeHistoryContainer/index.js | 1 + vapp/src/layouts/ExchangeLayout/index.js | 1 + .../NoteCombineLayout/NoteCombineLayout.scss | 3 + .../NoteCombineLayout/NoteCombineLayout.vue | 21 + vapp/src/layouts/NoteCombineLayout/index.js | 1 + .../NoteTransferHistoryLayout.vue | 18 + .../NoteTransferHistoryLayout/index.js | 1 + .../NoteTransferLayout/NoteTransferLayout.vue | 23 + vapp/src/layouts/NoteTransferLayout/index.js | 1 + .../OrderHistoryLayout.scss | 3 + .../OrderHistoryLayout/OrderHistoryLayout.vue | 18 + vapp/src/layouts/OrderHistoryLayout/index.js | 1 + .../layouts/SummaryLayout/SummaryLayout.scss | 0 .../layouts/SummaryLayout/SummaryLayout.vue | 31 ++ vapp/src/layouts/SummaryLayout/index.js | 1 + .../layouts/WalletLayout/WalletLayout.scss | 0 .../src/layouts/WalletLayout/WalletLayout.vue | 18 + vapp/src/layouts/WalletLayout/index.js | 1 + vapp/src/main.js | 4 +- vapp/src/router/index.js | 200 ++++---- vapp/src/scss/Global.scss | 296 ++++++++++++ vapp/src/scss/GlobalVariables.scss | 6 + vapp/src/scss/containers.scss | 171 +++++++ vapp/src/store/actions.js | 91 +--- vapp/src/store/getters.js | 135 +++--- vapp/src/store/index.js | 18 +- vapp/src/store/modules/accounts.js | 35 ++ vapp/src/store/modules/app.js | 45 ++ vapp/src/store/modules/notes.js | 54 +++ vapp/src/store/modules/orders.js | 42 ++ vapp/src/store/mutations.js | 223 ++++++--- vapp/tests/unit/.eslintrc.js | 5 + vapp/tests/unit/helpers/index.js | 3 + vapp/tests/unit/helpers/localVue.js | 31 ++ vapp/tests/unit/helpers/mockStore.js | 83 ++++ .../RadioButton/RadioButton.spec.js | 63 +++ .../StandardTable/StandardTable.spec.js | 1 + 173 files changed, 6244 insertions(+), 474 deletions(-) create mode 100755 vapp/src/assets/icons/components/balance.png create mode 100644 vapp/src/assets/icons/components/key.png create mode 100644 vapp/src/assets/icons/components/keystore-selected.png create mode 100644 vapp/src/assets/icons/components/keystore.png create mode 100755 vapp/src/assets/icons/components/note.png create mode 100644 vapp/src/assets/icons/components/plus.png create mode 100644 vapp/src/assets/icons/components/private-key-selected.png create mode 100644 vapp/src/assets/icons/components/recentnotetransfer.png create mode 100755 vapp/src/assets/icons/components/transfer.png create mode 100755 vapp/src/assets/icons/exchange/allnotes.png create mode 100755 vapp/src/assets/icons/exchange/ongoingorders.png create mode 100755 vapp/src/assets/icons/exchange/orderbook.png create mode 100755 vapp/src/assets/icons/exchange/orderhistory.png create mode 100644 vapp/src/assets/icons/exchange/pricechart.png create mode 100644 vapp/src/assets/icons/exchange/trade.png create mode 100755 vapp/src/assets/icons/exchange/tradehistory.png create mode 100755 vapp/src/assets/icons/menu/account.png create mode 100755 vapp/src/assets/icons/menu/arrow.png create mode 100755 vapp/src/assets/icons/menu/history.png create mode 100755 vapp/src/assets/icons/menu/summary.png create mode 100755 vapp/src/assets/icons/menu/wallet.png create mode 100644 vapp/src/components/CreateAccountModal/CreateAccountModal.scss create mode 100644 vapp/src/components/CreateAccountModal/CreateAccountModal.vue create mode 100644 vapp/src/components/CreateAccountModal/index.js create mode 100644 vapp/src/components/DropdownAccountSelector/DropdownAccountSelector.scss create mode 100644 vapp/src/components/DropdownAccountSelector/DropdownAccountSelector.vue create mode 100644 vapp/src/components/DropdownAccountSelector/index.js create mode 100644 vapp/src/components/DropdownTokenSelector/DropdownTokenSelector.scss create mode 100644 vapp/src/components/DropdownTokenSelector/DropdownTokenSelector.vue create mode 100644 vapp/src/components/DropdownTokenSelector/index.js create mode 100644 vapp/src/components/Inputs/InputAccount/InputAccount.scss create mode 100644 vapp/src/components/Inputs/InputAccount/InputAccount.vue create mode 100644 vapp/src/components/Inputs/InputAccount/index.js create mode 100644 vapp/src/components/Inputs/InputText/InputText.scss create mode 100644 vapp/src/components/Inputs/InputText/InputText.vue create mode 100644 vapp/src/components/Inputs/InputText/index.js delete mode 100644 vapp/src/components/OrderChart.vue create mode 100644 vapp/src/components/RadioButton/RadioButton.scss create mode 100644 vapp/src/components/RadioButton/RadioButton.vue create mode 100644 vapp/src/components/RadioButton/index.js create mode 100644 vapp/src/components/StandardTable/StandardTable.scss create mode 100644 vapp/src/components/StandardTable/StandardTable.vue create mode 100644 vapp/src/components/StandardTable/index.js create mode 100644 vapp/src/containers/FooterContainer/FooterContainer.scss create mode 100644 vapp/src/containers/FooterContainer/FooterContainer.vue create mode 100644 vapp/src/containers/FooterContainer/index.js create mode 100644 vapp/src/containers/HeaderContainer/HeaderContainer.scss create mode 100644 vapp/src/containers/HeaderContainer/HeaderContainer.vue create mode 100644 vapp/src/containers/HeaderContainer/index.js create mode 100644 vapp/src/helpers/note.js create mode 100644 vapp/src/layouts/AccountDeleteLayout/AccountDeleteLayout.scss create mode 100644 vapp/src/layouts/AccountDeleteLayout/AccountDeleteLayout.vue create mode 100644 vapp/src/layouts/AccountDeleteLayout/index.js create mode 100644 vapp/src/layouts/AccountExportLayout/AccountExportLayout.scss create mode 100644 vapp/src/layouts/AccountExportLayout/AccountExportLayout.vue create mode 100644 vapp/src/layouts/AccountExportLayout/index.js create mode 100644 vapp/src/layouts/AccountImportLayout/AccountImportLayout.scss create mode 100644 vapp/src/layouts/AccountImportLayout/AccountImportLayout.vue create mode 100644 vapp/src/layouts/AccountImportLayout/index.js create mode 100644 vapp/src/layouts/DashboardLayout/DashboardLayout.scss create mode 100644 vapp/src/layouts/DashboardLayout/DashboardLayout.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/AccountContainer/AccountContainer.scss create mode 100644 vapp/src/layouts/DashboardLayout/containers/AccountContainer/AccountContainer.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/AccountContainer/index.js create mode 100644 vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/AccountDeleteContainer.scss create mode 100644 vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/AccountDeleteContainer.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/index.js create mode 100644 vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/AccountExportContainer.scss create mode 100644 vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/AccountExportContainer.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/index.js create mode 100644 vapp/src/layouts/DashboardLayout/containers/BalanceContainer/BalanceContainer.scss create mode 100644 vapp/src/layouts/DashboardLayout/containers/BalanceContainer/BalanceContainer.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/BalanceContainer/index.js create mode 100644 vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/CreateNoteContainer.scss create mode 100644 vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/CreateNoteContainer.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/index.js create mode 100644 vapp/src/layouts/DashboardLayout/containers/DashboardMenu/DashboardMenu.scss create mode 100644 vapp/src/layouts/DashboardLayout/containers/DashboardMenu/DashboardMenu.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/DashboardMenu/index.js create mode 100644 vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.scss create mode 100644 vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/index.js create mode 100644 vapp/src/layouts/DashboardLayout/containers/NoteCombineContainer/NoteCombineContainer.scss create mode 100644 vapp/src/layouts/DashboardLayout/containers/NoteCombineContainer/NoteCombineContainer.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/NoteCombineContainer/index.js create mode 100644 vapp/src/layouts/DashboardLayout/containers/NoteContainer/NoteContainer.scss create mode 100644 vapp/src/layouts/DashboardLayout/containers/NoteContainer/NoteContainer.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/NoteContainer/index.js create mode 100644 vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.scss create mode 100644 vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/index.js create mode 100644 vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/NoteTransferHistoryContainer.scss create mode 100644 vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/NoteTransferHistoryContainer.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/index.js create mode 100644 vapp/src/layouts/DashboardLayout/containers/OrderHistoryContainer/OrderHistoryContainer.scss create mode 100644 vapp/src/layouts/DashboardLayout/containers/OrderHistoryContainer/OrderHistoryContainer.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/OrderHistoryContainer/index.js create mode 100644 vapp/src/layouts/DashboardLayout/containers/OrderOngoingContainer/OrderOngoingContainer.scss create mode 100644 vapp/src/layouts/DashboardLayout/containers/OrderOngoingContainer/OrderOngoingContainer.vue create mode 100644 vapp/src/layouts/DashboardLayout/containers/OrderOngoingContainer/index.js create mode 100644 vapp/src/layouts/DashboardLayout/index.js create mode 100644 vapp/src/layouts/ExchangeLayout/ExchangeLayout.scss create mode 100644 vapp/src/layouts/ExchangeLayout/ExchangeLayout.vue create mode 100644 vapp/src/layouts/ExchangeLayout/components/Market/Market.scss create mode 100644 vapp/src/layouts/ExchangeLayout/components/Market/Market.vue create mode 100644 vapp/src/layouts/ExchangeLayout/components/Market/index.js create mode 100644 vapp/src/layouts/ExchangeLayout/components/PriceChart/PriceChart.scss create mode 100644 vapp/src/layouts/ExchangeLayout/components/PriceChart/PriceChart.vue create mode 100644 vapp/src/layouts/ExchangeLayout/components/PriceChart/index.js create mode 100644 vapp/src/layouts/ExchangeLayout/containers/NoteContainer/NoteContainer.scss create mode 100644 vapp/src/layouts/ExchangeLayout/containers/NoteContainer/NoteContainer.vue create mode 100644 vapp/src/layouts/ExchangeLayout/containers/NoteContainer/index.js create mode 100644 vapp/src/layouts/ExchangeLayout/containers/OrderBookContainer/OrderBookContainer.scss create mode 100644 vapp/src/layouts/ExchangeLayout/containers/OrderBookContainer/OrderBookContainer.vue create mode 100644 vapp/src/layouts/ExchangeLayout/containers/OrderBookContainer/index.js create mode 100644 vapp/src/layouts/ExchangeLayout/containers/OrderHistoryContainer/OrderHistoryContainer.scss create mode 100644 vapp/src/layouts/ExchangeLayout/containers/OrderHistoryContainer/OrderHistoryContainer.vue create mode 100644 vapp/src/layouts/ExchangeLayout/containers/OrderHistoryContainer/index.js create mode 100644 vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/OrderOngoingContainer.scss create mode 100644 vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/OrderOngoingContainer.vue create mode 100644 vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/index.js create mode 100644 vapp/src/layouts/ExchangeLayout/containers/PriceChartContainer/PriceChartContainer.scss create mode 100644 vapp/src/layouts/ExchangeLayout/containers/PriceChartContainer/PriceChartContainer.vue create mode 100644 vapp/src/layouts/ExchangeLayout/containers/PriceChartContainer/index.js create mode 100644 vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.scss create mode 100644 vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue create mode 100644 vapp/src/layouts/ExchangeLayout/containers/TradeContainer/index.js create mode 100644 vapp/src/layouts/ExchangeLayout/containers/TradeHistoryContainer/TradeHistoryContainer.scss create mode 100644 vapp/src/layouts/ExchangeLayout/containers/TradeHistoryContainer/TradeHistoryContainer.vue create mode 100644 vapp/src/layouts/ExchangeLayout/containers/TradeHistoryContainer/index.js create mode 100644 vapp/src/layouts/ExchangeLayout/index.js create mode 100644 vapp/src/layouts/NoteCombineLayout/NoteCombineLayout.scss create mode 100644 vapp/src/layouts/NoteCombineLayout/NoteCombineLayout.vue create mode 100644 vapp/src/layouts/NoteCombineLayout/index.js create mode 100644 vapp/src/layouts/NoteTransferHistoryLayout/NoteTransferHistoryLayout.vue create mode 100644 vapp/src/layouts/NoteTransferHistoryLayout/index.js create mode 100644 vapp/src/layouts/NoteTransferLayout/NoteTransferLayout.vue create mode 100644 vapp/src/layouts/NoteTransferLayout/index.js create mode 100644 vapp/src/layouts/OrderHistoryLayout/OrderHistoryLayout.scss create mode 100644 vapp/src/layouts/OrderHistoryLayout/OrderHistoryLayout.vue create mode 100644 vapp/src/layouts/OrderHistoryLayout/index.js create mode 100644 vapp/src/layouts/SummaryLayout/SummaryLayout.scss create mode 100644 vapp/src/layouts/SummaryLayout/SummaryLayout.vue create mode 100644 vapp/src/layouts/SummaryLayout/index.js create mode 100644 vapp/src/layouts/WalletLayout/WalletLayout.scss create mode 100644 vapp/src/layouts/WalletLayout/WalletLayout.vue create mode 100644 vapp/src/layouts/WalletLayout/index.js create mode 100644 vapp/src/scss/Global.scss create mode 100644 vapp/src/scss/GlobalVariables.scss create mode 100644 vapp/src/scss/containers.scss create mode 100644 vapp/src/store/modules/accounts.js create mode 100644 vapp/src/store/modules/app.js create mode 100644 vapp/src/store/modules/notes.js create mode 100644 vapp/src/store/modules/orders.js create mode 100644 vapp/tests/unit/.eslintrc.js create mode 100644 vapp/tests/unit/helpers/index.js create mode 100644 vapp/tests/unit/helpers/localVue.js create mode 100644 vapp/tests/unit/helpers/mockStore.js create mode 100644 vapp/tests/unit/specs/components/RadioButton/RadioButton.spec.js create mode 100644 vapp/tests/unit/specs/components/StandardTable/StandardTable.spec.js diff --git a/package-lock.json b/package-lock.json index 47dd31d..93cf1cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1096,16 +1096,6 @@ "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=", "dev": true }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -1600,43 +1590,11 @@ "is-symbol": "^1.0.2" } }, - "es5-ext": { - "version": "0.10.50", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", - "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "^1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, "es6-promise": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=" }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -2456,7 +2414,8 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -2474,11 +2433,13 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2491,15 +2452,18 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -2602,7 +2566,8 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -2612,6 +2577,7 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2624,17 +2590,20 @@ "minimatch": { "version": "3.0.4", "bundled": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -2651,6 +2620,7 @@ "mkdirp": { "version": "0.5.1", "bundled": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -2723,7 +2693,8 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -2733,6 +2704,7 @@ "once": { "version": "1.4.0", "bundled": true, + "optional": true, "requires": { "wrappy": "1" } @@ -2808,7 +2780,8 @@ }, "safe-buffer": { "version": "5.1.1", - "bundled": true + "bundled": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -2838,6 +2811,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2855,6 +2829,7 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2893,11 +2868,13 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "yallist": { "version": "3.0.2", - "bundled": true + "bundled": true, + "optional": true } } }, @@ -4137,12 +4114,6 @@ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -6652,12 +6623,6 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, - "type": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz", - "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==", - "dev": true - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -6688,15 +6653,6 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, - "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" - } - }, "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", @@ -7879,15 +7835,33 @@ "dev": true, "requires": { "underscore": "1.9.1", - "web3-core-helpers": "1.2.1", - "websocket": "github:web3-js/WebSocket-Node#905deb4812572b344f5801f8c9ce8bb02799d82e" + "web3-core-helpers": "1.2.1" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, "underscore": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true + }, + "websocket": { + "version": "github:web3-js/WebSocket-Node#905deb4812572b344f5801f8c9ce8bb02799d82e", + "from": "github:web3-js/WebSocket-Node#905deb4812572b344f5801f8c9ce8bb02799d82e", + "requires": { + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "nan": "^2.14.0", + "typedarray-to-buffer": "^3.1.5", + "yaeti": "^0.0.6" + } } } }, @@ -7958,29 +7932,6 @@ } } }, - "websocket": { - "version": "github:web3-js/WebSocket-Node#905deb4812572b344f5801f8c9ce8bb02799d82e", - "from": "github:web3-js/WebSocket-Node#polyfill/globalThis", - "dev": true, - "requires": { - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "nan": "^2.14.0", - "typedarray-to-buffer": "^3.1.5", - "yaeti": "^0.0.6" - }, - "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" - } - } - } - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -8131,12 +8082,6 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", - "dev": true - }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", diff --git a/vapp/localstorage.js b/vapp/localstorage.js index 13256d1..3a27911 100644 --- a/vapp/localstorage.js +++ b/vapp/localstorage.js @@ -11,9 +11,10 @@ const { const { marshal } = require('../scripts/lib/util'); const { Note } = require('../scripts/lib/Note'); -localStorage = new LocalStorage('./localstorage'); +const path = `${__dirname}/localstorage`; +localStorage = new LocalStorage(path); if (typeof localStorage === 'undefined' || localStorage === null) { - global.localStorage = new LocalStorage('./scratch'); + global.localStorage = new LocalStorage(path); } diff --git a/vapp/package-lock.json b/vapp/package-lock.json index e56df64..4951c6c 100644 --- a/vapp/package-lock.json +++ b/vapp/package-lock.json @@ -2218,6 +2218,20 @@ } } }, + "apexcharts": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.10.1.tgz", + "integrity": "sha512-gwxCvzQSNIVBhGHr31Ha+bmUsA3qWw6atMflVCIqZXBqcRvG1iMoxNV6GnhG975KpFErca5FFDg3xVHYQJRW/A==", + "requires": { + "promise-polyfill": "8.1.0", + "svg.draggable.js": "^2.2.2", + "svg.easing.js": "^2.0.0", + "svg.filter.js": "^2.0.2", + "svg.pathmorphing.js": "^0.1.3", + "svg.resize.js": "^1.4.3", + "svg.select.js": "^2.1.2" + } + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -5078,12 +5092,21 @@ } }, "es5-ext": { +<<<<<<< HEAD "version": "0.10.53", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", "requires": { "es6-iterator": "~2.0.3", "es6-symbol": "~3.1.3", +======= + "version": "0.10.52", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.52.tgz", + "integrity": "sha512-bWCbE9fbpYQY4CU6hJbJ1vSz70EClMlDgJ7BmwI+zEJhxrwjesZRPglGJlsZhu0334U3hI+gaspwksH9IGD6ag==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.2", +>>>>>>> vapp: renew vapp "next-tick": "~1.0.0" } }, @@ -5856,9 +5879,15 @@ } }, "ext": { +<<<<<<< HEAD "version": "1.4.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", +======= + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.2.0.tgz", + "integrity": "sha512-0ccUQK/9e3NreLFg6K6np8aPyRgwycx+oFGtfx1dSp7Wj00Ozw9r05FgBRlzjf2XBM7LAzwgLyDscRrtSU91hA==", +>>>>>>> vapp: renew vapp "requires": { "type": "^2.0.0" }, @@ -12223,6 +12252,11 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, + "promise-polyfill": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.0.tgz", + "integrity": "sha512-OzSf6gcCUQ01byV4BgwyUCswlaQQ6gzXc23aLQWhicvfX9kfsUiUhgt3CCQej8jDnl8/PhGF31JdHX2/MzF3WA==" + }, "prompts": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", @@ -14260,6 +14294,60 @@ "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", "dev": true }, + "svg.draggable.js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", + "requires": { + "svg.js": "^2.0.1" + } + }, + "svg.easing.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", + "integrity": "sha1-iqmUawqOJ4V6XEChDrpAkeVpHxI=", + "requires": { + "svg.js": ">=2.3.x" + } + }, + "svg.filter.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", + "integrity": "sha1-kQCOFROJ3ZIwd5/L5uLJo2LRwgM=", + "requires": { + "svg.js": "^2.2.5" + } + }, + "svg.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" + }, + "svg.pathmorphing.js": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", + "requires": { + "svg.js": "^2.4.0" + } + }, + "svg.resize.js": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", + "requires": { + "svg.js": "^2.6.5", + "svg.select.js": "^2.1.2" + } + }, + "svg.select.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", + "requires": { + "svg.js": "^2.2.5" + } + }, "svgo": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", @@ -15227,6 +15315,11 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz", "integrity": "sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ==" }, + "vue-apexcharts": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/vue-apexcharts/-/vue-apexcharts-1.5.1.tgz", + "integrity": "sha512-faMfIj7g4MEceWjh5Aux7NfEdJYiSvMK6ml6UA2oeQH444kU4z532zR8P6AvCj0x6LzV2fgv2POzt0poMaoIjg==" + }, "vue-eslint-parser": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", diff --git a/vapp/package.json b/vapp/package.json index 874bc84..e6cd9e8 100644 --- a/vapp/package.json +++ b/vapp/package.json @@ -14,6 +14,7 @@ "initialize:zokrates": "docker exec -it --workdir /home/zokrates/circuit zokrates /bin/bash /home/zokrates/circuit/zk-initialize.sh" }, "dependencies": { + "apexcharts": "^3.10.1", "async": "^3.1.0", "axios": "^0.19.0", "body-parser": "^1.19.0", @@ -27,6 +28,7 @@ "rlp": "^2.2.3", "truffle-contract": "^4.0.30", "vue": "^2.6.10", + "vue-apexcharts": "^1.5.1", "vue-router": "^3.0.7", "vue-template-compiler": "^2.6.10", "vuex": "^3.1.1", diff --git a/vapp/router/accounts.js b/vapp/router/accounts.js index ff5ce58..ccebd02 100644 --- a/vapp/router/accounts.js +++ b/vapp/router/accounts.js @@ -33,12 +33,10 @@ router.get('/:userKey', asyncWrap( } )); -router.post('/:userKey', asyncWrap( +router.post('/create', asyncWrap( async function (req, res) { - const userKey = req.params.userKey; const passphrase = req.body.passphrase; const account = createAccount(passphrase); - addAccount(userKey, account); return res.status(200).json({ address: addZkPrefix(account.address), }); @@ -77,7 +75,9 @@ router.post('/import/:userKey', asyncWrap( const userKey = req.params.userKey; const account = req.body.account; addAccount(userKey, account); - return res.status(200).json({}); + return res.status(200).json({ + account, + }); } )); diff --git a/vapp/src/App.vue b/vapp/src/App.vue index c84172a..78bcf10 100644 --- a/vapp/src/App.vue +++ b/vapp/src/App.vue @@ -1,64 +1,112 @@ + components: { + HeaderContainer, + FooterContainer, + }, + async beforeCreate () { + // TODO: make responsive web - diff --git a/vapp/src/api/index.js b/vapp/src/api/index.js index 32ee3f2..7ba3f3b 100644 --- a/vapp/src/api/index.js +++ b/vapp/src/api/index.js @@ -26,12 +26,12 @@ async function getNoteByNoteHash (account, hash) { async function getNotes (account) { const res = await instance.get(`/notes/${account}`); - return JSON.parse(res.data.notes); + return res.data.notes; } async function getTransferNotes (account) { const res = await instance.get(`/notes/transfer/${account}`); - return JSON.parse(res.data.notes); + return res.data.notes; } async function getOrdersByUser (account) { @@ -39,7 +39,7 @@ async function getOrdersByUser (account) { if (res.data === null) { return null; } else { - return JSON.parse(res.data.orders); + return res.data.orders; } } @@ -57,7 +57,7 @@ async function getOrders () { if (res.data === null) { return null; } else { - return JSON.parse(res.data.orders); + return res.data.orders; } } @@ -106,8 +106,8 @@ async function setViewingKey (key, vk) { }); } -function createAccount (userKey, passphrase) { - return instance.post(`/accounts/${userKey}`, { +function createAccount (passphrase) { + return instance.post(`/accounts/create`, { passphrase, }); } @@ -164,8 +164,8 @@ async function updateOrderTaker (orderId, orderTaker) { return res.data.orders; } -function deleteAccount (userKey, address) { - return instance.delete(`/accounts/${userKey}`, { +function deleteAccount (key, address) { + return instance.delete(`/accounts/${key}`, { data: { address, }, @@ -173,7 +173,7 @@ function deleteAccount (userKey, address) { return res.data.accounts; } -export { +const api = { getViewingKey, getAccounts, getNoteByNoteHash, @@ -198,3 +198,5 @@ export { updateOrderTaker, deleteAccount, }; + +export default api; diff --git a/vapp/src/assets/icons/components/balance.png b/vapp/src/assets/icons/components/balance.png new file mode 100755 index 0000000000000000000000000000000000000000..26af44626ab6ccb6b57b49e82067ed25d925f1cf GIT binary patch literal 463 zcmV;=0WkiFP)Px$iAh93R5%gMlfN$nK@`W|yW72W#R(E25hPR+iD)QP5(=$$eCK4{>?L<{C`@*;Z@%+=pP6|(OVp-`*a;Nke*ni3dnmMqT~*M73jr=izqf`9!I|TTu3K~_ms6`nTM6ut7K^diM>u_<~NM@ z5lUuidNYw-vP9!fhu^@z6-D71W0gl}!%Ybt4FOD|QaHlcQNJ=iY*Cd=o!<61hyC4Kfars9>QXq002ovPDHLk FV1n=M$*=$b literal 0 HcmV?d00001 diff --git a/vapp/src/assets/icons/components/key.png b/vapp/src/assets/icons/components/key.png new file mode 100644 index 0000000000000000000000000000000000000000..176cced6e11070e7795817f9f744ab5e8d337a1b GIT binary patch literal 1482 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r53?z4+XPVEzz_=>FC&U%VUA5|e{)GPp{r~g( z{^#|<$lm`mXZ|mQi1dOO1-&3CAOfn)>-`S|Kz74akQRhqh#DjkWMJ?Avbi7ae0IUAgh7efx3VW0}BG3SJ3yrXd+lK#0$Ou z*F?;32gX)!NswPK1G8z-tV8$T{ABfC{eiPG`HAOM##WvU3YY%9zPMxQ%eRYyc|(`H zzZS?6a`S0w#`7(F0z12y`m@`6H*J5wACq+c${Ke+iy2=#Rm`TY{M9kXP0(ldH;!8Y z4-f7-zMOsSB*mF?)m9xjaq`{|=jvkf{U1NsyBrI;v9RQC;UBhnm-ksWG;cmz=Gs>9 zeSuX^)`5$RH?n{ZW6Uq|3t>FJsC*U!(0QINjv*0;-_Cd*FKj4r{Qa(IFYlKNB3N9H zMy*tO6t{q9;-ZKxUDpgE{U# z{Z>)?&*8xP&sBHyVwdLDvN-!DHg^>SYrK%SF7r{k=Y#t!*@s^;x({|vThTo6coeVW zmSZA?A6pbVU1D0N`<$$3o9K1x`PQW?m%WuXl9jf;bWPN2`^{&iO=+>S%^t5S$-lXa zSI9b7X!3%3+uNH%^mZ$=|IWz1Qds=2?Ax{J?q>VB&n%uh)$n?Gx%}k~%jMT>og=RN zY%jA+_rCKgUateyzuwUjR)&99sBCi|nOpyM{> zyOSo$sH(fWq;NmFTi|1M{Z=8*m+o`N1&roSxIW#kqf@alo1@att8!Ku7xQeE{axpN zi+QuRyB95fc;-f?m&^fcyEE(O6sA}@udEgJ(DMoMJ^x5=*A55sqB+fvL}sqJn$&dU zb3|!z+$S2$8$z}+xI4aECeqP1 zhbd^&T()Np@1~WU$Oz1H&h2CCYq%o&a#4k3>5S!#htt%m!=udPj>Vk{DxbqSVQ0H5 zzj%ebrJTdYTdAMeemg8ux?A=6N6}7)lcAT6|I=LYxc88)%rp6<6rN>t4YwX>Q++&n`d}!qj`|CnB+7jVO zqH#4gj`r&%rkA~|m>&M3;{DGL7k>pL+Gzjy`#Z%$dF`Rij43u}T|TR`s)<~8W=gTm zKl)mm#Yp}^!}rKwrcM8qCVbd&;6s4N+dt9&g1S|;U%tPupW00001b5ch_0Itp) z=>Px-zDYzuRCodHoo%QUMHt6t_MY86W*L>eNYTp;Dh-1&5Q*xhAfX`%B}7yZ)wj$_ zQwhIDzLeFc@IzpvA1VV&OGQ$8LHi&qcZ%ejX4b00~~jt*%FJdn_x%@+=n+SEDDslvSNZ zxM1|W<-G!rY!iYlsW{H6u$^h813eJE?;6Lg9_;2}s{@0cxCT9Oi7vlcd7uZ9!{|kL z1P48FF?!#j-DmQtv&!BF~qlJoa448A-sXj9B%3$Qwv z)oks;6E9+>XI;k7ycM+d=|1L7j|#4$nad4L4RvaEdu6GOOA_}ho23&#qvF8~rO+qU;} zX5NeFA3AuxybkdVKOGnL4M2iWF7uz5ZQYF>lp}FaC=U>y!*Fg0v9ACUm~osRwh1C< zKT|sHs6%`+PN(kx5)63d-)+mf2jTZ|a3~KD7osO>A@(Ie0t0w|*_Jtk@LNj99W{s* z_bru9-vT5UfOi}aXCks!1xJ=)2k6;~0%BhStV29ew#?bU`GpKj6<0y*dw_L_|CMd? zet72{DsZxlAj;|BexRJwx$%*>rU~HY3s|_`t^){o4(6$q zVME%L?mB=3%Cbt>{N!J?3z}SSR{}&Ybg}H1-w6=A5+L;ex{3hASq3+jw{uSHx@C+! ze5fZP{VLXNYn|cY`?$w$6I@&Y*?_D!=D5eEVmXuO-g8$2^uYk6gZQ@k&lfixV)x~l zq&M%ob_h33C*>2n0w9KH3BSOjcqwyey10%82xybAg|w@JhZgZWQmG8jYueI`PV8ua zj^n}SkmUx@al~Xeg3n;Ybz}(Uw?i;|I*dK8GRzY~0gxYq{xMk}Wei{gb$e~$ z>!Dn?dJ4|wk#f28sjQb(JTgSGsEFWsqPh!Z*Wghd*!Ud8f^|_$eNz;9KZIqN6CaeX z8USPF?E0m;VmV@bq74K!h!JPVGk^y4~QGu0Wnp8X~3&PQT4!x1Caqzyd4lz1DGN_ zTH{1|pvnV>0k#8TDge`jhl&3Jc;M?Ja10i4AQ7FqAkUuIGQc$9k^S(%Qvgxrfg28C z8E9S*TLvh^$c1eKjV?D5{Y;0QG;R&`AZJ40S$KAY_ZQE@5 z27Su_sd4mbRSd*|F+yz01Iv&kc$dg>KVFCTil1&JOa&k{AT@|;51iP6~7T#w$ zH{bTFZq@_iF5D)R@ta=`g?YiFx^lZKM-XvEG7Z+zu*D^cxz4t0ms->gx(25Ez^ZHD z*dB;~h*LQ4PTZhchzrNd*#Q60HqD*2LUZ_&8$hxJ7x?=T=Vy}%YaUW7S~?eXy{UF??ND`(=6DzEosd=MN0w_JT2 z!Qo8Vwl4J3q1_lkpU1q(&y>S@fyzQFr@9KwQsKAKZR)C59|0sswz ztyiB_NPPlfMgf3$gK{sPHvPa?F2W!IVnd8%X~2n42Ijhp9oOB1|GZ?ftk~~yz&n8N zuFilHIVrOU^gzlWh1v&N8Q(1{_H!KH>e^lZXl(!qAs`;d^TRXo3H3*j_y*}X zw?wD(+)=X`wi5$lK}=LeMuxCT3B!6K9=*81<6QYPzUrKAmKj3)i*N8B)AV?A1^AycLCz}kfQb*qz96u7YTEQ=AKChSxh7r!$|Ng-a{8m`N(2_>iRi@)z1<^wNs_W}vIYVD6eVf%_#m(A^)Z7&BmMZPmq zq>%iNu6xOm!qwdzO?K^}6Q+s`Fm`dMwI}jEv`_7Kc!g#FbII*q8yWAf2ECB_(GO@q4{(P#Rc+l*NL#%P zIWUccG-&3WuOU2;+k(CC>rJFvHzBV@ZPEpM_<@UULe_ef|$m zBK`Mhl{S`XW1F~N0z_B6T=_#l8SoSw*;8aE0^A@=??G9dO*0{D3p(G zb@l2cq$79^kGxUOfb4fB^i55A=7#jwl_BK%B&gHociI8LDE*~-JO{@zd){jaK&Tdp zbcZwt$2-rh)=F1Zz;gAklA^lHN?z|S=M)SpJSKJf0ab6qs@$m03JsLkF2mibRG67?+pL1WiM6M*_!2hcB1kwcK7Ng9tK{s!*Jk zHye8K9hBRbdHX@f?L?_5MEQqPL+_PW^ci^ZNuE?Fc}WSgbHM{3nCDB<>@4rLw>Ycb zVH)RLpDVtP|I7`i2G+LLP(vQ==E6ax_s^(zuA+k$zJ#r2&eOU@`2f+YcW1ZT#>J2j zYz#K-W1%FZU3uKd*czbiQ1hqcG!q$8`1oov?7Q(WLgP9vLM2&!(lol4Y09{WOX>s` zZ{=JfBon+fr_7_S#{an71hdqMkrLdoNwC=7rHdZ>Io}EFczc zCt&Fm?n!(NX}hL`Pmpw6eUPl>o#%dBN(gZVvwkHTQ(36etb5)wkN+p`GR<62GWoit zMMPW*L_HRkRpDh7K(Kk*%E z<39_V776(kJNyV=Cl5dI`ZF34*0Z3ow&|v#xNirkA%a_l(`c5;_Bq0l4%s;~2Fe7APx zMPue$NN9t&DkHv4|7q4<*|kCaO*K*y_b=g<0tI_`bPhygnx8+r)82aEV{jR5cem1D z)F6C98~<+6cR9NW(k|$SU@02Zl^)uEOWfNADz_7FL|kuIU99xEW@G`#w%Pg{SxAq< zFw5FsAIq-%_HhbSejI=h^79cJdh_x&6URM{pEt^WwEZ?hQS;`tHsp?YfODH=nYn;) zgywVqk6i1q-7_nQeQZ&N#lIfbms}VH`duIYV{pl3=N4u5vpo@eW_mex_oVxG2R8Tru+#@19Q4NEuqL0ak=6Cma6j;I%k6j2nFUZ4Z9!f~obW;a73 zv5&`~R z+GY}o-jZ@v<#Q^%CGUBN3DW#2(XRMT=ivb2Bd^~g&%|s{5qEVc+iYR&EN+b{2ltvrh;YfhX`~q>sd-e$CH{6o*6;VE% z$zerijq2`1Y4QBea7wPovCXnDG2}-n2yu*>FHz1l7nl8p_h3`)PizWHHw)rbm5EQU zi;@Xk`$Tljo(Ya)>Go7qqah-l?BkfD`EP~afEgt2W92VciLwocpO=(;k`3_IRAul$ zD8ICEQL;3IW}!Hf(47ysDCm|E)-9-mUpfSEGt~P~SorZAt}rz9#QtZ*-60&X{~x?Q z8+VcB66e2@bA)xjBvQDe1wwf%9<%cgzWaKM({(tYw1haopigR~`j#Y1cQQ?nA`{|= z7w5j96iD32%vmw&HhCLdg|{Jf{;6#I#l@DjC4UFM^;|Vr-1wbty z&V|%7uJcS8;#Q)bw$FkwQ{et?Iue0GXcvB~f02`~ZO}L%r+?+m6?eXRxCY!?P|8@0 zLSu=DVnKKpSUIvlsjMCWQWS^_wC}dUiARR!0JVHM^G5-63JB^UB!-GK5vwVmvOjw3 z8_M(`w2T55ulH6$%#)yxAK*^@y&U$%@#xGK*JZMhr%!nJ`xEA2u`WB=mCQuGkS3u> zE6R$e%f{f3LbNzAu@|MkY^+Yx?Tt`FA)l?|Ml79!7QpA7f7Uk4{ zGmXY89GuhYkWB9XwKI_92-O!2Q#Qnb6eq_z8`<}v%hZf-Rl6b z<(k0`hcB8=$dBLaPtp_KJOwjUvTm7lQzd;HhdJ)R+q?(jSk$@A0v*RgtR~k!Vw}z& zD23E0eZ%{~`1FWolOcY9?#jE~eT4(bU~qEge_M1iRwFQ@6ht2G>~*Vj}^9 zdTV0}!MEzu=g7WUe?#xHh4p$@Y%DPQ=$RsZ?-YjwZmMqi6EDY#WRc|+}{=UiyG@!;s>$g_)O`~!4U z3;J*&eWNXj;4nMhxVakE_k4Sz#QxX)wtwiC=#-Z9*jax`2>@hxwAd1%7oV)-j1}eBu0I&yB{NxCl-y?Y0vO4DM^RMJY-Xmk6R{d~`t8wGxMi1ET zaB*%9zeLPUqewvPYQE847Il8MtdmOrdqtmd6=n&dQMoAlY?n5nz{T2D@jyF0(OeRc zI4i7;xt^i0wpG$o{A|9J28|P`?sRW;Ci>JFwx0LM#nxdjr^o2U%EJj6rgkO(T_e+A z^lH?8WrbfaRSWdwkI-Mp2U_eBk$+1zjPKIkW4KQl@0+hJn??d!q(vWrO|72V0srbw z31jg={2FlOnlCHNqFPtcE*(OZJQ(heM^66?)efMHuW0e{dREqpd1yD^WR=FlA6pOd zYCPW04%5FF8x4kO&ZK3KRdKa62p#MD42PLqSx|#wZ(x=Yd8(_KEQ9yk8$`jcAKog! zFr;`z*)BCVdvN0d#5 zZmo~aG}I~m74XAhq78GxQn`+cf>ni27w?p8(}g(U1M^i&HLedwUiNM_BoXwFVa-CP zOY>W4ZmTE}T%ef-8=~l=kA9;B_2ZJ$EFvee$<1-blX=NNuH?=QynWClqw1^LE9E!m z(m{LI8oBD;9N%{Ze}~v&wD#0PggP*KS5oOtH?X^#8PwlVQi?($)V{y_T8P9MBt}4Y zIr||h?@>?xg+sQD%5l`KkB5I#&N@}{2py*nii`}zMTWJP2?nFPspZ3Kph&E~nNOOs z;Gv43(1Il{9pm#iPlG2sskeu&A*%Xp>p&GJ+Lx-(Ar z0&j6;)c0b9xlBOEvblf6G=rifOnVTF;sunxWHnJ??-L z?(=N!JQnYIB#6{=X<8ua`Ye|oLe8%qdBRJ?D>fOj)LQ1W5Mc%O4+_$n1^7%0mm|vS z0bQIG9uX7tPcKOi2v-gEnV+z`#b=7vMsOEo!x)J5K><>45AZ&~a>?2gcKvu4_!jCA z6kA=UA@Ii>nyVu)(_~A*`o5LXcthLIqA5sZ*w7vc5%^{Js$34x#b4pE#kMy@vR)5B zjnWJGLr_8M&$#>&@i}h6_HemmlC`G)qhPxT{6)!H(uzj-r?t<>DNTDYQeQZXbMX>g z%l~t+81(j`!${}Z-|gU=jRo`@pZ*#k(l&zB8OtzLeV#ev&p~%C2%+uK)nS>BSfd~k zZq8x6Q1~`yMKb+H9>8a*ayKr0GGlaav5>Zr8lS^ox&=PooAW(2OAifUm&-4NG>YTv z@6>PBN74s?l)kuFF7YZQ4C(Utm94xiXPaZF1XO59?8Ogpe83LXY@CRL;husO7vLa6 zhDxR9=FnM0|6bR}TTEd&)b8i+Fmo2Q=bu)x^IQY`#bmmg>+~BCJFPA2g$(S? zrmv40Mb{s(tg4E2JwZG|D_D>xiaEU{8|4TiOIWxSl8*sd~&ydR&sh+TpA$pWB%=u8c(Szjs?!lwDINyTHdmW{Tyc zA*q<|gxvsnO~*@c(n2P3;&i+%!suzfEgj(f);QFeMr3&T#@6*ti(wU)P=)ILQ=r`a zawPUwxrUWP7|f)*7$`^o6@m4kkxCB&<=}JJbNA>`7&PIR(GG#mlHx&ukgt-zySBcN zUq9r+2Ht6J^Eoumsh-wy{vl-ZI>{Pm!#6Lx8cg|lF=}j1ORljODtd1*O+l zwwa*j%`>XXCbDKxk>T`)nyh;FLPiBG1j@Rgib6w3?{TkZ$5+ z=H*8M>-;CAD0+8lnw&KWOaB-yhhN(JI&?%W@<=!B#~2j%)ksC5@bOABO;9)e)86-@ zE*Uj-w2ey;<(Jp8&uQuaCa{`~DOFQ3ketoeMkV_(B51}QTgvrJ#E+gYc#cd73zk_O z_=>h~wWYL^MI2s@d4TPYiL$!1VZM92pz?I=TajU1aYqXWMzP&xOB}Pc>$NE{fZVw+ zwsJ>uwT^LEmKT(#U%3KNHpw@UO|XHZTaT3Pk@^zjLpRK*)dkunEBW<-Xm|a#{sgF$ zdk?*;9A;3XKWMWO=$NYh~>PPp@q258*22Z~31v zY$wj1|>q_%7s0rZZu=* zr@T+TouzMsgWgiwa9jy|gMifh{XfjTHJ{(R6!c@%gC$|JpzT#g2A3GaxZfdqZ;#y31+^5BFr4=yuwAcQOG~L~D)ZN0ow}l)rMhf1uSloMXPfnX{(1^fE^~M=jmoZ6Y$TplKSKKr~jL= zbdA#Q%iYzENM)x8_jULd_V0x9lPH~|L}=2Eynkq`75$o6sVSAej%AX|Es01T3<9t} z4F8VyA)mm$x~jT_7MP%p$hF~YUviM4?eD4?7Dy}ZqN=R|6x^+!$+JF>V^waoepoU6 z)uYQjvWg}sPh|LLJK@VQ&5O)l&qMt!furOG*fn{?$hpF$+P=>FK$Y|;4d3`ms%bdp z;Ndf6)3SY*iOl8i!&7H!XZ+y~(bqYRz++COZFv^kay_zZlWF$tW0ZqZ7-vVrpw}$EJl#Su4a_2hj1jSUA z7dwUK!%eA793>UUt-Pp7USwug)R*iVn;7T zmua-5r}@{=7GS2PR@rGw8YO~yKjG+~7FFL3;3pPqwDr#1AN)%z7#qYaBI!5kS8*M) z#5`1*~fUDm%Vd=TtP!*Db!!;NMi+!!huT}3B?naZJcwyFU?4V@Gh%ck<-syMa-WZ3LS=lCN8f4d z3WfDkVZKSK)^CnPv$Ea0PAV+#7^-GXnh_ab@2}`+7m=DaT?)ew9i$HpxLo1OvdJif zEkzhc-Vuu|cMBcdOYro`$4%IrC$Lg8Iw)nsv=00s0HrQpbLxtN*{?f9Q`F zWx_>IY-^8gqD^iWhd?u^h$lhlxbFqL=E49oA0(fZV!8pshR>5v5)uYYC_S(@O+U!% zsy{P*w~5pM0@GEztte-Nj??52QdATvk@5iR!6}N;)sXr4pKlBzfz7m)L4&4_d^ABr zNG@W(_4a>#G4*3>Nq!vw?=ULzbD%XqVotk_3%orXjwGR2F(WCj%dP3|f#UkqirG7$ z$ERYyU2Z`*N%aApvdg(9cdY>pklz9CO`@o@0lYW^&S=jQz-jjcTf)x`UJZa8(6Z4@ z?BFc&g@#bm82_snE>cLh9!9~EGlaUqF0MSJ zokJm#Y!?z$A^>?Fy_ub3uUnIW7*eR)VwF&$;cjJ@XUWjrUhX3Qc8+d=Jiw5_e zbbq2Z@^~Cs?~1#wA|K+MKIimVcPm%!y!0LKXHEug8Dkn<{!^wrbWB@xAF?(Rn|eH6 zz}fIbjAR+9!A8O4o~Yc(l}T^`hP?798^gufjo!o4gsyZLspk$D}&Nwa6wbt@9svIZ4cZI-NUAyc9!^cX{&pM)yl(sdl|GPx$uSrBfR7ef&RXt9_Fcf}v5~mg7p93HdNh=h7AzIc@8v)_A8iN<3{2AGXYDQim8k=Ahj~n+d_n=$o-28H#V<8l4V<@^+8!Mgb6;cz)#A2yaJUdYNUDoLywO`J~IB3^;+4L!62`tx2| zKpt{_Q7FC77|zRRx9@|=ue-?X9OUQVnlR*5A?mgO@Xvv-;Tu*l9@po3z!w#sMv6Ke rX42v!H_QV;Kl#J)ksE>W7@C21Ht4BaC(qm#00000NkvXXu0mjfb>`d< literal 0 HcmV?d00001 diff --git a/vapp/src/assets/icons/components/plus.png b/vapp/src/assets/icons/components/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..44d28935a27119acae8f1d50f1113c866cb95645 GIT binary patch literal 3741 zcmV;O4r1|%P)Px@S4l)cRA>dgT6u6))fqo`drLwfAw~(ZRKylS9a@dHEILuN!bm}8sEG70|Dj6j z&;hYJt$;8Uw;@HuWz^2pS{;dljLRSDl&w*z0Ranjn?MYL5+RuFZFlMKciuZU_r1LL zl4$6eIq%$i?m6H6e&<`xcfR{HF+|1lJS|9S?b@|j_rYhpUcGv?7wpqCE$cq`Y%teF zUs{Y%5I~Um!-o$`nr&@uMQK-6RY?F-rcCjH1VMgRfJI-L50C<)Km-AFc6Lg7@pxQI zBogx4w(YEUn5HQKgu`Jk5{by`va&KS7oY++SYT#8rt|gX141bfgaSb3SzXuF9LJHZ znx|-zL0#9qo}M1r65zMre(Qmj1jv@)uwZfu=F4`Vzy<_}Oa&zp1k&BzttXR7y}rJ_ zV%Dr#bE47cEYq~c=(<)7#z&DG0Q}0fS?%Lz&z{-&{PSDi+OT0`yRLV-hGED`fT2*x z#p1YFBndDV*g!yKse@dKoS%GP07zFr4jw!>f5eCpw_BDq4O0iSKp1Do%5>$>R>9Hixdj!R&rrKK(av3knRsD}N4DhNoa3ME53QBr|==vYO)v9WQ+=+UFs zgNdKztihmeL91!sz60xK&%Wt>UAJt*=ynJUHs-*_Tr8HWY>dGAv#p|lf?$+XCQqIm zYG`QKP*PHI`=B`QXK-8F>F1_Rt6TH+*KG*`GtC|w(sH1}POh|yNlMT69;IeVG71a; zR&L+E{neocLmsNCDsMY7;92 zNrj<;Rw|Y9)sMW9$9#PFZdOT0*$ur}EEY3%@7_IQ*sx*0$u~K-uj!+1@y@#);=?07 zqU}sdKCT*RiJ#V#i0h^g7qyp`=1wViKW5CBUqAKKrni0V&E#)##c*$e1u;!aDV=P}}-dQatd)NwNQMcb_3GUnT_Wt8cf9%chiy zdv325V@J_8`Y&_l+_=(p?^qHFSza=k0-z{r+~ej8J{dx|sOeB5Lr#h!wWdMjpv4c@EO?0Rb}ZIBwREKpqi0E zGP-&7crofc%cs5K&#hv`1Fil&pK*)=#km71<>lp5XU?2<9sxo10LU>Nr_>;ibXvI% zLIR@uBk`bg7B5~f2VH$^Off+RK%1eO{c+i7)$O;9`#VMBzE1yMU2rVta4u=|SD;45 zop;_*=Xpj5U@S<<%#{*pC=5F7haD6h&oB)8xdJ0cR@SkIMW~gSl z<>w2J_+2wDD-)02JJ$DriiSU+z(q7#Qi*dDz<2=S832Ro_<%SqgQ3^U(SCT+blox? zx@tf|7ZjlX-MjsDOq0kQM*F1~jYdXdyFuKU288fP@|fn;m7ZAZ&Nxl@*No?|(O<)-V(^9||KhyA7RDx6mZj&p?y088^t^u5HPZ6m9C!dwT7PlHnM&ncgxty%#B3 z#o7-(*!Q1e&x6kj0@}FoFFPSlCpb9wno;vZ2s9O_CBJVL&oz7_K0B5WvA8EIui3|E z3JmG2-*Q5@I&9faH9Umg=QuN6E z6GY9=Zn(%lK0N)>DZ!erP|YYAf@%IDE|#rn5nI-b7v;m@yb6>PCr*Bf<93&(2@kg7 zBISi6gN90{uSuTCyPBRQA!algf@_-YvVHHpf4`^(7HcV~Eo;Zi;Pa;IE5!H7XTOOGEv`a*g6h)aW$hT@v)MhQ_; zFK)b8Tr@V^hwPVMo@|~tv1Top@78tE>AIo|{CApWs2gXam}Qm3aV$zyR8-hCH8sx5 zFTd>i5@O<%Sl%!x&TlqAjoJ-y8V(W@B#`Rr>WMF0 zxa7W$j;`J#sG=~$E%F&(&!7LRrxETXz#D=-E$KJ}r6CPY@}2_+ z4!-VlF+>-8_WWyCZSC|;1cP%=9E**r$FZ-XHITq(UW6KB$S)M+k-U;;Wj|!a2gDnS zE{~K*1gqm%= z7*s6-#*u*Ve(;hl9i?uH2R}+>)XMY3&Ye4Drk@FVd{sjVHWIS!L^u?ZY1ydj>Znc> zC)y}N_~;{#JapB(c{k3ft{(Lx=y=uwsh8xo3};$eTALdhUfH>3&3cA4DRe=dsAf_! z1QWwTqPj8W5$BmeyWzMeUEv%ZFE%l?^M0N{k>~ zg#TEdj*c^D+S~W;-TUzqPdszz^Upu;0uUP#AwhuAq1Mu7;*R4HOq^g4>co>tJ7E~1 zq-n-dmKBm8!U!f;I((NeA>Jq{@q7+l_A{sehU8v2#Kbuw2qgXN2$O$^T_X@m1d_rw z?;#PWBgZR`$tJ+!WGPje?@;fdH$rG7Tr3FoIl0Hc`MA=X(E(&^24JXWW*ln@Fjm4e z6G_;OT_|Hp{#p7+h@CVt9Lr@68Mii87+}MaDS(3~w7?h^*F}m9tYINws5(x09vJg* zu0{mu%HuLsFjoy-9yGx`05JlP(!s__*X%*%OaMuPNK3{_8b%nBaV401jsP_Lk_Cu< z97QJWlF+ni=3IK0IP+$sdKxJ?&rVT(so`t=^0vSlhBW;4gLa4)8I+Djd z=2ALLt;q-g#%=--U9*R3LBnkTp_;`d80d0v5Ogg+JQ$& z@skF>0@!v6U>xiP7DVL$kcTgBrc5V400m z1CTKGnpg^d5g-ssC+n+tJ}~6744eVC|<7j1Lyr$&X5+K_` zMTIR20LM|S)cC;y@#m?F@7o3el2#C8KH5R%`TV;A$ff;1wlb#~S;JW<00000NkvXX Hu0mjfYv2sh literal 0 HcmV?d00001 diff --git a/vapp/src/assets/icons/components/private-key-selected.png b/vapp/src/assets/icons/components/private-key-selected.png new file mode 100644 index 0000000000000000000000000000000000000000..205f10f17bb0f1e3b19e9ca62742a4d69cc2bc5e GIT binary patch literal 1924 zcmV-~2YdL5P)oU+kDC0N5G8 zrs1Ov?PGB0FDB%2Y{7IzUv17&jEM< zzzmXqlx$}~wVnnjX;}bg0GI$^)vALXR(~#l>j2zH^4GF$_awkDO^*d|DS)-h4lc3Y zmjEsXa9^3}-E#mX?E~Oi0GlNOsH@of0L~`)R8E6E15lFtav6XNat6?WvJ(MZL{cej z_XI#m%ZG*ifRs)*P-eO}ERsLR-qm%0k~RSF7=SHfoo(^lTH?)M4uG%1cW*Xpg-?}@ z=Uo8%lbl`DudV_N@LmV7S_Zst0Xzx7TJlVhmPoQ~xHkZ6_PzjC&UlZDehpwu5yY+m z4Ab_N49)uhz=Z%FC;4Y42uNB2z<~fR2e5HQeQV;5?S81P01O+(BSAA_WAXI71i(FI z%#7iU2aqQQ(`Aj=%foYP`$4TXmTm#G7NqR9o~lQZ{4sH$$;BjjIzI$p&%{a-NqPqS zM;Zqh?7SHXoxTRZc_jZ%C|jyXFxYK#+S^HyvBT}eMgfKn&rC3q$CI3tGNL-lNIDh3 zEeUPe*xqX4rKD+qCjgin>FAXt&rcXktwki+FFq@w(GyADJyfnSfFUq2E8^Qe?wzue z)3zO;Fgu^k{Me^AkdXiQF;8V8PIyKa+%_IA=$tQA>_H*DO z(ys|k0JN6ad2b~?%vmY-bWD=h%TynB=)G5wJTLW!lC%r}``|tiY$ubO0Qh1!!)?`x zStN5pOJ1KGl5!*`S3I3J%UKg8c`aS9;6*Pr0q`>bjykuJ7fJ4tLqd|LyU&Kp$kimz zO|2;DRRG?k+R5xD0DeQU(9WoAzrd3gMGf8fp@xF%v99&R-ZW9212e4F| zPTWlL^o#**2;kGy@-52!Kr%V3FX>JI;|tz5uiF3}WsaE&3;Hj~>*Yrk0RBR9xzzfS zrUDq(ZGc5ncsfaM3P}>qQM@yj{oy|*xk=K?{xzsy2C!4Nr*P3G@;b?)Mf!hzmt>>d z#(5dJljO;%6(xDO@Uqd>O{B<-$+iO}8NltS5Qdf8f#ho`b;IG457xbLwUb87n7aU+ zRM3ghB;QCGl*@#HIa-pNJ2RE!VHxk)9l-OE@{`K0C8_=JfPIqXoR@augq|W-uhlg6 zW?~y{RANUQB=y;D^68$Wn*f{^X}`0soTM?%9*87FzChBElq?B5vOSWRCfe{moaA>o zFG%o0++62^2?3rv@2E+UID|i{LbieZ?Bf7zx6tlvx9tT0j`S1-a$ELGlD#9>FOtrM zvohd$6LA7hY^{kZPcU(uRAhK_NZNoeC6b(SvO}bDX9B8;)7E{f4PGfqZ7NB!>t+`& zCiRE(`v9Iz7Vq#eW4r!CrI8NL>LzIlfMa5+=e(X;k2U)Q-q`@0j}w!657zqxp8avJ zdp=BxNqwmueFE>ypn1Ll6_fgsi$*#;Nsdw85p2j9xS{9uq_=g$&PyF(O1Y4ucr}16 zQp$%i^(0u1WX+RgZ{@0R2%o`jenNZo6yK2sFXUnynsal!QN;Y_R#59nGH+tqN^$&RHB)lF1 zSkGm{rs4Gf!1}Jcb^~4)0oHrrIuqUjB>f)*wMfI8Nc~s-y9uu$4RjdZ(eL|f|I>*~ zc%{Pd!Oruw({|!R_Ur?uVU5ij_O~Za1@TQ!XBoVilVq7Pt>zzVX2L5yZ6*0m+6^fk zYgdM3$B$xj`o|1-zl8&!(raG70{lMVk8CQ#3!2`S8W{U`idx_;ssL+)x2OV~LeiI5 zYLR|j1B<5cy(E44t`->pj9`?sVWK9up)tq)ngjyI9g8n?N$J?ZeI@Xf3MkjF}^W?vHIE1 zM;f5m00#hLgd)!e00#go5~x^xpn(H`6$wPx#^GQTOR7eeDU>F4iLVyt@|MTac;C~GNW-|Q$FHAr^ang*8Z_ln?6U(om?6@Bxvpftd9Kg>sQwQ|Nlj?N)jQ6oJ=v4gA4~L`0?}C6>=@XYXQhmkl~bA zf@}e-sKA+v85tR`va_)|0_oQn-o+sRvH&CnN;EW&WN=19PM)A3`uXekeju%l?s}NZ za5x-Y_!&q5B`1Rfe*XR)ip_A49MJ$$T<76bPiZp6Y4E7TfP?@520)KKN`EUU00000 LNkvXXu0mjf%iePx#^GQTOR7eeDU>F4iLVyt@|MTac;C~GNW-|Q$FHAr^ang*8Z_ln?6U(om?6@Bxvpftd9Kg>sQwQ|Nlj?N)jQ6oJ=v4gA4~L`0?}C6>=@XYXQhmkl~bA zf@}e-sKA+v85tR`va_)|0_oQn-o+sRvH&CnN;EW&WN=19PM)A3`uXekeju%l?s}NZ za5x-Y_!&q5B`1Rfe*XR)ip_A49MJ$$T<76bPiZp6Y4E7TfP?@520)KKN`EUU00000 LNkvXXu0mjf%iePx$uSrBfR7ef&RXt9_Fcf}v5~mg7p93HdNh=h7AzIc@8v)_A8iN<3{2AGXYDQim8k=Ahj~n+d_n=$o-28H#V<8l4V<@^+8!Mgb6;cz)#A2yaJUdYNUDoLywO`J~IB3^;+4L!62`tx2| zKpt{_Q7FC77|zRRx9@|=ue-?X9OUQVnlR*5A?mgO@Xvv-;Tu*l9@po3z!w#sMv6Ke rX42v!H_QV;Kl#J)ksE>W7@C21Ht4BaC(qm#00000NkvXXu0mjfb>`d< literal 0 HcmV?d00001 diff --git a/vapp/src/assets/icons/exchange/ongoingorders.png b/vapp/src/assets/icons/exchange/ongoingorders.png new file mode 100755 index 0000000000000000000000000000000000000000..0192cd16566e081e20fadd543b20fa6807d372d9 GIT binary patch literal 319 zcmV-F0l@x=P)Px#`AI}UR7eeDU>F6%J_H!iefaHbaplf%E;x&;KBdq6HWn>_FFF z14#hs4irfeIan`2!(s$)oo004bQ=i@us REoA@z002ovPDHLkV1iG}d~E;# literal 0 HcmV?d00001 diff --git a/vapp/src/assets/icons/exchange/orderbook.png b/vapp/src/assets/icons/exchange/orderbook.png new file mode 100755 index 0000000000000000000000000000000000000000..34af08505007f6428a49f3cd5a0654b5bc7f296a GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|wt2cZhIsHM zCrG?%5WLC!|NsB=-#=f6U;h7}r_iC$GsQCK#vGY91;vpQOr3c3-NhDb{r=rQ|9r!b z|NZjydrlZiED>)he5JaAVYy!ii`icvmM;N1wpok^6=Zl9T~tt#U}6znAW~*<^?v=I zs-p)!#ETqT-g0cB&&p(rw!;anqLxcFPh3~{`=aV%?FX4G?LCJM6tE^TitN>xBX3_{ z#*l5?r7bhZRLWX9T6RNN@`5d=RNkCixP*xz;Z~Hk{IVFJ2N)PUUHx3vIVCg!0PtaA AUH||9 literal 0 HcmV?d00001 diff --git a/vapp/src/assets/icons/exchange/orderhistory.png b/vapp/src/assets/icons/exchange/orderhistory.png new file mode 100755 index 0000000000000000000000000000000000000000..0e038f3b7c74abf4fab03020cdcd9f327b50c9a6 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|7J9lkhIsHM zCrGfeI5h~W{r~)Y{)2j+|7k{l{_FDyD|e@*)SNzYV9L33=QfEgkdOOlufT*i*zL4%8kva$?SL zh8~3(EH_OwCOM|@N;CK`Tl|wjY&nP!+VS$?Y<>^j=7yt&HvA9y^x4=dB3t|~u8{F{ ZW?-1;5mfeYStH0R44$rjF6*2UngGkxQW5|F literal 0 HcmV?d00001 diff --git a/vapp/src/assets/icons/exchange/pricechart.png b/vapp/src/assets/icons/exchange/pricechart.png new file mode 100644 index 0000000000000000000000000000000000000000..14b9ff6885b7b971a374709d248eca25567e8839 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Hh8)?hIsHM zCrGfeI5h~W{C|90{``NQ`gF#bMl4r^wg0wEY_#lcZceqn(e&QF&TiSFhX(F851%AV zXDx0J`@^0%gJ-G9rb?eFQf?mho?;5SdnOz-sGOwJkg3!vcSlS>IHjW2p@*@hiF-Y3 zi;1wZeHP=vfJK!88y^%iZP>sh-ezFh^24C?gvs5S4=fq0c{J`S-}Y0KPEljN!M@-W r;|VtIfD8>E>m7$03*9pJC^9fq>Dt_#ecy2l(CrMKu6{1-oD!MPx$QAtEWR7efYlrc`kFc3vO3nnLErR55g)D&EV9(sg?M1@4dRj9ZC1uf-rg{9yC z#5S>+ADERvLlSQkAW}4rXZ-$n;;}LR`Ki4>Nh$44k|V=UUu&0Y=a-X+01Eh@i;z~o z5W-;-<5^1Pfc<+~j5bF^Pt}e+V*4WgZ5fDlE?hJ*T`_znbA?t-x@919u50AivCui! zxifqA&x`&;?c5!H8sL3d7sCN$_zD92EcygCI;Mc*?SqRSBAm?dMk^H%A+g%}O;3t2 z$60J2_svj>wu2wnws5%$28iHbdVEzHPWS-9t8S_pf8M>@0d!5IBzl**I=7AmKXOv}YMmN^l zhmN=pS80iQfm*=ti}018B{F)BcQVI)Ga57{;2joBVd}L%cbEVG002ovPDHLkV1glI Bu)F{O literal 0 HcmV?d00001 diff --git a/vapp/src/assets/icons/exchange/tradehistory.png b/vapp/src/assets/icons/exchange/tradehistory.png new file mode 100755 index 0000000000000000000000000000000000000000..0e038f3b7c74abf4fab03020cdcd9f327b50c9a6 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|7J9lkhIsHM zCrGfeI5h~W{r~)Y{)2j+|7k{l{_FDyD|e@*)SNzYV9L33=QfEgkdOOlufT*i*zL4%8kva$?SL zh8~3(EH_OwCOM|@N;CK`Tl|wjY&nP!+VS$?Y<>^j=7yt&HvA9y^x4=dB3t|~u8{F{ ZW?-1;5mfeYStH0R44$rjF6*2UngGkxQW5|F literal 0 HcmV?d00001 diff --git a/vapp/src/assets/icons/menu/account.png b/vapp/src/assets/icons/menu/account.png new file mode 100755 index 0000000000000000000000000000000000000000..08e385b8b9b7ffdfb57b90225d792ce819e341b1 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^Vn8gw!3HFS-u9~jDaPU;cPEB*=VV?2ImMnXjv*F; z$$x%+_WxktR&Ol%@4tB30=9&dn$t%POgZ=C@A31?9X>Bvk*GFF^1K7ve|FA-q7BAM zo)gZt%slS0jg!UX(wT&c0D%IAlb1}24Y|)~E}rPV*+9-zV%iCbj4%#ELqntIh78?S jJ3^-zIUH5H;KQ)urfTo){NGGK>lr*<{an^LB{Ts5Nq$2( literal 0 HcmV?d00001 diff --git a/vapp/src/assets/icons/menu/arrow.png b/vapp/src/assets/icons/menu/arrow.png new file mode 100755 index 0000000000000000000000000000000000000000..ddaff958e19bb42355d1193f6d1efcb74434cce0 GIT binary patch literal 373 zcmV-*0gC>KP)Px$FG)l}R7efA*Gme*Fc1ddjE@_52f;IlJ8|nq@8Uui9!EDW6+uDj6)N7r3y6== ze;^XyNjk}*4JrA*bONC@CUGO=ubC^y?QXzV(<9dOOlufT*i*zL4%8kva$?SL zh8~3(EH_OwCOM|@N;CK`Tl|wjY&nP!+VS$?Y<>^j=7yt&HvA9y^x4=dB3t|~u8{F{ ZW?-1;5mfeYStH0R44$rjF6*2UngGkxQW5|F literal 0 HcmV?d00001 diff --git a/vapp/src/assets/icons/menu/summary.png b/vapp/src/assets/icons/menu/summary.png new file mode 100755 index 0000000000000000000000000000000000000000..d57c2801ba154af9b8d9bd0c46754ca5f37546ff GIT binary patch literal 299 zcmV+`0o4A9P)Px#Ig{W@eyLgRhKBrt1S}r=bW5l zpVL-|Uw=9Z@RZ6DUZNfk`?vOH39(`gq?nT=c7F8)RR*yMbJtU4kQ0mbvj#0wbEB*Q zCv#kC+-$(jQh0TPUCJFj`Xf^~rSbIyqnl>H3rtOw=|N+9yab)tUR=i`Ow2Mcel*J1 zA*=M$Px$?ny*JR7efwRJ}?BF%Zt|x<7)QAP6cJzJXw+t>U%X+Syvz_y!i@dkBKIUh7{a zf?%uN;m-@`CfU0izd1I`?z)R^At(mIWF|A;OeV>v)V~|dJY}ujN{l^9w0XhoY2EKM zHG-NpoE?B(nx;zwW`NK-0v2Jb#yyS4(Ts~J%BtgNPpSmy+JMzM46BNH(ghJw0{sHX zx+)6J*w_czLxNhY+z8On+WziP@g|I=Dxp7)0F~E`BL94pB+G~vu`E6EH$@T+dtn&f z$htJp(_?X#sf~Tt+H|$GJDPc+SzXM9+t-AU8BD66SfCZo3*+)yJIUx23U{neSXN#+d$w=tCY9&8l?*@@T(= zkSPE@sk7&I;Ck8g-0FhG=HiNXAa;k-`UDbOH{vK7JyVy^`FL*eQ}TBwz`yyjz}9zA zEJyP4P5`3yMXH&2O*c5O30_=9Cf}k4{ zfe4#N{tv)KeE|CaxP`G)WfuNSplBjKSISSCAmziMWkYb0FFtvKMB6J+)pAo{J3C#E z$KgsT0ji%iX}SkGoNWhI@h0j;L2!UmyjFJpsQLj+z#;V>AGogo0000 :nth-child(3) { + margin-top: 10px; +} + +.modal-footer { + display: flex; + justify-content: center; + align-items: center; + margin-top: 28px; + + p { + font-family: DINPro; + font-size: 14px; + font-weight: 500; + font-style: normal; + font-stretch: normal; + line-height: 1.5; + letter-spacing: -0.32px; + color: #6d93ff; + } + + p:nth-child(2) { + padding-left: 6px; + padding-right: 6px; + color: #e3e5e9; + } +} + +/* + * The following styles are auto-applied to elements with + * transition="modal" when their visibility is toggled + * by Vue.js. + * + * You can easily play with the modal transition by editing + * these styles. + */ + +.modal-enter { + opacity: 0; +} + +.modal-leave-active { + opacity: 0; +} + +.modal-enter .modal-container, +.modal-leave-active .modal-container { + -webkit-transform: scale(1.1); + transform: scale(1.1); +} + +.modal-button { + padding-left: 50px; + padding-right: 50px; + margin-top: 30px; + margin-left: auto; + margin-right: auto; + display: block; +} diff --git a/vapp/src/components/CreateAccountModal/CreateAccountModal.vue b/vapp/src/components/CreateAccountModal/CreateAccountModal.vue new file mode 100644 index 0000000..7c01494 --- /dev/null +++ b/vapp/src/components/CreateAccountModal/CreateAccountModal.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/vapp/src/components/CreateAccountModal/index.js b/vapp/src/components/CreateAccountModal/index.js new file mode 100644 index 0000000..34eaa14 --- /dev/null +++ b/vapp/src/components/CreateAccountModal/index.js @@ -0,0 +1 @@ +export { default } from './CreateAccountModal'; diff --git a/vapp/src/components/DropdownAccountSelector/DropdownAccountSelector.scss b/vapp/src/components/DropdownAccountSelector/DropdownAccountSelector.scss new file mode 100644 index 0000000..4574503 --- /dev/null +++ b/vapp/src/components/DropdownAccountSelector/DropdownAccountSelector.scss @@ -0,0 +1,73 @@ +.dropdown-open-button { + width: 350px; + padding-top: 3px; + height: 30px; + display: flex; + justify-content: center; + flex-direction: row; + border-radius: 4px; + box-shadow: 4px 4px 8px 0 rgba(7, 7, 15, 0.3); + border: solid 1px #f7f8f9; + background-color: #3a4175; + + p { + margin-top: auto; + margin-bottom: auto; + font-family: DINPro; + font-size: 14px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + letter-spacing: -0.3px; + color: #f7f8f9; + } + + i { + margin-top: auto; + margin-bottom: auto; + } +} + +.dropdown-open-button:hover { + cursor: pointer; + background-color: rgba(58, 65, 117, 0.900); +} + +.dropdown-list { + margin-top: -1px; + width: 350px; + position: absolute; + border-radius: 4px; + box-shadow: 4px 4px 8px 0 rgba(7, 7, 15, 0.3); + border: solid 1px #f7f8f9; + background-color: #1f1f2a; + border-top-left-radius: 0px; + border-top-right-radius: 0px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + + ul { + padding-top: 6px; + padding-bottom: 3px; + margin-top: auto; + margin-bottom: auto; + } + + li { + padding-top: 2px; + padding-bottom: 2px; + font-family: DINPro; + font-size: 14px; + font-weight: normal; + font-style: normal; + font-stretch: normal; + line-height: 1.79; + letter-spacing: -0.26px; + color: #f7f8f9; + padding-left: 20px; + } + + li:hover { + cursor: pointer; + } +} \ No newline at end of file diff --git a/vapp/src/components/DropdownAccountSelector/DropdownAccountSelector.vue b/vapp/src/components/DropdownAccountSelector/DropdownAccountSelector.vue new file mode 100644 index 0000000..caf19fb --- /dev/null +++ b/vapp/src/components/DropdownAccountSelector/DropdownAccountSelector.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/vapp/src/components/DropdownAccountSelector/index.js b/vapp/src/components/DropdownAccountSelector/index.js new file mode 100644 index 0000000..028542c --- /dev/null +++ b/vapp/src/components/DropdownAccountSelector/index.js @@ -0,0 +1 @@ +export { default } from './DropdownAccountSelector'; diff --git a/vapp/src/components/DropdownTokenSelector/DropdownTokenSelector.scss b/vapp/src/components/DropdownTokenSelector/DropdownTokenSelector.scss new file mode 100644 index 0000000..4574503 --- /dev/null +++ b/vapp/src/components/DropdownTokenSelector/DropdownTokenSelector.scss @@ -0,0 +1,73 @@ +.dropdown-open-button { + width: 350px; + padding-top: 3px; + height: 30px; + display: flex; + justify-content: center; + flex-direction: row; + border-radius: 4px; + box-shadow: 4px 4px 8px 0 rgba(7, 7, 15, 0.3); + border: solid 1px #f7f8f9; + background-color: #3a4175; + + p { + margin-top: auto; + margin-bottom: auto; + font-family: DINPro; + font-size: 14px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + letter-spacing: -0.3px; + color: #f7f8f9; + } + + i { + margin-top: auto; + margin-bottom: auto; + } +} + +.dropdown-open-button:hover { + cursor: pointer; + background-color: rgba(58, 65, 117, 0.900); +} + +.dropdown-list { + margin-top: -1px; + width: 350px; + position: absolute; + border-radius: 4px; + box-shadow: 4px 4px 8px 0 rgba(7, 7, 15, 0.3); + border: solid 1px #f7f8f9; + background-color: #1f1f2a; + border-top-left-radius: 0px; + border-top-right-radius: 0px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + + ul { + padding-top: 6px; + padding-bottom: 3px; + margin-top: auto; + margin-bottom: auto; + } + + li { + padding-top: 2px; + padding-bottom: 2px; + font-family: DINPro; + font-size: 14px; + font-weight: normal; + font-style: normal; + font-stretch: normal; + line-height: 1.79; + letter-spacing: -0.26px; + color: #f7f8f9; + padding-left: 20px; + } + + li:hover { + cursor: pointer; + } +} \ No newline at end of file diff --git a/vapp/src/components/DropdownTokenSelector/DropdownTokenSelector.vue b/vapp/src/components/DropdownTokenSelector/DropdownTokenSelector.vue new file mode 100644 index 0000000..5f636db --- /dev/null +++ b/vapp/src/components/DropdownTokenSelector/DropdownTokenSelector.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/vapp/src/components/DropdownTokenSelector/index.js b/vapp/src/components/DropdownTokenSelector/index.js new file mode 100644 index 0000000..efebd73 --- /dev/null +++ b/vapp/src/components/DropdownTokenSelector/index.js @@ -0,0 +1 @@ +export { default } from './DropdownTokenSelector'; diff --git a/vapp/src/components/Inputs/InputAccount/InputAccount.scss b/vapp/src/components/Inputs/InputAccount/InputAccount.scss new file mode 100644 index 0000000..659eae5 --- /dev/null +++ b/vapp/src/components/Inputs/InputAccount/InputAccount.scss @@ -0,0 +1,76 @@ +.input-account { + width: 100%; + height: 48px; + display: flex; + + input { + width: 99%; + height: 95%; + position: relative; + background-color: #2a2c3c; + border: 0; + font-family: DINPro; + font-size: 14px; + font-weight: 500; + font-style: normal; + font-stretch: normal; + line-height: normal; + letter-spacing: -0.32px; + color: #e3e5e9; + } + + .label-container { + height: 48px; + display: flex; + justify-content: center; + align-items: center; + background-color: #1f1f2a; + border: solid 1px #757794; + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; + + img { + padding-left: 12px; + padding-right: 12px; + width: 24px; + height: 24px; + } + + p { + width: 68px; + height: 18px; + padding-left: 10px; + padding-right: 10px; + font-family: DINPro; + font-size: 14px; + font-weight: 500; + font-style: normal; + font-stretch: normal; + line-height: normal; + letter-spacing: -0.32px; + color: #e3e5e9; + } + } + + .input-with-label-container { + flex-grow: 1; + padding-left: 20px; + width: 100%; + height: 48px; + background-color: #2a2c3c; + border: solid 1px #757794; + border-left: none; + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; + } + + .input-without-label-container { + flex-grow: 1; + padding-left: 20px; + width: 100%; + height: 48px; + background-color: #2a2c3c; + border: solid 1px #757794; + border-radius: 6px; + } +} diff --git a/vapp/src/components/Inputs/InputAccount/InputAccount.vue b/vapp/src/components/Inputs/InputAccount/InputAccount.vue new file mode 100644 index 0000000..a1762c9 --- /dev/null +++ b/vapp/src/components/Inputs/InputAccount/InputAccount.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/vapp/src/components/Inputs/InputAccount/index.js b/vapp/src/components/Inputs/InputAccount/index.js new file mode 100644 index 0000000..62104ca --- /dev/null +++ b/vapp/src/components/Inputs/InputAccount/index.js @@ -0,0 +1 @@ +export { default } from './InputAccount'; diff --git a/vapp/src/components/Inputs/InputText/InputText.scss b/vapp/src/components/Inputs/InputText/InputText.scss new file mode 100644 index 0000000..3d0f480 --- /dev/null +++ b/vapp/src/components/Inputs/InputText/InputText.scss @@ -0,0 +1,95 @@ +.input-text { + margin-top: 1px; + width: 100%; + height: 32px; + display: flex; + + .label-container { + min-width: 200px; + height: 32px; + background-color: #2a2c3c; + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 1px; + + p { + margin: 0px; + font-family: DINPro; + font-size: 14px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.43; + letter-spacing: -0.34px; + color: #757794; + } + } + + .input-container { + width: 100%; + height: 32px; + background-color: #1f1f2a; + justify-content: center; + align-items: center; + display: flex; + border-bottom-width: 1px; + border-bottom-style: solid; + border-bottom-color: #2a2c3c; + + p { + margin: 0px; + font-family: DINPro; + font-size: 14px; + font-weight: normal; + font-style: normal; + font-stretch: normal; + line-height: 1.43; + letter-spacing: -0.34px; + color: #e3e5e9; + padding-top: 1px; + } + + input { + width: 100%; + height: 30px; + background-color: #1f1f2a; + font-family: DINPro; + font-size: 14px; + font-weight: normal; + font-style: normal; + font-stretch: normal; + line-height: 1.43; + letter-spacing: -0.34px; + text-align: center; + color: #e3e5e9; + border: 0px; + } + + .static { + font-family: DINPro; + font-size: 14px; + font-weight: normal; + font-style: normal; + font-stretch: normal; + line-height: 1.43; + letter-spacing: -0.34px; + text-align: center; + color: #757794; + } + + .unit { + font-family: DINPro; + font-size: 12px; + font-weight: 500; + font-style: normal; + font-stretch: normal; + line-height: 1.67; + letter-spacing: -0.29px; + text-align: right; + color: #757794; + padding-top: 2px; + margin-left: 20px; + } + } +} diff --git a/vapp/src/components/Inputs/InputText/InputText.vue b/vapp/src/components/Inputs/InputText/InputText.vue new file mode 100644 index 0000000..6b9405d --- /dev/null +++ b/vapp/src/components/Inputs/InputText/InputText.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/vapp/src/components/Inputs/InputText/index.js b/vapp/src/components/Inputs/InputText/index.js new file mode 100644 index 0000000..678d779 --- /dev/null +++ b/vapp/src/components/Inputs/InputText/index.js @@ -0,0 +1 @@ +export { default } from './InputText'; diff --git a/vapp/src/components/OrderChart.vue b/vapp/src/components/OrderChart.vue deleted file mode 100644 index a76b632..0000000 --- a/vapp/src/components/OrderChart.vue +++ /dev/null @@ -1,12 +0,0 @@ - - - - - diff --git a/vapp/src/components/RadioButton/RadioButton.scss b/vapp/src/components/RadioButton/RadioButton.scss new file mode 100644 index 0000000..453589c --- /dev/null +++ b/vapp/src/components/RadioButton/RadioButton.scss @@ -0,0 +1,95 @@ +.left-selected-radio-button { + padding-left: 20px; + padding-right: 16px; + height: 36px; + border-radius: 100px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border: solid 1px #f7f8f9; + background-color: rgba(55, 84, 213, 1.000); + font-family: DINPro; + font-size: 16px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.56; + letter-spacing: -0.3px; + text-align: center; + color: #f7f8f9; +} + +.right-unselected-radio-button { + padding-left: 16px; + padding-right: 20px; + height: 36px; + border-radius: 100px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + box-shadow: 2px 4px 8px 0 rgba(7, 7, 15, 0.5); + background-color: #ffffff; + font-family: DINPro; + font-size: 16px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.56; + letter-spacing: -0.3px; + text-align: center; + color: rgba(55, 83, 214, 1.000); +} + +.left-unselected-radio-button { + padding-left: 20px; + padding-right: 16px; + height: 36px; + border-radius: 100px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + box-shadow: 2px 4px 8px 0 rgba(7, 7, 15, 0.5); + background-color: #ffffff; + font-family: DINPro; + font-size: 16px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.56; + letter-spacing: -0.3px; + text-align: center; + color: rgba(55, 83, 214, 1.000); +} + +.right-selected-radio-button { + padding-left: 16px; + padding-right: 20px; + height: 36px; + border-radius: 100px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border: solid 1px #f7f8f9; + background-color: rgba(55, 84, 213, 1.000); + font-family: DINPro; + font-size: 16px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.56; + letter-spacing: -0.3px; + text-align: center; + color: #f7f8f9; +} + +.left-selected-radio-button:hover { + cursor: pointer; +} + +.left-unselected-radio-button:hover { + cursor: pointer; +} + +.right-selected-radio-button:hover { + cursor: pointer; +} + +.right-unselected-radio-button:hover { + cursor: pointer; +} diff --git a/vapp/src/components/RadioButton/RadioButton.vue b/vapp/src/components/RadioButton/RadioButton.vue new file mode 100644 index 0000000..651e54f --- /dev/null +++ b/vapp/src/components/RadioButton/RadioButton.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/vapp/src/components/RadioButton/index.js b/vapp/src/components/RadioButton/index.js new file mode 100644 index 0000000..b97ac7c --- /dev/null +++ b/vapp/src/components/RadioButton/index.js @@ -0,0 +1 @@ +export { default } from './RadioButton'; diff --git a/vapp/src/components/StandardTable/StandardTable.scss b/vapp/src/components/StandardTable/StandardTable.scss new file mode 100644 index 0000000..c366b0b --- /dev/null +++ b/vapp/src/components/StandardTable/StandardTable.scss @@ -0,0 +1,49 @@ +table { + width: 100%; + height: 100%; +} + +table, td { + border-collapse: collapse; +} + +thead { + display: table; /* to take the same width as tr */ + width: 100%; +} + +tbody { + display: block; /* to enable vertical scrolling */ + height: calc(100% - 32px); + overflow-y: scroll; /* keeps the scrollbar even if it doesn't need it; display purpose */ +} + +th { + background-color: #2a2c3c; + color: #757794; +} + +th, td { + padding: 8px; + word-break: break-all; /* 4. */ +} + +tr { + display: table; /* display purpose; th's border */ + width: 100%; + box-sizing: border-box; /* because of the border (Chrome needs this line, but not FF) */ +} + +tr.clickable:hover td { + cursor: pointer; + background-color: rgba(58, 65, 117, 1.000); +} + +td { + text-align: center; + border-bottom: none; + border-left: none; + background-color: #1f1f2a; + border-bottom: 1px solid #2a2c3c; + color: #e3e5e9; +} diff --git a/vapp/src/components/StandardTable/StandardTable.vue b/vapp/src/components/StandardTable/StandardTable.vue new file mode 100644 index 0000000..9716727 --- /dev/null +++ b/vapp/src/components/StandardTable/StandardTable.vue @@ -0,0 +1,432 @@ + + + + + diff --git a/vapp/src/components/StandardTable/index.js b/vapp/src/components/StandardTable/index.js new file mode 100644 index 0000000..d6469cf --- /dev/null +++ b/vapp/src/components/StandardTable/index.js @@ -0,0 +1 @@ +export { default } from './StandardTable'; diff --git a/vapp/src/containers/FooterContainer/FooterContainer.scss b/vapp/src/containers/FooterContainer/FooterContainer.scss new file mode 100644 index 0000000..17dd07c --- /dev/null +++ b/vapp/src/containers/FooterContainer/FooterContainer.scss @@ -0,0 +1,51 @@ +.footer { + padding-top: 64px; + padding-bottom: 64px; + background-color: #07070f; + display: flex; + justify-content: center; + + h1 { + font-family: DINPro; + font-size: 28px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.14; + letter-spacing: -0.34px; + color: #f7f8f9; + } + + h3 { + font-family: DINPro; + font-size: 18px; + font-weight: 500; + font-style: normal; + font-stretch: normal; + line-height: 1.78; + letter-spacing: -0.11px; + color: #6e8dff; + } + + p { + font-family: DINPro; + font-size: 14px; + font-weight: normal; + font-style: normal; + font-stretch: normal; + line-height: 1.43; + letter-spacing: -0.34px; + color: #9ea4aa; + } + + .content--1 { + font-family: DINPro; + font-size: 14px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.71; + letter-spacing: -0.34px; + color: #757794; + } +} \ No newline at end of file diff --git a/vapp/src/containers/FooterContainer/FooterContainer.vue b/vapp/src/containers/FooterContainer/FooterContainer.vue new file mode 100644 index 0000000..560a1ba --- /dev/null +++ b/vapp/src/containers/FooterContainer/FooterContainer.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/vapp/src/containers/FooterContainer/index.js b/vapp/src/containers/FooterContainer/index.js new file mode 100644 index 0000000..3388877 --- /dev/null +++ b/vapp/src/containers/FooterContainer/index.js @@ -0,0 +1 @@ +export { default } from './FooterContainer'; diff --git a/vapp/src/containers/HeaderContainer/HeaderContainer.scss b/vapp/src/containers/HeaderContainer/HeaderContainer.scss new file mode 100644 index 0000000..d285f28 --- /dev/null +++ b/vapp/src/containers/HeaderContainer/HeaderContainer.scss @@ -0,0 +1,93 @@ +.header-container { + width: 100%; + height: 64px; + background-color: rgba(42, 44, 60, 1.000); +} + +.header { + width: 100%; + height: 100%; + display: flex; + + img { + margin-right: 24px; + } + + p { + margin: auto; + font-family: DINPro; + font-size: 24px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.33; + letter-spacing: -0.34px; + color: #f7f8f9; + } +} + +.logo { + margin-left: 80px; + margin-right: 180px; + margin-top: auto; + margin-bottom: auto; + display: flex; +} + +.header-button { + margin-top: auto; + margin-bottom: auto; + margin-right: 16px; +} + +.selected { + padding-left: 20px; + padding-right: 20px; + padding-top: 5px; + border-width: 0px; + border-radius: 20px; + box-shadow: 0 3px 8px 0 rgba(7, 7, 15, 0.3); + background-color: rgba(58, 65, 117, 1.000); + font-family: DINPro; + font-size: 18px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.78; + letter-spacing: -0.34px; + text-align: center; + color: #f7f8f9; +} + +.unselected { + padding-left: 20px; + padding-right: 20px; + padding-top: 5px; + border-width: 0px; + background-color: rgba(42, 44, 60, 1.000); + font-family: DINPro; + font-size: 18px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.78; + letter-spacing: -0.34px; + text-align: center; + color: #b7c2d5; +} + +.selected:hover { + cursor: pointer; +} + +.unselected:hover { + cursor: pointer; +} + +@media (min-width: 1440px) { + .header { + width: 1440px; + margin-left: auto; + margin-right: auto; + } +} diff --git a/vapp/src/containers/HeaderContainer/HeaderContainer.vue b/vapp/src/containers/HeaderContainer/HeaderContainer.vue new file mode 100644 index 0000000..f1df020 --- /dev/null +++ b/vapp/src/containers/HeaderContainer/HeaderContainer.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/vapp/src/containers/HeaderContainer/index.js b/vapp/src/containers/HeaderContainer/index.js new file mode 100644 index 0000000..c427a2f --- /dev/null +++ b/vapp/src/containers/HeaderContainer/index.js @@ -0,0 +1 @@ +export { default } from './HeaderContainer'; diff --git a/vapp/src/helpers/note.js b/vapp/src/helpers/note.js new file mode 100644 index 0000000..c593ce9 --- /dev/null +++ b/vapp/src/helpers/note.js @@ -0,0 +1,11 @@ +import { Note, constants } from '../../../scripts/lib/Note'; +import Web3Utils from 'web3-utils'; + +const salt = Web3Utils.randomHex(8); +const viewingKey = Web3Utils.randomHex(8); + +const createNote = function (account, amount, type, isSmart) { + return new Note(account, amount, type, viewingKey, salt, isSmart); +}; + +export { createNote }; diff --git a/vapp/src/layouts/AccountDeleteLayout/AccountDeleteLayout.scss b/vapp/src/layouts/AccountDeleteLayout/AccountDeleteLayout.scss new file mode 100644 index 0000000..475a25b --- /dev/null +++ b/vapp/src/layouts/AccountDeleteLayout/AccountDeleteLayout.scss @@ -0,0 +1,3 @@ +.account-delete-layout > :last-child { + margin-top: 30px; +} diff --git a/vapp/src/layouts/AccountDeleteLayout/AccountDeleteLayout.vue b/vapp/src/layouts/AccountDeleteLayout/AccountDeleteLayout.vue new file mode 100644 index 0000000..0ad6d37 --- /dev/null +++ b/vapp/src/layouts/AccountDeleteLayout/AccountDeleteLayout.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/vapp/src/layouts/AccountDeleteLayout/index.js b/vapp/src/layouts/AccountDeleteLayout/index.js new file mode 100644 index 0000000..e3d10f7 --- /dev/null +++ b/vapp/src/layouts/AccountDeleteLayout/index.js @@ -0,0 +1 @@ +export { default } from './AccountDeleteLayout'; diff --git a/vapp/src/layouts/AccountExportLayout/AccountExportLayout.scss b/vapp/src/layouts/AccountExportLayout/AccountExportLayout.scss new file mode 100644 index 0000000..dbb5abd --- /dev/null +++ b/vapp/src/layouts/AccountExportLayout/AccountExportLayout.scss @@ -0,0 +1,27 @@ +.account-export-layout > :last-child { + margin-top: 30px; +} + +.account-info-container { + display: flex; + justify-content: center; + align-items: center; + + p { + font-family: DINPro; + font-size: 14px; + font-weight: 500; + font-style: normal; + font-stretch: normal; + line-height: 1.5; + letter-spacing: -0.32px; + color: #6d93ff; + } +} + +.account-info-container > :nth-child(2) { + color: #6d93ff; + padding-left: 4px; + padding-right: 4px; +} + diff --git a/vapp/src/layouts/AccountExportLayout/AccountExportLayout.vue b/vapp/src/layouts/AccountExportLayout/AccountExportLayout.vue new file mode 100644 index 0000000..5a2182a --- /dev/null +++ b/vapp/src/layouts/AccountExportLayout/AccountExportLayout.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/vapp/src/layouts/AccountExportLayout/index.js b/vapp/src/layouts/AccountExportLayout/index.js new file mode 100644 index 0000000..520e736 --- /dev/null +++ b/vapp/src/layouts/AccountExportLayout/index.js @@ -0,0 +1 @@ +export { default } from './AccountExportLayout'; diff --git a/vapp/src/layouts/AccountImportLayout/AccountImportLayout.scss b/vapp/src/layouts/AccountImportLayout/AccountImportLayout.scss new file mode 100644 index 0000000..ac62f68 --- /dev/null +++ b/vapp/src/layouts/AccountImportLayout/AccountImportLayout.scss @@ -0,0 +1,104 @@ +.account-import-layout { + width: 100%; +} + +.import-option-container { + margin-top: 40px; + display: flex; + justify-content: center; +} + +.import-option { + width: 190px; + margin-left: 25px; + margin-right: 25px; + height: 225px; + box-shadow: 6px 8px 16px 0 rgba(7, 7, 15, 0.5); + border: solid 1px #2a2c3c; + background-color: #1f1f2a; + + img { + margin-left: auto; + margin-right: auto; + display: block; + width: 85px; + height: 85px; + } + + .keystore { + margin-top: 38px; + height: 98px; + } + + .private-key { + margin-top: 50px; + } + + p { + margin-top: 45px; + font-family: DINPro; + font-size: 18px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.78; + letter-spacing: -0.34px; + text-align: center; + color: #f7f8f9; + } +} + +.selected { + background-color: rgba(55, 84, 213, 1.000); +} + +.import-option:hover { + cursor: pointer; +} + +.import-account-container { + box-shadow: 4px 8px 30px 0 rgba(7, 7, 15, 0.5); + border: solid 1px #2a2c3c; + background-color: #1f1f2a; + padding-left: 140px; + padding-right: 140px; + padding-bottom: 30px; + text-align: center; + margin-top: 64px; + + p { + margin-top: 30px; + margin-bottom: 30px; + font-family: NotoSansCJKkr; + font-size: 16px; + font-weight: 500; + font-style: normal; + font-stretch: normal; + line-height: 1.31; + letter-spacing: -0.34px; + text-align: center; + color: #e3e5e9; + } + + .account-info-container > :nth-child(1) { + color: #6d93ff; + } + + .account-info-container > :nth-child(2) { + color: #e3e5e9; + padding-left: 4px; + padding-right: 4px; + } + + .account-info-container > :nth-child(3) { + color: #6d93ff; + } + + button { + margin-top: 24px; + } + + .static { + color: #6d93ff; + } +} diff --git a/vapp/src/layouts/AccountImportLayout/AccountImportLayout.vue b/vapp/src/layouts/AccountImportLayout/AccountImportLayout.vue new file mode 100644 index 0000000..a7d1e3f --- /dev/null +++ b/vapp/src/layouts/AccountImportLayout/AccountImportLayout.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/vapp/src/layouts/AccountImportLayout/index.js b/vapp/src/layouts/AccountImportLayout/index.js new file mode 100644 index 0000000..fff1017 --- /dev/null +++ b/vapp/src/layouts/AccountImportLayout/index.js @@ -0,0 +1 @@ +export { default } from './AccountImportLayout'; diff --git a/vapp/src/layouts/DashboardLayout/DashboardLayout.scss b/vapp/src/layouts/DashboardLayout/DashboardLayout.scss new file mode 100644 index 0000000..b06e672 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/DashboardLayout.scss @@ -0,0 +1,16 @@ +.dashboard-layout { + width: 1280px; + margin-left: auto; + margin-right: auto; + margin-bottom: 24px; + padding-top: 30px; + padding-left: 80px; + padding-right: 80px; + background: rgba(31, 31, 42, 1.000); + display: flex; +} + +.dashboard-layout-container { + width: 100%; + margin-left: 24px; +} \ No newline at end of file diff --git a/vapp/src/layouts/DashboardLayout/DashboardLayout.vue b/vapp/src/layouts/DashboardLayout/DashboardLayout.vue new file mode 100644 index 0000000..d457f1d --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/DashboardLayout.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/AccountContainer/AccountContainer.scss b/vapp/src/layouts/DashboardLayout/containers/AccountContainer/AccountContainer.scss new file mode 100644 index 0000000..af83926 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/AccountContainer/AccountContainer.scss @@ -0,0 +1,14 @@ +.container-header { + background-color: rgba(55, 84, 213, 1.000); + + img { + margin-right: 10px; + width:22px; + height: 16px; + } + + button { + margin-left: auto; + margin-right: 25px; + } +} \ No newline at end of file diff --git a/vapp/src/layouts/DashboardLayout/containers/AccountContainer/AccountContainer.vue b/vapp/src/layouts/DashboardLayout/containers/AccountContainer/AccountContainer.vue new file mode 100644 index 0000000..5cc5af6 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/AccountContainer/AccountContainer.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/AccountContainer/index.js b/vapp/src/layouts/DashboardLayout/containers/AccountContainer/index.js new file mode 100644 index 0000000..03908e6 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/AccountContainer/index.js @@ -0,0 +1 @@ +export { default } from './AccountContainer'; diff --git a/vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/AccountDeleteContainer.scss b/vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/AccountDeleteContainer.scss new file mode 100644 index 0000000..ec640a3 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/AccountDeleteContainer.scss @@ -0,0 +1,100 @@ +.account-delete-container { + padding-top: 36px; + padding-bottom: 30px; + padding-left: 194px; + padding-right: 194px; + + div { + margin-top: 24px; + display: flex; + justify-content: center; + align-items: center; + } + + p { + font-family: DINPro; + font-size: 14px; + font-weight: 500; + font-style: normal; + font-stretch: normal; + line-height: 1.5; + letter-spacing: -0.32px; + text-align: center; + color: #ff5640; + } + + p:nth-child(1) { + font-family: DINPro; + font-size: 16px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: normal; + letter-spacing: -0.36px; + color: #ff5640; + } + + p:nth-child(2) { + margin-top: 8px; + } + + p:nth-child(4) { + margin-top: 29px; + margin-bottom: 12px; + font-family: DINPro; + font-size: 14px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.5; + letter-spacing: -0.32px; + text-align: center; + color: #e3e5e9; + } + + .cancel { + margin-right: 5px; + width: 155px; + height: 48px; + background-color: rgba(31, 31, 42, 1.000); + border-radius: 24px; + border: solid 1px #979797; + font-family: DINPro; + font-size: 18px; + font-weight: normal; + font-style: normal; + font-stretch: normal; + line-height: 1.39; + letter-spacing: -0.34px; + text-align: center; + color: #9da3ae; + padding-top: 4px; + } + + .cancel:hover { + cursor: pointer; + } + + .delete { + margin-left: 5px; + padding-top: 4px; + width: 155px; + height: 48px; + border-radius: 24px; + background-color: #ff5640; + font-family: DINPro; + font-size: 18px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.39; + letter-spacing: -0.34px; + text-align: center; + border: 0px; + color: #f7f8f9; + } + + .delete:hover { + cursor: pointer; + } +} diff --git a/vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/AccountDeleteContainer.vue b/vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/AccountDeleteContainer.vue new file mode 100644 index 0000000..a56b62d --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/AccountDeleteContainer.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/index.js b/vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/index.js new file mode 100644 index 0000000..30c2e48 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/index.js @@ -0,0 +1 @@ +export { default } from './AccountDeleteContainer'; diff --git a/vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/AccountExportContainer.scss b/vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/AccountExportContainer.scss new file mode 100644 index 0000000..ff309fd --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/AccountExportContainer.scss @@ -0,0 +1,50 @@ +.account-export-container { + padding-left: 194px; + padding-right: 194px; + padding-top: 36px; + padding-bottom: 36px; + + button { + padding-left: 40px; + padding-right: 40px; + margin-left: auto; + margin-right: auto; + display: block; + } +} + +.account-export-container > :nth-child(2) { + margin-top: 32px; + margin-bottom: 24px; +} + +.export-button-container { + margin-top: 24px; + display: flex; + justify-content: center; + align-items: center; + + .export { + height: 40px; + border-radius: 20px; + border: solid 1px #757794; + background-color: #2a2c3c; + font-family: DINPro; + font-size: 16px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.56; + letter-spacing: -0.34px; + text-align: center; + color: #9da3ae; + } + + :nth-child(1) { + margin-right: 10px; + } + + :nth-child(2) { + margin-left: 10px; + } +} diff --git a/vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/AccountExportContainer.vue b/vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/AccountExportContainer.vue new file mode 100644 index 0000000..74ab444 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/AccountExportContainer.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/index.js b/vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/index.js new file mode 100644 index 0000000..9f8159f --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/index.js @@ -0,0 +1 @@ +export { default } from './AccountExportContainer'; diff --git a/vapp/src/layouts/DashboardLayout/containers/BalanceContainer/BalanceContainer.scss b/vapp/src/layouts/DashboardLayout/containers/BalanceContainer/BalanceContainer.scss new file mode 100644 index 0000000..0497ed1 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/BalanceContainer/BalanceContainer.scss @@ -0,0 +1,14 @@ +.container-header { + background-color: rgba(2, 143, 180, 1.000); + + .balance { + margin-right: 10px; + width: 18.2px; + height: 16.9px; + } + + :nth-child(3) { + margin-left: auto; + margin-right: 24px; + } +} \ No newline at end of file diff --git a/vapp/src/layouts/DashboardLayout/containers/BalanceContainer/BalanceContainer.vue b/vapp/src/layouts/DashboardLayout/containers/BalanceContainer/BalanceContainer.vue new file mode 100644 index 0000000..bc8bb14 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/BalanceContainer/BalanceContainer.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/BalanceContainer/index.js b/vapp/src/layouts/DashboardLayout/containers/BalanceContainer/index.js new file mode 100644 index 0000000..eaee19b --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/BalanceContainer/index.js @@ -0,0 +1 @@ +export { default } from './BalanceContainer'; diff --git a/vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/CreateNoteContainer.scss b/vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/CreateNoteContainer.scss new file mode 100644 index 0000000..6068bf0 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/CreateNoteContainer.scss @@ -0,0 +1,28 @@ +.container-header { + img { + margin-right: 10px; + } + + .note { + margin-right: 10px; width: 18px; height: 18px; + } + + :nth-child(3) { + margin-left: auto; + margin-right: 24px; + } +} + +.create-note-container { + margin: 30px; +} + +button { + display: block; + margin-left: auto; + margin-top: 24px; + margin-bottom: 24px; + margin-right: 24px; + padding-left: 40px; + padding-right: 40px; +} \ No newline at end of file diff --git a/vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/CreateNoteContainer.vue b/vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/CreateNoteContainer.vue new file mode 100644 index 0000000..f1c1eca --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/CreateNoteContainer.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/index.js b/vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/index.js new file mode 100644 index 0000000..51ef1e2 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/index.js @@ -0,0 +1 @@ +export { default } from './CreateNoteContainer'; diff --git a/vapp/src/layouts/DashboardLayout/containers/DashboardMenu/DashboardMenu.scss b/vapp/src/layouts/DashboardLayout/containers/DashboardMenu/DashboardMenu.scss new file mode 100644 index 0000000..a479a5b --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/DashboardMenu/DashboardMenu.scss @@ -0,0 +1,134 @@ +.dashboard-menu { + min-width: 280px; + background-color: rgba(42, 44, 60, 1.000); + padding-right: 20px; + + img { + margin-top: auto; + margin-bottom: auto; + } + + .selected { + border-left: none; + border-top-right-radius: 100px; + border-bottom-right-radius: 100px; + background-color: #3a4175; + border-left-color: #3753d5; + border-left-width: 4px; + border-left-style: solid; + + .icon-container { + background-color: rgba(55, 84, 213, 1.000); + } + + p { + color: #f7f8f9; + } + } + + .arrow { + width: 7.3px; + height: 13px; + margin-left: auto; + margin-right: 20px; + } +} + +.dashboard-menu > :nth-child(1) { + margin-top: 26px; +} + +.dashboard-menu > :nth-child(2) { + margin-top: 44px; +} + +.dashboard-menu > :nth-child(3) { + margin-top: 8px; +} + +.dashboard-menu > :nth-child(6) { + margin-top: 16px; +} + +.dashboard-menu > :nth-child(7) { + margin-top: 8px; +} + +.dashboard-menu > :nth-child(10) { + margin-top: 16px; +} + +.dashboard-menu > :nth-child(11) { + margin-top: 8px; +} + +.menu-item-with-icon { + display: flex; + height: 56px; + border-left-color: rgba(42, 44, 60, 1.000); + border-left-width: 4px; + border-left-style: solid; + + .icon-container { + margin-left: 32px; + margin-right: 12px; + margin-top: auto; + margin-bottom: auto; + width: 40px; + height: 40px; + border-radius: 50%; + background-color: #1f1f2a; + display: flex; + justify-content: center; + align-items: center; + } + + .icon-selected-container { + margin-left: 32px; + margin-right: 12px; + margin-top: auto; + margin-bottom: auto; + width: 40px; + height: 40px; + border-radius: 50%; + background-color: rgba(55, 84, 213, 1.000); + display: flex; + justify-content: center; + align-items: center; + } + + p { + margin-top: auto; + margin-bottom: auto; + font-family: DINPro; + font-size: 18px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.78; + letter-spacing: -0.34px; + color: #b7c2d5; + } +} + +.menu-item { + display: flex; + height: 56px; + border-left-color: rgba(42, 44, 60, 1.000); + border-left-width: 4px; + border-left-style: solid; + + p { + margin-left: 84px; + margin-top: auto; + margin-bottom: auto; + font-family: DINPro; + font-size: 16px; + font-weight: 500; + font-style: normal; + font-stretch: normal; + line-height: 2; + letter-spacing: -0.3px; + color: #b7c2d5; + } +} diff --git a/vapp/src/layouts/DashboardLayout/containers/DashboardMenu/DashboardMenu.vue b/vapp/src/layouts/DashboardLayout/containers/DashboardMenu/DashboardMenu.vue new file mode 100644 index 0000000..b7b36cb --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/DashboardMenu/DashboardMenu.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/DashboardMenu/index.js b/vapp/src/layouts/DashboardLayout/containers/DashboardMenu/index.js new file mode 100644 index 0000000..01595b6 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/DashboardMenu/index.js @@ -0,0 +1 @@ +export { default } from './DashboardMenu'; diff --git a/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.scss b/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.scss new file mode 100644 index 0000000..132ed2b --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.scss @@ -0,0 +1,20 @@ +.container-header { + img { + margin-right: 10px; + width: 24px; + height: 24px; + } +} + +.input-text-container { + margin-top: 30px; + margin-left: 22px; + margin-right: 22px; + + button { + display: block; + margin-top: 26px; + margin-bottom: 30px; + margin-left: auto; + } +} diff --git a/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue b/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue new file mode 100644 index 0000000..c67016a --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/index.js b/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/index.js new file mode 100644 index 0000000..5de39c9 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/index.js @@ -0,0 +1 @@ +export { default } from './LiquidateNoteContainer'; diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteCombineContainer/NoteCombineContainer.scss b/vapp/src/layouts/DashboardLayout/containers/NoteCombineContainer/NoteCombineContainer.scss new file mode 100644 index 0000000..ff84fbb --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/NoteCombineContainer/NoteCombineContainer.scss @@ -0,0 +1,19 @@ +.note-combine-container { + display: flex; + padding-top: 36px; +} + +.input-text-container { + width: 100%; + margin-left: 30px; + margin-right: 30px; +} + +.combine { + padding-left: 40px; + padding-right: 40px; + margin-left: auto; + margin-right: 40px; + margin-top: auto; + margin-bottom: auto; +} \ No newline at end of file diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteCombineContainer/NoteCombineContainer.vue b/vapp/src/layouts/DashboardLayout/containers/NoteCombineContainer/NoteCombineContainer.vue new file mode 100644 index 0000000..d7675ea --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/NoteCombineContainer/NoteCombineContainer.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteCombineContainer/index.js b/vapp/src/layouts/DashboardLayout/containers/NoteCombineContainer/index.js new file mode 100644 index 0000000..12ec912 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/NoteCombineContainer/index.js @@ -0,0 +1 @@ +export { default } from './NoteCombineContainer'; diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteContainer/NoteContainer.scss b/vapp/src/layouts/DashboardLayout/containers/NoteContainer/NoteContainer.scss new file mode 100644 index 0000000..dc42e1f --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/NoteContainer/NoteContainer.scss @@ -0,0 +1,11 @@ +.container-header { + background-color: rgba(231, 102, 125, 1.000); + + img { + margin-right: 10px; + } + + .note { + margin-right: 10px; width: 18px; height: 18px; + } +} \ No newline at end of file diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteContainer/NoteContainer.vue b/vapp/src/layouts/DashboardLayout/containers/NoteContainer/NoteContainer.vue new file mode 100644 index 0000000..b1bdaa8 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/NoteContainer/NoteContainer.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteContainer/index.js b/vapp/src/layouts/DashboardLayout/containers/NoteContainer/index.js new file mode 100644 index 0000000..dc197fb --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/NoteContainer/index.js @@ -0,0 +1 @@ +export { default } from './NoteContainer'; diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.scss b/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.scss new file mode 100644 index 0000000..4a75e1f --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.scss @@ -0,0 +1,16 @@ +.note-transfer-container { + margin-top: 30px; + margin-left: 30px; + margin-right: 30px; +} + +.note-transfer-container > :nth-child(3) { + margin-bottom: 29px; +} + +button { + display: block; + margin-left: auto; + margin-top: 24px; + margin-right: 24px; +} \ No newline at end of file diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.vue b/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.vue new file mode 100644 index 0000000..f8d51d6 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/index.js b/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/index.js new file mode 100644 index 0000000..1480b95 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/index.js @@ -0,0 +1 @@ +export { default } from './NoteTransferContainer'; diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/NoteTransferHistoryContainer.scss b/vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/NoteTransferHistoryContainer.scss new file mode 100644 index 0000000..1b6a8ba --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/NoteTransferHistoryContainer.scss @@ -0,0 +1,7 @@ +.container-header { + img { + margin-right: 10px; + width: 24px; + height: 24px; + } +} \ No newline at end of file diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/NoteTransferHistoryContainer.vue b/vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/NoteTransferHistoryContainer.vue new file mode 100644 index 0000000..babe689 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/NoteTransferHistoryContainer.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/index.js b/vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/index.js new file mode 100644 index 0000000..e7279bb --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/index.js @@ -0,0 +1 @@ +export { default } from './NoteTransferHistoryContainer'; diff --git a/vapp/src/layouts/DashboardLayout/containers/OrderHistoryContainer/OrderHistoryContainer.scss b/vapp/src/layouts/DashboardLayout/containers/OrderHistoryContainer/OrderHistoryContainer.scss new file mode 100644 index 0000000..9ca7d9e --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/OrderHistoryContainer/OrderHistoryContainer.scss @@ -0,0 +1,9 @@ +.container-header { + background-color: rgba(2, 143, 180, 1.000); + + img { + margin-right: 10px; + width: 24px; + height: 24px; + } +} diff --git a/vapp/src/layouts/DashboardLayout/containers/OrderHistoryContainer/OrderHistoryContainer.vue b/vapp/src/layouts/DashboardLayout/containers/OrderHistoryContainer/OrderHistoryContainer.vue new file mode 100644 index 0000000..9993520 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/OrderHistoryContainer/OrderHistoryContainer.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/OrderHistoryContainer/index.js b/vapp/src/layouts/DashboardLayout/containers/OrderHistoryContainer/index.js new file mode 100644 index 0000000..8c9ad12 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/OrderHistoryContainer/index.js @@ -0,0 +1 @@ +export { default } from './OrderHistoryContainer'; diff --git a/vapp/src/layouts/DashboardLayout/containers/OrderOngoingContainer/OrderOngoingContainer.scss b/vapp/src/layouts/DashboardLayout/containers/OrderOngoingContainer/OrderOngoingContainer.scss new file mode 100644 index 0000000..230d1bc --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/OrderOngoingContainer/OrderOngoingContainer.scss @@ -0,0 +1,9 @@ +.container-header { + background-color: rgba(231, 102, 125, 1.000); + + img { + margin-right: 10px; + width: 24px; + height: 24px; + } +} \ No newline at end of file diff --git a/vapp/src/layouts/DashboardLayout/containers/OrderOngoingContainer/OrderOngoingContainer.vue b/vapp/src/layouts/DashboardLayout/containers/OrderOngoingContainer/OrderOngoingContainer.vue new file mode 100644 index 0000000..ada55a2 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/OrderOngoingContainer/OrderOngoingContainer.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/vapp/src/layouts/DashboardLayout/containers/OrderOngoingContainer/index.js b/vapp/src/layouts/DashboardLayout/containers/OrderOngoingContainer/index.js new file mode 100644 index 0000000..2fd8fd5 --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/containers/OrderOngoingContainer/index.js @@ -0,0 +1 @@ +export { default } from './OrderOngoingContainer'; diff --git a/vapp/src/layouts/DashboardLayout/index.js b/vapp/src/layouts/DashboardLayout/index.js new file mode 100644 index 0000000..3b85e0e --- /dev/null +++ b/vapp/src/layouts/DashboardLayout/index.js @@ -0,0 +1 @@ +export { default } from './DashboardLayout'; diff --git a/vapp/src/layouts/ExchangeLayout/ExchangeLayout.scss b/vapp/src/layouts/ExchangeLayout/ExchangeLayout.scss new file mode 100644 index 0000000..36e277e --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/ExchangeLayout.scss @@ -0,0 +1,99 @@ +@media (min-width: 414px) { + .exchange { + width: 100%; + padding-top: 24px; + } + + .exchange > :nth-child(4) { + margin-top: 24px; + } + + .exchange > :nth-child(4) { + margin-top: 24px; + margin-bottom: 26px; + } + + .wide { + width: 300px; + flex-grow: 1; + } + + .wide > :last-child { + margin-top: 24px; + } + + .short { + width: 100px; + flex-grow: 1; + margin-left: 14px; + } +} + +@media (min-width: 1024px) { + .exchange { + width: 100%; + padding-top: 34px; + } + + .exchange > :nth-child(4) { + margin-top: 24px; + } + + .exchange > :nth-child(4) { + margin-top: 24px; + margin-bottom: 26px; + } + + .wide { + flex-grow: 1; + width: 700px; + } + + .wide > :last-child { + margin-top: 24px; + } + + .short { + width: 304px; + flex-grow: 1; + margin-left: 20px; + } +} + +@media (min-width: 1440px) { + .exchange { + width: 1440px; + padding-top: 54px; + margin-left: auto; + margin-right: auto; + } + + .exchange > :nth-child(4) { + margin-top: 24px; + } + + .exchange > :nth-child(4) { + margin-top: 24px; + margin-bottom: 26px; + } + + .wide { + flex-grow: 1; + width: 940px; + } + + .wide > :last-child { + margin-top: 24px; + } + + .short { + width: 470px; + flex-grow: 1; + margin-left: 30px; + } +} + +.group { + display: flex; + padding-top: 24px; +} diff --git a/vapp/src/layouts/ExchangeLayout/ExchangeLayout.vue b/vapp/src/layouts/ExchangeLayout/ExchangeLayout.vue new file mode 100644 index 0000000..24b0eda --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/ExchangeLayout.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/vapp/src/layouts/ExchangeLayout/components/Market/Market.scss b/vapp/src/layouts/ExchangeLayout/components/Market/Market.scss new file mode 100644 index 0000000..f286664 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/components/Market/Market.scss @@ -0,0 +1,36 @@ +.market { + width: 100%; + height: 101px; + // box-shadow: 6px 10px 30px 0 rgba(7, 7, 15, 0.5); + // border: solid 1px #2a2c3c; + background-color: rgba(31, 31, 42, 1.000); + display: flex; + justify-content: center; + flex-direction: column; + + :first-child { + margin-top: 8px; + margin-left: 30px; + margin-bottom: 8px; + font-family: DINPro; + font-size: 36px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 0.89; + letter-spacing: -0.34px; + color: #e3e5e9; + } + + :last-child { + margin-left: 30px; + font-family: DINPro; + font-size: 16px; + font-weight: 500; + font-style: normal; + font-stretch: normal; + line-height: 1.31; + letter-spacing: -0.34px; + color: #9da3ae; + } +} \ No newline at end of file diff --git a/vapp/src/layouts/ExchangeLayout/components/Market/Market.vue b/vapp/src/layouts/ExchangeLayout/components/Market/Market.vue new file mode 100644 index 0000000..373fcd1 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/components/Market/Market.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/vapp/src/layouts/ExchangeLayout/components/Market/index.js b/vapp/src/layouts/ExchangeLayout/components/Market/index.js new file mode 100644 index 0000000..f787c6c --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/components/Market/index.js @@ -0,0 +1 @@ +export { default } from './Market'; diff --git a/vapp/src/layouts/ExchangeLayout/components/PriceChart/PriceChart.scss b/vapp/src/layouts/ExchangeLayout/components/PriceChart/PriceChart.scss new file mode 100644 index 0000000..f362fe5 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/components/PriceChart/PriceChart.scss @@ -0,0 +1,37 @@ +.price-chart { + width: 100%; + margin-left: 16px; + display: flex; + flex-direction: row; + justify-content: space-between; + margin-bottom: -25px; + + div { + width: 180px; + display: flex; + + p:first-child { + font-family: DINPro; + font-size: 13px; + font-weight: 500; + font-style: normal; + font-stretch: normal; + line-height: 1.54; + letter-spacing: -0.32px; + text-align: center; + color: #9da3ae; + } + + p:last-child { + font-family: DINPro; + font-size: 13px; + font-weight: 500; + font-style: normal; + font-stretch: normal; + line-height: 1.54; + letter-spacing: -0.32px; + color: #f7f8f9; + margin-left: 4px; + } + } +} diff --git a/vapp/src/layouts/ExchangeLayout/components/PriceChart/PriceChart.vue b/vapp/src/layouts/ExchangeLayout/components/PriceChart/PriceChart.vue new file mode 100644 index 0000000..64c9073 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/components/PriceChart/PriceChart.vue @@ -0,0 +1,362 @@ + + + + + diff --git a/vapp/src/layouts/ExchangeLayout/components/PriceChart/index.js b/vapp/src/layouts/ExchangeLayout/components/PriceChart/index.js new file mode 100644 index 0000000..bbe10ba --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/components/PriceChart/index.js @@ -0,0 +1 @@ +export { default } from './PriceChart'; diff --git a/vapp/src/layouts/ExchangeLayout/containers/NoteContainer/NoteContainer.scss b/vapp/src/layouts/ExchangeLayout/containers/NoteContainer/NoteContainer.scss new file mode 100644 index 0000000..67a4b06 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/NoteContainer/NoteContainer.scss @@ -0,0 +1,12 @@ +.container-header { + img { + margin-right: 10px; + width: 24px; + height: 24px; + } +} + +.note-container { + background: rgba(31, 31, 42, 1.000); + height: 332px; +} \ No newline at end of file diff --git a/vapp/src/layouts/ExchangeLayout/containers/NoteContainer/NoteContainer.vue b/vapp/src/layouts/ExchangeLayout/containers/NoteContainer/NoteContainer.vue new file mode 100644 index 0000000..edd9952 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/NoteContainer/NoteContainer.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/vapp/src/layouts/ExchangeLayout/containers/NoteContainer/index.js b/vapp/src/layouts/ExchangeLayout/containers/NoteContainer/index.js new file mode 100644 index 0000000..dc197fb --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/NoteContainer/index.js @@ -0,0 +1 @@ +export { default } from './NoteContainer'; diff --git a/vapp/src/layouts/ExchangeLayout/containers/OrderBookContainer/OrderBookContainer.scss b/vapp/src/layouts/ExchangeLayout/containers/OrderBookContainer/OrderBookContainer.scss new file mode 100644 index 0000000..10e384d --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/OrderBookContainer/OrderBookContainer.scss @@ -0,0 +1,11 @@ +.container-header { + img { + margin-right: 10px; + width: 24px; + height:24px; + } +} + +.order-book-container { + height: 332px; +} \ No newline at end of file diff --git a/vapp/src/layouts/ExchangeLayout/containers/OrderBookContainer/OrderBookContainer.vue b/vapp/src/layouts/ExchangeLayout/containers/OrderBookContainer/OrderBookContainer.vue new file mode 100644 index 0000000..15a4c0d --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/OrderBookContainer/OrderBookContainer.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/vapp/src/layouts/ExchangeLayout/containers/OrderBookContainer/index.js b/vapp/src/layouts/ExchangeLayout/containers/OrderBookContainer/index.js new file mode 100644 index 0000000..7aec386 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/OrderBookContainer/index.js @@ -0,0 +1 @@ +export { default } from './OrderBookContainer'; diff --git a/vapp/src/layouts/ExchangeLayout/containers/OrderHistoryContainer/OrderHistoryContainer.scss b/vapp/src/layouts/ExchangeLayout/containers/OrderHistoryContainer/OrderHistoryContainer.scss new file mode 100644 index 0000000..3c83326 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/OrderHistoryContainer/OrderHistoryContainer.scss @@ -0,0 +1,13 @@ +.order-history-container { + height: 332px; +} + +.container-header { + background-color: rgba(2, 143, 180, 1.000); + + img { + margin-right: 10px; + width: 24px; + height: 24px; + } +} diff --git a/vapp/src/layouts/ExchangeLayout/containers/OrderHistoryContainer/OrderHistoryContainer.vue b/vapp/src/layouts/ExchangeLayout/containers/OrderHistoryContainer/OrderHistoryContainer.vue new file mode 100644 index 0000000..9993520 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/OrderHistoryContainer/OrderHistoryContainer.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/vapp/src/layouts/ExchangeLayout/containers/OrderHistoryContainer/index.js b/vapp/src/layouts/ExchangeLayout/containers/OrderHistoryContainer/index.js new file mode 100644 index 0000000..8c9ad12 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/OrderHistoryContainer/index.js @@ -0,0 +1 @@ +export { default } from './OrderHistoryContainer'; diff --git a/vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/OrderOngoingContainer.scss b/vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/OrderOngoingContainer.scss new file mode 100644 index 0000000..91fd0e5 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/OrderOngoingContainer.scss @@ -0,0 +1,13 @@ +.order-ongoing-container { + height: 332px; +} + +.container-header { + background-color: rgba(231, 102, 125, 1.000); + + img { + margin-right: 10px; + width: 24px; + height: 24px; + } +} diff --git a/vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/OrderOngoingContainer.vue b/vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/OrderOngoingContainer.vue new file mode 100644 index 0000000..78aea36 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/OrderOngoingContainer.vue @@ -0,0 +1,224 @@ + + + + + diff --git a/vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/index.js b/vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/index.js new file mode 100644 index 0000000..2fd8fd5 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/index.js @@ -0,0 +1 @@ +export { default } from './OrderOngoingContainer'; diff --git a/vapp/src/layouts/ExchangeLayout/containers/PriceChartContainer/PriceChartContainer.scss b/vapp/src/layouts/ExchangeLayout/containers/PriceChartContainer/PriceChartContainer.scss new file mode 100644 index 0000000..be00e81 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/PriceChartContainer/PriceChartContainer.scss @@ -0,0 +1,18 @@ +.container-header { + img { + margin-right: 10px; + width: 24px; + height: 24px; + } + + :last-child { + margin-left: auto; + margin-right: 16px; + } +} + +.price-chart-container { + padding: 24px; + height: 373px; + background: rgba(31, 31, 42, 1.000); +} \ No newline at end of file diff --git a/vapp/src/layouts/ExchangeLayout/containers/PriceChartContainer/PriceChartContainer.vue b/vapp/src/layouts/ExchangeLayout/containers/PriceChartContainer/PriceChartContainer.vue new file mode 100644 index 0000000..143a0bd --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/PriceChartContainer/PriceChartContainer.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/vapp/src/layouts/ExchangeLayout/containers/PriceChartContainer/index.js b/vapp/src/layouts/ExchangeLayout/containers/PriceChartContainer/index.js new file mode 100644 index 0000000..ef491fb --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/PriceChartContainer/index.js @@ -0,0 +1 @@ +export { default } from './PriceChartContainer'; diff --git a/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.scss b/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.scss new file mode 100644 index 0000000..a19db67 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.scss @@ -0,0 +1,32 @@ +.container-header { + img { + margin-right: 10px; + width: 24px; + height: 24px; + } + + :last-child { + margin-left: auto; + margin-right: 16px; + } +} + +.input-text-container { + margin-top: 30px; + margin-left: 22px; + margin-right: 22px; + + button { + display: block; + margin-top: 26px; + margin-bottom: 30px; + margin-left: auto; + } +} + +.trade-container { + width: 100%; + padding-top: 30px; + padding-bottom: 30px; + background: rgba(31, 31, 42, 1.000); +} diff --git a/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue b/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue new file mode 100644 index 0000000..3fedd34 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue @@ -0,0 +1,257 @@ + + + + + diff --git a/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/index.js b/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/index.js new file mode 100644 index 0000000..dce3bed --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/index.js @@ -0,0 +1 @@ +export { default } from './TradeContainer'; diff --git a/vapp/src/layouts/ExchangeLayout/containers/TradeHistoryContainer/TradeHistoryContainer.scss b/vapp/src/layouts/ExchangeLayout/containers/TradeHistoryContainer/TradeHistoryContainer.scss new file mode 100644 index 0000000..68bcfc4 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/TradeHistoryContainer/TradeHistoryContainer.scss @@ -0,0 +1,11 @@ +.container-header { + img { + margin-right: 10px; + width: 24px; + height: 24px; + } +} + +.group { + padding-top: 24px; +} \ No newline at end of file diff --git a/vapp/src/layouts/ExchangeLayout/containers/TradeHistoryContainer/TradeHistoryContainer.vue b/vapp/src/layouts/ExchangeLayout/containers/TradeHistoryContainer/TradeHistoryContainer.vue new file mode 100644 index 0000000..3a87797 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/TradeHistoryContainer/TradeHistoryContainer.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/vapp/src/layouts/ExchangeLayout/containers/TradeHistoryContainer/index.js b/vapp/src/layouts/ExchangeLayout/containers/TradeHistoryContainer/index.js new file mode 100644 index 0000000..599206e --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/containers/TradeHistoryContainer/index.js @@ -0,0 +1 @@ +export { default } from './TradeHistoryContainer'; diff --git a/vapp/src/layouts/ExchangeLayout/index.js b/vapp/src/layouts/ExchangeLayout/index.js new file mode 100644 index 0000000..e1ba0c0 --- /dev/null +++ b/vapp/src/layouts/ExchangeLayout/index.js @@ -0,0 +1 @@ +export { default } from './ExchangeLayout'; diff --git a/vapp/src/layouts/NoteCombineLayout/NoteCombineLayout.scss b/vapp/src/layouts/NoteCombineLayout/NoteCombineLayout.scss new file mode 100644 index 0000000..764f8f3 --- /dev/null +++ b/vapp/src/layouts/NoteCombineLayout/NoteCombineLayout.scss @@ -0,0 +1,3 @@ +.note-combine-layout { + +} \ No newline at end of file diff --git a/vapp/src/layouts/NoteCombineLayout/NoteCombineLayout.vue b/vapp/src/layouts/NoteCombineLayout/NoteCombineLayout.vue new file mode 100644 index 0000000..e33e538 --- /dev/null +++ b/vapp/src/layouts/NoteCombineLayout/NoteCombineLayout.vue @@ -0,0 +1,21 @@ + + + diff --git a/vapp/src/layouts/NoteCombineLayout/index.js b/vapp/src/layouts/NoteCombineLayout/index.js new file mode 100644 index 0000000..13646f7 --- /dev/null +++ b/vapp/src/layouts/NoteCombineLayout/index.js @@ -0,0 +1 @@ +export { default } from './NoteCombineLayout'; diff --git a/vapp/src/layouts/NoteTransferHistoryLayout/NoteTransferHistoryLayout.vue b/vapp/src/layouts/NoteTransferHistoryLayout/NoteTransferHistoryLayout.vue new file mode 100644 index 0000000..7ca4a33 --- /dev/null +++ b/vapp/src/layouts/NoteTransferHistoryLayout/NoteTransferHistoryLayout.vue @@ -0,0 +1,18 @@ + + + diff --git a/vapp/src/layouts/NoteTransferHistoryLayout/index.js b/vapp/src/layouts/NoteTransferHistoryLayout/index.js new file mode 100644 index 0000000..354b677 --- /dev/null +++ b/vapp/src/layouts/NoteTransferHistoryLayout/index.js @@ -0,0 +1 @@ +export { default } from './NoteTransferHistoryLayout'; diff --git a/vapp/src/layouts/NoteTransferLayout/NoteTransferLayout.vue b/vapp/src/layouts/NoteTransferLayout/NoteTransferLayout.vue new file mode 100644 index 0000000..0fc68d0 --- /dev/null +++ b/vapp/src/layouts/NoteTransferLayout/NoteTransferLayout.vue @@ -0,0 +1,23 @@ + + + diff --git a/vapp/src/layouts/NoteTransferLayout/index.js b/vapp/src/layouts/NoteTransferLayout/index.js new file mode 100644 index 0000000..f654f34 --- /dev/null +++ b/vapp/src/layouts/NoteTransferLayout/index.js @@ -0,0 +1 @@ +export { default } from './NoteTransferLayout'; diff --git a/vapp/src/layouts/OrderHistoryLayout/OrderHistoryLayout.scss b/vapp/src/layouts/OrderHistoryLayout/OrderHistoryLayout.scss new file mode 100644 index 0000000..ee64c5a --- /dev/null +++ b/vapp/src/layouts/OrderHistoryLayout/OrderHistoryLayout.scss @@ -0,0 +1,3 @@ +.order-history-container { + +} diff --git a/vapp/src/layouts/OrderHistoryLayout/OrderHistoryLayout.vue b/vapp/src/layouts/OrderHistoryLayout/OrderHistoryLayout.vue new file mode 100644 index 0000000..5a97116 --- /dev/null +++ b/vapp/src/layouts/OrderHistoryLayout/OrderHistoryLayout.vue @@ -0,0 +1,18 @@ + + + diff --git a/vapp/src/layouts/OrderHistoryLayout/index.js b/vapp/src/layouts/OrderHistoryLayout/index.js new file mode 100644 index 0000000..d4edbdf --- /dev/null +++ b/vapp/src/layouts/OrderHistoryLayout/index.js @@ -0,0 +1 @@ +export { default } from './OrderHistoryLayout'; diff --git a/vapp/src/layouts/SummaryLayout/SummaryLayout.scss b/vapp/src/layouts/SummaryLayout/SummaryLayout.scss new file mode 100644 index 0000000..e69de29 diff --git a/vapp/src/layouts/SummaryLayout/SummaryLayout.vue b/vapp/src/layouts/SummaryLayout/SummaryLayout.vue new file mode 100644 index 0000000..a77fac2 --- /dev/null +++ b/vapp/src/layouts/SummaryLayout/SummaryLayout.vue @@ -0,0 +1,31 @@ + + + diff --git a/vapp/src/layouts/SummaryLayout/index.js b/vapp/src/layouts/SummaryLayout/index.js new file mode 100644 index 0000000..c6ed453 --- /dev/null +++ b/vapp/src/layouts/SummaryLayout/index.js @@ -0,0 +1 @@ +export { default } from './SummaryLayout'; diff --git a/vapp/src/layouts/WalletLayout/WalletLayout.scss b/vapp/src/layouts/WalletLayout/WalletLayout.scss new file mode 100644 index 0000000..e69de29 diff --git a/vapp/src/layouts/WalletLayout/WalletLayout.vue b/vapp/src/layouts/WalletLayout/WalletLayout.vue new file mode 100644 index 0000000..118cd70 --- /dev/null +++ b/vapp/src/layouts/WalletLayout/WalletLayout.vue @@ -0,0 +1,18 @@ + + + diff --git a/vapp/src/layouts/WalletLayout/index.js b/vapp/src/layouts/WalletLayout/index.js new file mode 100644 index 0000000..b8b30d6 --- /dev/null +++ b/vapp/src/layouts/WalletLayout/index.js @@ -0,0 +1 @@ +export { default } from './WalletLayout'; diff --git a/vapp/src/main.js b/vapp/src/main.js index 210ba79..75aadb3 100644 --- a/vapp/src/main.js +++ b/vapp/src/main.js @@ -4,14 +4,14 @@ import App from './App.vue'; import router from './router'; import store from './store'; -import Buefy from 'buefy'; +import VueApexCharts from 'vue-apexcharts'; import * as filters from './filters'; // Global event bus Vue.prototype.$bus = new Vue(); -Vue.use(Buefy); +Vue.component('apexchart', VueApexCharts); // register global utility filters Object.keys(filters).forEach((key) => { diff --git a/vapp/src/router/index.js b/vapp/src/router/index.js index d77f714..2d32f46 100644 --- a/vapp/src/router/index.js +++ b/vapp/src/router/index.js @@ -1,91 +1,135 @@ import Vue from 'vue'; import Router from 'vue-router'; -import store from '../store/index'; +// import store from '../store/index'; Vue.use(Router); -import LoginPage from '../views/LoginPage.vue'; -import MainPage from '../views/MainPage.vue'; -import DashboardPage from '../views/DashboardPage.vue'; -import DashboardSummaryPage from '../views/DashboardSummaryPage.vue'; -import ExchangePage from '../views/ExchangePage.vue'; -import NotePage from '../views/NotePage.vue'; -import NoteTransferPage from '../views/NoteTransferPage.vue'; -import NoteWalletPage from '../views/NoteWalletPage.vue'; -import NoteCombinePage from '../views/NoteCombinePage.vue'; -import NoteConvertPage from '../views/NoteConvertPage.vue'; -import HistoryNoteTransferPage from '../views/HistoryNoteTransferPage.vue'; -import HistoryOrderPage from '../views/HistoryOrderPage.vue'; -import AccountImportPage from '../views/AccountImportPage.vue'; -import AccountExportPage from '../views/AccountExportPage.vue'; -import AccountDeletePage from '../views/AccountDeletePage.vue'; +import DashboardLayout from '../layouts/DashboardLayout'; +import ExchangeLayout from '../layouts/ExchangeLayout'; +import SummaryLayout from '../layouts/SummaryLayout'; +import AccountImportLayout from '../layouts/AccountImportLayout'; +import AccountExportLayout from '../layouts/AccountExportLayout'; +import AccountDeleteLayout from '../layouts/AccountDeleteLayout'; +import WalletLayout from '../layouts/WalletLayout'; +import NoteTransferLayout from '../layouts/NoteTransferLayout'; +import NoteCombineLayout from '../layouts/NoteCombineLayout'; +import NoteTransferHistoryLayout from '../layouts/NoteTransferHistoryLayout'; +import OrderHistoryLayout from '../layouts/OrderHistoryLayout'; const routes = [ - { - path: '/login', - component: LoginPage, - }, { path: '/', - component: MainPage, + component: DashboardLayout, children: [ { path: '', - component: DashboardPage, - children: [ - { - path: '', - component: DashboardSummaryPage, - }, - { - path: 'notes', - component: NotePage, - }, - { - path: 'transfer', - component: NoteTransferPage, - }, - { - path: 'wallet', - component: NoteWalletPage, - }, - { - path: 'combine', - component: NoteCombinePage, - }, - { - path: 'convert', - component: NoteConvertPage, - }, - { - path: 'notes/transfer', - component: HistoryNoteTransferPage, - }, - { - path: 'orders', - component: HistoryOrderPage, - }, - { - path: 'accounts/import', - component: AccountImportPage, - }, - { - path: 'accounts/export', - component: AccountExportPage, - }, - { - path: 'accounts/delete', - component: AccountDeletePage, - }, - ], + component: SummaryLayout, + }, + { + path: 'accounts/import', + component: AccountImportLayout, + }, + { + path: 'accounts/export', + component: AccountExportLayout, + }, + { + path: 'accounts/delete', + component: AccountDeleteLayout, + }, + { + path: 'wallet', + component: WalletLayout, + }, + { + path: '/notes/transfer', + component: NoteTransferLayout, + }, + { + path: 'notes/combine', + component: NoteCombineLayout, }, { - path: 'exchange', - component: ExchangePage, + path: 'notes/history', + component: NoteTransferHistoryLayout, + }, + { + path: 'orders/history', + component: OrderHistoryLayout, }, ], }, + { + path: '/exchange', + component: ExchangeLayout, + }, ]; +// const routes = [ +// { +// path: '/login', +// component: LoginPage, +// }, +// { +// path: '/', +// component: ExchangeLayout, +// children: [ +// { +// path: '', +// component: DashboardPage, +// children: [ +// { +// path: '', +// component: DashboardSummaryPage, +// }, +// { +// path: 'notes', +// component: NotePage, +// }, +// { +// path: 'transfer', +// component: NoteTransferPage, +// }, +// { +// path: 'wallet', +// component: NoteWalletPage, +// }, +// { +// path: 'combine', +// component: NoteCombinePage, +// }, +// { +// path: 'convert', +// component: NoteConvertPage, +// }, +// { +// path: 'notes/transfer', +// component: HistoryNoteTransferPage, +// }, +// { +// path: 'orders', +// component: HistoryOrderPage, +// }, +// { +// path: 'accounts/import', +// component: AccountImportPage, +// }, +// { +// path: 'accounts/export', +// component: AccountExportPage, +// }, +// { +// path: 'accounts/delete', +// component: AccountDeletePage, +// }, +// ], +// }, +// { +// path: 'exchange', +// component: ExchangePage, +// }, +// ], +// }, +// ]; const createRouter = () => new Router({ @@ -98,13 +142,13 @@ const createRouter = () => const router = createRouter(); -router.beforeResolve((to, _, next) => { - const key = store.state.key; - if (key === null && to.path !== '/login') { - next({ path: '/login' }); - } else { - next(); - } -}); +// router.beforeResolve((to, _, next) => { +// const key = store.state.key; +// if (key === null && to.path !== '/login') { +// next({ path: '/login' }); +// } else { +// next(); +// } +// }); export default router; diff --git a/vapp/src/scss/Global.scss b/vapp/src/scss/Global.scss new file mode 100644 index 0000000..9a44342 --- /dev/null +++ b/vapp/src/scss/Global.scss @@ -0,0 +1,296 @@ + +@import '~@/scss/GlobalVariables'; +@media all { + // ********************************************************************* + // CSS reset + // ********************************************************************* + html, + body, + div, + span, + applet, + object, + iframe, + h1, + h2, + h3, + h4, + h5, + h6, + p, + blockquote, + pre, + a, + abbr, + acronym, + address, + big, + cite, + code, + del, + dfn, + em, + img, + ins, + kbd, + q, + s, + samp, + small, + strike, + strong, + sub, + sup, + tt, + var, + b, + u, + center, + dl, + dt, + dd, + ol, + ul, + li, + fieldset, + form, + label, + legend, + table, + caption, + tbody, + tfoot, + thead, + tr, + th, + td, + article, + aside, + canvas, + details, + embed, + figure, + figcaption, + footer, + header, + hgroup, + menu, + nav, + output, + ruby, + section, + summary, + time, + mark, + audio, + video { + font-family: 'Montserrat', sans-serif; + font-size: 14px; + margin: 0; + padding: 0; + } + + body { + box-sizing: border-box; + } + + ::placeholder { + color: black; + opacity: 0.2; + } + + *:focus { + outline: 0 !important; + } + + .prevent-pointer-events { + pointer-events: none; + } + + .prevent-user-select { + user-select: none; + } + + input, + textarea { + border-radius: 4px; + } + + button { + box-shadow: none !important; + } + + // ********************************************************************* + // Disable WebKit Spinners + // ********************************************************************* + input[type='number']::-webkit-inner-spin-button, + input[type='number']::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; + } + + // ********************************************************************* + // Standard list styles + // ********************************************************************* + ul li { + list-style-type: none; + } + + // ********************************************************************* + // Standard link styles + // ********************************************************************* + a:link, + a:visited, + a:hover, + a:active { + text-decoration: none; + + p { + text-decoration: none; + } + + &.nounderline, + &.nounderline * { + text-decoration: none; + } + } + + a { + &.underline { + text-decoration: underline; + } + + &.underline:hover * { + text-decoration: underline; + } + } + + .underline a { + text-decoration: underline; + } + + // ********************************************************************* + // Standard elements + // ********************************************************************* + .hidden { + display: none; + } + + // ********************************************************************* + // Standard text styles + // ********************************************************************* + + p { + color: black; + } + + h1 { + font-size: 42px; + } + + h2 { + font-size: 30px; + } + + h3 { + font-size: 20px; + } + + h4 { + font-size: 16px; + } + + h5 { + font-size: 14px; + } + + h6 { + font-size: 13px; + } + + // ********************************************************************* + // Standard flex-box styles + // ********************************************************************* + .flex { + &.row { + flex-direction: row; + } + + &.column { + flex-direction: column; + } + + &.align-items-start { + align-items: flex-start; + } + + &.align-items-center { + align-items: center; + } + + &.align-items-end { + align-items: flex-end; + } + } + + .flex-col-1-1-vertical-center { + align-items: center; + display: flex; + + > * { + flex: 1; + } + } + + .flex-col-vertical-top { + align-items: flex-start; + display: flex; + } + + .flex-col-vertical-center { + align-items: center; + display: flex; + } + + .flex-col-vertical-bottom { + align-items: flex-end; + display: flex; + } + + .flex-space-between { + display: flex; + justify-content: space-between; + } + + // ********************************************************************* + // Standard buttons + // ********************************************************************* + button { + padding-top: 5px; + padding-left: 30px; + padding-right: 30px; + height: 38px; + border-radius: 20px; + box-shadow: 0 4px 12px 0 rgba(7, 7, 15, 0.2); + background-color: rgba(247, 248, 249, 1.000); + font-family: DINPro; + font-size: 16px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.39; + letter-spacing: -0.34px; + text-align: center; + color: #3753d5; + border: 0px; + } + + button:hover { + cursor: pointer; + background-color: rgba(222, 224, 224, 1.000); + } +} // @media all and ( min-width: calc(#{$tablet-width} + 1px) ) + +// ********************************************************************************************************** +// Global elements for all sizes (Desktop, Tablet, Mobile) +// ********************************************************************************************************** diff --git a/vapp/src/scss/GlobalVariables.scss b/vapp/src/scss/GlobalVariables.scss new file mode 100644 index 0000000..af86bcc --- /dev/null +++ b/vapp/src/scss/GlobalVariables.scss @@ -0,0 +1,6 @@ +// ********************************************************************* +// Standard window width sizes +// ********************************************************************* +$tablet-width: 1024px; +$mobile-width: 414px; +$nft-mobile-width: 700px; diff --git a/vapp/src/scss/containers.scss b/vapp/src/scss/containers.scss new file mode 100644 index 0000000..e2679b3 --- /dev/null +++ b/vapp/src/scss/containers.scss @@ -0,0 +1,171 @@ +.container { + box-shadow: 4px 8px 24px 0 rgba(7, 7, 15, 0.5); + border: solid 1px #2a2c3c; + background-color: rgba(31, 31, 42, 1.000); +} + +.container-header { + height: 60px; + padding-left: 32px; + padding-top: 4px; + padding-bottom: 2px; + background: rgba(55, 84, 213, 1.000); + align-items: center; + display: flex; + + h3 { + margin-top: auto; + margin-bottom: auto; + font-family: DINPro; + font-size: 24px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + letter-spacing: -0.15px; + color: #f7f8f9; + } + + .radio-button-container { + display: block; + margin-left: auto; + margin-right: 24px; + } +} + +// ********************************************************************* +// table container +// ********************************************************************* +.table-container { + height: 300px; + padding-top: 30px; + padding-left: 24px; + padding-right: 24px; +} + +// ********************************************************************* +// input container +// ********************************************************************* +.input-container { + width: 100%; + display: flex; +} + +.input-title { + min-width: 200px; + height: 32px; + background-color: #2a2c3c; + justify-content: center; + align-items: center; + flex-direction: column; + display: flex; + + p { + margin: 0px; + font-family: DINPro; + font-size: 14px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + line-height: 1.43; + letter-spacing: -0.34px; + color: #757794; + } +} + +.input-field { + flex-grow: 1; + height: 32px; + background-color: #1f1f2a; + justify-content: center; + align-items: center; + display: flex; + border-bottom-width:1px; + border-bottom-style: solid; + border-bottom-color: #2a2c3c; + + + p { + margin: 0px; + font-family: DINPro; + font-size: 14px; + font-weight: normal; + font-style: normal; + font-stretch: normal; + line-height: 1.43; + letter-spacing: -0.34px; + color: #e3e5e9; + } + + .note-hash { + color: #757794; + } + + p ~ .unit { + margin-left: 20px; + font-size: 12px; + color: #757794; + } +} + +// ********************************************************************* +// dashboard container +// ********************************************************************* +.dashboard-container { + margin-bottom: 24px; +} + +.dashboard-container-header { + height: 60px; + padding-left: 32px; + background: rgba(55, 84, 213, 1.000); + align-items: center; + justify-content: space-between; + display: flex; + padding-right: 24px; + + h3 { + font-family: DINPro; + font-size: 24px; + font-weight: bold; + font-style: normal; + font-stretch: normal; + letter-spacing: -0.15px; + color: #f7f8f9; + } + + .radio-button { + margin-right: 24px; + } + +} + +.content { + height: 200px; + background: rgba(31, 31, 42, 1.000); +} + +// ********************************************************************* +// account info container +// ********************************************************************* +.account-info-container { + display: flex; + justify-content: center; + align-items: center; + + p { + font-family: DINPro; + font-size: 14px; + font-weight: 500; + font-style: normal; + font-stretch: normal; + line-height: 1.5; + letter-spacing: -0.32px; + color: #6d93ff; + } +} + +.account-info-container > :nth-child(2) { + color: #e3e5e9; + padding-left: 4px; + padding-right: 4px; +} diff --git a/vapp/src/store/actions.js b/vapp/src/store/actions.js index a6b09b2..3da02e3 100644 --- a/vapp/src/store/actions.js +++ b/vapp/src/store/actions.js @@ -1,92 +1,5 @@ -import contract from 'truffle-contract'; -import dexJSON from '../../../build/contracts/ZkDex.json'; -import daiJSON from '../../../build/contracts/MockDai.json'; - export default { - setContract ({ - commit, - }) { - const dex = contract(dexJSON); - const dai = contract(daiJSON); - - dex.setProvider(window.web3.currentProvider); - dai.setProvider(window.web3.currentProvider); - - commit('SET_DEX_CONTRACT', dex); - commit('SET_DAI_CONTRACT', dai); - }, - setDexContractInstance ({ - commit, - }, instance) { - commit('SET_DEX_CONTRACT_INSTANCE', instance); - }, - setDaiContractInstance ({ - commit, - }, instance) { - commit('SET_DAI_CONTRACT_INSTANCE', instance); - }, - - setDaiAddress ({ - commit, - }, daiAddress) { - commit('SET_DAI_ADDRESS', daiAddress); - }, - - setDaiAmount ({ - commit, - }, daiAmount) { - commit('SET_DAI_AMOUNT', daiAmount); - }, - - setViewingKey ({ - commit, - }, key) { - commit('SET_VIEWING_KEY', key); - }, - setSecretKey ({ - commit, - }, key) { - commit('SET_SECRET_KEY', key); - }, - - setOrder ({ - commit, - }, order) { - commit('SET_ORDER', order); - }, - setOrders ({ - commit, - }, orders) { - commit('SET_ORDERS', orders); - }, - - setAccounts ({ - commit, - }, accounts) { - commit('SET_ACCOUNTS', accounts); - }, - - setNote ({ - commit, - }, note) { - commit('SET_NOTE', note); - }, - - setWeb3 ({ - commit, - }, web3) { - commit('SET_WEB3', web3); - }, - - updateWallet ({ - commit, - }, account) { - commit('UPDATE_WALLET', account); - }, - - setLastPath ({ - commit, - }, path) { - commit('SET_LAST_PATH', path); + setInitialState ({ commit }) { + commit('SET_INITIAL_STATE'); }, }; diff --git a/vapp/src/store/getters.js b/vapp/src/store/getters.js index c0ab49c..0b45dca 100644 --- a/vapp/src/store/getters.js +++ b/vapp/src/store/getters.js @@ -1,61 +1,92 @@ +import Web3Utils from 'web3-utils'; + const getters = { - isListening: state => state.web3.isListening, - numberOfNotesInAccount: state => (account) => { - let count = 0; - if (state.notes !== null) { - for (let i = 0; i < state.notes.length; i++) { - if (state.notes[i].owner === account.address) { - count++; + ongoingOrders: (state) => { + const key = state.app.metamaskAccount; + return state.order.orders.filter(order => (order.orderMaker === key || order.orderTaker === key) && order.state < 2); + }, + orderBook: state => state.order.orders.filter(order => order.state === '0'), + orderHistory: (state) => { + const key = state.app.metamaskAccount; + return state.order.orders.filter(order => (order.orderMaker === key || order.orderTaker === key) && order.state === '2'); + }, + tradeHistory: state => state.order.orders.filter(order => order.state === '2'), + balance: (state) => { + let etherNoteAmount = 0; + let daiNoteAmount = 0; + let etherTotalBalance = Web3Utils.toBN('0x0'); + let daiTotalBalance = Web3Utils.toBN('0x0'); + + state.note.notes.forEach((note) => { + if (note.state === '0x1') { + const token = Web3Utils.toHex(Web3Utils.toBN(note.token)); + switch (token) { + case '0x0': + etherNoteAmount++; + etherTotalBalance = etherTotalBalance.add(Web3Utils.toBN(note.value)); + break; + + case '0x1': + daiNoteAmount++; + daiTotalBalance = daiTotalBalance.add(Web3Utils.toBN(note.value)); + break; } } - } - return count; + }); + + const etherNotes = { + name: 'Ethereum', + symbol: 'ETH', + noteAmount: etherNoteAmount, + totalBalance: Web3Utils.toHex(etherTotalBalance), + }; + const daiNotes = { + name: 'Dai', + symbol: 'DAI', + noteAmount: daiNoteAmount, + totalBalance: Web3Utils.toHex(daiTotalBalance), + }; + + return [etherNotes, daiNotes]; }, - orderList: (state) => { - const list = {}; - if (state.orders !== null && typeof state.orders !== 'undefined') { - state.orders.forEach((o) => { - // only valid order - if (o.state === '0x0') { - list[o.price] = (list[o.price] || 0) + 1; + balanceFromAccount: state => (account) => { + let etherNoteAmount = 0; + let daiNoteAmount = 0; + let etherTotalBalance = Web3Utils.toBN('0x0'); + let daiTotalBalance = Web3Utils.toBN('0x0'); + + state.note.notes.forEach((note) => { + const noteOwner = Web3Utils.padLeft(Web3Utils.toHex(Web3Utils.toBN(note.owner)), 40); + if (note.state === '0x1' && account.address === noteOwner) { + const token = Web3Utils.toHex(Web3Utils.toBN(note.token)); + switch (token) { + case '0x0': + etherNoteAmount++; + etherTotalBalance = etherTotalBalance.add(Web3Utils.toBN(note.value)); + break; + + case '0x1': + daiNoteAmount++; + daiTotalBalance = daiTotalBalance.add(Web3Utils.toBN(note.value)); + break; } - }); - } - return list; - }, - smartNotes: (state) => { - if (state.notes !== null && typeof state.notes !== 'undefined') { - return state.notes.filter(note => note.isSmart === '0x1'); - } - return []; - }, - ongoingOrderHistory: (state) => { - if (state.orderHistory !== null) { - return state.orderHistory.filter(order => parseInt(order.state) <= 1); - } - return []; - }, - completedOrderHistory: (state) => { - if (state.orderHistory !== null) { - return state.orderHistory.filter(order => parseInt(order.state) > 1); - } - return []; - }, - notesFilteredByOrderType: (state) => { - if (state.doYouWantToBuyOrSell === 'buy') { - if (state.doYouWantToMakeOrTake === 'make') { - return state.notes.filter(note => note.token === '0x1' && note.state === '0x1'); - } else if (state.doYouWantToMakeOrTake === 'take') { - return state.notes.filter(note => note.token === '0x0' && note.state === '0x1'); - } - } else if (state.doYouWantToBuyOrSell === 'sell') { - if (state.doYouWantToMakeOrTake === 'make') { - return state.notes.filter(note => note.token === '0x0' && note.state === '0x1'); - } else if (state.doYouWantToMakeOrTake === 'take') { - return state.notes.filter(note => note.token === '0x1' && note.state === '0x1'); } - } - return []; + }); + + const etherNotes = { + name: 'Ethereum', + symbol: 'ETH', + noteAmount: etherNoteAmount, + totalBalance: Web3Utils.toHex(etherTotalBalance), + }; + const daiNotes = { + name: 'Dai', + symbol: 'DAI', + noteAmount: daiNoteAmount, + totalBalance: Web3Utils.toHex(daiTotalBalance), + }; + + return [etherNotes, daiNotes]; }, }; diff --git a/vapp/src/store/index.js b/vapp/src/store/index.js index 79ab240..8058be4 100644 --- a/vapp/src/store/index.js +++ b/vapp/src/store/index.js @@ -1,17 +1,27 @@ import Vue from 'vue'; import Vuex from 'vuex'; + import actions from './actions'; -import getters from './getters'; import mutations from './mutations'; -import state from './state'; +import getters from './getters'; + +import appModule from './modules/app'; +import accountModule from './modules/accounts'; +import noteModule from './modules/notes'; +import orderModule from './modules/orders'; Vue.use(Vuex); const store = new Vuex.Store({ actions, - getters, mutations, - state, + getters, + modules: { + app: appModule, + account: accountModule, // TODO: change account to account`s` + note: noteModule, + order: orderModule, + }, }); export default store; diff --git a/vapp/src/store/modules/accounts.js b/vapp/src/store/modules/accounts.js new file mode 100644 index 0000000..0030eb1 --- /dev/null +++ b/vapp/src/store/modules/accounts.js @@ -0,0 +1,35 @@ +const state = { + accounts: [], + // viewingKey: '0xb9f4b1b0a4c4996', + viewingKey: '0xb9f4b1b0a4c4996', +}; + +const mutations = { + ADD_ACCOUNT: (state, account) => { + state.accounts.push(account); + }, + SET_ACCOUNTS: (state, accounts) => { + state.accounts = accounts; + }, + DELETE_ACCOUNTS: (state) => { + state.accounts = []; + }, +}; + +const actions = { + addAccount ({ commit }, account) { + commit('ADD_ACCOUNT', account); + }, + setAccounts ({ commit }, accounts) { + commit('SET_ACCOUNTS', accounts); + }, + deleteAccounts ({ commit }, account) { + commit('DELETE_ACCOUNTS', account); + }, +}; + +export default { + state, + mutations, + actions, +}; diff --git a/vapp/src/store/modules/app.js b/vapp/src/store/modules/app.js new file mode 100644 index 0000000..4e75494 --- /dev/null +++ b/vapp/src/store/modules/app.js @@ -0,0 +1,45 @@ +const state = { + web3: null, + viewingKey: '0x1234', + metamaskAccount: null, + key: null, + dexContract: null, + daiContract: null, +}; + +const mutations = { + SET_METAMASK_ACCOUNT: (state, account) => { + state.metamaskAccount = account; + state.key = account; // Note: use matamask account as key. + }, + SET_WEB3: (state, web3) => { + state.web3 = web3; + }, + SET_DEX_CONTRACT: (state, contract) => { + state.dexContract = contract; + }, + SET_DAI_CONTRACT: (state, contract) => { + state.daiContract = contract; + }, +}; + +const actions = { + setMetamaskAccount ({ commit }, account) { + commit('SET_METAMASK_ACCOUNT', account); + }, + setWeb3 ({ commit }, web3) { + commit('SET_WEB3', web3); + }, + setDexContract ({ commit }, contract) { + commit('SET_DEX_CONTRACT', contract); + }, + setDaiContract ({ commit }, contract) { + commit('SET_DAI_CONTRACT', contract); + }, +}; + +export default { + state, + mutations, + actions, +}; diff --git a/vapp/src/store/modules/notes.js b/vapp/src/store/modules/notes.js new file mode 100644 index 0000000..1eda089 --- /dev/null +++ b/vapp/src/store/modules/notes.js @@ -0,0 +1,54 @@ +import Vue from 'vue'; + +const state = { + notes: [], + // noteTransferHistory: [ + // { + // noteHash: '0x1234', + // type: 'eth', + // token: 'ether', + // value: 100, + // from: '0x2..2', + // to: '0x1..1', + // change: '0x1234', + // transactionHash: '1234', + // }, + // ], +}; + +const mutations = { + ADD_NOTE: (state, note) => { + state.notes.push(note); + }, + SET_NOTES: (state, notes) => { + state.notes = notes; + }, + DELETE_NOTES: (state) => { + state.notes = []; + }, + UPDATE_NOTE: (state, note) => { + const index = state.notes.map(n => n.hash).indexOf(note.hash); + Vue.set(state.notes, index, note); + }, +}; + +const actions = { + addNote ({ commit }, note) { + commit('ADD_NOTE', note); + }, + setNotes ({ commit }, notes) { + commit('SET_NOTES', notes); + }, + deleteNotes ({ commit }, note) { + commit('DELETE_NOTES', note); + }, + updateNote ({ commit }, note) { + commit('UPDATE_NOTE', note); + }, +}; + +export default { + state, + mutations, + actions, +}; diff --git a/vapp/src/store/modules/orders.js b/vapp/src/store/modules/orders.js new file mode 100644 index 0000000..97ae96d --- /dev/null +++ b/vapp/src/store/modules/orders.js @@ -0,0 +1,42 @@ +import Vue from 'vue'; + +const state = { + orders: [], +}; + +const mutations = { + ADD_ORDER: (state, order) => { + state.orders.push(order); + }, + SET_ORDERS: (state, orders) => { + state.orders = orders; + }, + DELETE_ORDERS: (state) => { + state.orders = []; + }, + UPDATE_ORDER: (state, order) => { + const index = state.orders.map(o => o.orderId).indexOf(order.orderId); + Vue.set(state.orders, index, order); + }, +}; + +const actions = { + addOrder ({ commit }, order) { + commit('ADD_ORDER', order); + }, + setOrders ({ commit }, orders) { + commit('SET_ORDERS', orders); + }, + deleteOrders ({ commit }, orders) { + commit('DELETE_ORDERS', orders); + }, + updateOrder ({ commit }, order) { + commit('UPDATE_ORDER', order); + }, +}; + +export default { + state, + mutations, + actions, +}; diff --git a/vapp/src/store/mutations.js b/vapp/src/store/mutations.js index 4af2ae6..bbac13b 100644 --- a/vapp/src/store/mutations.js +++ b/vapp/src/store/mutations.js @@ -1,72 +1,149 @@ export default { - SET_DEX_CONTRACT: (state, contract) => { - state.dexContract = contract; - }, - SET_DAI_CONTRACT: (state, contract) => { - state.daiContract = contract; - }, - SET_DEX_CONTRACT_INSTANCE: (state, contractInstance) => { - state.dexContractInstance = contractInstance; - }, - SET_DAI_CONTRACT_INSTANCE: (state, contractInstance) => { - state.daiContractInstance = contractInstance; - }, + // SET_DEX_CONTRACT: (state, contract) => { + // state.dexContract = contract; + // }, + // SET_DAI_CONTRACT: (state, contract) => { + // state.daiContract = contract; + // }, + // SET_DEX_CONTRACT_INSTANCE: (state, contractInstance) => { + // state.dexContractInstance = contractInstance; + // }, + // SET_DAI_CONTRACT_INSTANCE: (state, contractInstance) => { + // state.daiContractInstance = contractInstance; + // }, - SET_DAI_ADDRESS: (state, daiAddress) => { - state.daiAddress = daiAddress; - }, + // SET_DAI_ADDRESS: (state, daiAddress) => { + // state.daiAddress = daiAddress; + // }, - SET_VIEWING_KEY: (state, key) => { - state.viewingKey = key; - }, - SET_SECRET_KEY: (state, key) => { - state.secretKey = key; - }, - SET_ORDER: (state, order) => { - state.order = order; - }, + // SET_VIEWING_KEY: (state, key) => { + // state.viewingKey = key; + // }, + // SET_SECRET_KEY: (state, key) => { + // state.secretKey = key; + // }, + // SET_ORDER: (state, order) => { + // state.order = order; + // }, - SET_NOTE: (state, note) => { - state.note = note; - }, + // SET_NOTE: (state, note) => { + // state.note = note; + // }, - SET_WEB3: (state, web3) => { - state.web3 = web3; - }, + // SET_WEB3: (state, web3) => { + // state.web3 = web3; + // }, - UPDATE_WALLET (state, account) { - state.web3.coinbase = account.coinbase; - state.web3.balance = account.balance; - }, + // UPDATE_WALLET (state, account) { + // state.web3.coinbase = account.coinbase; + // state.web3.balance = account.balance; + // }, - REGISTER_CONTRACT (state, contract) { - state.contract = () => contract; - }, + // REGISTER_CONTRACT (state, contract) { + // state.contract = () => contract; + // }, - SET_LAST_PATH (state, path) { - state.path = path; - }, + // SET_LAST_PATH (state, path) { + // state.path = path; + // }, - SET_KEY (state, key) { - state.key = key; - }, + // SET_KEY (state, key) { + // state.key = key; + // }, - SET_ACCOUNT (state, account) { - state.account = account; - }, + // SET_ACCOUNT (state, account) { + // state.account = account; + // }, - MUTATE_ACCOUNTS (state, accounts) { - state.accounts = accounts; - }, + // MUTATE_ACCOUNTS (state, accounts) { + // state.accounts = accounts; + // }, - SET_ACCOUNTS (state, accounts) { - state.accounts = accounts; - }, - ADD_ACCOUNT (state, account) { - if (state.accounts === null) { - state.accounts = []; - } - state.accounts.push(account); + // SET_ACCOUNTS (state, accounts) { + // state.accounts = accounts; + // }, + // ADD_ACCOUNT (state, account) { + // if (state.accounts === null) { + // state.accounts = []; + // } + // state.accounts.push(account); + // }, + // DELETE_ACCOUNT (state, account) { + // const i = state.accounts.indexOf(account); + // state.accounts.splice(i, 1); + // }, + // SET_NOTES (state, notes) { + // state.notes = notes; + // }, + // ADD_NOTE (state, note) { + // console.log('add note', note); + // if (state.notes === null) { + // state.notes = []; + // } + // state.notes.push(note); + // console.log('inadd', state.notes); + // }, + // UPDATE_NOTE_STATE: (state, n) => { + // console.log('inupdate', state.notes); + // // const { noteHash, noteState } = n; + // // console.log('test', noteHash, noteState); + // for (let i = 0; i < state.notes.length; i++) { + // console.log('update note', state.notes[i]); + // // if (state.notes[i].hash === noteHash) { + // // const note = state.notes[i]; + // // note.hash = noteHash; + // // note.state = noteState; + // // state.notes.splice(i, 1, note); + // // console.log('after', state.notes); + // // break; + // // } + // } + // }, + // SET_TRANSFER_NOTES (state, transferNotes) { + // state.transferNotes = transferNotes; + // }, + // SET_ORDERS: (state, orders) => { + // state.orders = orders; + // }, + // ADD_ORDER: (state, order) => { + // if (state.orders === null) { + // state.orders = []; + // } + // state.orders.push(order); + // }, + // SET_ORDER_HISTORY: (state, history) => { + // state.orderHistory = history; + // }, + // ADD_ORDER_HISTORY: (state, history) => { + // if (state.orderHistory === null) { + // state.orderHistory = []; + // } + // state.orderHistory.push(history); + // }, + // SET_DAI_AMOUNT: (state, d) => { + // state.daiAmount = d.daiAmount; + // }, + // SELECT_BUY_OR_SELL: (state, choice) => { + // state.doYouWantToBuyOrSell = choice; + // }, + // SELECT_MAKE_OR_TAKE: (state, choice) => { + // state.doYouWantToMakeOrTake = choice; + // }, + SET_INITIAL_STATE: (state) => { + let s = appInitialState(); + Object.keys(s).forEach((key) => { + state.app[key] = s[key]; + }); + + s = accountsInitialState(); + Object.keys(s).forEach((key) => { + state.account[key] = s[key]; + }); + + s = notesInitialState(); + Object.keys(s).forEach((key) => { + state.note[key] = s[key]; + }); }, DELETE_ACCOUNT (state, account) { const i = state.accounts.indexOf(account); @@ -138,18 +215,26 @@ export default { }, }; -function initialState () { +// use function because function always keep inital state. +const appInitialState = function () { return { - 'path': '/', + 'web3': null, + 'viewingKey': '0x1234', + 'metamaskAccount': null, 'key': null, - 'viewingKey': null, - 'accounts': null, - 'notes': null, - 'transferNotes': null, - 'orders': null, - 'orderHistory': null, - 'daiAmount': '0', - 'doYouWantToBuyOrSell': 'buy', - 'doYouWantToMakeOrTake': 'make', + 'dexContract': null, + 'daiContract': null, }; -} +}; + +const accountsInitialState = function () { + return { + 'accounts': [], + }; +}; + +const notesInitialState = function () { + return { + 'notes': [], + }; +}; diff --git a/vapp/tests/unit/.eslintrc.js b/vapp/tests/unit/.eslintrc.js new file mode 100644 index 0000000..013a195 --- /dev/null +++ b/vapp/tests/unit/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + env: { + jest: true + } +} \ No newline at end of file diff --git a/vapp/tests/unit/helpers/index.js b/vapp/tests/unit/helpers/index.js new file mode 100644 index 0000000..58fde9c --- /dev/null +++ b/vapp/tests/unit/helpers/index.js @@ -0,0 +1,3 @@ +import LocalVue from './localVue'; + +export { LocalVue }; diff --git a/vapp/tests/unit/helpers/localVue.js b/vapp/tests/unit/helpers/localVue.js new file mode 100644 index 0000000..df867ed --- /dev/null +++ b/vapp/tests/unit/helpers/localVue.js @@ -0,0 +1,31 @@ +import { createLocalVue } from '@vue/test-utils'; +import BootstrapVue from 'bootstrap-vue'; +import Vuex from 'vuex'; +import { state, getters } from '../helpers/mockStore'; + +function createLocalVueInstance () { + const localVue = createLocalVue(); + localVue.use(BootstrapVue); + localVue.use(Vuex); + + const actions = { + // clearWallet: jest.fn(), + // decryptWallet: jest.fn(), + // setGasPrice: jest.fn(), + // addSwapNotification: jest.fn(), + }; + const store = new Vuex.Store({ + actions, + getters, + state, + }); + + return { + localVue, + store, + }; +} + +export default { + createLocalVueInstance, +}; diff --git a/vapp/tests/unit/helpers/mockStore.js b/vapp/tests/unit/helpers/mockStore.js new file mode 100644 index 0000000..1230834 --- /dev/null +++ b/vapp/tests/unit/helpers/mockStore.js @@ -0,0 +1,83 @@ +const state = { + // account: { + // balance: 0, + // address: '0xDECAF9CD2367cdbb726E904cD6397eDFcAe6068D', + // identifier: 'keystore', + // isHardware: false, + // }, + // customTokens: [ + // { name: 'ETH', balance: 200 }, + // { name: 'BTH', balance: 300 }, + // { name: 'ETC', balance: 400 }, + // ], + + // customPaths: {}, + // ens: true, + // Errors: {}, + // ethDonationAddress: '0xDECAF9CD2367cdbb726E904cD6397eDFcAe6068D', + // gasPrice: 41, + // Networks: nodeList, + // network: network, + // notifications: {}, + // online: true, + // Transactions: {}, + // wallet: { + // getAddressString: jest.fn(), + // }, + // web3: newWeb3, + // linkQuery: {}, +}; + +const getters = { + // account: () => state.account, + // customPaths: () => {}, + // ens: () => {}, + // Errors: () => {}, + // ethDonationAddress: () => '', + // gasPrice: () => 41, + // network: () => ({ + // auth: false, + // password: '', + // port: 443, + // service: 'infura.io', + // type: { + // blockExplorerAddr: 'https://etherscan.io/address/[[address]]', + // blockExplorerTX: 'https://etherscan.io/tx/[[txHash]]', + // chainID: 1, + // contracts: [], + // ensResolver: '0x314159265dd8dbb310642f98f50c066173c1259b', + // homePage: 'https://ethereum.org', + // name: 'ETH', + // name_long: 'Ethereum', + // tokens: [], + // ens: { + // registry: '0x123456789', + // registrarTLD: 'eth', + // registrarType: 'auction', + // }, + // currencyName: 'ETH', + // }, + // url: 'https://mainnet.infura.io/mew', + // }), + + // notifications: () => [], + // online: () => true, + // sidemenuOpen: () => false, + + // customTokens: () => [ + // { name: 'ETH', balance: 200 }, + // { name: 'BTH', balance: 300 }, + // { name: 'ETC', balance: 400 }, + // ], + + // Transactions: () => {}, + // wallet: () => ({ + // getChecksumAddressString: () => + // '0xDECAF9CD2367cdbb726E904cD6397eDFcAe6068D', + // }), + // web3: () => newWeb3, + // path: () => {}, + // linkQuery: () => {}, +}; + +export { state, getters }; diff --git a/vapp/tests/unit/specs/components/RadioButton/RadioButton.spec.js b/vapp/tests/unit/specs/components/RadioButton/RadioButton.spec.js new file mode 100644 index 0000000..8365210 --- /dev/null +++ b/vapp/tests/unit/specs/components/RadioButton/RadioButton.spec.js @@ -0,0 +1,63 @@ +import RadioButton from '../../../../../src/components/RadioButton'; +import { shallowMount } from '@vue/test-utils'; +import { LocalVue } from '../../../helpers'; + +describe('RadioButton.vue', () => { + let localVue, wrapper, store; + + beforeAll(() => { + const localVueInstance = LocalVue.createLocalVueInstance(); + localVue = localVueInstance.localVue; + store = localVueInstance.store; + }); + + beforeEach(() => { + wrapper = shallowMount(RadioButton, { + localVue, + store, + }); + }); + + it('should render correct title props', () => { + const leftTitle = 'leftTitle'; + const rightTitle = 'rightTitle'; + + wrapper.setProps({ leftTitle, rightTitle }); + + expect( + wrapper.vm.$el.querySelector('.radio-left-button').textContent.trim() + ).toEqual(leftTitle); + expect( + wrapper.vm.$el.querySelector('.radio-right-button').textContent.trim() + ).toEqual(rightTitle); + }); + + it('should change `class` when radio button clicked', () => { + const leftRadioButton = wrapper.find('.radio-left-button'); + const rightRadioButton = wrapper.find('.radio-right-button'); + + leftRadioButton.trigger('click'); + expect( + wrapper + .find('.radio-left-button') + .classes('left-selected-radio-button') + ).toBe(true); + expect( + wrapper + .find('.radio-right-button') + .classes('right-unselected-radio-button') + ).toBe(true); + + rightRadioButton.trigger('click'); + expect( + wrapper + .find('.radio-left-button') + .classes('left-unselected-radio-button') + ).toBe(true); + expect( + wrapper + .find('.radio-right-button') + .classes('right-selected-radio-button') + ).toBe(true); + }); +}); diff --git a/vapp/tests/unit/specs/components/StandardTable/StandardTable.spec.js b/vapp/tests/unit/specs/components/StandardTable/StandardTable.spec.js new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/vapp/tests/unit/specs/components/StandardTable/StandardTable.spec.js @@ -0,0 +1 @@ + From 8c5f873133781d0cb61235c6be2926bf92aa26df Mon Sep 17 00:00:00 2001 From: thomashin Date: Fri, 6 Dec 2019 18:32:47 +0900 Subject: [PATCH 15/30] fix misusing event remover If only the event is provided, remove all listeners for that event; If both event and callback are given, remove the listener for that specific callback only. --- .../AccountDeleteContainer/AccountDeleteContainer.vue | 2 +- .../AccountExportContainer/AccountExportContainer.vue | 2 +- .../LiquidateNoteContainer/LiquidateNoteContainer.vue | 2 +- .../containers/NoteTransferContainer/NoteTransferContainer.vue | 2 +- .../containers/TradeContainer/TradeContainer.vue | 3 +-- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/AccountDeleteContainer.vue b/vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/AccountDeleteContainer.vue index a56b62d..be4e29b 100644 --- a/vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/AccountDeleteContainer.vue +++ b/vapp/src/layouts/DashboardLayout/containers/AccountDeleteContainer/AccountDeleteContainer.vue @@ -27,7 +27,7 @@ export default { }); }, beforeDestroy () { - this.$bus.$off('tableDataSelected'); + this.$bus.$off('tableDataSelected', () => {}); }, }; diff --git a/vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/AccountExportContainer.vue b/vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/AccountExportContainer.vue index 74ab444..73b4c72 100644 --- a/vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/AccountExportContainer.vue +++ b/vapp/src/layouts/DashboardLayout/containers/AccountExportContainer/AccountExportContainer.vue @@ -36,7 +36,7 @@ export default { }); }, beforeDestroy () { - this.$bus.$off('tableDataSelected'); + this.$bus.$off('tableDataSelected', () => {}); }, }; diff --git a/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue b/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue index c67016a..a6ed63d 100644 --- a/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue +++ b/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue @@ -65,7 +65,7 @@ export default { }); }, beforeDestroy () { - this.$bus.$off('noteSelected'); + this.$bus.$off('noteSelected', () => {}); }, methods: { async liquidateNote () { diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.vue b/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.vue index f8d51d6..61dc1f4 100644 --- a/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.vue +++ b/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.vue @@ -75,7 +75,7 @@ export default { }); }, beforeDestroy () { - this.$bus.$off('noteSelected'); + this.$bus.$off('noteSelected', () => {}); }, computed: mapState({ dexContract: state => state.app.dexContract, diff --git a/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue b/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue index 3fedd34..d1f8354 100644 --- a/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue +++ b/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue @@ -113,8 +113,7 @@ export default { }); }, beforeDestroy () { - this.$bus.$off('noteSelected'); - this.$bus.$off('orderSelected'); + this.$bus.$off(['noteSelected', 'orderSelected'], () => {}); }, methods: { radioButtonClicked (radioButton) { From b4a01c8ee109af3ea57ce381aa0577e148739349 Mon Sep 17 00:00:00 2001 From: thomashin Date: Tue, 10 Dec 2019 13:09:07 +0900 Subject: [PATCH 16/30] vapp: give padding --- vapp/src/layouts/DashboardLayout/DashboardLayout.scss | 2 +- vapp/src/layouts/ExchangeLayout/ExchangeLayout.scss | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/vapp/src/layouts/DashboardLayout/DashboardLayout.scss b/vapp/src/layouts/DashboardLayout/DashboardLayout.scss index b06e672..3f60368 100644 --- a/vapp/src/layouts/DashboardLayout/DashboardLayout.scss +++ b/vapp/src/layouts/DashboardLayout/DashboardLayout.scss @@ -2,8 +2,8 @@ width: 1280px; margin-left: auto; margin-right: auto; - margin-bottom: 24px; padding-top: 30px; + padding-bottom: 24px; padding-left: 80px; padding-right: 80px; background: rgba(31, 31, 42, 1.000); diff --git a/vapp/src/layouts/ExchangeLayout/ExchangeLayout.scss b/vapp/src/layouts/ExchangeLayout/ExchangeLayout.scss index 36e277e..230fefb 100644 --- a/vapp/src/layouts/ExchangeLayout/ExchangeLayout.scss +++ b/vapp/src/layouts/ExchangeLayout/ExchangeLayout.scss @@ -2,6 +2,7 @@ .exchange { width: 100%; padding-top: 24px; + padding-bottom: 24px; } .exchange > :nth-child(4) { From ad8a9471ee1cadb9f22188ca8a73483adfd8608e Mon Sep 17 00:00:00 2001 From: thomashin Date: Tue, 10 Dec 2019 13:15:45 +0900 Subject: [PATCH 17/30] vapp: make footer be fixed below --- vapp/src/App.vue | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/vapp/src/App.vue b/vapp/src/App.vue index 78bcf10..efd0fbc 100644 --- a/vapp/src/App.vue +++ b/vapp/src/App.vue @@ -106,7 +106,19 @@ export default { @import './scss/Global'; @import '~@/scss/containers'; +html, body { + height: 100%; +} + #app { + display: flex; + flex-direction: column; background: rgba(31, 31, 42, 1.000); + min-height: 100%; } + +.views { + flex-grow: 1; +} + From 32de9f473f6e23c3a18bd703f9b9a8495614dbc7 Mon Sep 17 00:00:00 2001 From: thomashin Date: Tue, 10 Dec 2019 13:21:00 +0900 Subject: [PATCH 18/30] vapp: modify some codes to make settleOrder work --- vapp/localstorage.js | 5 +- vapp/router/circuits.js | 9 ++- vapp/router/notes.js | 20 +++-- vapp/router/orders.js | 13 +++ vapp/src/api/index.js | 10 ++- vapp/src/helpers/note.js | 2 +- .../CreateNoteContainer.vue | 11 ++- .../OrderOngoingContainer.vue | 80 +++++++++++-------- .../TradeContainer/TradeContainer.vue | 29 ++++--- vapp/src/store/getters.js | 2 +- 10 files changed, 105 insertions(+), 76 deletions(-) diff --git a/vapp/localstorage.js b/vapp/localstorage.js index 3a27911..ce11ca4 100644 --- a/vapp/localstorage.js +++ b/vapp/localstorage.js @@ -162,8 +162,7 @@ function addNote (_userKey, _note) { const noteHash = note.hash(); if (notes.findIndex(n => Note.hashFromJSON(n) === noteHash) < 0) { - notes.push(note); - // console.warn('Note added', noteHash); + notes.push(_note); _setNotes(userKey, notes); setNoteByHash(userKey, note); return true; @@ -192,7 +191,7 @@ module.exports.setNoteByHash = setNoteByHash; function updateNote (_userKey, note) { const userKey = marshal(_userKey); const notes = getNotes(userKey); - const i = notes.findIndex(n => n.hash() === note.hash()); + const i = notes.findIndex(n => n.hash === note.hash); if (i >= 0) { notes.splice(i, 1, note); diff --git a/vapp/router/circuits.js b/vapp/router/circuits.js index 1fc9122..43c533b 100644 --- a/vapp/router/circuits.js +++ b/vapp/router/circuits.js @@ -36,14 +36,15 @@ console.log('process.env.USE_DUMMY', process.env.USE_DUMMY); const useDummy = process.env.USE_DUMMY || false; +<<<<<<< HEAD // TODO: get private key from DB. router.post('/:circuit', asyncWrap( +======= +router.post('/', asyncWrap( +>>>>>>> vapp: modify some codes to make settleOrder work async function (req, res) { - const circuit = req.params.circuit; + const circuit = req.body.circuit; const params = req.body.params; - - // console.log('params', JSON.stringify(params)); - const generator = useDummy ? dummyGenerators[circuit] : generators[circuit]; diff --git a/vapp/router/notes.js b/vapp/router/notes.js index f5b0c4b..db7d43e 100644 --- a/vapp/router/notes.js +++ b/vapp/router/notes.js @@ -38,28 +38,32 @@ router.get('/:userKey/history', asyncWrap( router.post('/', asyncWrap( async function (req, res) { - const userKey = req.body.userKey; + const account = req.body.account; const note = req.body.note; - addNote(userKey, note); - return res.status(200).json({}); + addNote(account, note); + return res.status(200).json({ + note, + }); } )); router.post('/transfer/:userKey', asyncWrap( async function (req, res) { - const userKey = req.params.userKey; + const account = req.params.account; const note = req.body.note; - addTransferNote(userKey, note); + addTransferNote(account, note); return res.status(200).json({}); } )); router.put('/', asyncWrap( async function (req, res) { - const userKey = req.body.userKey; + const account = req.body.account; const note = req.body.note; - updateNote(userKey, note); - return res.status(200).json({}); + updateNote(account, note); + return res.status(200).json({ + note, + }); } )); diff --git a/vapp/router/orders.js b/vapp/router/orders.js index cad8662..4703cfd 100644 --- a/vapp/router/orders.js +++ b/vapp/router/orders.js @@ -28,9 +28,15 @@ router.get('/', asyncWrap( router.post('/', asyncWrap( async function (req, res) { const order = req.body.order; +<<<<<<< HEAD const orders = addOrder(order); return res.status(200).json({ orders, +======= + addOrder(order); + return res.status(200).json({ + order, +>>>>>>> vapp: modify some codes to make settleOrder work }); } )); @@ -47,11 +53,18 @@ router.get('/:id', asyncWrap( router.put('/', asyncWrap( async function (req, res) { +<<<<<<< HEAD const orderId = req.body.orderId; const orderState = req.body.orderState; const orders = updateOrderState(orderId, orderState); return res.status(200).json({ orders, +======= + const order = req.body.order; + updateOrder(order); + return res.status(200).json({ + order, +>>>>>>> vapp: modify some codes to make settleOrder work }); } )); diff --git a/vapp/src/api/index.js b/vapp/src/api/index.js index 7ba3f3b..9c78a5b 100644 --- a/vapp/src/api/index.js +++ b/vapp/src/api/index.js @@ -107,7 +107,7 @@ async function setViewingKey (key, vk) { } function createAccount (passphrase) { - return instance.post(`/accounts/create`, { + return instance.post('/accounts/create', { passphrase, }); } @@ -119,8 +119,11 @@ function unlockAccount (passphrase, keystore) { }); } -function generateProof (params) { - return instance.post('/circuits', params); +async function generateProof (circuit, params) { + return await instance.post('/circuits', { + circuit, + params, + }); } // put @@ -170,7 +173,6 @@ function deleteAccount (key, address) { address, }, }); - return res.data.accounts; } const api = { diff --git a/vapp/src/helpers/note.js b/vapp/src/helpers/note.js index c593ce9..9f202d8 100644 --- a/vapp/src/helpers/note.js +++ b/vapp/src/helpers/note.js @@ -1,4 +1,4 @@ -import { Note, constants } from '../../../scripts/lib/Note'; +import { Note } from '../../../scripts/lib/Note'; import Web3Utils from 'web3-utils'; const salt = Web3Utils.randomHex(8); diff --git a/vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/CreateNoteContainer.vue b/vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/CreateNoteContainer.vue index f1c1eca..b49d83d 100644 --- a/vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/CreateNoteContainer.vue +++ b/vapp/src/layouts/DashboardLayout/containers/CreateNoteContainer/CreateNoteContainer.vue @@ -57,6 +57,7 @@ export default { computed: mapState({ daiContract: state => state.app.daiContract, dexContract: state => state.app.dexContract, + key: state => state.app.key, metamaskAccount: state => state.app.metamaskAccount, }), components: { @@ -72,11 +73,9 @@ export default { const note = createNote(this.account, this.amount, this.token.type); // generate proof. - const params = { - circuit: 'mintNBurnNote', - params: [note], - }; - const proof = (await api.generateProof(params)).data.proof; + const circuit = 'mintNBurnNote'; + const params = [note]; + const proof = (await api.generateProof(circuit, params)).data.proof; // validate proof and make note. let tx; @@ -107,7 +106,7 @@ export default { note.state = Web3Utils.toHex(tx.logs[0].args.state); try { - this.$store.dispatch('addNote', (await api.addNote(this.metamaskAccount, note))); + this.$store.dispatch('addNote', (await api.addNote(this.key, note))); } catch (err) { } finally { this.account = ''; diff --git a/vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/OrderOngoingContainer.vue b/vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/OrderOngoingContainer.vue index 78aea36..2d64e8a 100644 --- a/vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/OrderOngoingContainer.vue +++ b/vapp/src/layouts/ExchangeLayout/containers/OrderOngoingContainer/OrderOngoingContainer.vue @@ -36,20 +36,26 @@ export default { methods: { async settleOrder (order) { const makerNote = order.makerNoteObject; + const takerNote = order.takerNoteObject; const stakeNote = order.stakeNoteObject; const { rewardNote, paymentNote, changeNote } = this.makeNotes(order); - const params = { - circuit: 'settleOrder', - params: [ - makerNote, - stakeNote, - rewardNote, - paymentNote, - changeNote, - order.price, - ], - }; - const proof = (await api.generateProof(params)).data.proof; + + const circuit = 'settleOrder'; + const params = [ + makerNote, + stakeNote, + rewardNote, + paymentNote, + changeNote, + order.price, + ]; + let proof; + try { + proof = (await api.generateProof(circuit, params)).data.proof; + } catch (err) { + console.log(err); + return; + } const makerNoteValue = Web3Utils.toBN(order.makerNoteValue); const stakeNoteValue = Web3Utils.toBN(order.takerNoteValue); @@ -70,7 +76,6 @@ export default { 64 ); rewardNote.state = Web3Utils.toHex(tx.logs[0].args.state); - // Note: only order maker can settle order. await api.addNote(order.orderTaker, rewardNote); } catch (err) {} @@ -80,7 +85,7 @@ export default { 64 ); paymentNote.state = Web3Utils.toHex(tx.logs[1].args.state); - this.$store.dispatch('addNote', (await api.addNote(order.orderMaker, paymentNote))); + await api.addNote(order.orderMaker, paymentNote); } catch (err) {} try { @@ -90,9 +95,9 @@ export default { ); changeNote.state = Web3Utils.toHex(tx.logs[2].args.state); if ((makerNoteValue.mul(price)).cmp(stakeNoteValue) >= 0) { - this.$store.dispatch('addNote', (await api.addNote(order.orderMaker, changeNote))); + await api.addNote(order.orderMaker, changeNote); } else { - this.$store.dispatch('addNote', order.orderTaker, changeNote); + await api.addNote(order.orderTaker, changeNote); } } catch (err) {} @@ -102,10 +107,9 @@ export default { 64 ); const noteState = Web3Utils.toHex(tx.logs[3].args.state); - this.$store.dispatch( - 'updateNote', - (await api.updateNoteState(order.orderMaker, noteHash, noteState)) - ); + makerNote.hash = noteHash; + makerNote.state = noteState; + await api.updateNote(order.orderMaker, makerNote); } catch (err) { console.log(err); // TODO: error handling. } @@ -116,10 +120,9 @@ export default { 64 ); const noteState = Web3Utils.toHex(tx.logs[4].args.state); - this.$store.dispatch( - 'updateNote', - (await api.updateNoteState(order.orderTaker, noteHash, noteState)) - ); + takerNote.hash = noteHash; + takerNote.state = noteState; + await api.updateNote(order.orderTaker, takerNote); } catch (err) { console.log(err); // TODO: error handling. } @@ -130,26 +133,35 @@ export default { 64 ); const noteState = Web3Utils.toHex(tx.logs[5].args.state); - this.$store.dispatch( - 'updateNote', - (await api.updateNoteState(order.orderMaker, noteHash, noteState)) - ); + stakeNote.hash = noteHash; + stakeNote.state = noteState; + await api.updateNote(order.orderMaker, stakeNote); } catch (err) { console.log(err); // TODO: error handling. } + // TODO: a way that order data are stored should be fixed. try { const orderId = Web3Utils.toHex(tx.logs[6].args.orderId); order.state = (await this.dexContract.orders(orderId)).state; order.timestamp = new Date().getTime(); - - this.$store.dispatch( - 'updateOrder', - (await api.updateOrder(orderId, order)) - ); + await api.updateOrder(order); } catch (err) {} + + const accounts = await api.getAccounts(this.metamaskAccount); + if (accounts !== null) { + this.$store.dispatch('setAccounts', accounts); + } + const notes = await api.getNotes(this.metamaskAccount); + if (notes !== null) { + this.$store.dispatch('setNotes', notes); + } + const orders = await api.getOrders(); + if (orders !== null) { + this.$store.dispatch('setOrders', orders); + } }, - makeNotes (order, makerNote, takerNote, stakeNote) { + makeNotes (order) { const makerNoteValue = Web3Utils.toBN(order.makerNoteValue); const stakeNoteValue = Web3Utils.toBN(order.takerNoteValue); const price = Web3Utils.toBN(order.price); diff --git a/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue b/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue index d1f8354..25f01c9 100644 --- a/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue +++ b/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue @@ -130,11 +130,9 @@ export default { }, async makeOrder () { // generate proof. - const params = { - circuit: 'makeOrder', - params: [this.makerNote], - }; - const proof = (await api.generateProof(params)).data.proof; + const circuit = 'makeOrder'; + const params = [this.makerNote]; + const proof = (await api.generateProof(circuit, params)).data.proof; // validate proof and make order. const tokenType = parseInt(this.makerNote.token); @@ -156,9 +154,11 @@ export default { 64 ); const noteState = Web3Utils.toHex(tx.logs[0].args.state); + this.makerNote.hash = noteHash; + this.makerNote.state = noteState; this.$store.dispatch( 'updateNote', - (await api.updateNoteState(this.metamaskAccount, noteHash, noteState)) + (await api.updateNote(this.metamaskAccount, this.makerNote)) ); } catch (err) { console.log(err); // TODO: error handling. @@ -187,11 +187,9 @@ export default { const stakeNote = createNote(makerNoteHash, takerNote.value, this.order.targetToken, true); // generate proof. - const params = { - circuit: 'takeOrder', - params: [makerNoteHash, takerNote, stakeNote], - }; - const proof = (await api.generateProof(params)).data.proof; + const circuit = 'takeOrder'; + const params = [makerNoteHash, takerNote, stakeNote]; + const proof = (await api.generateProof(circuit, params)).data.proof; // validate proof and take order. const tx = await this.dexContract.takeOrder( @@ -209,10 +207,11 @@ export default { 64 ); const noteState = Web3Utils.toHex(tx.logs[0].args.state); - + this.takerNote.hash = noteHash; + this.takerNote.state = noteState; this.$store.dispatch( 'updateNote', - (await api.updateNoteState(this.metamaskAccount, noteHash, noteState)) + (await api.updateNote(this.metamaskAccount, this.takerNote)) ); } catch (err) { console.log(err); // TODO: error handling. @@ -224,7 +223,6 @@ export default { 64 ); const noteState = Web3Utils.toHex(tx.logs[1].args.state); - stakeNote.hash = noteHash; stakeNote.state = noteState; await api.addNote(this.order.orderMaker, stakeNote); @@ -239,11 +237,12 @@ export default { }); this.order.orderTaker = this.metamaskAccount; this.order.takerNoteValue = this.takerNote.value; + this.order.takerNoteObject = takerNote; this.order.stakeNoteObject = stakeNote; this.$store.dispatch( 'updateOrder', - (await api.updateOrder(orderId, this.order)) + (await api.updateOrder(this.order)) ); this.clearInputText(); }, diff --git a/vapp/src/store/getters.js b/vapp/src/store/getters.js index 0b45dca..fe3b6ac 100644 --- a/vapp/src/store/getters.js +++ b/vapp/src/store/getters.js @@ -3,7 +3,7 @@ import Web3Utils from 'web3-utils'; const getters = { ongoingOrders: (state) => { const key = state.app.metamaskAccount; - return state.order.orders.filter(order => (order.orderMaker === key || order.orderTaker === key) && order.state < 2); + return state.order.orders.filter(order => (order.orderMaker === key || order.orderTaker === key) && parseInt(order.state, 16) < 2); }, orderBook: state => state.order.orders.filter(order => order.state === '0'), orderHistory: (state) => { From 635b6378e1a2703e32dbe4264beeac7db42cbf2a Mon Sep 17 00:00:00 2001 From: thomashin Date: Wed, 11 Dec 2019 13:54:09 +0900 Subject: [PATCH 19/30] vapp: make transferNote work --- vapp/localstorage.js | 5 +- vapp/router/circuits.js | 1 - vapp/router/notes.js | 31 +++-- vapp/src/App.vue | 8 ++ vapp/src/api/index.js | 9 +- .../StandardTable/StandardTable.vue | 15 --- .../NoteTransferContainer.vue | 113 +++++++++++++++--- .../NoteTransferHistoryContainer.vue | 3 +- vapp/src/store/modules/notes.js | 19 ++- vapp/src/store/mutations.js | 1 + 10 files changed, 145 insertions(+), 60 deletions(-) diff --git a/vapp/localstorage.js b/vapp/localstorage.js index ce11ca4..b4c1ff3 100644 --- a/vapp/localstorage.js +++ b/vapp/localstorage.js @@ -237,7 +237,6 @@ class TransferHistory { // NOTE: this would override previous another temporary history setHistory () { - // console.error('save~!'); localStorage.setItem(this.getKey(), JSON.stringify(this)); } @@ -280,11 +279,11 @@ class TransferHistory { return JSON.parse(res); } - addHistoryByUser (userKey) { + addHistoryByUser (userKey, noteTransferHistory) { console.error('addHistoryByUser ~'); const histories = TransferHistory.getHistoriesByUser(userKey); - histories.push(this); + histories.push(noteTransferHistory); localStorage.setItem(TransferHistory._keyHistoryByUser(userKey), JSON.stringify(histories)); } diff --git a/vapp/router/circuits.js b/vapp/router/circuits.js index 43c533b..4105d05 100644 --- a/vapp/router/circuits.js +++ b/vapp/router/circuits.js @@ -59,7 +59,6 @@ router.post('/', asyncWrap( const input = Note.fromJSON(params[0]); const output1 = Note.fromJSON(params[1]); const output2 = Note.fromJSON(params[2]); - const history = TransferHistory.getHistory(input.hash()); if (!history) { (new TransferHistory(input, output1, output2)).setHistory(); diff --git a/vapp/router/notes.js b/vapp/router/notes.js index db7d43e..94d2772 100644 --- a/vapp/router/notes.js +++ b/vapp/router/notes.js @@ -1,4 +1,5 @@ const express = require('express'); +const Web3Utils = require('web3-utils'); const asyncWrap = require('../lib/asyncWrap'); @@ -25,13 +26,13 @@ router.get('/:userKey', asyncWrap( } )); -router.get('/:userKey/history', asyncWrap( +router.get('/transfer/histories/:account', asyncWrap( async function (req, res) { - const userKey = req.params.userKey; - const histories = TransferHistory.getHistoriesByUser(userKey); + const account = req.params.account; + const noteTransferHistories = TransferHistory.getHistoriesByUser(account); return res.status(200).json({ - histories, + noteTransferHistories, }); } )); @@ -47,11 +48,25 @@ router.post('/', asyncWrap( } )); -router.post('/transfer/:userKey', asyncWrap( +router.post('/transfer/histories', asyncWrap( async function (req, res) { - const account = req.params.account; - const note = req.body.note; - addTransferNote(account, note); + const notes = req.body.notes; + + const originalNote = notes.originalNote; + const paymentNote = notes.paymentNote; + const changeNote = notes.changeNote; + + const sender = Web3Utils.padLeft(Web3Utils.toHex(Web3Utils.toBN(originalNote.owner)), 40); + + const noteTransferHistory = { + token: originalNote.token, + value: originalNote.value, + from: originalNote.owner, + to: paymentNote.owner, + change: changeNote.value, + }; + + new TransferHistory(originalNote, paymentNote, changeNote).addHistoryByUser(sender, noteTransferHistory); return res.status(200).json({}); } )); diff --git a/vapp/src/App.vue b/vapp/src/App.vue index efd0fbc..efda48b 100644 --- a/vapp/src/App.vue +++ b/vapp/src/App.vue @@ -86,7 +86,15 @@ export default { const accounts = await api.getAccounts(key); if (accounts !== null) { this.$store.dispatch('setAccounts', accounts); + + let allHistories = []; + for (const account of accounts) { + const histories = await api.getNoteTransferHistories(account.address); + allHistories = allHistories.concat(histories); + } + this.$store.dispatch('setNoteTransferHistories', allHistories); } + const notes = await api.getNotes(key); if (notes !== null) { this.$store.dispatch('setNotes', notes); diff --git a/vapp/src/api/index.js b/vapp/src/api/index.js index 9c78a5b..ebd2ae2 100644 --- a/vapp/src/api/index.js +++ b/vapp/src/api/index.js @@ -29,9 +29,9 @@ async function getNotes (account) { return res.data.notes; } -async function getTransferNotes (account) { - const res = await instance.get(`/notes/transfer/${account}`); - return res.data.notes; +async function getNoteTransferHistories (account) { + const res = await instance.get(`/notes/transfer/histories/${account}`); + return res.data.noteTransferHistories; } async function getOrdersByUser (account) { @@ -180,13 +180,14 @@ const api = { getAccounts, getNoteByNoteHash, getNotes, - getTransferNotes, + getNoteTransferHistories, getOrder, getOrdersByUser, getOrders, addAccount, unlockAccount, addNote, + // addNoteTransferHistory, addTransferNote, addOrderHistory, addOrder, diff --git a/vapp/src/components/StandardTable/StandardTable.vue b/vapp/src/components/StandardTable/StandardTable.vue index 9716727..d8e55cf 100644 --- a/vapp/src/components/StandardTable/StandardTable.vue +++ b/vapp/src/components/StandardTable/StandardTable.vue @@ -277,16 +277,6 @@ const columns = { // }, ], noteTransferHistory: [ - { - title: 'Note Hash', - data: 'noteHash', - options: [], - }, - { - title: 'Type', - data: 'type', - options: [], - }, { title: 'Token', data: 'token', @@ -312,11 +302,6 @@ const columns = { data: 'change', options: [], }, - { - title: 'Transaction', - data: 'transactionHash', - options: [], - }, ], ongoingOrder: [ { diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.vue b/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.vue index 61dc1f4..383d6a1 100644 --- a/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.vue +++ b/vapp/src/layouts/DashboardLayout/containers/NoteTransferContainer/NoteTransferContainer.vue @@ -78,22 +78,29 @@ export default { this.$bus.$off('noteSelected', () => {}); }, computed: mapState({ + accounts: state => state.account.accounts, dexContract: state => state.app.dexContract, metamaskAccount: state => state.app.metamaskAccount, }), methods: { async transferNote () { - // NOTE: `to` address must be metamask account address. - const { paymentNote, changeNote } = this.makeNotes(); - console.log(this.note, paymentNote, changeNote); - const params = { - circuit: 'transferNote', - params: [this.note, null, paymentNote, changeNote], - }; + let notes; + try { + notes = this.makeNotes(this.note); + } catch (err) { + return alert(err); + } + const originalNote = notes.originalNote; + const paymentNote = notes.paymentNote; + const changeNote = notes.changeNote; - const proof = (await api.generateProof(params)).data.proof; + const circuit = 'transferNote'; + const params = [originalNote, paymentNote, changeNote, null]; + const proof = (await api.generateProof(circuit, params)).data.proof; + + let tx; try { - const tx = await this.dexContract.spend( + tx = await this.dexContract.spend( ...proof, paymentNote.encrypt(paymentNote.owner), changeNote.encrypt(changeNote.owner), @@ -104,14 +111,82 @@ export default { } catch (err) { console.log('err:', err); } + + if (!tx.receipt.status) { + alert('revert transaction'); + return; + } + + // 1. add note transfer history. + await api.addNoteTransferHistory(notes); + + // 2. update note state. + try { + const noteHash = Web3Utils.padLeft( + Web3Utils.toHex(Web3Utils.toBN(tx.logs[0].args.note)), + 64 + ); + const noteState = Web3Utils.toHex(tx.logs[0].args.state); + originalNote.hash = noteHash; + originalNote.state = noteState; + await api.updateNote(this.metamaskAccount, originalNote); + } catch (err) { + console.log(err); // TODO: error handling. + } + + try { + const noteHash = Web3Utils.padLeft( + Web3Utils.toHex(Web3Utils.toBN(tx.logs[1].args.note)), + 64 + ); + const noteState = Web3Utils.toHex(tx.logs[1].args.state); + paymentNote.hash = noteHash; + paymentNote.state = noteState; + await api.addNote(this.to, paymentNote); + } catch (err) { + console.log(err); // TODO: error handling. + } + + try { + const noteHash = Web3Utils.padLeft( + Web3Utils.toHex(Web3Utils.toBN(tx.logs[2].args.note)), + 64 + ); + const noteState = Web3Utils.toHex(tx.logs[2].args.state); + changeNote.hash = noteHash; + changeNote.state = noteState; + await api.addNote(this.metamaskAccount, changeNote); + } catch (err) { + console.log(err); // TODO: error handling. + } + + // 3. get note transfer histories. + let allHistories = []; + for (const account of this.accounts) { + const histories = await api.getNoteTransferHistories(account.address); + allHistories = allHistories.concat(histories); + } + this.$store.dispatch('setNoteTransferHistories', allHistories); + + // 4. get notes. + if (notes !== null) { + this.$store.dispatch('setNotes', (await api.getNotes(this.metamaskAccount))); + } + + this.clear(); }, - makeNotes () { + makeNotes (originalNote) { if (this.note.state !== '0x1') { - alert('invalid note'); - return; + throw 'invalid note state'; } const type = this.note.token; - const change = Web3Utils.toBN(this.note.value).sub(Web3Utils.toBN(Web3Utils.toHex(this.amount))) + const noteAmount = Web3Utils.toBN(this.note.value); + const wantToTransferAmount = Web3Utils.toBN(Web3Utils.toHex(this.amount)) + if (noteAmount.cmp(wantToTransferAmount) < 0) { + throw 'invalid amount'; + } + + const change = noteAmount.sub(wantToTransferAmount); const paymentNote = new Note( this.to, this.amount, @@ -126,8 +201,16 @@ export default { '0x0', Web3Utils.randomHex(16) ); - return { paymentNote, changeNote }; - } + return { originalNote, paymentNote, changeNote }; + }, + clear() { + this.note = null; + this.from = ''; + this.noteHash = ''; + this.noteValue = ''; + this.to = ''; + this.amount = ''; + }, }, }; diff --git a/vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/NoteTransferHistoryContainer.vue b/vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/NoteTransferHistoryContainer.vue index babe689..8d9d882 100644 --- a/vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/NoteTransferHistoryContainer.vue +++ b/vapp/src/layouts/DashboardLayout/containers/NoteTransferHistoryContainer/NoteTransferHistoryContainer.vue @@ -7,8 +7,7 @@
diff --git a/vapp/src/store/modules/notes.js b/vapp/src/store/modules/notes.js index 1eda089..0a93d3d 100644 --- a/vapp/src/store/modules/notes.js +++ b/vapp/src/store/modules/notes.js @@ -2,18 +2,7 @@ import Vue from 'vue'; const state = { notes: [], - // noteTransferHistory: [ - // { - // noteHash: '0x1234', - // type: 'eth', - // token: 'ether', - // value: 100, - // from: '0x2..2', - // to: '0x1..1', - // change: '0x1234', - // transactionHash: '1234', - // }, - // ], + noteTransferHistories: [], }; const mutations = { @@ -30,6 +19,9 @@ const mutations = { const index = state.notes.map(n => n.hash).indexOf(note.hash); Vue.set(state.notes, index, note); }, + SET_NOTE_TRANSFER_HISTORIES: (state, histories) => { + state.noteTransferHistories = histories; + } }; const actions = { @@ -45,6 +37,9 @@ const actions = { updateNote ({ commit }, note) { commit('UPDATE_NOTE', note); }, + setNoteTransferHistories ({ commit }, histories) { + commit('SET_NOTE_TRANSFER_HISTORIES', histories); + }, }; export default { diff --git a/vapp/src/store/mutations.js b/vapp/src/store/mutations.js index bbac13b..54c8072 100644 --- a/vapp/src/store/mutations.js +++ b/vapp/src/store/mutations.js @@ -236,5 +236,6 @@ const accountsInitialState = function () { const notesInitialState = function () { return { 'notes': [], + 'noteTransferHistories': [], }; }; From 00760d6df7e744319084aa2c5d61abfe8c3b82d8 Mon Sep 17 00:00:00 2001 From: thomashin Date: Wed, 11 Dec 2019 13:55:03 +0900 Subject: [PATCH 20/30] vapp: add checking tx status --- .../LiquidateNoteContainer/LiquidateNoteContainer.vue | 5 +++++ .../containers/TradeContainer/TradeContainer.vue | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue b/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue index a6ed63d..c693cf0 100644 --- a/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue +++ b/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue @@ -80,6 +80,11 @@ export default { from: this.metamaskAccount, }); + if (!tx.receipt.status) { + alert('revert transaction'); + return; + } + try { const noteHash = Web3Utils.padLeft( Web3Utils.toHex(Web3Utils.toBN(tx.logs[0].args.note)), diff --git a/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue b/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue index 25f01c9..75629cb 100644 --- a/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue +++ b/vapp/src/layouts/ExchangeLayout/containers/TradeContainer/TradeContainer.vue @@ -147,6 +147,11 @@ export default { } ); + if (!tx.receipt.status) { + alert('revert transaction'); + return; + } + // 1. update note state try { const noteHash = Web3Utils.padLeft( @@ -201,6 +206,11 @@ export default { } ); + if (!tx.receipt.status) { + alert('revert transaction'); + return; + } + try { const noteHash = Web3Utils.padLeft( Web3Utils.toHex(Web3Utils.toBN(tx.logs[0].args.note)), From 4173a6131f520b563c670126c3bdb6e7adfd7bad Mon Sep 17 00:00:00 2001 From: thomashin Date: Wed, 11 Dec 2019 13:55:20 +0900 Subject: [PATCH 21/30] vapp: make liquidateNote work --- .../LiquidateNoteContainer.vue | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue b/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue index c693cf0..f9139d6 100644 --- a/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue +++ b/vapp/src/layouts/DashboardLayout/containers/LiquidateNoteContainer/LiquidateNoteContainer.vue @@ -69,11 +69,9 @@ export default { }, methods: { async liquidateNote () { - const params = { - circuit: 'mintNBurnNote', - params: [this.note], - }; - const proof = (await api.generateProof(params)).data.proof; + const circuit = 'mintNBurnNote'; + const params = [this.note]; + const proof = (await api.generateProof(circuit, params)).data.proof; // TODO: this.account must be address type const tx = await this.dexContract.liquidate(this.account, ...proof, { @@ -91,9 +89,11 @@ export default { 64 ); const noteState = Web3Utils.toHex(tx.logs[0].args.state); + this.note.hash = noteHash; + this.note.state = noteState; this.$store.dispatch( 'updateNote', - (await api.updateNoteState(this.metamaskAccount, noteHash, noteState)) + (await api.updateNote(this.metamaskAccount, this.note)) ); } catch (err) { console.log(err); // TODO: error handling. From 272cf28b1fbc33451dd7cdcbbe84a994a6cbe453 Mon Sep 17 00:00:00 2001 From: thomashin Date: Wed, 11 Dec 2019 13:56:13 +0900 Subject: [PATCH 22/30] vapp: hide menus which is not yet worked --- .../containers/DashboardMenu/DashboardMenu.vue | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/vapp/src/layouts/DashboardLayout/containers/DashboardMenu/DashboardMenu.vue b/vapp/src/layouts/DashboardLayout/containers/DashboardMenu/DashboardMenu.vue index b7b36cb..c58fa14 100644 --- a/vapp/src/layouts/DashboardLayout/containers/DashboardMenu/DashboardMenu.vue +++ b/vapp/src/layouts/DashboardLayout/containers/DashboardMenu/DashboardMenu.vue @@ -10,7 +10,7 @@ -