diff --git a/README.md b/README.md index da78c186..66f69210 100644 --- a/README.md +++ b/README.md @@ -2,46 +2,21 @@ This repository contains setup examples for Quorum. -Current examples include: -* [7nodes](https://github.com/jpmorganchase/quorum-examples/tree/master/examples/7nodes): Starts up a fully-functioning Quorum environment consisting of 7 independent nodes with a mix of block makers, voters, and unprivileged nodes. From this example one can test consensus, privacy, and all the expected functionality of an Ethereum platform. -* [permissions](https://github.com/jpmorganchase/quorum-examples/tree/master/examples/permissions): Focuses on how to add, remove, and update the list of nodes permitted to participate in the network. +Current BACEN example is: +* [5nodesRTGS](https://github.com/bacen/quorum-examples/tree/master/examples/5nodesRTGS): Starts up a set of 5 nodes that simulates a Real-time Gross Setlement environment with 3 banks, one regulator (typically a central bank) and an observer that cannot access the private data. -The easiest way to get started with running the examples is to use the vagrant environment (see below). +The easiest way to get started with running the examples is to use a clean Ubuntu 16.04 environment (see README at 5nodesRTGS directory). **Important note**: Any account/encryption keys contained in this repository are for demonstration and testing purposes only. Before running a real environment, you should generate new ones using Geth's `account` tool and `constellation-enclave-keygen`. -## Vagrant Usage - -This is a complete Vagrant environment containing Quorum, Constellation, and the -Quorum examples. - -### Requirements - - 1. Install [VirtualBox](https://www.virtualbox.org/wiki/Downloads) - 1. Install [Vagrant](https://www.vagrantup.com/downloads.html) - -(If you are behind a proxy server, please see https://github.com/jpmorganchase/quorum/issues/23) - -### Running - +## Usage ```sh -git clone https://github.com/jpmorganchase/quorum-examples +git clone https://github.com/bacen/quorum-examples cd quorum-examples -vagrant up -# (should take 5 or so minutes) -vagrant ssh +cd examples +cd 5nodesRTGS +./bootstrap.sh +# (run as root, should take some user confirmations, requires internet connection) ``` - -(*macOS note*: If you get an error saying that the ubuntu/xenial64 image doesn't -exist, please run `sudo rm -r /opt/vagrant/embedded/bin/curl`. This is usually due to -issues with the version of curl bundled with Vagrant.) - -Once in the VM environment, `cd quorum-examples` then simply follow the -instructions for the demo you'd like to run. - -To shut down the Vagrant instance, run `vagrant suspend`. To delete it, run -`vagrant destroy`. To start from scratch, run `vagrant up` after destroying the -instance. - diff --git a/Vagrantfile b/Vagrantfile deleted file mode 100644 index 89c7c4cd..00000000 --- a/Vagrantfile +++ /dev/null @@ -1,14 +0,0 @@ -Vagrant.configure(2) do |config| - config.vm.box = "ubuntu/xenial64" - config.vm.provision :shell, path: "vagrant/bootstrap.sh" - config.vm.network "forwarded_port", guest: 22000, host: 22000 - config.vm.network "forwarded_port", guest: 22001, host: 22001 - config.vm.network "forwarded_port", guest: 22002, host: 22002 - config.vm.network "forwarded_port", guest: 22003, host: 22003 - config.vm.network "forwarded_port", guest: 22004, host: 22004 - config.vm.network "forwarded_port", guest: 22005, host: 22005 - config.vm.network "forwarded_port", guest: 22006, host: 22006 - config.vm.provider "virtualbox" do |v| - v.memory = 4096 - end -end diff --git a/examples/7nodes/.gitignore b/examples/5nodesRTGS/.gitignore similarity index 100% rename from examples/7nodes/.gitignore rename to examples/5nodesRTGS/.gitignore diff --git a/examples/5nodesRTGS/1-interacting-with-the-blockchain/app.js b/examples/5nodesRTGS/1-interacting-with-the-blockchain/app.js new file mode 100644 index 00000000..98446cc4 --- /dev/null +++ b/examples/5nodesRTGS/1-interacting-with-the-blockchain/app.js @@ -0,0 +1,56 @@ +'use strict'; +import $ from 'jquery'; +import Web3 from 'web3quorum'; + +// Instance Web3 using localhost testrpc +var web3 = new Web3(new Web3.providers.HttpProvider("http://IP:PORT")); + +//var transactionAccount; +var abi = [{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionRegulator","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_seconds","type":"uint256"}],"name":"setConfirmationTime","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_value","type":"uint256"},{"name":"_random","type":"string"}],"name":"receiveValue","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionBank","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"transactions","outputs":[{"name":"value","type":"uint256"},{"name":"senderContract","type":"address"},{"name":"destinationContract","type":"address"},{"name":"confirmed","type":"bool"},{"name":"senderBalanceAtTransfer","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"confirmationTime","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_contractAddress","type":"address"}],"name":"setTransactionListAddress","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"isRegulatorNode","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"TransactionListAddress","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"thisBankContract","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_thisBankContract","type":"address"}],"name":"setThisBankContract","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_destination","type":"address"},{"name":"_value","type":"uint256"},{"name":"_random","type":"string"}],"name":"sendValue","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[],"name":"setRegulatorNode","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionPair","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"balance","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"totalTransactions","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"transactionIDs","outputs":[{"name":"","type":"bytes32"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"regulator","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_balance","type":"uint256"}],"name":"setBalance","outputs":[],"type":"function","payable":true},{"inputs":[],"type":"constructor","payable":true},{"type":"fallback","payable":true}] + + +// We will use this functions to show the status of the accounts generated by testRPC +const synchAccounts = () => { + $('#accounts').html(""); + //transactionAccount=we3.accounts[0]; + web3.eth.accounts.forEach(account => { + let balance = web3.eth.getBalance(account); + $('#accounts').append(`

from to ${account} | ETH ${balance}

`); + }); +}; + +// This callback just avoids us to copy & past every time you want to use an address +const updateAddressFromLink = (event, inputSelector) => { + event.preventDefault(); + $(inputSelector).val($(event.target).siblings(".address").text()); +}; + +// Show initial accounts state and initialize callback triggers +synchAccounts(); +$(document).on('click', '.from', e => updateAddressFromLink(e, '#sender-address')); +$(document).on('click', '.to', e => updateAddressFromLink(e, '#recipient-address')); + + +$('#get-bank-balance').click(() => { + let bankAddress = $('#bank-address').val(); + + console.log(`Address: ${bankAddress}`); + + let bankContract = web3.eth.contract(abi).at(bankAddress); + + let balance = bankContract.balance(); + + console.log(`Retrieved Balance: ${balance}, ${bankAddress}`); + + $("#bank-balance").text(`Bank Balance: ${balance}`); + + +}); + +$('#change-node').click(() => { + let node = $('#choose-node').val(); + + console.log(`Node: ${node}`); + + +}); diff --git a/examples/5nodesRTGS/1-interacting-with-the-blockchain/index.html b/examples/5nodesRTGS/1-interacting-with-the-blockchain/index.html new file mode 100644 index 00000000..b408580b --- /dev/null +++ b/examples/5nodesRTGS/1-interacting-with-the-blockchain/index.html @@ -0,0 +1,59 @@ + +
+ + + + +
+ +
+
+
+
+

Accounts

+

+      
+
+

Transaction Information

+
+          

Hash:

+

Nonce:

+

Gas usage:

+

Block Number:

+

Block Hash:

+

Tx Index:

+

From:

+

To:

+

Value:

+
+
+
+ +
+
+

Get a Bank Balance

+ +
+ +
+
+

Bank Balance:

+ +
+
+ + + +
+ + + diff --git a/examples/5nodesRTGS/1-interacting-with-the-blockchain/package-lock.json b/examples/5nodesRTGS/1-interacting-with-the-blockchain/package-lock.json new file mode 100644 index 00000000..ec96f412 --- /dev/null +++ b/examples/5nodesRTGS/1-interacting-with-the-blockchain/package-lock.json @@ -0,0 +1,2258 @@ +{ + "name": "interacting-with-the-blockchain", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "JSONStream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", + "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + } + }, + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "asn1.js": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", + "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "requires": { + "util": "0.10.3" + } + }, + "astw": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", + "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", + "requires": { + "acorn": "4.0.13" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-generator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + } + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.1", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.1", + "regenerator-runtime": "0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babelify": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", + "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", + "requires": { + "babel-core": "6.26.0", + "object-assign": "4.1.1" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" + }, + "bignumber.js": { + "version": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934" + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-pack": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", + "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", + "requires": { + "JSONStream": "1.3.1", + "combine-source-map": "0.7.2", + "defined": "1.0.0", + "through2": "2.0.3", + "umd": "3.0.1" + } + }, + "browser-resolve": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "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=" + } + } + }, + "browserify": { + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.5.0.tgz", + "integrity": "sha512-gKfOsNQv/toWz+60nSPfYzuwSEdzvV2WdxrVPUbPD/qui44rAkB3t3muNtmmGYHqrG56FGwX9SUEQmzNLAeS7g==", + "requires": { + "JSONStream": "1.3.1", + "assert": "1.4.1", + "browser-pack": "6.0.2", + "browser-resolve": "1.11.2", + "browserify-zlib": "0.2.0", + "buffer": "5.0.8", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "defined": "1.0.0", + "deps-sort": "2.0.0", + "domain-browser": "1.1.7", + "duplexer2": "0.1.4", + "events": "1.1.1", + "glob": "7.1.2", + "has": "1.0.1", + "htmlescape": "1.1.1", + "https-browserify": "1.0.0", + "inherits": "2.0.3", + "insert-module-globals": "7.0.1", + "labeled-stream-splicer": "2.0.0", + "module-deps": "4.1.1", + "os-browserify": "0.3.0", + "parents": "1.0.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.3", + "resolve": "1.5.0", + "shasum": "1.0.2", + "shell-quote": "1.6.1", + "stream-browserify": "2.0.1", + "stream-http": "2.7.2", + "string_decoder": "1.0.3", + "subarg": "1.0.0", + "syntax-error": "1.3.0", + "through2": "2.0.3", + "timers-browserify": "1.4.2", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4", + "xtend": "4.0.1" + } + }, + "browserify-aes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", + "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "requires": { + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.5" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "1.0.6" + } + }, + "buffer": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.8.tgz", + "integrity": "sha512-xXvjQhVNz50v2nPeoOsNqWCLGfiv4ji/gXZM28jnVwdLJxH4mFyqgqCKfaK9zf1KUbG6zTkjLOy7ou+jSMarGA==", + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8" + } + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "cached-path-relative": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", + "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "combine-source-map": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", + "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "requires": { + "convert-source-map": "1.1.3", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "0.5.7" + }, + "dependencies": { + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "requires": { + "date-now": "0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" + }, + "core-js": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.9" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.5", + "randomfill": "1.0.3" + } + }, + "crypto-js": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", + "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=" + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + }, + "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" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "deps-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "requires": { + "JSONStream": "1.3.1", + "shasum": "1.0.2", + "subarg": "1.0.0", + "through2": "2.0.3" + } + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "2.0.1" + } + }, + "detective": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.0.tgz", + "integrity": "sha512-4mBqSEdMfBpRAo/DQZnTcAXenpiSIJmVKbCMSotS+SFWWcrP/CKM6iBRPdTiEO+wZhlfEsoZlGqpG6ycl5vTqw==", + "requires": { + "acorn": "5.2.1", + "defined": "1.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", + "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==" + } + } + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.5" + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=" + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "2.3.3" + } + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "requires": { + "fill-range": "2.2.3" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "1.0.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "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=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "requires": { + "inherits": "2.0.3" + } + }, + "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" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=" + }, + "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=" + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "requires": { + "source-map": "0.5.7" + } + }, + "insert-module-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", + "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "requires": { + "JSONStream": "1.3.1", + "combine-source-map": "0.7.2", + "concat-stream": "1.5.2", + "is-buffer": "1.1.6", + "lexical-scope": "1.2.0", + "process": "0.11.10", + "through2": "2.0.3", + "xtend": "4.0.1" + } + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "requires": { + "loose-envify": "1.3.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=", + "requires": { + "binary-extensions": "1.11.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==" + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "3.2.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + }, + "jquery": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", + "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + }, + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "requires": { + "jsonify": "0.0.0" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "labeled-stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", + "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "requires": { + "inherits": "2.0.3", + "isarray": "0.0.1", + "stream-splicer": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "lexical-scope": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", + "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", + "requires": { + "astw": "2.2.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "3.0.2" + } + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + } + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "module-deps": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "requires": { + "JSONStream": "1.3.1", + "browser-resolve": "1.11.2", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "defined": "1.0.0", + "detective": "4.7.0", + "duplexer2": "0.1.4", + "inherits": "2.0.3", + "parents": "1.0.1", + "readable-stream": "2.3.3", + "resolve": "1.5.0", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.3", + "xtend": "4.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "outpipe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", + "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", + "requires": { + "shell-quote": "1.6.1" + } + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "requires": { + "path-platform": "0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "requires": { + "asn1.js": "4.9.2", + "browserify-aes": "1.1.1", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" + }, + "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=" + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=" + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.5" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "randombytes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "randomfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", + "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "requires": { + "randombytes": "2.0.5", + "safe-buffer": "5.1.1" + } + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "requires": { + "readable-stream": "2.3.3" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" + }, + "regenerator-runtime": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "requires": { + "jsesc": "0.5.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "1.0.2" + } + }, + "resolve": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "requires": { + "path-parse": "1.0.5" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + }, + "sha.js": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", + "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "requires": { + "json-stable-stringify": "0.0.1", + "sha.js": "2.4.9" + } + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "requires": { + "source-map": "0.5.7" + } + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "requires": { + "duplexer2": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", + "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "requires": { + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "syntax-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", + "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", + "requires": { + "acorn": "4.0.13" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "requires": { + "process": "0.11.10" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "umd": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", + "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "requires": { + "indexof": "0.0.1" + } + }, + "watchify": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.9.0.tgz", + "integrity": "sha1-8HX9LoqGrN6Eztum5cKgvt1SPZ4=", + "requires": { + "anymatch": "1.3.2", + "browserify": "14.5.0", + "chokidar": "1.7.0", + "defined": "1.0.0", + "outpipe": "1.1.1", + "through2": "2.0.3", + "xtend": "4.0.1" + } + }, + "web3quorum": { + "version": "0.20.4", + "resolved": "https://registry.npmjs.org/web3quorum/-/web3quorum-0.20.4.tgz", + "integrity": "sha512-A5qbzqwZtx6XUJLb7BZGsgZAdz5jgvyXs4hMhbxKVbKnuXRbHXpYp18PYx8O3skLuYELQz7uvvzduIfKrktfvQ==", + "requires": { + "bignumber.js": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934", + "crypto-js": "3.1.8", + "utf8": "2.1.2", + "xhr2": "0.1.4", + "xmlhttprequest": "1.8.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xhr2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", + "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + } + } +} diff --git a/examples/5nodesRTGS/1-interacting-with-the-blockchain/package.json b/examples/5nodesRTGS/1-interacting-with-the-blockchain/package.json new file mode 100644 index 00000000..ad21cbbc --- /dev/null +++ b/examples/5nodesRTGS/1-interacting-with-the-blockchain/package.json @@ -0,0 +1,31 @@ +{ + "name": "interacting-with-the-blockchain", + "version": "1.0.0", + "description": "Blockchaing interaction JS app", + "main": "app.js", + "dependencies": { + "babel-preset-es2015": "^6.24.1", + "babelify": "^7.3.0", + "browserify": "^14.3.0", + "jquery": "^3.2.1", + "watchify": "^3.9.0", + "web3quorum": "~0.20.4" + }, + "browserify": { + "transform": [ + [ + "babelify", + { + "presets": [ + "es2015" + ] + } + ] + ] + }, + "scripts": { + "start": "watchify app.js -o bundle.js -v" + }, + "author": "facuspagnuolo", + "license": "ISC" +} diff --git a/examples/5nodesRTGS/1-interacting-with-the-blockchain/readme.md b/examples/5nodesRTGS/1-interacting-with-the-blockchain/readme.md new file mode 100644 index 00000000..93187272 --- /dev/null +++ b/examples/5nodesRTGS/1-interacting-with-the-blockchain/readme.md @@ -0,0 +1,9 @@ +# Running instructions +1. Run `quorum`, deploy and provision 5nodesRTGS contracts +2. Edit app.js and set your ip and port of quorum RPC on line 6 +3. Run `npm install` +4. Run `npm start` +5. Open `index.html` +6. Enter a Bank Contract address and press the button. The bank balance will be shown. + +Thanks to https://github.com/facuspagnuolo/ethereum-spiking from where I copied almost all the code. diff --git a/examples/5nodesRTGS/2-interacting-with-a-contract/MyBank.json b/examples/5nodesRTGS/2-interacting-with-a-contract/MyBank.json new file mode 100644 index 00000000..ab738b43 --- /dev/null +++ b/examples/5nodesRTGS/2-interacting-with-a-contract/MyBank.json @@ -0,0 +1 @@ +[{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionRegulator","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_seconds","type":"uint256"}],"name":"setConfirmationTime","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_value","type":"uint256"},{"name":"_random","type":"string"}],"name":"receiveValue","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionBank","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"transactions","outputs":[{"name":"value","type":"uint256"},{"name":"senderContract","type":"address"},{"name":"destinationContract","type":"address"},{"name":"confirmed","type":"bool"},{"name":"senderBalanceAtTransfer","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"confirmationTime","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_contractAddress","type":"address"}],"name":"setTransactionListAddress","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"isRegulatorNode","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"TransactionListAddress","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"thisBankContract","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_thisBankContract","type":"address"}],"name":"setThisBankContract","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_destination","type":"address"},{"name":"_value","type":"uint256"},{"name":"_random","type":"string"}],"name":"sendValue","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[],"name":"setRegulatorNode","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionPair","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"balance","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"totalTransactions","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"transactionIDs","outputs":[{"name":"","type":"bytes32"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"regulator","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_balance","type":"uint256"}],"name":"setBalance","outputs":[],"type":"function","payable":true},{"inputs":[],"type":"constructor","payable":true},{"type":"fallback","payable":true}] diff --git a/examples/5nodesRTGS/2-interacting-with-a-contract/MyToken.json b/examples/5nodesRTGS/2-interacting-with-a-contract/MyToken.json new file mode 100644 index 00000000..b6e4e90b --- /dev/null +++ b/examples/5nodesRTGS/2-interacting-with-a-contract/MyToken.json @@ -0,0 +1,167 @@ +[ + { + "constant": true, + "inputs": [ + + ], + "name": "creator", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "receiver", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + } + ], + "name": "sendTokens", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + + ], + "name": "name", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + + ], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "balances", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + + ], + "name": "INITIAL_SUPPLY", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + + ], + "name": "decimals", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + + ], + "name": "symbol", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + } +] diff --git a/examples/5nodesRTGS/2-interacting-with-a-contract/MyToken.sol b/examples/5nodesRTGS/2-interacting-with-a-contract/MyToken.sol new file mode 100644 index 00000000..468598d5 --- /dev/null +++ b/examples/5nodesRTGS/2-interacting-with-a-contract/MyToken.sol @@ -0,0 +1,33 @@ +pragma solidity ^0.4.4; + +contract MyToken { + string public constant name = "MyToken"; + string public constant symbol = "MTK"; + uint256 public constant decimals = 18; + uint256 public constant INITIAL_SUPPLY = 10000; + + address public creator; + uint256 public totalSupply; + mapping (address => uint256) public balances; + + function MyToken() public { + creator = msg.sender; + totalSupply = INITIAL_SUPPLY; + balances[creator] = INITIAL_SUPPLY; + } + + function sendTokens(address receiver, uint256 amount) public returns (bool) { + address owner = msg.sender; + + require(amount > 0); + require(balances[owner] >= amount); + + balances[owner] -= amount; + balances[receiver] += amount; + return true; + } + + function balanceOf(address owner) public constant returns (uint256) { + return balances[owner]; + } +} diff --git a/examples/5nodesRTGS/2-interacting-with-a-contract/MyTrLog.json b/examples/5nodesRTGS/2-interacting-with-a-contract/MyTrLog.json new file mode 100644 index 00000000..e1d94595 --- /dev/null +++ b/examples/5nodesRTGS/2-interacting-with-a-contract/MyTrLog.json @@ -0,0 +1 @@ +[{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionExistance","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_contract","type":"address"},{"name":"_sender","type":"address"}],"name":"addBank","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"blockBank","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankExistance","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionTimestamp","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankSender","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"transactions","outputs":[{"name":"exists","type":"bool"},{"name":"timestamp","type":"uint256"},{"name":"blocked","type":"bool"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"authorizeBank","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"banks","outputs":[{"name":"name","type":"string"},{"name":"authorized","type":"bool"},{"name":"exists","type":"bool"},{"name":"authorizedSender","type":"address"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankState","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"addTransaction","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"unblockTransaction","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionState","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"regulator","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"blockTransaction","outputs":[],"type":"function","payable":true},{"inputs":[],"type":"constructor","payable":true},{"type":"fallback","payable":true}] diff --git a/examples/5nodesRTGS/2-interacting-with-a-contract/app.js b/examples/5nodesRTGS/2-interacting-with-a-contract/app.js new file mode 100644 index 00000000..6bf2260a --- /dev/null +++ b/examples/5nodesRTGS/2-interacting-with-a-contract/app.js @@ -0,0 +1,395 @@ +import $ from 'jquery'; +import Web3 from 'web3quorum'; + +// Instance Web3 using localhost testrpc +const web3regulator = new Web3(new Web3.providers.HttpProvider("http://IP:22003")); +const web3bank1 = new Web3(new Web3.providers.HttpProvider("http://IP:22000")); +const web3bank2 = new Web3(new Web3.providers.HttpProvider("http://IP:22001")); +const web3bank3 = new Web3(new Web3.providers.HttpProvider("http://IP:22002")); + +// This is an interface of the MyToken contract, called ABI, that we will interact with it +const BankContractABI = require('./MyBank.json'); +const TrLogContractABI = require('./MyTrLog.json'); + +const bank1Contract = web3bank1.eth.contract(BankContractABI); +const bank2Contract = web3bank2.eth.contract(BankContractABI); +const bank3Contract = web3bank3.eth.contract(BankContractABI); + +const regBank1Contract = web3regulator.eth.contract(BankContractABI); +const regBank2Contract = web3regulator.eth.contract(BankContractABI); +const regBank3Contract = web3regulator.eth.contract(BankContractABI); + + +const TrLogContract = web3regulator.eth.contract(TrLogContractABI); + +var mainRegulatorAccount; +var mainBank1Account; +var mainBank2Account; +var mainBank3Account; + +var bank1ContractAddress; +var bank2ContractAddress; +var bank3ContractAddress; +var trContractAddress; + +//Update and uncomment these lines to hardcode the contract addresses. It saves a lot of time copy and pasting +/* +bank1ContractAddress = "0x180893a0ec847fa8c92786791348d7d65916acbb"; +bank2ContractAddress = "0xf9a2cb34b6b5fd7a2ac0c2e9b2b9406d6daffbd4"; +bank3ContractAddress = "0xc8f717ba9593dc9d45c4518cf444d2cbd08af24d"; +trContractAddress = "0x4df0f115551f6f36d753dc0ecf6832715bdd7001"; +*/ +var bank1NodePublicKey = "BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo="; +var bank2NodePublicKey = "QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc="; +var bank3NodePublicKey = "oNspPPgszVUFw0qmGFfWwh1uxVUXgvBxleXORHj07g8="; +var regNodePublicKey = "R56gy4dn24YOjwyesTczYa8m5xhP6hF2uTMCju/1xkY="; + + +var trContractInstance; +var bank1ContractInstance; +var bank2ContractInstance; +var bank3ContractInstance; + +var senderContractInstance; +var destinationContractInstance; + +var regBank1ContractInstance; +var regBank2ContractInstance; +var regBank3ContractInstance; + +trContractInstance = TrLogContract.at(trContractAddress); +bank1ContractInstance = bank1Contract.at(bank1ContractAddress); +bank2ContractInstance = bank2Contract.at(bank2ContractAddress); +bank3ContractInstance = bank3Contract.at(bank3ContractAddress); + +regBank1ContractInstance = regBank1Contract.at(bank1ContractAddress); +regBank2ContractInstance = regBank2Contract.at(bank2ContractAddress); +regBank3ContractInstance = regBank3Contract.at(bank3ContractAddress); + + +var regSenderContractInstance; + +var trTxHash; +var confTxHash; + + + +// We will use this function to show the status of the deployed token sale contract +const synchSmartContract = () => { + + let balance1; + let balance2; + let balance3; + + let trHash1; + let trDetails1; + + let trHash2; + let trDetails2; + + + let trHash3; + let trDetails3; + + let transactionLog; + + + let trId1 = $('#bank1-transaction-id').val(); + let trId2 = $('#bank2-transaction-id').val(); + let trId3 = $('#bank3-transaction-id').val(); + + let trSearch = $('#tr-search-hash').val(); + + + + + + bank1ContractAddress = $('#bank1-contract-address').val(); + bank2ContractAddress = $('#bank2-contract-address').val(); + bank3ContractAddress = $('#bank3-contract-address').val(); + trContractAddress = $('#tr-contract-address').val(); + + + trContractInstance = TrLogContract.at(trContractAddress); + bank1ContractInstance = bank1Contract.at(bank1ContractAddress); + bank2ContractInstance = bank2Contract.at(bank2ContractAddress); + bank3ContractInstance = bank3Contract.at(bank3ContractAddress); + + regBank1ContractInstance = regBank1Contract.at(bank1ContractAddress); + regBank2ContractInstance = regBank2Contract.at(bank2ContractAddress); + regBank3ContractInstance = regBank3Contract.at(bank3ContractAddress); + + balance1 = bank1ContractInstance.balance(); + balance2 = bank2ContractInstance.balance(); + balance3 = bank3ContractInstance.balance(); + + trHash1 = bank1ContractInstance.transactionIDs(trId1); + trDetails1 = bank1ContractInstance.transactions(trHash1); + + trHash2 = bank2ContractInstance.transactionIDs(trId2); + trDetails2 = bank2ContractInstance.transactions(trHash2); + + + trHash3 = bank3ContractInstance.transactionIDs(trId3); + trDetails3 = bank3ContractInstance.transactions(trHash3); + + transactionLog = trContractInstance.transactions(trSearch); + + + $('#bank1-balance').html(`

Contract Address:${bank1ContractAddress}

Balance: ${balance1}

`); + $('#bank2-balance').html(`

Contract Address:${bank2ContractAddress}

Balance: ${balance2}

`); + $('#bank3-balance').html(`

Contract Address:${bank3ContractAddress}

Balance: ${balance3}

`); + + $('#bank1-tr-hash').html(`

Transaction Hash:${trHash1}

+

Value:${trDetails1[0]}

+

Sender Address:${trDetails1[1]}

+

Destination Address:${trDetails1[2]}

+

Confirmed:${trDetails1[3]}

`); + + $('#bank2-tr-hash').html(`

Transaction Hash:${trHash2}

+

Value:${trDetails2[0]}

+

Sender Address:${trDetails2[1]}

+

Destination Address:${trDetails2[2]}

+

Confirmed:${trDetails2[3]}

`); + + $('#bank3-tr-hash').html(`

Transaction Hash:${trHash3}

+

Value:${trDetails3[0]}

+

Sender Address:${trDetails3[1]}

+

Destination Address:${trDetails3[2]}

+

Confirmed:${trDetails3[3]}

`); + + $('#tr-contract-addr').html(`

Address:${trContractAddress}

`); + + + console.log (transactionLog[1]); + + let d = new Date(transactionLog[1]/1000); + + $('#transaction-log').html(`

ID:${trSearch}\n + Exists:${transactionLog[0]}\n + Timestamp: ${d.toString()}\n + Blocked: ${transactionLog[2]}

`); + +}; + +// We will use this function to show the status of the accounts generated by testRPC +const synchAccounts = () => { + //$('#gas-price').html(`Gas: ETH ${web3regulator.eth.gasPrice}`); + + + $('#regulator-account').html(""); + web3regulator.eth.accounts.forEach(account => { + let balance = web3regulator.eth.getBalance(account); + mainRegulatorAccount = account; + $('#regulator-account').append(`

${account} | ETH ${balance}

`); + }); + + $('#bank1-account').html(""); + web3bank1.eth.accounts.forEach(account => { + let balance = web3bank1.eth.getBalance(account); + mainBank1Account = account; + $('#bank1-account').append(`

${account} | ETH ${balance}

`); + }); + + $('#bank2-account').html(""); + web3bank2.eth.accounts.forEach(account => { + let balance = web3bank1.eth.getBalance(account); + mainBank2Account = account; + $('#bank2-account').append(`

${account} | ETH ${balance}

`); + }); + + $('#bank3-account').html(""); + web3bank3.eth.accounts.forEach(account => { + let balance = web3bank1.eth.getBalance(account); + mainBank3Account = account; + $('#bank3-account').append(`

${account} | ETH ${balance}

`); + }); + + +}; + +// This callback just avoids us to copy & past every time you want to use an address +const updateAddressFromLink = (event, inputSelector) => { + event.preventDefault(); + $(inputSelector).val($(event.target).siblings(".address").text()); +}; + + +// Show initial accounts state and initialize callback triggers +synchSmartContract(); +synchAccounts(); +$(document).on('change', '#bank1-contract-address', e => synchSmartContract()); +$(document).on('change', '#bank2-contract-address', e => synchSmartContract()); +$(document).on('change', '#bank3-contract-address', e => synchSmartContract()); +$(document).on('change', '#tr-contract-address', e => synchSmartContract()); + +$(document).on('change', '#bank1-transaction-id', e => synchSmartContract()); +$(document).on('change', '#bank2-transaction-id', e => synchSmartContract()); +$(document).on('change', '#bank3-transaction-id', e => synchSmartContract()); + +$(document).on('change', '#tr-search-hash', e => synchSmartContract()); + +$(document).on('change', '#tr-contract-address', e => synchSmartContract()); + + +$(document).on('click', '.from', e => updateAddressFromLink(e, '#seller-address')); +$(document).on('click', '.to', e => updateAddressFromLink(e, '#buyer-address')); +$(document).on('click', '.transaction', e => updateTransactionInfoFromLink(e)); + +// Every time we click the buy button, we will +$('#send').click(() => { + let sentValue = $('#sent-value').val(); + let senderAddress = $('#sender-address').val(); + let destinationAddress = $('#destination-address').val(); + let bankContractAddress = $('#contract-address').val(); + let correctSender = false; + let correctDestination = false; + + + let destinationNodePublicKey; + let senderAccount; + /* let trContractAddress = "0x180893a0ec847fa8c92786791348d7d65916acbb" + let bank1ContractAddress = "0xf9a2cb34b6b5fd7a2ac0c2e9b2b9406d6daffbd4"; + destinationAddress = "0xc8f717ba9593dc9d45c4518cf444d2cbd08af24d"; + */ + + $('#transaction-hash').html(`

Private Money Transfer

`); + + + if (senderAddress == bank1ContractAddress) { + senderContractInstance = bank1ContractInstance; + senderAccount = mainBank1Account; + correctSender = true; + } + if (senderAddress == bank2ContractAddress) { + senderContractInstance = bank2ContractInstance; + senderAccount = mainBank2Account; + correctSender = true; + } + if (senderAddress == bank3ContractAddress) { + senderContractInstance = bank3ContractInstance; + senderAccount = mainBank3Account; + correctSender = true; + } + + if (destinationAddress == bank1ContractAddress) { + destinationNodePublicKey = bank1NodePublicKey; + destinationContractInstance = bank1ContractInstance; + correctDestination = true; + } + if (destinationAddress == bank2ContractAddress) { + destinationNodePublicKey = bank2NodePublicKey; + destinationContractInstance = bank2ContractInstance; + correctDestination = true; + } + if (destinationAddress == bank3ContractAddress) { + destinationNodePublicKey = bank3NodePublicKey; + destinationContractInstance = bank3ContractInstance; + correctDestination = true; + } + + console.log(senderAddress); + console.log(destinationAddress); + console.log(bank3ContractAddress); + + + if (correctSender && correctDestination) { + senderContractInstance.sendValue(destinationAddress,sentValue,"random1", + {from:senderAccount,gas:500000, + privateFor:[regNodePublicKey,destinationNodePublicKey]}, + function (e, receipt){ + //This function will execute when the transaction is mined + console.log(e); + let senderTransactionNumber = senderContractInstance.totalTransactions()-1; + let destinationTransactionNumber = destinationContractInstance.totalTransactions()-1; + + let newTrHash = senderContractInstance.transactionIDs(senderTransactionNumber); + + $('#transaction-hash').html(`

Private Money Transfer Details:

`); + $('#transaction-hash').append(`

Sender Transaction ID:${senderTransactionNumber}

`); + $('#transaction-hash').append(`

Destination Transaction ID:${destinationTransactionNumber}

`); + $('#transaction-hash').append(`

Private Money Transfer TX Hash:${newTrHash}

`); + $('#transaction-hash').append(`

Warning:TX Hash must be in the public transaction log to be confirmed

`); + $('#transactions-list').append(`

${receipt}

`); + + }); + } + else { + $('#transaction-hash').html(`

Something went wrong! Please check addresses.

`); + } + + synchSmartContract(); + synchAccounts(); +}); + +$('#tr-add-button').click(() => { + trTxHash = $('#tr-add-hash').val(); + + trContractInstance.addTransaction(trTxHash,{from:mainRegulatorAccount,gas:500000}, + function (e, receipt){ + //This function will execute when the transaction is mined + let transaction = trContractInstance.transactions(trTxHash); + + //The transaction was successfully logged in the Public Transaction Log? This check does not work, and I do not know why, of course!!!! + if (transaction[0]) { + $('#tr-add-result').html(`

Transaction ${trTxHash} successfully included in the transaction log

`); + } + else { + $('#tr-add-result').html(`

Hopefully it was successfull, but you need to check manually using the "Search Public Transaction Log" just above. My code for checking if the TxHash was included is not working, I think the world state is not being updated fast enough, even after the receipt, where this check executes. Any help is appreciated. :)

`); + } + $('#transactions-list').append(`

${receipt}

`); + }); + +}); + +$('#tr-conf-button').click(() => { + confTxHash = $('#tr-conf-hash').val(); + let trSender = $('#tr-sender').val(); + + let senderNodePublicKey; + let destinationNodePublicKey; + + if (trSender == bank1ContractAddress) { + regSenderContractInstance = regBank1ContractInstance; + senderNodePublicKey = bank1NodePublicKey; + } + if (trSender == bank2ContractAddress) { + regSenderContractInstance = regBank2ContractInstance; + senderNodePublicKey = bank2NodePublicKey; + } + if (trSender == bank3ContractAddress) { + regSenderContractInstance = regBank3ContractInstance; + senderNodePublicKey = bank3NodePublicKey; + } + + let transaction = regSenderContractInstance.transactions(confTxHash); + //need to discover the recipient of the transaction to set privateFor public key correctly + if (transaction[2] == bank1ContractAddress) { + destinationNodePublicKey = bank1NodePublicKey; + } + if (transaction[2] == bank2ContractAddress) { + destinationNodePublicKey = bank2NodePublicKey; + } + if (transaction[2] == bank3ContractAddress) { + destinationNodePublicKey = bank3NodePublicKey; + } + + regSenderContractInstance.confirmTransactionRegulator(confTxHash,{from:mainRegulatorAccount,gas:500000, + privateFor:[senderNodePublicKey,destinationNodePublicKey]}, + function (e, receipt){ + //This function will execute when the transaction is mined + let transaction = regSenderContractInstance.transactions(confTxHash); + + //The transaction was successfully logged in the Public Transaction Log? This check does not work, and I do not know why, of course!!!! + if (transaction[3]) { + $('#tr-conf-result').html(`

Transaction ${trTxHash} successfully confirmed

`); + } + else { + $('#tr-conf-result').html(`

Hopefully it was successfull, but you need to check balances manually refreshing the page and see if the balance has changed. My code for checking if the TxHash was included is not working, I think the world state is not being updated fast enough, even after the receipt, where this check executes. Any help is appreciated. :)

`); + } + $('#transactions-list').append(`

${receipt}

`); + }); + + + +}); diff --git a/examples/5nodesRTGS/2-interacting-with-a-contract/index.html b/examples/5nodesRTGS/2-interacting-with-a-contract/index.html new file mode 100644 index 00000000..41285beb --- /dev/null +++ b/examples/5nodesRTGS/2-interacting-with-a-contract/index.html @@ -0,0 +1,149 @@ + +
+ + + + + +
+ +
+
+
+
+

Regulator Account

+

+

Bank1 Account

+

+

Bank2 Account

+

+

Bank3 Account

+

+
+ + + +
+
+
+

Bank1

+
+ +
+
+

Balance: +

+

Bank2

+
+ +
+
+

Balance: +

Bank3

+
+ +
+
+

Balance: +

Public Transaction Log

+
+ +
+

Address: +

+
+
+ +
+

Get Bank1 Transaction Hash

+
+ +
+
+

Transaction Hash: +

+

Get Bank2 Transaction Hash

+
+ +
+
+

Transaction Hash: +

Get Bank3 Transaction Hash

+
+ +
+
+

Transaction Hash: +

+
+ +
+ +

Search Public Transaction Log

+
+ +
+
+
+        
+

Add Private Money Transfer TX Hash to the Public Transaction Log

+
+ +
+
+ +

Result:

+

Confirm Transaction (Regulator)

+
+ +
+ +
+
+ +

Result:

+ +
+
+

Create a Private Money Transfer

+
+ +
+
+
+ +
+
+
+ +
+
+ + +

Private Money Transfer

+
+ + + + +
+
+
+

Quorum Transactions List

+
+        
+
+
+
+ + + diff --git a/examples/5nodesRTGS/2-interacting-with-a-contract/package-lock.json b/examples/5nodesRTGS/2-interacting-with-a-contract/package-lock.json new file mode 100644 index 00000000..863c2b30 --- /dev/null +++ b/examples/5nodesRTGS/2-interacting-with-a-contract/package-lock.json @@ -0,0 +1,2654 @@ +{ + "name": "interacting-with-a-contract", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "JSONStream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", + "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + } + }, + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "asn1.js": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", + "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "requires": { + "util": "0.10.3" + } + }, + "astw": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", + "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", + "requires": { + "acorn": "4.0.13" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-generator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + } + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.1", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.1", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babelify": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", + "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", + "requires": { + "babel-core": "6.26.0", + "object-assign": "4.1.1" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" + }, + "bignumber.js": { + "version": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934" + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-pack": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", + "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", + "requires": { + "JSONStream": "1.3.1", + "combine-source-map": "0.7.2", + "defined": "1.0.0", + "through2": "2.0.3", + "umd": "3.0.1" + } + }, + "browser-resolve": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "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=" + } + } + }, + "browserify": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.3.0.tgz", + "integrity": "sha1-/QA6I4asGuwSfwl4haPMY3O3RcQ=", + "requires": { + "JSONStream": "1.3.1", + "assert": "1.4.1", + "browser-pack": "6.0.2", + "browser-resolve": "1.11.2", + "browserify-zlib": "0.1.4", + "buffer": "5.0.8", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "defined": "1.0.0", + "deps-sort": "2.0.0", + "domain-browser": "1.1.7", + "duplexer2": "0.1.4", + "events": "1.1.1", + "glob": "7.1.2", + "has": "1.0.1", + "htmlescape": "1.1.1", + "https-browserify": "1.0.0", + "inherits": "2.0.3", + "insert-module-globals": "7.0.1", + "labeled-stream-splicer": "2.0.0", + "module-deps": "4.1.1", + "os-browserify": "0.1.2", + "parents": "1.0.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.3", + "resolve": "1.5.0", + "shasum": "1.0.2", + "shell-quote": "1.6.1", + "stream-browserify": "2.0.1", + "stream-http": "2.7.2", + "string_decoder": "0.10.31", + "subarg": "1.0.0", + "syntax-error": "1.3.0", + "through2": "2.0.3", + "timers-browserify": "1.4.2", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4", + "xtend": "4.0.1" + } + }, + "browserify-aes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", + "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "requires": { + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.5" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "requires": { + "pako": "0.2.9" + } + }, + "buffer": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.8.tgz", + "integrity": "sha512-xXvjQhVNz50v2nPeoOsNqWCLGfiv4ji/gXZM28jnVwdLJxH4mFyqgqCKfaK9zf1KUbG6zTkjLOy7ou+jSMarGA==", + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8" + } + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "cached-path-relative": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", + "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=" + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "combine-source-map": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", + "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "requires": { + "convert-source-map": "1.1.3", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "0.5.7" + }, + "dependencies": { + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + } + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "requires": { + "date-now": "0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" + }, + "core-js": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.9" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.5", + "randomfill": "1.0.3" + } + }, + "crypto-js": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", + "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=" + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + }, + "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" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "deps-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "requires": { + "JSONStream": "1.3.1", + "shasum": "1.0.2", + "subarg": "1.0.0", + "through2": "2.0.3" + } + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "2.0.1" + } + }, + "detective": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.0.tgz", + "integrity": "sha512-4mBqSEdMfBpRAo/DQZnTcAXenpiSIJmVKbCMSotS+SFWWcrP/CKM6iBRPdTiEO+wZhlfEsoZlGqpG6ycl5vTqw==", + "requires": { + "acorn": "5.2.1", + "defined": "1.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", + "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==" + } + } + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.5" + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=" + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "2.3.3" + } + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "requires": { + "is-arrayish": "0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "requires": { + "fill-range": "2.2.3" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "file-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/file-match/-/file-match-1.0.2.tgz", + "integrity": "sha1-ycrSZdLIrfOoFHWw30dYWQafrvc=", + "requires": { + "utils-extend": "1.0.8" + } + }, + "file-system": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/file-system/-/file-system-2.2.2.tgz", + "integrity": "sha1-fWWDPjojR9zZVqgTxncVPtPt2Yc=", + "requires": { + "file-match": "1.0.2", + "utils-extend": "1.0.8" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "1.0.2" + } + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "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=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "requires": { + "inherits": "2.0.3" + } + }, + "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" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=" + }, + "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=" + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "requires": { + "source-map": "0.5.7" + } + }, + "insert-module-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", + "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "requires": { + "JSONStream": "1.3.1", + "combine-source-map": "0.7.2", + "concat-stream": "1.5.2", + "is-buffer": "1.1.6", + "lexical-scope": "1.2.0", + "process": "0.11.10", + "through2": "2.0.3", + "xtend": "4.0.1" + } + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "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=", + "requires": { + "binary-extensions": "1.11.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==" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "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=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "3.2.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + }, + "jquery": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", + "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + }, + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "requires": { + "jsonify": "0.0.0" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "4.1.11" + } + }, + "labeled-stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", + "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "requires": { + "inherits": "2.0.3", + "isarray": "0.0.1", + "stream-splicer": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "1.0.0" + } + }, + "lexical-scope": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", + "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", + "requires": { + "astw": "2.2.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "3.0.2" + } + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + } + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "module-deps": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "requires": { + "JSONStream": "1.3.1", + "browser-resolve": "1.11.2", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "defined": "1.0.0", + "detective": "4.7.0", + "duplexer2": "0.1.4", + "inherits": "2.0.3", + "parents": "1.0.1", + "readable-stream": "2.3.3", + "resolve": "1.5.0", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.3", + "xtend": "4.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "os-browserify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", + "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=" + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "outpipe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", + "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", + "requires": { + "shell-quote": "1.6.1" + } + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "requires": { + "path-platform": "0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "requires": { + "asn1.js": "4.9.2", + "browserify-aes": "1.1.1", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "1.3.1" + } + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.5" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "randombytes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "randomfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", + "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "requires": { + "randombytes": "2.0.5", + "safe-buffer": "5.1.1" + } + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "requires": { + "readable-stream": "2.3.3" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "requires": { + "jsesc": "0.5.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "1.0.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "resolve": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "requires": { + "path-parse": "1.0.5" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + }, + "sha.js": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", + "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "requires": { + "json-stable-stringify": "0.0.1", + "sha.js": "2.4.9" + } + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "solc": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.19.tgz", + "integrity": "sha512-hvi/vi9rQcB73poRLoLRfQIYKwmdhrNbZlOOFCGd5v58gEsYEUr3+oHPSXhyk4CFNchWC2ojpMYrHDJNm0h4jQ==", + "requires": { + "fs-extra": "0.30.0", + "memorystream": "0.3.1", + "require-from-string": "1.2.1", + "semver": "5.4.1", + "yargs": "4.8.1" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "requires": { + "source-map": "0.5.7" + } + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "requires": { + "duplexer2": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", + "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "0.2.1" + } + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "requires": { + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "syntax-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", + "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", + "requires": { + "acorn": "4.0.13" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "requires": { + "process": "0.11.10" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "umd": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", + "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-extend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/utils-extend/-/utils-extend-1.0.8.tgz", + "integrity": "sha1-zP17ZFQPjpDuIe7Fd2nQZRyril8=" + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "requires": { + "indexof": "0.0.1" + } + }, + "watchify": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.9.0.tgz", + "integrity": "sha1-8HX9LoqGrN6Eztum5cKgvt1SPZ4=", + "requires": { + "anymatch": "1.3.2", + "browserify": "14.3.0", + "chokidar": "1.7.0", + "defined": "1.0.0", + "outpipe": "1.1.1", + "through2": "2.0.3", + "xtend": "4.0.1" + } + }, + "web3quorum": { + "version": "0.20.4", + "resolved": "https://registry.npmjs.org/web3quorum/-/web3quorum-0.20.4.tgz", + "integrity": "sha512-A5qbzqwZtx6XUJLb7BZGsgZAdz5jgvyXs4hMhbxKVbKnuXRbHXpYp18PYx8O3skLuYELQz7uvvzduIfKrktfvQ==", + "requires": { + "bignumber.js": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934", + "crypto-js": "3.1.8", + "utf8": "2.1.2", + "xhr2": "0.1.4", + "xmlhttprequest": "1.8.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xhr2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", + "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "lodash.assign": "4.2.0", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "window-size": "0.2.0", + "y18n": "3.2.1", + "yargs-parser": "2.4.1" + } + }, + "yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "requires": { + "camelcase": "3.0.0", + "lodash.assign": "4.2.0" + } + } + } +} diff --git a/examples/5nodesRTGS/2-interacting-with-a-contract/package.json b/examples/5nodesRTGS/2-interacting-with-a-contract/package.json new file mode 100644 index 00000000..ee6505ae --- /dev/null +++ b/examples/5nodesRTGS/2-interacting-with-a-contract/package.json @@ -0,0 +1,33 @@ +{ + "name": "interacting-with-a-contract", + "version": "1.0.0", + "description": "SC interaction JS app", + "main": "app.js", + "dependencies": { + "babel-preset-es2015": "~6.24.1", + "babelify": "~7.3.0", + "browserify": "~14.3.0", + "file-system": "~2.2.2", + "jquery": "~3.2.1", + "solc": "~0.4.15", + "watchify": "~3.9.0", + "web3quorum": "~0.20.4" + }, + "browserify": { + "transform": [ + [ + "babelify", + { + "presets": [ + "es2015" + ] + } + ] + ] + }, + "scripts": { + "start": "watchify app.js -o bundle.js -v" + }, + "author": "facuspagnuolo", + "license": "ISC" +} diff --git a/examples/5nodesRTGS/2-interacting-with-a-contract/readme.md b/examples/5nodesRTGS/2-interacting-with-a-contract/readme.md new file mode 100644 index 00000000..2316ead2 --- /dev/null +++ b/examples/5nodesRTGS/2-interacting-with-a-contract/readme.md @@ -0,0 +1,12 @@ + +# Running instructions +1. Run `npm install` +2. Run `raft-init.sh` `raft-start.sh` in the geth node +3. Deploy and provision the contracts following the 5nodesRTGS README, steps 4-10. The HTML file has the same contract addresses of a freshly initiated 5NodesRTGS example, change if necessary +4. Replace the IP address from lines `5-8` in `app.js` file. +5. Run `npm start` +6. Open `index.html` and start playing + +It still has a lot of bugs and it is FAR from well written, however it is a good example of a javascript page interacting with Quorum using private transactions. + +Thanks to https://github.com/facuspagnuolo/ethereum-spiking from where I copied almost all the code. diff --git a/examples/5nodesRTGS/README.md b/examples/5nodesRTGS/README.md new file mode 100644 index 00000000..10d74d0b --- /dev/null +++ b/examples/5nodesRTGS/README.md @@ -0,0 +1,217 @@ +# 5 nodes Real-time Gross Setlement + +This example configures 5 nodes, each with their own PrivateTransactionManager. Usage: + + - `raft-init.sh`: Initialize accounts and keystores + - `raft-start.sh`: Launch `constellation` and `geth` nodes, then send a private transaction + - `stop.sh`: Stop all `constellation` and `geth` nodes + +All logs and temporary data will be written to the `qdata` folder. + +## The blockchain Real-time Gross Setlement (RTGS) problem +RTGS systems are very dependent of a central entity, but this design creates a single point of failure. Backup datacenters can help but do not solve the problem completely as there is no real distributed resiliency when using only backup infrastructures. The distributed consensus nature of the blockchain technology can be used to overcome this central point of failure, but at a great privacy cost as all stored data are fully accessible to all network members by default, and this kind of transparency is not allowed in a real bank interpayment network. Quorum privacy properties were used to overcome this problem when implementing a blockchain RTGS system. This example uses Quorum private and public smart contract communication. + +## Smart contracts +There are two smart contracts in this example, both stored in the contracts.sol file and lightly commented: + +1- bankContract + +This contract implements the main logic of the RTGS system. One PRIVATE instance of the contract must be deployed for EACH participating bank on the network and it will store private transaction data and balance. It has many verification steps to avoid bank personification, fraud and overdraft transactions. Most of the checks are made by the contract itself, but the overdraft protection must be made by an active regulator node. + +2- regulatorTransactionList + +This contract stores and serves the public data to the private contracts. Examples of the public data are transactions hashes and participating banks information. + +## Transaction confirmation logic +Transactions are published privately by the sender bank and must only be sent to the recipient and to the regulator nodes (privateFor parameter). They are created in an UNCONFIRMED state and are only final if they are confirmed. After publishing the private transaction, the sender bank must publish the same transaction hash in the public transaction log (regulatorTransactionList public contract) to ensure that all the parts are aware of the transaction. Transactions can only be confirmed and reflect on bank balances if they are stored in the public transaction log and they can be confirmed by two ways: + +1- By the regulator calling the confirmTransactionRegulator function + +2- By the sender bank calling confirmTransactionBank function. This function ensures that the confirmation timer has expired before confirming the transaction. + +This two phase commit is needed because there is no overdraft protecting in the bankContract code because different bank instances have different data. For example, bank1 smart contract published in the bank1 node has the balance variable set, but the same contract with the same address in the bank2 node has no value in the balance data because this data is private to bank1 and the regulator. The regulator node´s contracts have all the data as it must be part of every private transaction. The logic behind this proccess is that, after a transaction is published, the regulator can check the sender balance against the newly published transaction. If the value intended for the transfer is higher than the bank balance, the regulator must block this transaction during the confirmation time. If the value is below the balance OR if the regulator is offline, the sender bank can confirm its own transaction after the confirmation time. This is a resiliency feature to ensure that the RTGS system endures a regulator outage. + +## Environment setup +## Virtual machine Quorum and Constellation install +1- Start with a clean Ubuntu 16.04 virtual machine install + +2- Run "bootstrap.sh" script to install Constellation, GO and Quorum + +## Quorum set up and start +1- call raft-init.sh to initialize accounts and keystores + +2- Bring the 5 nodes up calling start.sh + +3- Connect to the nodes calling: + +terminal 1: ``$ geth attach ipc:qdata/dd1/geth.ipc`` + +terminal 2: ``$ geth attach ipc:qdata/dd2/geth.ipc`` + +terminal 3: ``$ geth attach ipc:qdata/dd3/geth.ipc`` + +terminal 4: ``$ geth attach ipc:qdata/dd4/geth.ipc`` + +terminal 5: ``$ geth attach ipc:qdata/dd5/geth.ipc`` + +Terminal 1-3 are banks 1-3, terminal 4 is the regulator and terminal 5 is the observer used to test privacy. + +## Running 5nodesRTGS example +4- Run the following command three times in the javascript quorum console on terminal 4 (regulator): + +``loadScript("deploy-bankContract-0-3-6.js");`` + +The script uses a solidity 0.3.6 precompiled bytecode because of quorum issue 82 (https://github.com/jpmorganchase/quorum/issues/82). + +4.1- If you receive an error like "Error: Non-200 status code: &{Status:500 Internal Server Error", wait for the constellation nodes to know their peers. In my low end lab it can take a while (some minutes). + +5- Take note of the 3 bank contract addresses. It can take some seconds, but the geth console will eventually provide an output like "Contract mined! address: 0x...". These are bank1, bank2 and bank3 private contracts instances addresses. + +6- Run the following command one time in the javascript console on terminal 4 (regulator): + +``loadScript("deploy-regulatorTransactionList-0-3-6.js");`` + +7- Take note of the contract address. It is the public transaction log contract address. + +8- Run the following script in each of the five javascript quorum consoles (all terminals). Change the first 4 lines using the addresses written before. The addresses must be between double quotes (I.e. "0x937540f5002fd57b0111e049f2da603fcaec78b8"). + +``` +var addresstr = +var address1 = +var address2 = +var address3 = + +var abi = [{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionRegulator","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_seconds","type":"uint256"}],"name":"setConfirmationTime","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_value","type":"uint256"},{"name":"_random","type":"string"}],"name":"receiveValue","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionBank","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"transactions","outputs":[{"name":"value","type":"uint256"},{"name":"senderContract","type":"address"},{"name":"destinationContract","type":"address"},{"name":"confirmed","type":"bool"},{"name":"senderBalanceAtTransfer","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"confirmationTime","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_contractAddress","type":"address"}],"name":"setTransactionListAddress","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"isRegulatorNode","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"TransactionListAddress","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"thisBankContract","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_thisBankContract","type":"address"}],"name":"setThisBankContract","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_destination","type":"address"},{"name":"_value","type":"uint256"},{"name":"_random","type":"string"}],"name":"sendValue","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[],"name":"setRegulatorNode","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionPair","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"balance","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"totalTransactions","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"transactionIDs","outputs":[{"name":"","type":"bytes32"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"regulator","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_balance","type":"uint256"}],"name":"setBalance","outputs":[],"type":"function","payable":true},{"inputs":[],"type":"constructor","payable":true},{"type":"fallback","payable":true}] + +var abitr = [{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionExistance","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_contract","type":"address"},{"name":"_sender","type":"address"}],"name":"addBank","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"blockBank","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankExistance","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionTimestamp","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankSender","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"transactions","outputs":[{"name":"exists","type":"bool"},{"name":"timestamp","type":"uint256"},{"name":"blocked","type":"bool"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"authorizeBank","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"banks","outputs":[{"name":"name","type":"string"},{"name":"authorized","type":"bool"},{"name":"exists","type":"bool"},{"name":"authorizedSender","type":"address"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankState","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"addTransaction","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"unblockTransaction","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionState","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"regulator","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"blockTransaction","outputs":[],"type":"function","payable":true},{"inputs":[],"type":"constructor","payable":true},{"type":"fallback","payable":true}] + +var contracttr=eth.contract(abitr).at(addresstr) + +var contract1=eth.contract(abi).at(address1) + +var contract2=eth.contract(abi).at(address2) + +var contract3=eth.contract(abi).at(address3) + +var bank1="0xed9d02e382b34818e88b88a309c7fe71e65f419d" +var bank2="0xca843569e3427144cead5e4d5999a3d0ccf92b8e" +var bank3="0x0fbdc686b912d7722dc86510934589e0aaf3b55a" +var regulator="0x0638e1574728b6d862dd5d3a3e0942c3be47d996" + +contract1.balance() +contract2.balance() +contract3.balance() +``` + +9- You should see "0" as return to all contract balances calls on every node. It is fine, the contracts are still empty. + +10- Run the script below ONLY on regulator node (node 4), it will initialize all the basic data in all contracts like the public transaction log address, who is the regulator node, etc. + +``` +var bank1InitialBalance=10000; +var bank2InitialBalance=20000; +var bank3InitialBalance=30000; + +contract1.setTransactionListAddress(addresstr,{from:eth.coinbase,privateFor:["BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo=","QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc=","oNspPPgszVUFw0qmGFfWwh1uxVUXgvBxleXORHj07g8="]}); +contract2.setTransactionListAddress(addresstr,{from:eth.coinbase,privateFor:["BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo=","QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc=","oNspPPgszVUFw0qmGFfWwh1uxVUXgvBxleXORHj07g8="]}); +contract3.setTransactionListAddress(addresstr,{from:eth.coinbase,privateFor:["BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo=","QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc=","oNspPPgszVUFw0qmGFfWwh1uxVUXgvBxleXORHj07g8="]}); + +contract1.setBalance(bank1InitialBalance,{from:eth.coinbase,privateFor:["BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo="]}); +contract2.setBalance(bank2InitialBalance,{from:eth.coinbase,privateFor:["QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc="]}); +contract3.setBalance(bank3InitialBalance,{from:eth.coinbase,privateFor:["oNspPPgszVUFw0qmGFfWwh1uxVUXgvBxleXORHj07g8="]}); + +contract1.setRegulatorNode({from:eth.coinbase,privateFor:["UfNSeSGySeKg11DVNEnqrUtxYRVor4+CvluI8tVv62Y="]}); +contract2.setRegulatorNode({from:eth.coinbase,privateFor:["UfNSeSGySeKg11DVNEnqrUtxYRVor4+CvluI8tVv62Y="]}); +contract3.setRegulatorNode({from:eth.coinbase,privateFor:["UfNSeSGySeKg11DVNEnqrUtxYRVor4+CvluI8tVv62Y="]}); + +contract1.setThisBankContract(contract1.address,{from:eth.coinbase,privateFor:["BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo="]}); +contract2.setThisBankContract(contract1.address,{from:eth.coinbase,privateFor:["BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo="]}); +contract3.setThisBankContract(contract1.address,{from:eth.coinbase,privateFor:["BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo="]}); + +contract1.setThisBankContract(contract2.address,{from:eth.coinbase,privateFor:["QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc="]}); +contract2.setThisBankContract(contract2.address,{from:eth.coinbase,privateFor:["QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc="]}); +contract3.setThisBankContract(contract2.address,{from:eth.coinbase,privateFor:["QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc="]}); + +contract1.setThisBankContract(contract3.address,{from:eth.coinbase,privateFor:["oNspPPgszVUFw0qmGFfWwh1uxVUXgvBxleXORHj07g8="]}); +contract2.setThisBankContract(contract3.address,{from:eth.coinbase,privateFor:["oNspPPgszVUFw0qmGFfWwh1uxVUXgvBxleXORHj07g8="]}); +contract3.setThisBankContract(contract3.address,{from:eth.coinbase,privateFor:["oNspPPgszVUFw0qmGFfWwh1uxVUXgvBxleXORHj07g8="]}); + +contracttr.addBank("Bank1",contract1.address,bank1,{from:eth.coinbase}); +contracttr.addBank("Bank2",contract2.address,bank2,{from:eth.coinbase}); +contracttr.addBank("Bank3",contract3.address,bank3,{from:eth.coinbase}); +``` + +## Testing Privacy + +1- Run the script below on every terminal. +``` +contract1.balance() +contract2.balance() +contract3.balance() +``` + +2- Terminals 1-3 should only have its respective bank balance, i.e., terminal 1 output must be: +``` +> contract1.balance() +> 10000 +> contract2.balance() +> 0 +> contract3.balance() +> 0 +``` + +Terminal 4 (regulator) output must be: +``` +> contract1.balance() +> 10000 +> contract2.balance() +> 20000 +> contract3.balance() +> 30000 +``` + +## Testing transactions confirmed by the regulator +Testing a transaction where bank1 sends 10 to bank2: +1- Issue the command below on terminal 1: +``contract1.sendValue(address2,10,"random1",{from:eth.coinbase,gas:500000,privateFor:["R56gy4dn24YOjwyesTczYa8m5xhP6hF2uTMCju/1xkY=","QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc="]});`` + +2- Wait until this transaction is mined. After some seconds, you should see a non zero hash after issuing: ``contract1.transactionIDs(0)`` on terminal 1. + +3- Write the transaction hash to the public transaction log issuing ``contracttr.addTransaction(contract1.transactionIDs(0),{from:eth.coinbase,gas:500000});`` on terminal 1. + +4- Check that only bank1, bank2 and the regulator can see the private transaction data issuing ``contract1.transactionIDs(0)`` on all terminals. Bank3 and observer nodes have no private data of this transaction. + +5- Check that the public transaction data is available to all nodes issuing ``contracttr.transactions(contract1.transactionIDs(0))`` on all nodes. They all have knowledge of the existance of a transaction with this hash, but have no access to the private data. + +6- The regulator transaction confirmation: Issue the command below in the regulator node (terminal 4): +``contract1.confirmTransactionRegulator(contract1.transactionIDs(0),{from:eth.coinbase,gas:500000,privateFor:["QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc=","BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo="]});`` + +7- Check that the balances of bank1 and bank2 are updated privately by inter private contracts function calls. +``` +contract1.balance() +contract2.balance() +``` + +## Testing transactions confirmed by the sender bank +1- Repeat steps 1-5 above. Remember that the index of the transaction is updated, so commands like ``contract1.transactionIDs(0)`` must be changed to ``contract1.transactionIDs(1)``. + +2- Wait at least the confirmation time seconds (default 60); + +3- The bank self-confirmation: Issue the command below in the sender bank node (terminal 1). Remember to update the transactionID index as needed. +``contract1.confirmTransactionBank(contract1.transactionIDs(1),{from:eth.coinbase,gas:500000,privateFor:["R56gy4dn24YOjwyesTczYa8m5xhP6hF2uTMCju/1xkY=","QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc="]});`` + +## Testing transactions blocking +1- Repeat steps 1-5 of the "Testing transactions confirmed by the regulator" steps. Remember that the index of the transaction is updated, so commands like ``contract1.transactionIDs(1)`` must be changed to ``contract1.transactionIDs(2)``. + +2- Block the transaction issuing the command below in the regulator node (terminal 4): +``contracttr.blockTransaction(contract1.transactionIDs(2),{from:eth.coinbase,gas:500000});`` + +3- Try to confirm the transaction, either by the sender bank after confirmation time or by the regulator. It must not work. + +4- Unblock the transaction issuing the command below in the regulator node (terminal 4): +``contracttr.unblockTransaction(contract1.transactionIDs(2),{from:eth.coinbase,gas:500000});`` + +5- Now the transaction can be confirmed. + +## Other functions +Banks can be blocked entirely using the blockBank function in the regulatorTransactionList contract. diff --git a/examples/5nodesRTGS/bootstrap.sh b/examples/5nodesRTGS/bootstrap.sh new file mode 100755 index 00000000..7925917a --- /dev/null +++ b/examples/5nodesRTGS/bootstrap.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -eu -o pipefail + +# install build deps +add-apt-repository ppa:ethereum/ethereum +apt-get update +apt-get install -y build-essential unzip libdb-dev libleveldb-dev libsodium-dev zlib1g-dev libtinfo-dev solc sysvbanner wrk + +# install constellation +CREL=constellation-0.2.0-ubuntu1604 +wget -q https://github.com/jpmorganchase/constellation/releases/download/v0.2.0/$CREL.tar.xz +tar xfJ $CREL.tar.xz +cp $CREL/constellation-node /usr/local/bin && chmod 0755 /usr/local/bin/constellation-node +rm -rf $CREL + +# install golang +add-apt-repository ppa:gophers/archive +apt update +apt-get install golang-1.9-go +PATH=$PATH:/usr/lib/go-1.9/bin + +# make/install quorum +git clone https://github.com/jpmorganchase/quorum.git +pushd quorum >/dev/null +git checkout tags/v2.0.0 +make all +cp build/bin/geth /usr/local/bin +cp build/bin/bootnode /usr/local/bin +popd >/dev/null + + +# done! +banner "Quorum" +echo +echo 'Quorum has been installed.' diff --git a/examples/5nodesRTGS/contracts.sol b/examples/5nodesRTGS/contracts.sol new file mode 100644 index 00000000..b2fbd2f1 --- /dev/null +++ b/examples/5nodesRTGS/contracts.sol @@ -0,0 +1,369 @@ +/* +bankContract: JPMorgan Quorum smart contract example implementing a private +payment system +Must be deployed as a PRIVATE contract +Initialization: +- Each bank must have an instance of the contract deployed. +- Bank balances must be set privately by the regulator node on each +bank contract instance. This information is only shared between the bank and +the regulator . +- Transactions are private. Each transaction sensitive information is only shared +between the sender, receiver and regulator. +- The list of participating banks must be set by the regulator + +Usage: +- Banks can send money calling sendValue function using only its authorized +account (authorizedSender). A random value must be provided to ensure an unique +transaction ID. If a constant value is passed on every transaction, a +transaction ID collision can occur if two transactions with the same sender, +destination and value are mined in the same block. + +- Transactions are created on an unconfirmed status and they are not +settled. The finality is only achieved after the transaction is confirmed. + +- Transaction IDs must be published on an public contract that stores the +transaction log. This ensures that the regulator has knowledge of all the +transactions. If the regulator sees a transaction in the log that was not +copied privately by the sender to him, he can block it immediately. + +- Only the regulator can confirm a transaction during the confirmation time +(60 seconds by default). During this period, the regulator can read the +transaction and compare it to the bank balance. If the bank has enough money, +the regulator confirms the transaction calling confirmTransactionRegulator +function. + +- If a published transaction would cause an overdraft if confirmed, the +regulator can block it so the bank cannot confirm the transaction after +the confirmation time. + +- If the regulator does not act (blocking or confirming) during the +confirmation time, the sender can confirm its own transaction. This proccess +ensures that the system can endure a regulator outage. + +- Transaction confirmation will reflect on both smart contracts balance +immediatelly (sender and receiver). + +Known problems: +- Fail to provide a random value to the sendValue like using the same value +on every transaction can lead to duplicated transaction IDs in case of fast +multiple identical transactions. + +*/ + +contract bankContract { +uint public balance=0; +address public thisBankContract; +bool public isRegulatorNode = false; +uint public confirmationTime = 60; + +address public TransactionListAddress; +address public regulator; + +//totalTransactions: counts all the transactions that the bank is part of, +//confirmed or not. +uint public totalTransactions = 0; + +struct transaction { + uint value; + address senderContract; + address destinationContract; + bool confirmed; + uint senderBalanceAtTransfer; +} + +mapping (bytes32 => transaction) public transactions; +mapping (uint => bytes32) public transactionIDs; + + +modifier onlyRegulator() { + if (msg.sender != regulator) throw;_ +} + +//This modifier ensures that the msg.sender is a valid bank contract address + +modifier validSenderContract() { + regulatorTransactionList transactionListContractModifier = regulatorTransactionList(TransactionListAddress); + if (!transactionListContractModifier.getBankExistance(msg.sender)) throw;_ +} + +//This modifier ensures that the msg.sender is THE valid bank transaction +//address. It prevents bank impersonation attack +modifier authorizedSender() { + regulatorTransactionList transactionListContractModifier = regulatorTransactionList(TransactionListAddress); + if (transactionListContractModifier.getBankSender(address(this))!= msg.sender) throw;_ +} + +function bankContract() { + regulator = msg.sender; +} + +function setTransactionListAddress (address _contractAddress) onlyRegulator { + TransactionListAddress = _contractAddress; +} + +/* sendValue: creates a private transaction between banks. The transaction +is stored in the private transaction log that is only shared between the sender, +the receiver and the regulator. The transaction is created NOT CONFIRMED. In +this state, no funds have changed hands. The funds are only moved and balances +updated if the transaction is CONFIRMED in a another function call, achieving +finality +*/ +function sendValue (address _destination , uint _value, string _random) authorizedSender { + +uint destinationTransactionID; +bytes32 transactionID; + +regulatorTransactionList transactionListContract = regulatorTransactionList(TransactionListAddress); + +transactionID=sha3(address(this),_destination,_value,block.timestamp,_random); + +transactionIDs[totalTransactions]=transactionID; + +if ((!transactionListContract.getBankExistance(_destination))|| +(!transactionListContract.getBankState(address(this)))) throw; + +bankContract destinationContract = bankContract(_destination); +destinationContract.receiveValue(_value,_random); + +transactions[transactionID].value=_value; +transactions[transactionID].senderContract=address(this); +transactions[transactionID].destinationContract=_destination; +transactions[transactionID].senderBalanceAtTransfer=balance; +transactions[transactionID].confirmed=false; + +totalTransactions++; + +} + +/* receiveValue: creates a copy of the transaction created by the sendValue +function in the recipient bank contract. +*/ +function receiveValue (uint _value, string _random) validSenderContract { + +bytes32 transactionID; + +transactionID=sha3(msg.sender,address(this),_value,block.timestamp,_random); + +transactionIDs[totalTransactions]=transactionID; + +transactions[transactionID].value=_value; +transactions[transactionID].senderContract=msg.sender; +transactions[transactionID].destinationContract=address(this); +transactions[transactionID].confirmed=false; + +totalTransactions++; + +} + +function setRegulatorNode () onlyRegulator { + isRegulatorNode=true; +} + +function setBalance(uint _balance) onlyRegulator { + balance=_balance; +} + + +function setConfirmationTime(uint _seconds) onlyRegulator { + confirmationTime=_seconds; +} + +function setThisBankContract(address _thisBankContract) onlyRegulator { + thisBankContract = _thisBankContract; +} + +/*confirmTransactionRegulator: regulator exclusive function to confirm a +transaction. The transaction MUST be in the public transaction log to be +confirmed, even by the regulator. This ensures that every part is aware of the +transaction or must report inconsistence to the regulator. Overdraft protection +was not possible because there is no consensus on private contracts. +Balances are updated on both contracts if all checks are successful. +*/ +function confirmTransactionRegulator(bytes32 _transactionID) onlyRegulator { + + regulatorTransactionList transactionListContract = regulatorTransactionList(TransactionListAddress); + + if ((!transactions[_transactionID].confirmed)&& + (!transactionListContract.getTransactionState(_transactionID))&& + (transactionListContract.getTransactionExistance(_transactionID))) { + transactions[_transactionID].confirmed=true; + + if (transactions[_transactionID].destinationContract == address(this)) { + if ((transactions[_transactionID].destinationContract == thisBankContract) || + (isRegulatorNode)) { + balance+=transactions[_transactionID].value; + } + bankContract senderContract = bankContract(transactions[_transactionID].senderContract); + + senderContract.confirmTransactionPair(_transactionID); + } + + if (transactions[_transactionID].senderContract == address(this)) { + if ((transactions[_transactionID].senderContract == thisBankContract) || + (isRegulatorNode)) { + balance-=transactions[_transactionID].value; + } + bankContract destinationContract = bankContract(transactions[_transactionID].destinationContract); + + destinationContract.confirmTransactionPair(_transactionID); + } + } +} + +/*confirmTransactionBank: bank exclusive function to confirm a +transaction. A bank can only confirm a transaction after the confirmationTime +seconds has passed. The transaction MUST be in the public transaction log to be +confirmed. This ensures that every part is aware of the +transaction or must report inconsistence to the regulator. Overdraft protection +was not possible because there is no consensus on private contracts. +Balances are updated on both contracts if all checks are successful. +*/ +function confirmTransactionBank(bytes32 _transactionID) authorizedSender { + + regulatorTransactionList transactionListContract = regulatorTransactionList(TransactionListAddress); + + if ((block.timestamp-transactionListContract.getTransactionTimestamp(_transactionID) > confirmationTime) && + (!transactions[_transactionID].confirmed)&& + (!transactionListContract.getTransactionState(_transactionID))&& + (transactionListContract.getTransactionExistance(_transactionID))){ + + if (transactions[_transactionID].senderContract == address(this)) { + transactions[_transactionID].confirmed=true; + if ((transactions[_transactionID].senderContract == thisBankContract) || + (isRegulatorNode)) + balance-=transactions[_transactionID].value; + + bankContract destinationContract = bankContract(transactions[_transactionID].destinationContract); + + destinationContract.confirmTransactionPair(_transactionID); + } + + } +} + +/*confirmTransactionPair: updates the balance of the other leg of the +transaction. Can only be called by a bank contract address +*/ +function confirmTransactionPair(bytes32 _transactionID) validSenderContract { + + if (!transactions[_transactionID].confirmed) { + transactions[_transactionID].confirmed=true; + + if (transactions[_transactionID].destinationContract == address(this)) + if ((transactions[_transactionID].destinationContract == thisBankContract)||(isRegulatorNode)) + balance+=transactions[_transactionID].value; + + if (transactions[_transactionID].senderContract == address(this)) + if ((transactions[_transactionID].senderContract == thisBankContract)||(isRegulatorNode)) + balance-=transactions[_transactionID].value; + } + + +} + +} + +/*Contract regulatorTransactionList +Must be deployed as a PUBLIC contract +Maintains a public transaction log without sensitive information like banks +involved and values. Additionally it maintains a public bank list, including +transaction and contract addresses. +*/ + +contract regulatorTransactionList { + + struct transaction { + bool exists; + uint timestamp; + bool blocked; +} + +struct Bank { + string name; + bool authorized; + bool exists; + address authorizedSender; +} + + address public regulator; + + mapping (bytes32 => transaction) public transactions; + + mapping (address => Bank) public banks; + + modifier onlyRegulator() { if (msg.sender != regulator) throw;_ + } + + function regulatorTransactionList() { + regulator=msg.sender; + } + + function addTransaction (bytes32 _transactionID) { + transactions[_transactionID].exists=true; + transactions[_transactionID].timestamp=block.timestamp; + transactions[_transactionID].blocked=false; + } + + function getTransactionExistance (bytes32 _transactionID) public constant + returns (bool) { + return (transactions[_transactionID].exists); +} + + function getTransactionState (bytes32 _transactionID) public constant + returns (bool) { + return (transactions[_transactionID].blocked); +} + + function getTransactionTimestamp (bytes32 _transactionID) public constant + returns (uint) { + return (transactions[_transactionID].timestamp); +} + + function getBankExistance (address _contract) public constant + returns (bool) { + return (banks[_contract].exists); +} + + function getBankState (address _contract) public constant + returns (bool) { + return (banks[_contract].authorized); +} + +function getBankSender (address _contract) public constant + returns (address) { + return (banks[_contract].authorizedSender); +} + +function getRegulator () public constant + returns (address) { + return (regulator); +} + +function blockTransaction(bytes32 _transactionID) onlyRegulator { + if (transactions[_transactionID].exists) { + transactions[_transactionID].blocked=true; + } +} + +function unblockTransaction(bytes32 _transactionID) onlyRegulator { + if (transactions[_transactionID].exists) { + transactions[_transactionID].blocked=false; + } +} + +function addBank (string _name, address _contract, address _sender) onlyRegulator { + banks[_contract].name=_name; + banks[_contract].exists=true; + banks[_contract].authorized=true; + banks[_contract].authorizedSender=_sender; +} + +function blockBank (address _contract) onlyRegulator { + banks[_contract].authorized=false; +} + +function authorizeBank (address _contract) onlyRegulator { + banks[_contract].authorized=true; +} + +} diff --git a/examples/5nodesRTGS/deploy-bankContract-0-3-6.js b/examples/5nodesRTGS/deploy-bankContract-0-3-6.js new file mode 100644 index 00000000..ff271589 --- /dev/null +++ b/examples/5nodesRTGS/deploy-bankContract-0-3-6.js @@ -0,0 +1,18 @@ +var bankcontractContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionRegulator","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_seconds","type":"uint256"}],"name":"setConfirmationTime","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_value","type":"uint256"},{"name":"_random","type":"string"}],"name":"receiveValue","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionBank","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"transactions","outputs":[{"name":"value","type":"uint256"},{"name":"senderContract","type":"address"},{"name":"destinationContract","type":"address"},{"name":"confirmed","type":"bool"},{"name":"senderBalanceAtTransfer","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"confirmationTime","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_contractAddress","type":"address"}],"name":"setTransactionListAddress","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"isRegulatorNode","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"TransactionListAddress","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"thisBankContract","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_thisBankContract","type":"address"}],"name":"setThisBankContract","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_destination","type":"address"},{"name":"_value","type":"uint256"},{"name":"_random","type":"string"}],"name":"sendValue","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[],"name":"setRegulatorNode","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionPair","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"balance","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"totalTransactions","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"transactionIDs","outputs":[{"name":"","type":"bytes32"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"regulator","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_balance","type":"uint256"}],"name":"setBalance","outputs":[],"type":"function","payable":true},{"inputs":[],"type":"constructor","payable":true},{"type":"fallback","payable":true}]); + + + +var bankcontract = bankcontractContract.new( + { + from: web3.eth.accounts[0], + data: '0x606060405260006000600050556000600160146101000a81548160ff02191690830217905550603c60026000505560006004600050555b33600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b611e99806100706000396000f360606040523615610103576000357c0100000000000000000000000000000000000000000000000000000000900480633c97239714610105578063422753681461011d57806343e92862146101355780635ac2d89414610194578063642f2eaf146101ac578063679e9f3a1461022257806369184f1514610245578063692a4e511461025d578063694fc108146102825780637a2dc88a146102bb5780638092f405146102f4578063859376701461030c578063885cbbab14610374578063a153ed6d14610383578063b69ef8a81461039b578063b9a60038146103be578063c3cb5b89146103e1578063dd8fee1414610411578063fb1669ca1461044a57610103565b005b61011b6004808035906020019091905050610462565b005b6101336004808035906020019091905050610a6b565b005b6101926004808035906020019091908035906020019082018035906020019191908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050909091905050610ad5565b005b6101aa6004808035906020019091905050610d62565b005b6101c26004808035906020019091905050611276565b604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183151581526020018281526020019550505050505060405180910390f35b61022f6004805050611302565b6040518082815260200191505060405180910390f35b61025b600480803590602001909190505061130b565b005b61026a6004805050611396565b60405180821515815260200191505060405180910390f35b61028f60048050506113a9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102c860048050506113cf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61030a60048080359060200190919050506113f5565b005b6103726004808035906020019091908035906020019091908035906020019082018035906020019191908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050909091905050611480565b005b6103816004805050611988565b005b6103996004808035906020019091905050611a00565b005b6103a86004805050611ddc565b6040518082815260200191505060405180910390f35b6103cb6004805050611de5565b6040518082815260200191505060405180910390f35b6103f76004808035906020019091905050611dee565b604051808260001916815260200191505060405180910390f35b61041e6004805050611e09565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104606004808035906020019091905050611e2f565b005b600060006000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156104c457610002565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600660005060008560001916815260200190815260200160002060005060020160149054906101000a900460ff1615801561059857508273ffffffffffffffffffffffffffffffffffffffff1663c71cca1685604051827c010000000000000000000000000000000000000000000000000000000002815260040180826000191681526020019150506020604051808303816000876161da5a03f1156100025750505060405180519060200150155b801561061757508273ffffffffffffffffffffffffffffffffffffffff1663054380f985604051827c010000000000000000000000000000000000000000000000000000000002815260040180826000191681526020019150506020604051808303816000876161da5a03f11561000257505050604051805190602001505b15610a64576001600660005060008660001916815260200190815260200160002060005060020160146101000a81548160ff021916908302179055503073ffffffffffffffffffffffffffffffffffffffff16600660005060008660001916815260200190815260200160002060005060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561085b57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660005060008660001916815260200190815260200160002060005060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061076f5750600160149054906101000a900460ff165b156107aa5760066000506000856000191681526020019081526020016000206000506000016000505460006000828282505401925050819055505b600660005060008560001916815260200190815260200160002060005060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663a153ed6d85604051827c010000000000000000000000000000000000000000000000000000000002815260040180826000191681526020019150506000604051808303816000876161da5a03f115610002575050505b3073ffffffffffffffffffffffffffffffffffffffff16600660005060008660001916815260200190815260200160002060005060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610a6357600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660005060008660001916815260200190815260200160002060005060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806109775750600160149054906101000a900460ff165b156109b25760066000506000856000191681526020019081526020016000206000506000016000505460006000828282505403925050819055505b600660005060008560001916815260200190815260200160002060005060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a153ed6d85604051827c010000000000000000000000000000000000000000000000000000000002815260040180826000191681526020019150506000604051808303816000876161da5a03f115610002575050505b5b5b50505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ac757610002565b806002600050819055505b50565b60006000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663288bdecf33604051827c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506020604051808303816000876161da5a03f11561000257505050604051805190602001501515610b9257610002565b3330854286604051808673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018280519060200190808383829060006004602084601f0104600302600f01f1509050019550505050505060405180910390209150815081600760005060006004600050548152602001908152602001600020600050819055508360066000506000846000191681526020019081526020016000206000506000016000508190555033600660005060008460001916815260200190815260200160002060005060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555030600660005060008460001916815260200190815260200160002060005060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055506000600660005060008460001916815260200190815260200160002060005060020160146101000a81548160ff021916908302179055506004600081815054809291906001019190505550505b505050565b600060006000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16635065426030604051827c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506020604051808303816000876161da5a03f115610002575050506040518051906020015073ffffffffffffffffffffffffffffffffffffffff16141515610e4f57610002565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692506002600050548373ffffffffffffffffffffffffffffffffffffffff16632fbff52086604051827c010000000000000000000000000000000000000000000000000000000002815260040180826000191681526020019150506020604051808303816000876161da5a03f11561000257505050604051805190602001504203118015610f2b5750600660005060008560001916815260200190815260200160002060005060020160149054906101000a900460ff16155b8015610fab57508273ffffffffffffffffffffffffffffffffffffffff1663c71cca1685604051827c010000000000000000000000000000000000000000000000000000000002815260040180826000191681526020019150506020604051808303816000876161da5a03f1156100025750505060405180519060200150155b801561102a57508273ffffffffffffffffffffffffffffffffffffffff1663054380f985604051827c010000000000000000000000000000000000000000000000000000000002815260040180826000191681526020019150506020604051808303816000876161da5a03f11561000257505050604051805190602001505b1561126f573073ffffffffffffffffffffffffffffffffffffffff16600660005060008660001916815260200190815260200160002060005060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561126e576001600660005060008660001916815260200190815260200160002060005060020160146101000a81548160ff02191690830217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660005060008660001916815260200190815260200160002060005060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806111825750600160149054906101000a900460ff165b156111bd5760066000506000856000191681526020019081526020016000206000506000016000505460006000828282505403925050819055505b600660005060008560001916815260200190815260200160002060005060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663a153ed6d85604051827c010000000000000000000000000000000000000000000000000000000002815260040180826000191681526020019150506000604051808303816000876161da5a03f115610002575050505b5b505b505050565b60066000506020528060005260406000206000915090508060000160005054908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900460ff16908060030160005054905085565b60026000505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561136757610002565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b50565b600160149054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561145157610002565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b50565b60006000600060006000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16635065426030604051827c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506020604051808303816000876161da5a03f115610002575050506040518051906020015073ffffffffffffffffffffffffffffffffffffffff1614151561157157610002565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692503088884289604051808673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018280519060200190808383829060006004602084601f0104600302600f01f1509050019550505050505060405180910390209350835083600760005060006004600050548152602001908152602001600020600050819055508273ffffffffffffffffffffffffffffffffffffffff1663288bdecf89604051827c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506020604051808303816000876161da5a03f1156100025750505060405180519060200150158061177557508273ffffffffffffffffffffffffffffffffffffffff16638c41eae630604051827c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506020604051808303816000876161da5a03f1156100025750505060405180519060200150155b1561177f57610002565b8791508173ffffffffffffffffffffffffffffffffffffffff166343e928628888604051837c010000000000000000000000000000000000000000000000000000000002815260040180838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561182b5780820380516001836020036101000a031916815260200191505b5093505050506000604051808303816000876161da5a03f115610002575050508660066000506000866000191681526020019081526020016000206000506000016000508190555030600660005060008660001916815260200190815260200160002060005060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555087600660005060008660001916815260200190815260200160002060005060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055506000600050546006600050600086600019168152602001908152602001600020600050600301600050819055506000600660005060008660001916815260200190815260200160002060005060020160146101000a81548160ff021916908302179055506004600081815054809291906001019190505550505b50505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119e457610002565b6001600160146101000a81548160ff021916908302179055505b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663288bdecf33604051827c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506020604051808303816000876161da5a03f11561000257505050604051805190602001501515611abb57610002565b600660005060008360001916815260200190815260200160002060005060020160149054906101000a900460ff161515611dd7576001600660005060008460001916815260200190815260200160002060005060020160146101000a81548160ff021916908302179055503073ffffffffffffffffffffffffffffffffffffffff16600660005060008460001916815260200190815260200160002060005060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611c7e57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660005060008460001916815260200190815260200160002060005060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611c425750600160149054906101000a900460ff165b15611c7d5760066000506000836000191681526020019081526020016000206000506000016000505460006000828282505401925050819055505b5b3073ffffffffffffffffffffffffffffffffffffffff16600660005060008460001916815260200190815260200160002060005060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611dd657600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660005060008460001916815260200190815260200160002060005060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611d9a5750600160149054906101000a900460ff165b15611dd55760066000506000836000191681526020019081526020016000206000506000016000505460006000828282505403925050819055505b5b5b505b50565b60006000505481565b60046000505481565b60076000506020528060005260406000206000915090505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e8b57610002565b806000600050819055505b5056', + gas: '4700000', + privateFor: ["BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo=","QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc=","oNspPPgszVUFw0qmGFfWwh1uxVUXgvBxleXORHj07g8="] + }, function (e, contract){ + console.log(e, contract); + if (typeof contract.address !== 'undefined') { + console.log('Contract mined! address: "' + contract.address + '"\n'); + } + }) + + diff --git a/examples/5nodesRTGS/deploy-bankContract-0-4-10.js b/examples/5nodesRTGS/deploy-bankContract-0-4-10.js new file mode 100644 index 00000000..aa3701cf --- /dev/null +++ b/examples/5nodesRTGS/deploy-bankContract-0-4-10.js @@ -0,0 +1,13 @@ +var bankcontractContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionRegulator","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":false,"inputs":[{"name":"_seconds","type":"uint256"}],"name":"setConfirmationTime","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"},{"name":"_random","type":"string"}],"name":"receiveValue","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionBank","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"transactions","outputs":[{"name":"value","type":"uint256"},{"name":"senderContract","type":"address"},{"name":"destinationContract","type":"address"},{"name":"confirmed","type":"bool"},{"name":"senderBalanceAtTransfer","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"confirmationTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_contractAddress","type":"address"}],"name":"setTransactionListAddress","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"isRegulatorNode","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"TransactionListAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"thisBankContract","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_thisBankContract","type":"address"}],"name":"setThisBankContract","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":false,"inputs":[{"name":"_destination","type":"address"},{"name":"_value","type":"uint256"},{"name":"_random","type":"string"}],"name":"sendValue","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":false,"inputs":[],"name":"setRegulatorNode","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionPair","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"totalTransactions","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"transactionIDs","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"regulator","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_balance","type":"uint256"}],"name":"setBalance","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"inputs":[],"payable":false,"type":"constructor","stateMutability":"nonpayable"}]); +var bankcontract = bankcontractContract.new( + { + from: web3.eth.accounts[0], + data: '0x606060405260006000556000600160146101000a81548160ff021916908315150217905550603c6002556000600555341561003657fe5b5b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6122c8806100896000396000f30060606040523615610105576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633c97239714610107578063422753681461012b57806343e928621461014b5780635ac2d894146101ae578063642f2eaf146101d2578063679e9f3a1461028257806369184f15146102a8578063692a4e51146102de578063694fc108146103085780637a2dc88a1461035a5780638092f405146103ac57806385937670146103e2578063885cbbab14610464578063a153ed6d14610476578063b69ef8a81461049a578063b9a60038146104c0578063c3cb5b89146104e6578063dd8fee1414610522578063fb1669ca14610574575bfe5b341561010f57fe5b610129600480803560001916906020019091905050610594565b005b341561013357fe5b6101496004808035906020019091905050610be7565b005b341561015357fe5b6101ac600480803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610c50565b005b34156101b657fe5b6101d0600480803560001916906020019091905050610f81565b005b34156101da57fe5b6101f460048080356000191690602001909190505061151d565b604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001831515151581526020018281526020019550505050505060405180910390f35b341561028a57fe5b6102926115a0565b6040518082815260200191505060405180910390f35b34156102b057fe5b6102dc600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506115a6565b005b34156102e657fe5b6102ee611649565b604051808215151515815260200191505060405180910390f35b341561031057fe5b61031861165c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561036257fe5b61036a611682565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103b457fe5b6103e0600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506116a8565b005b34156103ea57fe5b610462600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061174b565b005b341561046c57fe5b610474611d79565b005b341561047e57fe5b610498600480803560001916906020019091905050611df5565b005b34156104a257fe5b6104aa6121e9565b6040518082815260200191505060405180910390f35b34156104c857fe5b6104d06121ef565b6040518082815260200191505060405180910390f35b34156104ee57fe5b61050460048080359060200190919050506121f5565b60405180826000191660001916815260200191505060405180910390f35b341561052a57fe5b61053261220d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561057c57fe5b6105926004808035906020019091905050612233565b005b600060006000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105f75760006000fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925060066000856000191660001916815260200190815260200160002060020160149054906101000a900460ff161580156106e557508273ffffffffffffffffffffffffffffffffffffffff1663c71cca16856000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15156106cc57fe5b60325a03f115156106d957fe5b50505060405180519050155b801561078057508273ffffffffffffffffffffffffffffffffffffffff1663054380f9856000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b151561076857fe5b60325a03f1151561077557fe5b505050604051805190505b15610bdf57600160066000866000191660001916815260200190815260200160002060020160146101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1660066000866000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156109cd57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660066000866000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806108d45750600160149054906101000a900460ff165b1561090857600660008560001916600019168152602001908152602001600020600001546000600082825401925050819055505b60066000856000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663a153ed6d856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050600060405180830381600087803b15156109bc57fe5b60325a03f115156109c957fe5b5050505b3073ffffffffffffffffffffffffffffffffffffffff1660066000866000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610bde57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660066000866000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610ae55750600160149054906101000a900460ff165b15610b1957600660008560001916600019168152602001908152602001600020600001546000600082825403925050819055505b60066000856000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a153ed6d856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050600060405180830381600087803b1515610bcd57fe5b60325a03f11515610bda57fe5b5050505b5b5b5b50505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c445760006000fd5b806002819055505b5b50565b60006000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663288bdecf336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515610d1957fe5b60325a03f11515610d2657fe5b505050604051805190501515610d3c5760006000fd5b3330854286604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140184815260200183815260200182805190602001908083835b60208310610e025780518252602082019150602081019050602083039250610ddf565b6001836020036101000a038019825116818451168082178552505050505050905001955050505050506040518091039020915081600760006005548152602001908152602001600020816000191690555083600660008460001916600019168152602001908152602001600020600001819055503360066000846000191660001916815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503060066000846000191660001916815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060066000846000191660001916815260200190815260200160002060020160146101000a81548160ff0219169083151502179055506005600081548092919060010191905055505b5b50505050565b600060006000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff166350654260306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561106357fe5b60325a03f1151561107057fe5b5050506040518051905073ffffffffffffffffffffffffffffffffffffffff1614151561109d5760006000fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692506002548373ffffffffffffffffffffffffffffffffffffffff16632fbff520866000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b151561114157fe5b60325a03f1151561114e57fe5b505050604051805190504203118015611190575060066000856000191660001916815260200190815260200160002060020160149054906101000a900460ff16155b801561122c57508273ffffffffffffffffffffffffffffffffffffffff1663c71cca16856000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b151561121357fe5b60325a03f1151561122057fe5b50505060405180519050155b80156112c757508273ffffffffffffffffffffffffffffffffffffffff1663054380f9856000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15156112af57fe5b60325a03f115156112bc57fe5b505050604051805190505b15611515573073ffffffffffffffffffffffffffffffffffffffff1660066000866000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561151457600160066000866000191660001916815260200190815260200160002060020160146101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660066000866000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061141b5750600160149054906101000a900460ff165b1561144f57600660008560001916600019168152602001908152602001600020600001546000600082825403925050819055505b60066000856000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663a153ed6d856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050600060405180830381600087803b151561150357fe5b60325a03f1151561151057fe5b5050505b5b5b5b50505050565b60066020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900460ff16908060030154905085565b60025481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116035760006000fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b50565b600160149054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117055760006000fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b50565b60006000600060006000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff166350654260306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561183157fe5b60325a03f1151561183e57fe5b5050506040518051905073ffffffffffffffffffffffffffffffffffffffff1614151561186b5760006000fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692503088884289604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140184815260200183815260200182805190602001908083835b602083106119565780518252602082019150602081019050602083039250611933565b6001836020036101000a03801982511681845116808217855250505050505090500195505050505050604051809103902093508360076000600554815260200190815260200160002081600019169055508273ffffffffffffffffffffffffffffffffffffffff1663288bdecf896000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611a4757fe5b60325a03f11515611a5457fe5b505050604051805190501580611b1e57508273ffffffffffffffffffffffffffffffffffffffff16638c41eae6306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611b0557fe5b60325a03f11515611b1257fe5b50505060405180519050155b15611b295760006000fd5b8791508173ffffffffffffffffffffffffffffffffffffffff166343e9286288886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200180602001828103825283818151815260200191508051906020019080838360008314611bca575b805182526020831115611bca57602082019150602081019050602083039250611ba6565b505050905090810190601f168015611bf65780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1515611c1257fe5b60325a03f11515611c1f57fe5b50505086600660008660001916600019168152602001908152602001600020600001819055503060066000866000191660001916815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508760066000866000191660001916815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060005460066000866000191660001916815260200190815260200160002060030181905550600060066000866000191660001916815260200190815260200160002060020160146101000a81548160ff0219169083151502179055506005600081548092919060010191905055505b5b5050505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611dd65760006000fd5b6001600160146101000a81548160ff0219169083151502179055505b5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663288bdecf336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611ebc57fe5b60325a03f11515611ec957fe5b505050604051805190501515611edf5760006000fd5b60066000836000191660001916815260200190815260200160002060020160149054906101000a900460ff1615156121e357600160066000846000191660001916815260200190815260200160002060020160146101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1660066000846000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561209557600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660066000846000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806120605750600160149054906101000a900460ff165b1561209457600660008360001916600019168152602001908152602001600020600001546000600082825401925050819055505b5b3073ffffffffffffffffffffffffffffffffffffffff1660066000846000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121e257600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660066000846000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806121ad5750600160149054906101000a900460ff165b156121e157600660008360001916600019168152602001908152602001600020600001546000600082825403925050819055505b5b5b5b5b5050565b60005481565b60055481565b60076020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156122905760006000fd5b806000819055505b5b505600a165627a7a72305820cfb730d8d3ec4317d6932c771a7486f24398a49273734386e66eb40b12639ecf0029', + gas: '4700000', + privateFor: ["BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo=","QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc=","oNspPPgszVUFw0qmGFfWwh1uxVUXgvBxleXORHj07g8="] + }, function (e, contract){ + console.log(e, contract); + if (typeof contract.address !== 'undefined') { + console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash); + } + }) diff --git a/examples/5nodesRTGS/deploy-bankContract-0-4-21.js b/examples/5nodesRTGS/deploy-bankContract-0-4-21.js new file mode 100644 index 00000000..4621f9ab --- /dev/null +++ b/examples/5nodesRTGS/deploy-bankContract-0-4-21.js @@ -0,0 +1,13 @@ +var bankcontractContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionRegulator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_seconds","type":"uint256"}],"name":"setConfirmationTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"},{"name":"_random","type":"string"}],"name":"receiveValue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionBank","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"transactions","outputs":[{"name":"value","type":"uint256"},{"name":"senderContract","type":"address"},{"name":"destinationContract","type":"address"},{"name":"confirmed","type":"bool"},{"name":"senderBalanceAtTransfer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"confirmationTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contractAddress","type":"address"}],"name":"setTransactionListAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isRegulatorNode","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TransactionListAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"thisBankContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_thisBankContract","type":"address"}],"name":"setThisBankContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_destination","type":"address"},{"name":"_value","type":"uint256"},{"name":"_random","type":"string"}],"name":"sendValue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setRegulatorNode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"confirmTransactionPair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTransactions","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"transactionIDs","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"regulator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_balance","type":"uint256"}],"name":"setBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]); +var bankcontract = bankcontractContract.new( + { + from: web3.eth.accounts[0], + data: '0x6060604052600080556000600160146101000a81548160ff021916908315150217905550603c6002556000600555341561003857600080fd5b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061229c806100886000396000f300606060405260043610610107576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633c9723971461010c578063422753681461013357806343e92862146101565780635ac2d894146101bc578063642f2eaf146101e3578063679e9f3a1461029657806369184f15146102bf578063692a4e51146102f8578063694fc108146103255780637a2dc88a1461037a5780638092f405146103cf5780638593767014610408578063885cbbab1461048d578063a153ed6d146104a2578063b69ef8a8146104c9578063b9a60038146104f2578063c3cb5b891461051b578063dd8fee141461055a578063fb1669ca146105af575b600080fd5b341561011757600080fd5b6101316004808035600019169060200190919050506105d2565b005b341561013e57600080fd5b6101546004808035906020019091905050610c19565b005b341561016157600080fd5b6101ba600480803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610c7f565b005b34156101c757600080fd5b6101e1600480803560001916906020019091905050610fa8565b005b34156101ee57600080fd5b61020860048080356000191690602001909190505061152a565b604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001831515151581526020018281526020019550505050505060405180910390f35b34156102a157600080fd5b6102a96115ad565b6040518082815260200191505060405180910390f35b34156102ca57600080fd5b6102f6600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506115b3565b005b341561030357600080fd5b61030b611653565b604051808215151515815260200191505060405180910390f35b341561033057600080fd5b610338611666565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038557600080fd5b61038d61168c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103da57600080fd5b610406600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506116b2565b005b341561041357600080fd5b61048b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611752565b005b341561049857600080fd5b6104a0611d5f565b005b34156104ad57600080fd5b6104c7600480803560001916906020019091905050611dd7565b005b34156104d457600080fd5b6104dc6121c0565b6040518082815260200191505060405180910390f35b34156104fd57600080fd5b6105056121c6565b6040518082815260200191505060405180910390f35b341561052657600080fd5b61053c60048080359060200190919050506121cc565b60405180826000191660001916815260200191505060405180910390f35b341561056557600080fd5b61056d6121e4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105ba57600080fd5b6105d0600480803590602001909190505061220a565b005b6000806000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561063357600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925060066000856000191660001916815260200190815260200160002060020160149054906101000a900460ff1615801561071b57508273ffffffffffffffffffffffffffffffffffffffff1663c71cca16856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b151561070257600080fd5b5af1151561070f57600080fd5b50505060405180519050155b80156107b057508273ffffffffffffffffffffffffffffffffffffffff1663054380f9856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b151561079857600080fd5b5af115156107a557600080fd5b505050604051805190505b15610c1357600160066000866000191660001916815260200190815260200160002060020160146101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1660066000866000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156109ff57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660066000866000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806109045750600160149054906101000a900460ff165b15610937576006600085600019166000191681526020019081526020016000206000015460008082825401925050819055505b60066000856000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663a153ed6d856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050600060405180830381600087803b15156109ee57600080fd5b5af115156109fb57600080fd5b5050505b3073ffffffffffffffffffffffffffffffffffffffff1660066000866000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610c1257600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660066000866000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610b175750600160149054906101000a900460ff165b15610b4a576006600085600019166000191681526020019081526020016000206000015460008082825403925050819055505b60066000856000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a153ed6d856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050600060405180830381600087803b1515610c0157600080fd5b5af11515610c0e57600080fd5b5050505b5b50505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c7557600080fd5b8060028190555050565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663288bdecf336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515610d4157600080fd5b5af11515610d4e57600080fd5b505050604051805190501515610d6357600080fd5b3330854286604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140184815260200183815260200182805190602001908083835b602083101515610e2b5780518252602082019150602081019050602083039250610e06565b6001836020036101000a038019825116818451168082178552505050505050905001955050505050506040518091039020915081600760006005548152602001908152602001600020816000191690555083600660008460001916600019168152602001908152602001600020600001819055503360066000846000191660001916815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503060066000846000191660001916815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060066000846000191660001916815260200190815260200160002060020160146101000a81548160ff02191690831515021790555060056000815480929190600101919050555050505050565b6000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff166350654260306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561108357600080fd5b5af1151561109057600080fd5b5050506040518051905073ffffffffffffffffffffffffffffffffffffffff161415156110bc57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692506002548373ffffffffffffffffffffffffffffffffffffffff16632fbff520866040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b151561115a57600080fd5b5af1151561116757600080fd5b5050506040518051905042031180156111a9575060066000856000191660001916815260200190815260200160002060020160149054906101000a900460ff16155b801561123f57508273ffffffffffffffffffffffffffffffffffffffff1663c71cca16856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b151561122657600080fd5b5af1151561123357600080fd5b50505060405180519050155b80156112d457508273ffffffffffffffffffffffffffffffffffffffff1663054380f9856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15156112bc57600080fd5b5af115156112c957600080fd5b505050604051805190505b15611524573073ffffffffffffffffffffffffffffffffffffffff1660066000866000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561152357600160066000866000191660001916815260200190815260200160002060020160146101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660066000866000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806114285750600160149054906101000a900460ff165b1561145b576006600085600019166000191681526020019081526020016000206000015460008082825403925050819055505b60066000856000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1663a153ed6d856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050600060405180830381600087803b151561151257600080fd5b5af1151561151f57600080fd5b5050505b5b50505050565b60066020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900460ff16908060030154905085565b60025481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561160f57600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160149054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561170e57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff166350654260306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561183057600080fd5b5af1151561183d57600080fd5b5050506040518051905073ffffffffffffffffffffffffffffffffffffffff1614151561186957600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692503088884289604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140184815260200183815260200182805190602001908083835b6020831015156119565780518252602082019150602081019050602083039250611931565b6001836020036101000a03801982511681845116808217855250505050505090500195505050505050604051809103902093508360076000600554815260200190815260200160002081600019169055508273ffffffffffffffffffffffffffffffffffffffff1663288bdecf896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611a4157600080fd5b5af11515611a4e57600080fd5b505050604051805190501580611b1257508273ffffffffffffffffffffffffffffffffffffffff16638c41eae6306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611af957600080fd5b5af11515611b0657600080fd5b50505060405180519050155b15611b1c57600080fd5b8791508173ffffffffffffffffffffffffffffffffffffffff166343e9286288886040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611bae578082015181840152602081019050611b93565b50505050905090810190601f168015611bdb5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1515611bfa57600080fd5b5af11515611c0757600080fd5b50505086600660008660001916600019168152602001908152602001600020600001819055503060066000866000191660001916815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508760066000866000191660001916815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060005460066000866000191660001916815260200190815260200160002060030181905550600060066000866000191660001916815260200190815260200160002060020160146101000a81548160ff0219169083151502179055506005600081548092919060010191905055505050505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611dbb57600080fd5b60018060146101000a81548160ff021916908315150217905550565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663288bdecf336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611e9857600080fd5b5af11515611ea557600080fd5b505050604051805190501515611eba57600080fd5b60066000836000191660001916815260200190815260200160002060020160149054906101000a900460ff1615156121bc57600160066000846000191660001916815260200190815260200160002060020160146101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1660066000846000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561206f57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660066000846000191660001916815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061203b5750600160149054906101000a900460ff165b1561206e576006600083600019166000191681526020019081526020016000206000015460008082825401925050819055505b5b3073ffffffffffffffffffffffffffffffffffffffff1660066000846000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121bb57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660066000846000191660001916815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806121875750600160149054906101000a900460ff165b156121ba576006600083600019166000191681526020019081526020016000206000015460008082825403925050819055505b5b5b5050565b60005481565b60055481565b60076020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561226657600080fd5b80600081905550505600a165627a7a7230582032d1c3a1e4248485339c97c8de48ff76a1159511c7809e00acef3db21c30d79e0029', + gas: '4700000', + privateFor: ["BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo=","QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc=","oNspPPgszVUFw0qmGFfWwh1uxVUXgvBxleXORHj07g8="] + }, function (e, contract){ + console.log(e, contract); + if (typeof contract.address !== 'undefined') { + console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash); + } + }) diff --git a/examples/5nodesRTGS/deploy-regulatorTransactionList-0-3-6.js b/examples/5nodesRTGS/deploy-regulatorTransactionList-0-3-6.js new file mode 100644 index 00000000..ccf31446 --- /dev/null +++ b/examples/5nodesRTGS/deploy-regulatorTransactionList-0-3-6.js @@ -0,0 +1,16 @@ +var regulatortransactionlistContract = web3.eth.contract([{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionExistance","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_contract","type":"address"},{"name":"_sender","type":"address"}],"name":"addBank","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"blockBank","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankExistance","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionTimestamp","outputs":[{"name":"","type":"uint256"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankSender","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"transactions","outputs":[{"name":"exists","type":"bool"},{"name":"timestamp","type":"uint256"},{"name":"blocked","type":"bool"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"authorizeBank","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"banks","outputs":[{"name":"name","type":"string"},{"name":"authorized","type":"bool"},{"name":"exists","type":"bool"},{"name":"authorizedSender","type":"address"}],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankState","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"addTransaction","outputs":[],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"unblockTransaction","outputs":[],"type":"function","payable":true},{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionState","outputs":[{"name":"","type":"bool"}],"type":"function","payable":true},{"constant":true,"inputs":[],"name":"regulator","outputs":[{"name":"","type":"address"}],"type":"function","payable":true},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"blockTransaction","outputs":[],"type":"function","payable":true},{"inputs":[],"type":"constructor","payable":true},{"type":"fallback","payable":true}]); + + +var regulatortransactionlist = regulatortransactionlistContract.new( + { + from: web3.eth.accounts[0], + data: '0x60606040525b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b610c678061003f6000396000f3606060405236156100d7576000357c010000000000000000000000000000000000000000000000000000000090048063054380f9146100d95780631eaa25561461010757806321574ff81461016f578063288bdecf146101875780632fbff520146101b557806350654260146101e1578063642f2eaf146102235780636f74a2c01461026157806380c3b8c2146102795780638c41eae61461035657806394bbaa8014610384578063b809e2f91461039c578063c71cca16146103b4578063dd8fee14146103e2578063e5f9f94d1461041b576100d7565b005b6100ef6004808035906020019091905050610433565b60405180821515815260200191505060405180910390f35b61016d6004808035906020019082018035906020019191908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505090909190803590602001909190803590602001909190505061046f565b005b610185600480803590602001909190505061069b565b005b61019d6004808035906020019091905050610744565b60405180821515815260200191505060405180910390f35b6101cb6004808035906020019091905050610792565b6040518082815260200191505060405180910390f35b6101f760048080359060200190919050506107c4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102396004808035906020019091905050610825565b6040518084151581526020018381526020018215158152602001935050505060405180910390f35b610277600480803590602001909190505061086f565b005b61028f6004808035906020019091905050610918565b6040518080602001851515815260200184151581526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252868181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156103445780601f1061031957610100808354040283529160200191610344565b820191906000526020600020905b81548152906001019060200180831161032757829003601f168201915b50509550505050505060405180910390f35b61036c6004808035906020019091905050610987565b60405180821515815260200191505060405180910390f35b61039a60048080359060200190919050506109d5565b005b6103b26004808035906020019091905050610a6f565b005b6103ca6004808035906020019091905050610b3a565b60405180821515815260200191505060405180910390f35b6103ef6004805050610b76565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104316004808035906020019091905050610b9c565b005b6000600160005060008360001916815260200190815260200160002060005060000160009054906101000a900460ff16905061046a565b919050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156104cb57610002565b82600260005060008473ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000506000016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061054a57805160ff191683800117855561057b565b8280016001018555821561057b579182015b8281111561057a57825182600050559160200191906001019061055c565b5b5090506105a69190610588565b808211156105a25760008181506000905550600101610588565b5090565b50506001600260005060008473ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060010160016101000a81548160ff021916908302179055506001600260005060008473ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060010160006101000a81548160ff0219169083021790555080600260005060008473ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060010160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b505050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106f757610002565b6000600260005060008373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060010160006101000a81548160ff021916908302179055505b50565b6000600260005060008373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060010160019054906101000a900460ff16905061078d565b919050565b600060016000506000836000191681526020019081526020016000206000506001016000505490506107bf565b919050565b6000600260005060008373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060010160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610820565b919050565b60016000506020528060005260406000206000915090508060000160009054906101000a900460ff16908060010160005054908060020160009054906101000a900460ff16905083565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108cb57610002565b6001600260005060008373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060010160006101000a81548160ff021916908302179055505b50565b600260005060205280600052604060002060009150905080600001600050908060010160009054906101000a900460ff16908060010160019054906101000a900460ff16908060010160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b6000600260005060008373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060010160009054906101000a900460ff1690506109d0565b919050565b6001600160005060008360001916815260200190815260200160002060005060000160006101000a81548160ff02191690830217905550426001600050600083600019168152602001908152602001600020600050600101600050819055506000600160005060008360001916815260200190815260200160002060005060020160006101000a81548160ff021916908302179055505b50565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610acb57610002565b600160005060008260001916815260200190815260200160002060005060000160009054906101000a900460ff1615610b36576000600160005060008360001916815260200190815260200160002060005060020160006101000a81548160ff021916908302179055505b5b50565b6000600160005060008360001916815260200190815260200160002060005060020160009054906101000a900460ff169050610b71565b919050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610bf857610002565b600160005060008260001916815260200190815260200160002060005060000160009054906101000a900460ff1615610c63576001600160005060008360001916815260200190815260200160002060005060020160006101000a81548160ff021916908302179055505b5b5056', + + gas: '4700000' + }, function (e, contract){ + console.log(e, contract); + if (typeof contract.address !== 'undefined') { + console.log('Contract mined! address: "' + contract.address + '"\n'); + } + }) + diff --git a/examples/5nodesRTGS/deploy-regulatorTransactionList-0-4-10.js b/examples/5nodesRTGS/deploy-regulatorTransactionList-0-4-10.js new file mode 100644 index 00000000..9d236d14 --- /dev/null +++ b/examples/5nodesRTGS/deploy-regulatorTransactionList-0-4-10.js @@ -0,0 +1,12 @@ +var regulatortransactionlistContract = web3.eth.contract([{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionExistance","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_contract","type":"address"},{"name":"_sender","type":"address"}],"name":"addBank","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"blockBank","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankExistance","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankSender","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"transactions","outputs":[{"name":"exists","type":"bool"},{"name":"timestamp","type":"uint256"},{"name":"blocked","type":"bool"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"authorizeBank","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"banks","outputs":[{"name":"name","type":"string"},{"name":"authorized","type":"bool"},{"name":"exists","type":"bool"},{"name":"authorizedSender","type":"address"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankState","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"addTransaction","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"unblockTransaction","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionState","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"regulator","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"blockTransaction","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"getRegulator","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function","stateMutability":"view"},{"inputs":[],"payable":false,"type":"constructor","stateMutability":"nonpayable"}]); +var regulatortransactionlist = regulatortransactionlistContract.new( + { + from: web3.eth.accounts[0], + data: '0x6060604052341561000c57fe5b5b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b610f3b8061005f6000396000f300606060405236156100e4576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054380f9146100e65780631eaa25561461012257806321574ff8146101ba578063288bdecf146101f05780632fbff5201461023e5780635065426014610276578063642f2eaf146102ec5780636f74a2c01461033a57806380c3b8c2146103705780638c41eae61461048557806394bbaa80146104d3578063b809e2f9146104f7578063c71cca161461051b578063dd8fee1414610557578063e5f9f94d146105a9578063f7e317f4146105cd575bfe5b34156100ee57fe5b61010860048080356000191690602001909190505061061f565b604051808215151515815260200191505060405180910390f35b341561012a57fe5b6101b8600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610655565b005b34156101c257fe5b6101ee600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610847565b005b34156101f857fe5b610224600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610904565b604051808215151515815260200191505060405180910390f35b341561024657fe5b61026060048080356000191690602001909190505061095e565b6040518082815260200191505060405180910390f35b341561027e57fe5b6102aa600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610987565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102f457fe5b61030e6004808035600019169060200190919050506109f4565b604051808415151515815260200183815260200182151515158152602001935050505060405180910390f35b341561034257fe5b61036e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a38565b005b341561037857fe5b6103a4600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610af5565b604051808060200185151515158152602001841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281038252868181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156104735780601f1061044857610100808354040283529160200191610473565b820191906000526020600020905b81548152906001019060200180831161045657829003601f168201915b50509550505050505060405180910390f35b341561048d57fe5b6104b9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b5e565b604051808215151515815260200191505060405180910390f35b34156104db57fe5b6104f5600480803560001916906020019091905050610bb8565b005b34156104ff57fe5b610519600480803560001916906020019091905050610c4d565b005b341561052357fe5b61053d600480803560001916906020019091905050610d18565b604051808215151515815260200191505060405180910390f35b341561055f57fe5b610567610d4e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105b157fe5b6105cb600480803560001916906020019091905050610d74565b005b34156105d557fe5b6105dd610e3f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600060016000836000191660001916815260200190815260200160002060000160009054906101000a900460ff1690505b919050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106b25760006000fd5b82600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000019080519060200190610708929190610e6a565b506001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160016101000a81548160ff0219169083151502179055506001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff02191690831515021790555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b505050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108a45760006000fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055505b5b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160019054906101000a900460ff1690505b919050565b60006001600083600019166000191681526020019081526020016000206001015490505b919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b919050565b60016020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020160009054906101000a900460ff16905083565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a955760006000fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055505b5b50565b600260205280600052604060002060009150905080600001908060010160009054906101000a900460ff16908060010160019054906101000a900460ff16908060010160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1690505b919050565b600160016000836000191660001916815260200190815260200160002060000160006101000a81548160ff0219169083151502179055504260016000836000191660001916815260200190815260200160002060010181905550600060016000836000191660001916815260200190815260200160002060020160006101000a81548160ff0219169083151502179055505b50565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610caa5760006000fd5b60016000826000191660001916815260200190815260200160002060000160009054906101000a900460ff1615610d1357600060016000836000191660001916815260200190815260200160002060020160006101000a81548160ff0219169083151502179055505b5b5b50565b600060016000836000191660001916815260200190815260200160002060020160009054906101000a900460ff1690505b919050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610dd15760006000fd5b60016000826000191660001916815260200190815260200160002060000160009054906101000a900460ff1615610e3a57600160016000836000191660001916815260200190815260200160002060020160006101000a81548160ff0219169083151502179055505b5b5b50565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610eab57805160ff1916838001178555610ed9565b82800160010185558215610ed9579182015b82811115610ed8578251825591602001919060010190610ebd565b5b509050610ee69190610eea565b5090565b610f0c91905b80821115610f08576000816000905550600101610ef0565b5090565b905600a165627a7a723058206828bf6bff945aac605d5fbff7d02b27eb55187cfce94de378c783efefa575dd0029', + gas: '4700000' + }, function (e, contract){ + console.log(e, contract); + if (typeof contract.address !== 'undefined') { + console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash); + } + }) diff --git a/examples/5nodesRTGS/deploy-regulatorTransactionList-0-4-21.js b/examples/5nodesRTGS/deploy-regulatorTransactionList-0-4-21.js new file mode 100644 index 00000000..798eb522 --- /dev/null +++ b/examples/5nodesRTGS/deploy-regulatorTransactionList-0-4-21.js @@ -0,0 +1,12 @@ +var regulatortransactionlistContract = web3.eth.contract([{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionExistance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_contract","type":"address"},{"name":"_sender","type":"address"}],"name":"addBank","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"blockBank","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankExistance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankSender","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"transactions","outputs":[{"name":"exists","type":"bool"},{"name":"timestamp","type":"uint256"},{"name":"blocked","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"authorizeBank","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"banks","outputs":[{"name":"name","type":"string"},{"name":"authorized","type":"bool"},{"name":"exists","type":"bool"},{"name":"authorizedSender","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_contract","type":"address"}],"name":"getBankState","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"addTransaction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"unblockTransaction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"getTransactionState","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"regulator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_transactionID","type":"bytes32"}],"name":"blockTransaction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getRegulator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]); +var regulatortransactionlist = regulatortransactionlistContract.new( + { + from: web3.eth.accounts[0], + data: '0x6060604052341561000f57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fcc8061005e6000396000f3006060604052600436106100e6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054380f9146100eb5780631eaa25561461012a57806321574ff8146101c5578063288bdecf146101fe5780632fbff5201461024f578063506542601461028a578063642f2eaf146103035780636f74a2c01461035457806380c3b8c21461038d5780638c41eae61461048857806394bbaa80146104d9578063b809e2f914610500578063c71cca1614610527578063dd8fee1414610566578063e5f9f94d146105bb578063f7e317f4146105e2575b600080fd5b34156100f657600080fd5b610110600480803560001916906020019091905050610637565b604051808215151515815260200191505060405180910390f35b341561013557600080fd5b6101c3600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061066c565b005b34156101d057600080fd5b6101fc600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061085a565b005b341561020957600080fd5b610235600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610913565b604051808215151515815260200191505060405180910390f35b341561025a57600080fd5b61027460048080356000191690602001909190505061096c565b6040518082815260200191505060405180910390f35b341561029557600080fd5b6102c1600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610994565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561030e57600080fd5b610328600480803560001916906020019091905050610a00565b604051808415151515815260200183815260200182151515158152602001935050505060405180910390f35b341561035f57600080fd5b61038b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a44565b005b341561039857600080fd5b6103c4600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610afd565b604051808060200185151515158152602001841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825286818151815260200191508051906020019080838360005b8381101561044a57808201518184015260208101905061042f565b50505050905090810190601f1680156104775780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b341561049357600080fd5b6104bf600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610bff565b604051808215151515815260200191505060405180910390f35b34156104e457600080fd5b6104fe600480803560001916906020019091905050610c58565b005b341561050b57600080fd5b610525600480803560001916906020019091905050610ceb565b005b341561053257600080fd5b61054c600480803560001916906020019091905050610db2565b604051808215151515815260200191505060405180910390f35b341561057157600080fd5b610579610de7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105c657600080fd5b6105e0600480803560001916906020019091905050610e0c565b005b34156105ed57600080fd5b6105f5610ed2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600060016000836000191660001916815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106c757600080fd5b82600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001908051906020019061071d929190610efb565b506001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160016101000a81548160ff0219169083151502179055506001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff02191690831515021790555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108b557600080fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff02191690831515021790555050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160019054906101000a900460ff169050919050565b6000600160008360001916600019168152602001908152602001600020600101549050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60016020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020160009054906101000a900460ff16905083565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a9f57600080fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff02191690831515021790555050565b6002602052806000526040600020600091509050806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ba95780601f10610b7e57610100808354040283529160200191610ba9565b820191906000526020600020905b815481529060010190602001808311610b8c57829003601f168201915b5050505050908060010160009054906101000a900460ff16908060010160019054906101000a900460ff16908060010160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff169050919050565b6001806000836000191660001916815260200190815260200160002060000160006101000a81548160ff0219169083151502179055504260016000836000191660001916815260200190815260200160002060010181905550600060016000836000191660001916815260200190815260200160002060020160006101000a81548160ff02191690831515021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d4657600080fd5b60016000826000191660001916815260200190815260200160002060000160009054906101000a900460ff1615610daf57600060016000836000191660001916815260200190815260200160002060020160006101000a81548160ff0219169083151502179055505b50565b600060016000836000191660001916815260200190815260200160002060020160009054906101000a900460ff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e6757600080fd5b60016000826000191660001916815260200190815260200160002060000160009054906101000a900460ff1615610ecf576001806000836000191660001916815260200190815260200160002060020160006101000a81548160ff0219169083151502179055505b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610f3c57805160ff1916838001178555610f6a565b82800160010185558215610f6a579182015b82811115610f69578251825591602001919060010190610f4e565b5b509050610f779190610f7b565b5090565b610f9d91905b80821115610f99576000816000905550600101610f81565b5090565b905600a165627a7a72305820e0813f84c4801f3855422fca230c97b75c73adfcd13199358b24319581ecc5410029', + gas: '4700000' + }, function (e, contract){ + console.log(e, contract); + if (typeof contract.address !== 'undefined') { + console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash); + } + }) diff --git a/examples/5nodesRTGS/genesis.json b/examples/5nodesRTGS/genesis.json new file mode 100644 index 00000000..3f3b3f2a --- /dev/null +++ b/examples/5nodesRTGS/genesis.json @@ -0,0 +1,18 @@ +{ + "alloc": {}, + "coinbase": "0x0000000000000000000000000000000000000000", + "config": { + "homesteadBlock": 0, + "chainId": 1, + "eip155Block": null, + "eip158Block": null, + "isQuorum": true + }, + "difficulty": "0x0", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0xE0000000", + "mixhash": "0x00000000000000000000000000000000000000647572616c65787365646c6578", + "nonce": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" +} diff --git a/examples/7nodes/keys/key1 b/examples/5nodesRTGS/keys/key1 similarity index 100% rename from examples/7nodes/keys/key1 rename to examples/5nodesRTGS/keys/key1 diff --git a/examples/7nodes/keys/key2 b/examples/5nodesRTGS/keys/key2 similarity index 100% rename from examples/7nodes/keys/key2 rename to examples/5nodesRTGS/keys/key2 diff --git a/examples/7nodes/keys/key3 b/examples/5nodesRTGS/keys/key3 similarity index 100% rename from examples/7nodes/keys/key3 rename to examples/5nodesRTGS/keys/key3 diff --git a/examples/7nodes/keys/key4 b/examples/5nodesRTGS/keys/key4 similarity index 100% rename from examples/7nodes/keys/key4 rename to examples/5nodesRTGS/keys/key4 diff --git a/examples/7nodes/keys/key5 b/examples/5nodesRTGS/keys/key5 similarity index 100% rename from examples/7nodes/keys/key5 rename to examples/5nodesRTGS/keys/key5 diff --git a/examples/7nodes/keys/tm1.key b/examples/5nodesRTGS/keys/tm1.key similarity index 100% rename from examples/7nodes/keys/tm1.key rename to examples/5nodesRTGS/keys/tm1.key diff --git a/examples/7nodes/keys/tm1.pub b/examples/5nodesRTGS/keys/tm1.pub similarity index 100% rename from examples/7nodes/keys/tm1.pub rename to examples/5nodesRTGS/keys/tm1.pub diff --git a/examples/7nodes/keys/tm1a.key b/examples/5nodesRTGS/keys/tm1a.key similarity index 100% rename from examples/7nodes/keys/tm1a.key rename to examples/5nodesRTGS/keys/tm1a.key diff --git a/examples/7nodes/keys/tm1a.pub b/examples/5nodesRTGS/keys/tm1a.pub similarity index 100% rename from examples/7nodes/keys/tm1a.pub rename to examples/5nodesRTGS/keys/tm1a.pub diff --git a/examples/7nodes/keys/tm2.key b/examples/5nodesRTGS/keys/tm2.key similarity index 100% rename from examples/7nodes/keys/tm2.key rename to examples/5nodesRTGS/keys/tm2.key diff --git a/examples/7nodes/keys/tm2.pub b/examples/5nodesRTGS/keys/tm2.pub similarity index 100% rename from examples/7nodes/keys/tm2.pub rename to examples/5nodesRTGS/keys/tm2.pub diff --git a/examples/7nodes/keys/tm2a.key b/examples/5nodesRTGS/keys/tm2a.key similarity index 100% rename from examples/7nodes/keys/tm2a.key rename to examples/5nodesRTGS/keys/tm2a.key diff --git a/examples/7nodes/keys/tm2a.pub b/examples/5nodesRTGS/keys/tm2a.pub similarity index 100% rename from examples/7nodes/keys/tm2a.pub rename to examples/5nodesRTGS/keys/tm2a.pub diff --git a/examples/7nodes/keys/tm4.key b/examples/5nodesRTGS/keys/tm3.key similarity index 100% rename from examples/7nodes/keys/tm4.key rename to examples/5nodesRTGS/keys/tm3.key diff --git a/examples/7nodes/keys/tm4.pub b/examples/5nodesRTGS/keys/tm3.pub similarity index 100% rename from examples/7nodes/keys/tm4.pub rename to examples/5nodesRTGS/keys/tm3.pub diff --git a/examples/7nodes/keys/tm4a.key b/examples/5nodesRTGS/keys/tm3a.key similarity index 100% rename from examples/7nodes/keys/tm4a.key rename to examples/5nodesRTGS/keys/tm3a.key diff --git a/examples/7nodes/keys/tm4a.pub b/examples/5nodesRTGS/keys/tm3a.pub similarity index 100% rename from examples/7nodes/keys/tm4a.pub rename to examples/5nodesRTGS/keys/tm3a.pub diff --git a/examples/7nodes/keys/tm5.key b/examples/5nodesRTGS/keys/tm4.key similarity index 100% rename from examples/7nodes/keys/tm5.key rename to examples/5nodesRTGS/keys/tm4.key diff --git a/examples/7nodes/keys/tm5.pub b/examples/5nodesRTGS/keys/tm4.pub similarity index 100% rename from examples/7nodes/keys/tm5.pub rename to examples/5nodesRTGS/keys/tm4.pub diff --git a/examples/7nodes/keys/tm5a.key b/examples/5nodesRTGS/keys/tm4a.key similarity index 100% rename from examples/7nodes/keys/tm5a.key rename to examples/5nodesRTGS/keys/tm4a.key diff --git a/examples/7nodes/keys/tm5a.pub b/examples/5nodesRTGS/keys/tm4a.pub similarity index 100% rename from examples/7nodes/keys/tm5a.pub rename to examples/5nodesRTGS/keys/tm4a.pub diff --git a/examples/7nodes/keys/tm6.key b/examples/5nodesRTGS/keys/tm5.key similarity index 100% rename from examples/7nodes/keys/tm6.key rename to examples/5nodesRTGS/keys/tm5.key diff --git a/examples/7nodes/keys/tm6.pub b/examples/5nodesRTGS/keys/tm5.pub similarity index 100% rename from examples/7nodes/keys/tm6.pub rename to examples/5nodesRTGS/keys/tm5.pub diff --git a/examples/7nodes/keys/tm6a.key b/examples/5nodesRTGS/keys/tm5a.key similarity index 100% rename from examples/7nodes/keys/tm6a.key rename to examples/5nodesRTGS/keys/tm5a.key diff --git a/examples/7nodes/keys/tm6a.pub b/examples/5nodesRTGS/keys/tm5a.pub similarity index 100% rename from examples/7nodes/keys/tm6a.pub rename to examples/5nodesRTGS/keys/tm5a.pub diff --git a/examples/7nodes/passwords.txt b/examples/5nodesRTGS/passwords.txt similarity index 100% rename from examples/7nodes/passwords.txt rename to examples/5nodesRTGS/passwords.txt diff --git a/examples/7nodes/raft-init.sh b/examples/5nodesRTGS/raft-init.sh similarity index 69% rename from examples/7nodes/raft-init.sh rename to examples/5nodesRTGS/raft-init.sh index be9c1ba6..35c04c50 100755 --- a/examples/7nodes/raft-init.sh +++ b/examples/5nodesRTGS/raft-init.sh @@ -17,38 +17,26 @@ echo "[*] Configuring node 2" mkdir -p qdata/dd2/{keystore,geth} cp raft/static-nodes.json qdata/dd2 cp keys/key2 qdata/dd2/keystore -cp keys/key3 qdata/dd2/keystore cp raft/nodekey2 qdata/dd2/geth/nodekey geth --datadir qdata/dd2 init genesis.json echo "[*] Configuring node 3" mkdir -p qdata/dd3/{keystore,geth} cp raft/static-nodes.json qdata/dd3 +cp keys/key3 qdata/dd3/keystore cp raft/nodekey3 qdata/dd3/geth/nodekey geth --datadir qdata/dd3 init genesis.json -echo "[*] Configuring node 4 as voter" +echo "[*] Configuring node 4" mkdir -p qdata/dd4/{keystore,geth} cp raft/static-nodes.json qdata/dd4 cp keys/key4 qdata/dd4/keystore cp raft/nodekey4 qdata/dd4/geth/nodekey geth --datadir qdata/dd4 init genesis.json -echo "[*] Configuring node 5 as voter" +echo "[*] Configuring node 5" mkdir -p qdata/dd5/{keystore,geth} cp raft/static-nodes.json qdata/dd5 cp keys/key5 qdata/dd5/keystore cp raft/nodekey5 qdata/dd5/geth/nodekey geth --datadir qdata/dd5 init genesis.json - -echo "[*] Configuring node 6" -mkdir -p qdata/dd6/{keystore,geth} -cp raft/static-nodes.json qdata/dd6 -cp raft/nodekey6 qdata/dd6/geth/nodekey -geth --datadir qdata/dd6 init genesis.json - -echo "[*] Configuring node 7" -mkdir -p qdata/dd7/{keystore,geth} -cp raft/static-nodes.json qdata/dd7 -cp raft/nodekey7 qdata/dd7/geth/nodekey -geth --datadir qdata/dd7 init genesis.json diff --git a/examples/5nodesRTGS/raft-start.sh b/examples/5nodesRTGS/raft-start.sh new file mode 100755 index 00000000..fb79157a --- /dev/null +++ b/examples/5nodesRTGS/raft-start.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -u +set -e + +GLOBAL_ARGS="--unlock 0 --password passwords.txt --raft --rpc --rpcaddr 0.0.0.0 --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,quorum --emitcheckpoints" + +echo "[*] Starting Constellation nodes" +nohup constellation-node tm1.conf 2>> qdata/logs/constellation1.log & +sleep 1 +nohup constellation-node tm2.conf 2>> qdata/logs/constellation2.log & +nohup constellation-node tm3.conf 2>> qdata/logs/constellation3.log & +nohup constellation-node tm4.conf 2>> qdata/logs/constellation4.log & +nohup constellation-node tm5.conf 2>> qdata/logs/constellation5.log & + +sleep 1 + +echo "[*] Starting node 1 - Bank 1" +PRIVATE_CONFIG=tm1.conf nohup geth --datadir qdata/dd1 $GLOBAL_ARGS --raftport 50401 --rpcport 22000 --port 21000 2>>qdata/logs/1.log & + +echo "[*] Starting node 2 - Bank 2" +PRIVATE_CONFIG=tm2.conf nohup geth --datadir qdata/dd2 $GLOBAL_ARGS --raftport 50402 --rpcport 22001 --port 21001 2>>qdata/logs/2.log & + +echo "[*] Starting node 3 - Bank 3" +PRIVATE_CONFIG=tm3.conf nohup geth --datadir qdata/dd3 $GLOBAL_ARGS --raftport 50403 --rpcport 22002 --port 21002 2>>qdata/logs/3.log & + +echo "[*] Starting node 4 - Regulator" +PRIVATE_CONFIG=tm4.conf nohup geth --rpccorsdomain "*" --datadir qdata/dd4 $GLOBAL_ARGS --raftport 50404 --rpcport 22003 --port 21003 2>>qdata/logs/4.log & + +echo "[*] Starting node 5 - Observer" +PRIVATE_CONFIG=tm5.conf nohup geth --datadir qdata/dd5 $GLOBAL_ARGS --raftport 50405 --rpcport 22004 --port 21004 2>>qdata/logs/5.log & + +echo "[*] Waiting for nodes to start" +sleep 10 + +echo "All nodes configured. See 'qdata/logs' for logs, and run e.g. 'geth attach qdata/dd4/geth.ipc' to attach to the RTGS Regulator Geth node" diff --git a/examples/7nodes/raft/nodekey1 b/examples/5nodesRTGS/raft/nodekey1 similarity index 100% rename from examples/7nodes/raft/nodekey1 rename to examples/5nodesRTGS/raft/nodekey1 diff --git a/examples/7nodes/raft/nodekey2 b/examples/5nodesRTGS/raft/nodekey2 similarity index 100% rename from examples/7nodes/raft/nodekey2 rename to examples/5nodesRTGS/raft/nodekey2 diff --git a/examples/7nodes/raft/nodekey3 b/examples/5nodesRTGS/raft/nodekey3 similarity index 100% rename from examples/7nodes/raft/nodekey3 rename to examples/5nodesRTGS/raft/nodekey3 diff --git a/examples/7nodes/raft/nodekey4 b/examples/5nodesRTGS/raft/nodekey4 similarity index 100% rename from examples/7nodes/raft/nodekey4 rename to examples/5nodesRTGS/raft/nodekey4 diff --git a/examples/7nodes/raft/nodekey5 b/examples/5nodesRTGS/raft/nodekey5 similarity index 100% rename from examples/7nodes/raft/nodekey5 rename to examples/5nodesRTGS/raft/nodekey5 diff --git a/examples/7nodes/raft/nodekey6 b/examples/5nodesRTGS/raft/nodekey6 similarity index 100% rename from examples/7nodes/raft/nodekey6 rename to examples/5nodesRTGS/raft/nodekey6 diff --git a/examples/7nodes/raft/nodekey7 b/examples/5nodesRTGS/raft/nodekey7 similarity index 100% rename from examples/7nodes/raft/nodekey7 rename to examples/5nodesRTGS/raft/nodekey7 diff --git a/examples/7nodes/raft/static-nodes.json b/examples/5nodesRTGS/raft/static-nodes.json similarity index 54% rename from examples/7nodes/raft/static-nodes.json rename to examples/5nodesRTGS/raft/static-nodes.json index 99c6486d..b3f9d520 100644 --- a/examples/7nodes/raft/static-nodes.json +++ b/examples/5nodesRTGS/raft/static-nodes.json @@ -1,9 +1,7 @@ [ - "enode://ac6b1096ca56b9f6d004b779ae3728bf83f8e22453404cc3cef16a3d9b96608bc67c4b30db88e0a5a6c6390213f7acbe1153ff6d23ce57380104288ae19373ef@127.0.0.1:21000?discport=0", - "enode://0ba6b9f606a43a95edc6247cdb1c1e105145817be7bcafd6b2c0ba15d58145f0dc1a194f70ba73cd6f4cdd6864edc7687f311254c7555cc32e4d45aeb1b80416@127.0.0.1:21001?discport=0", - "enode://579f786d4e2830bbcc02815a27e8a9bacccc9605df4dc6f20bcc1a6eb391e7225fff7cb83e5b4ecd1f3a94d8b733803f2f66b7e871961e7b029e22c155c3a778@127.0.0.1:21002?discport=0", - "enode://3d9ca5956b38557aba991e31cf510d4df641dce9cc26bfeb7de082f0c07abb6ede3a58410c8f249dabeecee4ad3979929ac4c7c496ad20b8cfdd061b7401b4f5@127.0.0.1:21003?discport=0", - "enode://3701f007bfa4cb26512d7df18e6bbd202e8484a6e11d387af6e482b525fa25542d46ff9c99db87bd419b980c24a086117a397f6d8f88e74351b41693880ea0cb@127.0.0.1:21004?discport=0", - "enode://eacaa74c4b0e7a9e12d2fe5fee6595eda841d6d992c35dbbcc50fcee4aa86dfbbdeff7dc7e72c2305d5a62257f82737a8cffc80474c15c611c037f52db1a3a7b@127.0.0.1:21005?discport=0", - "enode://239c1f044a2b03b6c4713109af036b775c5418fe4ca63b04b1ce00124af00ddab7cc088fc46020cdc783b6207efe624551be4c06a994993d8d70f684688fb7cf@127.0.0.1:21006?discport=0" + "enode://ac6b1096ca56b9f6d004b779ae3728bf83f8e22453404cc3cef16a3d9b96608bc67c4b30db88e0a5a6c6390213f7acbe1153ff6d23ce57380104288ae19373ef@127.0.0.1:21000?discport=0&raftport=50401", + "enode://0ba6b9f606a43a95edc6247cdb1c1e105145817be7bcafd6b2c0ba15d58145f0dc1a194f70ba73cd6f4cdd6864edc7687f311254c7555cc32e4d45aeb1b80416@127.0.0.1:21001?discport=0&raftport=50402", + "enode://579f786d4e2830bbcc02815a27e8a9bacccc9605df4dc6f20bcc1a6eb391e7225fff7cb83e5b4ecd1f3a94d8b733803f2f66b7e871961e7b029e22c155c3a778@127.0.0.1:21002?discport=0&raftport=50403", + "enode://3d9ca5956b38557aba991e31cf510d4df641dce9cc26bfeb7de082f0c07abb6ede3a58410c8f249dabeecee4ad3979929ac4c7c496ad20b8cfdd061b7401b4f5@127.0.0.1:21003?discport=0&raftport=50404", + "enode://3701f007bfa4cb26512d7df18e6bbd202e8484a6e11d387af6e482b525fa25542d46ff9c99db87bd419b980c24a086117a397f6d8f88e74351b41693880ea0cb@127.0.0.1:21004?discport=0&raftport=50405" ] diff --git a/examples/7nodes/stop.sh b/examples/5nodesRTGS/stop.sh similarity index 100% rename from examples/7nodes/stop.sh rename to examples/5nodesRTGS/stop.sh diff --git a/examples/5nodesRTGS/tm1.conf b/examples/5nodesRTGS/tm1.conf new file mode 100644 index 00000000..bc5ff828 --- /dev/null +++ b/examples/5nodesRTGS/tm1.conf @@ -0,0 +1,48 @@ +# Externally accessible URL for this node (this is what's advertised) +url = "http://127.0.0.1:9000/" + +# Port to listen on for the public API +port = 9000 + +# Socket file to use for the private API / IPC +socket = "qdata/tm1.ipc" + +# Initial (not necessarily complete) list of other nodes in the network. +# Constellation will automatically connect to other nodes not in this list +# that are advertised by the nodes below, thus these can be considered the +# "boot nodes." +othernodes = [] + +# The set of public keys this node will host +publickeys = ["keys/tm1.pub"] + +# The corresponding set of private keys +privatekeys = ["keys/tm1.key"] + +# Optional comma-separated list of paths to public keys to add as recipients +# for every transaction sent through this node, e.g. for backup purposes. +# These keys must be advertised by some Constellation node on the network, i.e. +# be in a node's publickeys/privatekeys lists. +# alwayssendto = [] + +# Optional file containing the passwords to unlock the given privatekeys +# (one password per line -- add an empty line if one key isn't locked.) +# passwords = "passwords" + +# Where to store payloads and related information +storage = "dir:qdata/constellation1" + +# Optional IP whitelist for the public API. If unspecified/empty, +# connections from all sources will be allowed (but the private API remains +# accessible only via the IPC socket above.) To allow connections from +# localhost when a whitelist is defined, e.g. when running multiple +# Constellation nodes on the same machine, add "127.0.0.1" and "::1" to +# this list. +# ipwhitelist = ["10.0.0.1", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"] + +# Verbosity level (each level includes all prior levels) +# - 0: Only fatal errors +# - 1: Warnings +# - 2: Informational messages +# - 3: Debug messages +verbosity = 2 diff --git a/examples/5nodesRTGS/tm2.conf b/examples/5nodesRTGS/tm2.conf new file mode 100644 index 00000000..570cdd59 --- /dev/null +++ b/examples/5nodesRTGS/tm2.conf @@ -0,0 +1,48 @@ +# Externally accessible URL for this node (this is what's advertised) +url = "http://127.0.0.1:9001/" + +# Port to listen on for the public API +port = 9001 + +# Socket file to use for the private API / IPC +socket = "qdata/tm2.ipc" + +# Initial (not necessarily complete) list of other nodes in the network. +# Constellation will automatically connect to other nodes not in this list +# that are advertised by the nodes below, thus these can be considered the +# "boot nodes." +othernodes = ["http://127.0.0.1:9000/"] + +# The set of public keys this node will host +publickeys = ["keys/tm2.pub"] + +# The corresponding set of private keys +privatekeys = ["keys/tm2.key"] + +# Optional comma-separated list of paths to public keys to add as recipients +# for every transaction sent through this node, e.g. for backup purposes. +# These keys must be advertised by some Constellation node on the network, i.e. +# be in a node's publickeys/privatekeys lists. +# alwayssendto = [] + +# Optional file containing the passwords to unlock the given privatekeys +# (one password per line -- add an empty line if one key isn't locked.) +# passwords = "passwords" + +# Where to store payloads and related information +storage = "dir:qdata/constellation2" + +# Optional IP whitelist for the public API. If unspecified/empty, +# connections from all sources will be allowed (but the private API remains +# accessible only via the IPC socket above.) To allow connections from +# localhost when a whitelist is defined, e.g. when running multiple +# Constellation nodes on the same machine, add "127.0.0.1" and "::1" to +# this list. +# ipwhitelist = ["10.0.0.1", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"] + +# Verbosity level (each level includes all prior levels) +# - 0: Only fatal errors +# - 1: Warnings +# - 2: Informational messages +# - 3: Debug messages +verbosity = 2 diff --git a/examples/5nodesRTGS/tm3.conf b/examples/5nodesRTGS/tm3.conf new file mode 100644 index 00000000..ce8bd8e3 --- /dev/null +++ b/examples/5nodesRTGS/tm3.conf @@ -0,0 +1,48 @@ +# Externally accessible URL for this node (this is what's advertised) +url = "http://127.0.0.1:9002/" + +# Port to listen on for the public API +port = 9002 + +# Socket file to use for the private API / IPC +socket = "qdata/tm3.ipc" + +# Initial (not necessarily complete) list of other nodes in the network. +# Constellation will automatically connect to other nodes not in this list +# that are advertised by the nodes below, thus these can be considered the +# "boot nodes." +othernodes = ["http://127.0.0.1:9000/"] + +# The set of public keys this node will host +publickeys = ["keys/tm3.pub"] + +# The corresponding set of private keys +privatekeys = ["keys/tm3.key"] + +# Optional comma-separated list of paths to public keys to add as recipients +# for every transaction sent through this node, e.g. for backup purposes. +# These keys must be advertised by some Constellation node on the network, i.e. +# be in a node's publickeys/privatekeys lists. +# alwayssendto = [] + +# Optional file containing the passwords to unlock the given privatekeys +# (one password per line -- add an empty line if one key isn't locked.) +# passwords = "passwords" + +# Where to store payloads and related information +storage = "dir:qdata/constellation3" + +# Optional IP whitelist for the public API. If unspecified/empty, +# connections from all sources will be allowed (but the private API remains +# accessible only via the IPC socket above.) To allow connections from +# localhost when a whitelist is defined, e.g. when running multiple +# Constellation nodes on the same machine, add "127.0.0.1" and "::1" to +# this list. +# ipwhitelist = ["10.0.0.1", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"] + +# Verbosity level (each level includes all prior levels) +# - 0: Only fatal errors +# - 1: Warnings +# - 2: Informational messages +# - 3: Debug messages +verbosity = 2 diff --git a/examples/5nodesRTGS/tm4.conf b/examples/5nodesRTGS/tm4.conf new file mode 100644 index 00000000..dae9be3d --- /dev/null +++ b/examples/5nodesRTGS/tm4.conf @@ -0,0 +1,48 @@ +# Externally accessible URL for this node (this is what's advertised) +url = "http://127.0.0.1:9003/" + +# Port to listen on for the public API +port = 9003 + +# Socket file to use for the private API / IPC +socket = "qdata/tm4.ipc" + +# Initial (not necessarily complete) list of other nodes in the network. +# Constellation will automatically connect to other nodes not in this list +# that are advertised by the nodes below, thus these can be considered the +# "boot nodes." +othernodes = ["http://127.0.0.1:9000/"] + +# The set of public keys this node will host +publickeys = ["keys/tm4.pub"] + +# The corresponding set of private keys +privatekeys = ["keys/tm4.key"] + +# Optional comma-separated list of paths to public keys to add as recipients +# for every transaction sent through this node, e.g. for backup purposes. +# These keys must be advertised by some Constellation node on the network, i.e. +# be in a node's publickeys/privatekeys lists. +# alwayssendto = [] + +# Optional file containing the passwords to unlock the given privatekeys +# (one password per line -- add an empty line if one key isn't locked.) +# passwords = "passwords" + +# Where to store payloads and related information +storage = "dir:qdata/constellation4" + +# Optional IP whitelist for the public API. If unspecified/empty, +# connections from all sources will be allowed (but the private API remains +# accessible only via the IPC socket above.) To allow connections from +# localhost when a whitelist is defined, e.g. when running multiple +# Constellation nodes on the same machine, add "127.0.0.1" and "::1" to +# this list. +# ipwhitelist = ["10.0.0.1", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"] + +# Verbosity level (each level includes all prior levels) +# - 0: Only fatal errors +# - 1: Warnings +# - 2: Informational messages +# - 3: Debug messages +verbosity = 2 diff --git a/examples/5nodesRTGS/tm5.conf b/examples/5nodesRTGS/tm5.conf new file mode 100644 index 00000000..56c8a44a --- /dev/null +++ b/examples/5nodesRTGS/tm5.conf @@ -0,0 +1,48 @@ +# Externally accessible URL for this node (this is what's advertised) +url = "http://127.0.0.1:9004/" + +# Port to listen on for the public API +port = 9004 + +# Socket file to use for the private API / IPC +socket = "qdata/tm5.ipc" + +# Initial (not necessarily complete) list of other nodes in the network. +# Constellation will automatically connect to other nodes not in this list +# that are advertised by the nodes below, thus these can be considered the +# "boot nodes." +othernodes = ["http://127.0.0.1:9000/"] + +# The set of public keys this node will host +publickeys = ["keys/tm5.pub"] + +# The corresponding set of private keys +privatekeys = ["keys/tm5.key"] + +# Optional comma-separated list of paths to public keys to add as recipients +# for every transaction sent through this node, e.g. for backup purposes. +# These keys must be advertised by some Constellation node on the network, i.e. +# be in a node's publickeys/privatekeys lists. +# alwayssendto = [] + +# Optional file containing the passwords to unlock the given privatekeys +# (one password per line -- add an empty line if one key isn't locked.) +# passwords = "passwords" + +# Where to store payloads and related information +storage = "dir:qdata/constellation5" + +# Optional IP whitelist for the public API. If unspecified/empty, +# connections from all sources will be allowed (but the private API remains +# accessible only via the IPC socket above.) To allow connections from +# localhost when a whitelist is defined, e.g. when running multiple +# Constellation nodes on the same machine, add "127.0.0.1" and "::1" to +# this list. +# ipwhitelist = ["10.0.0.1", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"] + +# Verbosity level (each level includes all prior levels) +# - 0: Only fatal errors +# - 1: Warnings +# - 2: Informational messages +# - 3: Debug messages +verbosity = 2 diff --git a/examples/7nodes/README.md b/examples/7nodes/README.md deleted file mode 100644 index 5715dfcc..00000000 --- a/examples/7nodes/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# 7 nodes - -This example configures 7 nodes, each with their own PrivateTransactionManager. Usage: - - - `init.sh`: Initialize accounts and keystores - - `start.sh`: Launch `constellation` and `geth` nodes, then send a private transaction - - `stop.sh`: Stop all `constellation` and `geth` nodes - -There are corresponding commands for running in Raft mode (`stop.sh` stays the same). - - - `raft-init.sh` - - `raft-start.sh` - -All logs and temporary data will be written to the `qdata` folder. - -## Testing Privacy -You can run the 7node example to test the privacy features of Quorum. As described in the Quick Start section of the [README](https://github.com/jpmorganchase/quorum), the final step of the 7node `start.sh` script was the sending of a private transaction to generate a (private) smart contract (SimpleStorage) sent from node 1 "for" node 7 (denoted by the public key passed via privateFor: ["ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc="] in the sendTransaction call). We'll begin by demonstrating only nodes 1 and 7 are able to view the initial state of the contract. Next we have node 1 update the state of this contract and again verify only nodes 1 and 7 are able to see the updated state of the contract after the block containing the update transaction is validated by the network. - -For this test it is recommended to use separate terminal windows running geth JavaScript console attached to node 1, node 7, and any node 2-6 (in our example we'll choose node 4). - -In each terminal, ensure you are in the 7nodes dir before running the below. - -* If you aren't already running the 7nodes example, in terminal 1 run ``$ ./init.sh `` followed by ``$ ./start.sh `` -* In terminal 1 run ``$ geth attach ipc:qdata/dd1/geth.ipc`` -* In terminal 2 run ``$ geth attach ipc:qdata/dd4/geth.ipc`` -* In terminal 3 run ``$ geth attach ipc:qdata/dd7/geth.ipc`` - -For each of the 3 nodes we'll use the built-in JavaScript by setting the variable ```address``` assigned to the simpleStorage contract address created by the node 1. The address can be found in the node 1's log file 7nodes/qdata/logs/1.log, or alternatively by reading the `contractAddress` param after calling `eth.getTransactionReceipt(txHash)` ([Ethereum API documentation](https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethgettransactionreceipt)), passing in the transaction hash that was logged in the console that you ran the 7nodes example in. Replace the address below with the address value found in the 1.log file: -``` -> var address = "0x1932c48b2bf8102ba33b4a6b545c32236e342f34"; -``` -Next we'll use ```eth.contract``` to define a contract class with the simpleStorage ABI definition as follows: -``` -> var abi = [{"constant":true,"inputs":[],"name":"storedData","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"retVal","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[{"name":"initVal","type":"uint256"}],"type":"constructor"}]; -> var private = eth.contract(abi).at(address) -``` -The function calls are now available on the contract instance and you can call those methods on the contract. Let's start by examining the initial value of the contract to make sure that only nodes 1 and 7 can see the initialized value. -* In terminal window 1 (node 1) -``` -> private.get() -42 -``` -* In terminal window 2 (node 4) -``` -> private.get() -0 -``` -* In terminal window 3 (node 7) -``` -> private.get() -42 -``` - -So we now see nodes 1 and 7 are able to read the state of the private contract and it's initial value is 42. Node 4 is unable to read the state. Next we'll have node 1 set the state to the value `4` and verify only nodes 1 and 7 are able to view the new state. - -In terminal window 1 (node 1) -``` -> private.set(4,{from:eth.coinbase,privateFor:["ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc="]}); -"0xacf293b491cccd1b99d0cfb08464a68791cc7b5bc14a9b6e4ff44b46889a8f70" -``` -You can check the log files in ~7nodes/qdata/logs directory to see each node validating the block with this new private transaction. Once the block containing the transaction has been validated we can once again check the state from each node 1, 4, and 7. -* In terminal window 1 (node 1) -``` -> private.get() -4 -``` -* In terminal window 2 (node 4) -``` -> private.get() -0 -``` -* In terminal window 3 (node 7) -``` -> private.get() -4 -``` -And there you have it. All 7 nodes are validating the same blockchain of transactions, the private transactions carrying nothing other than a 512 bit hash, and only parties to private transactions are able to view and update the state of private contracts. diff --git a/examples/7nodes/bench-private-async.sh b/examples/7nodes/bench-private-async.sh deleted file mode 100755 index 8b92ebb9..00000000 --- a/examples/7nodes/bench-private-async.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -set -u -set -e -# c = number of concurrent connections (sending transactions over and over) -# d = duration, e.g. 30 (30 seconds), 5m, 1h -# t = threads Wrk should use, e.g. 2 -# -# Example: ./bench-private-async.sh 10 1m 2 -c=$1 -d=$2 -t=$3 -curl -d '' http://localhost:22000/ -wrk -s send-private-async.lua -c $c -d $d -t $t http://localhost:22000/ diff --git a/examples/7nodes/bench-private-sync.sh b/examples/7nodes/bench-private-sync.sh deleted file mode 100755 index 784e3046..00000000 --- a/examples/7nodes/bench-private-sync.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -set -u -set -e -# c = number of concurrent connections (sending transactions over and over) -# d = duration, e.g. 30 (30 seconds), 5m, 1h -# t = threads Wrk should use, e.g. 2 -# -# Example: ./bench-private-sync.sh 10 1m 2 -c=$1 -d=$2 -t=$3 -curl -d '' http://localhost:22000/ -wrk -s send-private-sync.lua -c $c -d $d -t $t http://localhost:22000/ diff --git a/examples/7nodes/bench-public-sync.sh b/examples/7nodes/bench-public-sync.sh deleted file mode 100755 index 06816d18..00000000 --- a/examples/7nodes/bench-public-sync.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -set -u -set -e -# c = number of concurrent connections (sending transactions over and over) -# d = duration, e.g. 30 (30 seconds), 5m, 1h -# t = threads Wrk should use, e.g. 2 -# -# Example: ./bench-public-sync.sh 10 1m 2 -c=$1 -d=$2 -t=$3 -curl -d '' http://localhost:22000/ -wrk -s send-public-sync.lua -c $c -d $d -t $t http://localhost:22000/ diff --git a/examples/7nodes/genesis.json b/examples/7nodes/genesis.json deleted file mode 100644 index b50c821d..00000000 --- a/examples/7nodes/genesis.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "alloc": { - "0x0000000000000000000000000000000000000020": { - "code": "606060405236156100c45760e060020a60003504631290948581146100c9578063284d163c146100f957806342169e4814610130578063488099a6146101395780634fe437d514610154578063559c390c1461015d57806368bb8bb61461025d57806372a571fc146102c857806386c1ff681461036957806398ba676d146103a0578063a7771ee31461040b578063adfaa72e14610433578063cf5289851461044e578063de8fa43114610457578063e814d1c71461046d578063f4ab9adf14610494575b610002565b610548600435600160a060020a03331660009081526003602052604090205460ff16156100c45760018190555b50565b610548600435600160a060020a03331660009081526005602052604090205460ff16156100c4576004546001141561055e57610002565b61045b60025481565b61054a60043560056020526000908152604090205460ff1681565b61045b60015481565b61045b60043560006000600060006000600050600186038154811015610002579080526002027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630192505b60018301548110156105d75760018301805484916000918490811015610002576000918252602080832090910154835282810193909352604091820181205485825292869052205410801561023257506001805490840180548591600091859081101561000257906000526020600020900160005054815260208101919091526040016000205410155b156102555760018301805482908110156100025760009182526020909120015491505b6001016101a8565b610548600435602435600160a060020a03331660009081526003602052604081205460ff16156100c4578054839010156105e45780548084038101808355908290829080158290116105df576002028160020283600052602060002091820191016105df919061066b565b610548600435600160a060020a03331660009081526005602052604090205460ff16156100c457600160a060020a0381166000908152604090205460ff1615156100f65760406000819020805460ff191660019081179091556004805490910190558051600160a060020a038316815290517f1a4ce6942f7aa91856332e618fc90159f13a340611a308f5d7327ba0707e56859181900360200190a16100f6565b610548600435600160a060020a03331660009081526003602052604090205460ff16156100c4576002546001141561071457610002565b61045b600435602435600060006000600050600185038154811015610002579080526002027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630181509050806001016000508381548110156100025750825250602090200154919050565b61054a600435600160a060020a03811660009081526003602052604090205460ff165b919050565b61054a60043560036020526000908152604090205460ff1681565b61045b60045481565b6000545b60408051918252519081900360200190f35b61054a600435600160a060020a03811660009081526005602052604090205460ff1661042e565b610548600435600160a060020a03331660009081526003602052604090205460ff16156100c457600160a060020a03811660009081526003602052604090205460ff1615156100f65760406000818120600160a060020a0384169182905260036020908152815460ff1916600190811790925560028054909201909155825191825291517f0ad2eca75347acd5160276fe4b5dad46987e4ff4af9e574195e3e9bc15d7e0ff929181900390910190a16100f6565b005b604080519115158252519081900360200190f35b600160a060020a03811660009081526005602052604090205460ff16156100f65760406000819020805460ff19169055600480546000190190558051600160a060020a038316815290517f8cee3054364d6799f1c8962580ad61273d9d38ca1ff26516bd1ad23c099a60229181900360200190a16100f6565b509392505050565b505050505b60008054600019850190811015610002578382526002027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563016020819052604082205490925014156106b8578060010160005080548060010182818154818355818115116106a5578183600052602060002091820191016106a5919061068d565b50506002015b808211156106a157600181018054600080835591825260208220610665918101905b808211156106a1576000815560010161068d565b5090565b5050506000928352506020909120018290555b600082815260208281526040918290208054600101905581514381529081018490528151600160a060020a033316927f3d03ba7f4b5227cdb385f2610906e5bcee147171603ec40005b30915ad20e258928290030190a2505050565b600160a060020a03811660009081526003602052604090205460ff16156100f65760406000819020805460ff19169055600280546000190190558051600160a060020a038316815290517f183393fc5cffbfc7d03d623966b85f76b9430f42d3aada2ac3f3deabc78899e89181900360200190a16100f656", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x02", - - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x04", - "0x29ecdbdf95c7f6ceec92d6150c697aa14abeb0f8595dd58d808842ea237d8494": "0x01", - "0x6aa118c6537572d8b515a9f9154be55a3377a8de7991cd23bf6e5ceb368688e3": "0x01", - "0x50793743212c6f01d326957d7069005b912f8215f10c7536be6b10782c6c44cd": "0x01", - "0x38f6c908c5cc7ca668cec2f476abe61b4dbb1df20f0ad8e07ef5dbf6a2f1ffd4": "0x01", - - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x02", - "0xaca3b76ed4968740c3180dd7fa37f4aa229a2c758a848f53920e9ccb4c4bb74e": "0x01", - "0xd188ba2dc293670542c1befaf7678b0859e5354a0727d1188b2afb6f47fe24d1": "0x01" - } - - }, - "0xed9d02e382b34818e88b88a309c7fe71e65f419d": { - "balance": "1000000000000000000000000000" - }, - "0xca843569e3427144cead5e4d5999a3d0ccf92b8e": { - "balance": "1000000000000000000000000000" - }, - "0x0fbdc686b912d7722dc86510934589e0aaf3b55a": { - "balance": "1000000000000000000000000000" - }, - "0x9186eb3d20cbd1f5f992a950d808c4495153abd5": { - "balance": "1000000000000000000000000000" - }, - "0x0638e1574728b6d862dd5d3a3e0942c3be47d996": { - "balance": "1000000000000000000000000000" - } - }, - "coinbase": "0x0000000000000000000000000000000000000000", - "config": { - "homesteadBlock": 0 - }, - "difficulty": "0x0", - "extraData": "0x", - "gasLimit": "0x2FEFD800", - "mixhash": "0x00000000000000000000000000000000000000647572616c65787365646c6578", - "nonce": "0x0", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": "0x00" -} diff --git a/examples/7nodes/init.sh b/examples/7nodes/init.sh deleted file mode 100755 index 30a2405d..00000000 --- a/examples/7nodes/init.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -set -u -set -e - -echo "[*] Cleaning up temporary data directories" -rm -rf qdata -mkdir -p qdata/logs - -echo "[*] Configuring node 1" -mkdir -p qdata/dd1/keystore -cp keys/key1 qdata/dd1/keystore -geth --datadir qdata/dd1 init genesis.json - -echo "[*] Configuring node 2 as block maker and voter" -mkdir -p qdata/dd2/keystore -cp keys/key2 qdata/dd2/keystore -cp keys/key3 qdata/dd2/keystore -geth --datadir qdata/dd2 init genesis.json - -echo "[*] Configuring node 3" -mkdir -p qdata/dd3/keystore -geth --datadir qdata/dd3 init genesis.json - -echo "[*] Configuring node 4 as voter" -mkdir -p qdata/dd4/keystore -cp keys/key4 qdata/dd4/keystore -geth --datadir qdata/dd4 init genesis.json - -echo "[*] Configuring node 5 as voter" -mkdir -p qdata/dd5/keystore -cp keys/key5 qdata/dd5/keystore -geth --datadir qdata/dd5 init genesis.json - -echo "[*] Configuring node 6" -mkdir -p qdata/dd6/keystore -geth --datadir qdata/dd6 init genesis.json - -echo "[*] Configuring node 7" -mkdir -p qdata/dd7/keystore -geth --datadir qdata/dd7 init genesis.json diff --git a/examples/7nodes/keys/tm3.key b/examples/7nodes/keys/tm3.key deleted file mode 100644 index f949eaf6..00000000 --- a/examples/7nodes/keys/tm3.key +++ /dev/null @@ -1 +0,0 @@ -{"data":{"bytes":"tMxUVR8bX7aq/TbpVHc2QV3SN2iUuExBwefAuFsO0Lg="},"type":"unlocked"} \ No newline at end of file diff --git a/examples/7nodes/keys/tm3.pub b/examples/7nodes/keys/tm3.pub deleted file mode 100644 index 4ee9d9f9..00000000 --- a/examples/7nodes/keys/tm3.pub +++ /dev/null @@ -1 +0,0 @@ -1iTZde/ndBHvzhcl7V68x44Vx7pl8nwx9LqnM/AfJUg= \ No newline at end of file diff --git a/examples/7nodes/keys/tm3a.key b/examples/7nodes/keys/tm3a.key deleted file mode 100644 index 2fe948c3..00000000 --- a/examples/7nodes/keys/tm3a.key +++ /dev/null @@ -1 +0,0 @@ -{"data":{"bytes":"yLcbICXicELZOnvpkDXB2UkQUiNAMIfsEOsgtFOGkQU="},"type":"unlocked"} \ No newline at end of file diff --git a/examples/7nodes/keys/tm3a.pub b/examples/7nodes/keys/tm3a.pub deleted file mode 100644 index 5766a7cb..00000000 --- a/examples/7nodes/keys/tm3a.pub +++ /dev/null @@ -1 +0,0 @@ -3nLS1GSlPs3/AccoZ20WTBrYP/ua5KDlUM1uGrDKHTs= \ No newline at end of file diff --git a/examples/7nodes/keys/tm7.key b/examples/7nodes/keys/tm7.key deleted file mode 100644 index d9bd42d0..00000000 --- a/examples/7nodes/keys/tm7.key +++ /dev/null @@ -1 +0,0 @@ -{"data":{"bytes":"lesaO6EWbmL1rie1biy851BnN1QsRRDK4kWUimlK0EA="},"type":"unlocked"} \ No newline at end of file diff --git a/examples/7nodes/keys/tm7.pub b/examples/7nodes/keys/tm7.pub deleted file mode 100644 index 2eb5c229..00000000 --- a/examples/7nodes/keys/tm7.pub +++ /dev/null @@ -1 +0,0 @@ -ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc= \ No newline at end of file diff --git a/examples/7nodes/keys/tm7a.key b/examples/7nodes/keys/tm7a.key deleted file mode 100644 index e871a951..00000000 --- a/examples/7nodes/keys/tm7a.key +++ /dev/null @@ -1 +0,0 @@ -{"data":{"bytes":"yko+cM/ULnan7wjcrOqWEW+G9nmr1DQATAxpmiiqH8E="},"type":"unlocked"} \ No newline at end of file diff --git a/examples/7nodes/keys/tm7a.pub b/examples/7nodes/keys/tm7a.pub deleted file mode 100644 index bebd1d9d..00000000 --- a/examples/7nodes/keys/tm7a.pub +++ /dev/null @@ -1 +0,0 @@ -jqSRkPFJ8S1EZtYhnn3ZxMRWglbUvZ0+Rb1W5JquaBk= \ No newline at end of file diff --git a/examples/7nodes/raft-start.sh b/examples/7nodes/raft-start.sh deleted file mode 100755 index 7770631e..00000000 --- a/examples/7nodes/raft-start.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash -set -u -set -e - -GLOBAL_ARGS="--raft --rpc --rpcaddr 0.0.0.0 --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,quorum" - -echo "[*] Starting Constellation nodes" -nohup constellation-node tm1.conf 2>> qdata/logs/constellation1.log & -sleep 1 -nohup constellation-node tm2.conf 2>> qdata/logs/constellation2.log & -nohup constellation-node tm3.conf 2>> qdata/logs/constellation3.log & -nohup constellation-node tm4.conf 2>> qdata/logs/constellation4.log & -nohup constellation-node tm5.conf 2>> qdata/logs/constellation5.log & -nohup constellation-node tm6.conf 2>> qdata/logs/constellation6.log & -nohup constellation-node tm7.conf 2>> qdata/logs/constellation7.log & - -sleep 1 - -echo "[*] Starting node 1" -PRIVATE_CONFIG=tm1.conf nohup geth --datadir qdata/dd1 $GLOBAL_ARGS --rpcport 22000 --port 21000 --unlock 0 --password passwords.txt 2>>qdata/logs/1.log & - -echo "[*] Starting node 2" -PRIVATE_CONFIG=tm2.conf nohup geth --datadir qdata/dd2 $GLOBAL_ARGS --rpcport 22001 --port 21001 2>>qdata/logs/2.log & - -echo "[*] Starting node 3" -PRIVATE_CONFIG=tm3.conf nohup geth --datadir qdata/dd3 $GLOBAL_ARGS --rpcport 22002 --port 21002 2>>qdata/logs/3.log & - -echo "[*] Starting node 4" -PRIVATE_CONFIG=tm4.conf nohup geth --datadir qdata/dd4 $GLOBAL_ARGS --rpcport 22003 --port 21003 2>>qdata/logs/4.log & - -echo "[*] Starting node 5" -PRIVATE_CONFIG=tm5.conf nohup geth --datadir qdata/dd5 $GLOBAL_ARGS --rpcport 22004 --port 21004 2>>qdata/logs/5.log & - -echo "[*] Starting node 6" -PRIVATE_CONFIG=tm6.conf nohup geth --datadir qdata/dd6 $GLOBAL_ARGS --rpcport 22005 --port 21005 2>>qdata/logs/6.log & - -echo "[*] Starting node 7" -PRIVATE_CONFIG=tm7.conf nohup geth --datadir qdata/dd7 $GLOBAL_ARGS --rpcport 22006 --port 21006 2>>qdata/logs/7.log & - -echo "[*] Waiting for nodes to start" -sleep 10 -echo "[*] Sending first transaction" -PRIVATE_CONFIG=tm1.conf geth --exec 'loadScript("script1.js")' attach ipc:qdata/dd1/geth.ipc - -echo "All nodes configured. See 'qdata/logs' for logs, and run e.g. 'geth attach qdata/dd1/geth.ipc' to attach to the first Geth node" diff --git a/examples/7nodes/runscript.sh b/examples/7nodes/runscript.sh deleted file mode 100755 index cf69fe89..00000000 --- a/examples/7nodes/runscript.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -PRIVATE_CONFIG=tm1.conf geth --exec "loadScript(\"$1\")" attach ipc:qdata/dd1/geth.ipc diff --git a/examples/7nodes/script1.js b/examples/7nodes/script1.js deleted file mode 100644 index c260796f..00000000 --- a/examples/7nodes/script1.js +++ /dev/null @@ -1,19 +0,0 @@ -a = eth.accounts[0] -web3.eth.defaultAccount = a; - -var simpleSource = 'contract simplestorage { uint public storedData; function simplestorage(uint initVal) { storedData = initVal; } function set(uint x) { storedData = x; } function get() constant returns (uint retVal) { return storedData; } }' -var simpleCompiled = web3.eth.compile.solidity(simpleSource); -var simpleRoot = Object.keys(simpleCompiled)[0]; -var simpleContract = web3.eth.contract(simpleCompiled[simpleRoot].info.abiDefinition); -var simple = simpleContract.new(42, {from:web3.eth.accounts[0], data: simpleCompiled[simpleRoot].code, gas: 300000, privateFor: ["ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc="]}, function(e, contract) { - if (e) { - console.log("err creating contract", e); - } else { - if (!contract.address) { - console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined..."); - } else { - console.log("Contract mined! Address: " + contract.address); - console.log(contract); - } - } -}); diff --git a/examples/7nodes/send-private-async.lua b/examples/7nodes/send-private-async.lua deleted file mode 100644 index ee08441c..00000000 --- a/examples/7nodes/send-private-async.lua +++ /dev/null @@ -1,3 +0,0 @@ -wrk.method = "POST" -wrk.body = '{"jsonrpc":"2.0","method":"eth_sendTransactionAsync","params":[{"from": "0xed9d02e382b34818e88b88a309c7fe71e65f419d", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", "privateFor": ["ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc="]}],"id":1}' -wrk.headers["Content-Type"] = "application/json" diff --git a/examples/7nodes/send-private-sync.lua b/examples/7nodes/send-private-sync.lua deleted file mode 100644 index 9b2ab422..00000000 --- a/examples/7nodes/send-private-sync.lua +++ /dev/null @@ -1,3 +0,0 @@ -wrk.method = "POST" -wrk.body = '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{"from": "0xed9d02e382b34818e88b88a309c7fe71e65f419d", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", "privateFor": ["ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc="]}],"id":1}' -wrk.headers["Content-Type"] = "application/json" diff --git a/examples/7nodes/send-public-sync.lua b/examples/7nodes/send-public-sync.lua deleted file mode 100644 index c96ef618..00000000 --- a/examples/7nodes/send-public-sync.lua +++ /dev/null @@ -1,3 +0,0 @@ -wrk.method = "POST" -wrk.body = '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{"from": "0xed9d02e382b34818e88b88a309c7fe71e65f419d", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}],"id":1}' -wrk.headers["Content-Type"] = "application/json" diff --git a/examples/7nodes/start.sh b/examples/7nodes/start.sh deleted file mode 100755 index 7763d79d..00000000 --- a/examples/7nodes/start.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -set -u -set -e -NETID=87234 -BOOTNODE_KEYHEX=77bd02ffa26e3fb8f324bda24ae588066f1873d95680104de5bc2db9e7b2e510 -BOOTNODE_ENODE=enode://61077a284f5ba7607ab04f33cfde2750d659ad9af962516e159cf6ce708646066cd927a900944ce393b98b95c914e4d6c54b099f568342647a1cd4a262cc0423@[127.0.0.1]:33445 - -GLOBAL_ARGS="--bootnodes $BOOTNODE_ENODE --networkid $NETID --rpc --rpcaddr 0.0.0.0 --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,quorum" - -echo "[*] Starting Constellation nodes" -nohup constellation-node tm1.conf 2>> qdata/logs/constellation1.log & -sleep 1 -nohup constellation-node tm2.conf 2>> qdata/logs/constellation2.log & -nohup constellation-node tm3.conf 2>> qdata/logs/constellation3.log & -nohup constellation-node tm4.conf 2>> qdata/logs/constellation4.log & -nohup constellation-node tm5.conf 2>> qdata/logs/constellation5.log & -nohup constellation-node tm6.conf 2>> qdata/logs/constellation6.log & -nohup constellation-node tm7.conf 2>> qdata/logs/constellation7.log & - -echo "[*] Starting bootnode" -nohup bootnode --nodekeyhex "$BOOTNODE_KEYHEX" --addr="127.0.0.1:33445" 2>>qdata/logs/bootnode.log & -echo "wait for bootnode to start..." -sleep 6 - -echo "[*] Starting node 1" -PRIVATE_CONFIG=tm1.conf nohup geth --datadir qdata/dd1 $GLOBAL_ARGS --rpcport 22000 --port 21000 --unlock 0 --password passwords.txt 2>>qdata/logs/1.log & - -echo "[*] Starting node 2" -PRIVATE_CONFIG=tm2.conf nohup geth --datadir qdata/dd2 $GLOBAL_ARGS --rpcport 22001 --port 21001 --voteaccount "0x0fbdc686b912d7722dc86510934589e0aaf3b55a" --votepassword "" --blockmakeraccount "0xca843569e3427144cead5e4d5999a3d0ccf92b8e" --blockmakerpassword "" --singleblockmaker --minblocktime 2 --maxblocktime 5 2>>qdata/logs/2.log & - -echo "[*] Starting node 3" -PRIVATE_CONFIG=tm3.conf nohup geth --datadir qdata/dd3 $GLOBAL_ARGS --rpcport 22002 --port 21002 2>>qdata/logs/3.log & - -echo "[*] Starting node 4" -PRIVATE_CONFIG=tm4.conf nohup geth --datadir qdata/dd4 $GLOBAL_ARGS --rpcport 22003 --port 21003 --voteaccount "0x9186eb3d20cbd1f5f992a950d808c4495153abd5" --votepassword "" 2>>qdata/logs/4.log & - -echo "[*] Starting node 5" -PRIVATE_CONFIG=tm5.conf nohup geth --datadir qdata/dd5 $GLOBAL_ARGS --rpcport 22004 --port 21004 --voteaccount "0x0638e1574728b6d862dd5d3a3e0942c3be47d996" --votepassword "" 2>>qdata/logs/5.log & - -echo "[*] Starting node 6" -PRIVATE_CONFIG=tm6.conf nohup geth --datadir qdata/dd6 $GLOBAL_ARGS --rpcport 22005 --port 21005 2>>qdata/logs/6.log & - -echo "[*] Starting node 7" -PRIVATE_CONFIG=tm7.conf nohup geth --datadir qdata/dd7 $GLOBAL_ARGS --rpcport 22006 --port 21006 2>>qdata/logs/7.log & - -echo "[*] Waiting for nodes to start" -sleep 10 -echo "[*] Sending first transaction" -PRIVATE_CONFIG=tm1.conf geth --exec 'loadScript("script1.js")' attach ipc:qdata/dd1/geth.ipc - -echo "All nodes configured. See 'qdata/logs' for logs, and run e.g. 'geth attach qdata/dd1/geth.ipc' to attach to the first Geth node" diff --git a/examples/7nodes/tm1.conf b/examples/7nodes/tm1.conf deleted file mode 100644 index fb1efb99..00000000 --- a/examples/7nodes/tm1.conf +++ /dev/null @@ -1,9 +0,0 @@ -url = "http://127.0.0.1:9000/" -port = 9000 -socketPath = "qdata/tm1.ipc" -otherNodeUrls = [] -publicKeyPath = "keys/tm1.pub" -privateKeyPath = "keys/tm1.key" -archivalPublicKeyPath = "keys/tm1a.pub" -archivalPrivateKeyPath = "keys/tm1a.key" -storagePath = "qdata/constellation1" diff --git a/examples/7nodes/tm2.conf b/examples/7nodes/tm2.conf deleted file mode 100644 index e4c15073..00000000 --- a/examples/7nodes/tm2.conf +++ /dev/null @@ -1,9 +0,0 @@ -url = "http://127.0.0.1:9001/" -port = 9001 -socketPath = "qdata/tm2.ipc" -otherNodeUrls = ["http://127.0.0.1:9000/"] -publicKeyPath = "keys/tm2.pub" -privateKeyPath = "keys/tm2.key" -archivalPublicKeyPath = "keys/tm2a.pub" -archivalPrivateKeyPath = "keys/tm2a.key" -storagePath = "qdata/constellation2" diff --git a/examples/7nodes/tm3.conf b/examples/7nodes/tm3.conf deleted file mode 100644 index 4dca8ba0..00000000 --- a/examples/7nodes/tm3.conf +++ /dev/null @@ -1,9 +0,0 @@ -url = "http://127.0.0.1:9002/" -port = 9002 -socketPath = "qdata/tm3.ipc" -otherNodeUrls = ["http://127.0.0.1:9000/"] -publicKeyPath = "keys/tm3.pub" -privateKeyPath = "keys/tm3.key" -archivalPublicKeyPath = "keys/tm3a.pub" -archivalPrivateKeyPath = "keys/tm3a.key" -storagePath = "qdata/constellation3" diff --git a/examples/7nodes/tm4.conf b/examples/7nodes/tm4.conf deleted file mode 100644 index c5c39aca..00000000 --- a/examples/7nodes/tm4.conf +++ /dev/null @@ -1,9 +0,0 @@ -url = "http://127.0.0.1:9003/" -port = 9003 -socketPath = "qdata/tm4.ipc" -otherNodeUrls = ["http://127.0.0.1:9000/"] -publicKeyPath = "keys/tm4.pub" -privateKeyPath = "keys/tm4.key" -archivalPublicKeyPath = "keys/tm4a.pub" -archivalPrivateKeyPath = "keys/tm4a.key" -storagePath = "qdata/constellation4" diff --git a/examples/7nodes/tm5.conf b/examples/7nodes/tm5.conf deleted file mode 100644 index 91420465..00000000 --- a/examples/7nodes/tm5.conf +++ /dev/null @@ -1,9 +0,0 @@ -url = "http://127.0.0.1:9004/" -port = 9004 -socketPath = "qdata/tm5.ipc" -otherNodeUrls = ["http://127.0.0.1:9000/"] -publicKeyPath = "keys/tm5.pub" -privateKeyPath = "keys/tm5.key" -archivalPublicKeyPath = "keys/tm5a.pub" -archivalPrivateKeyPath = "keys/tm5a.key" -storagePath = "qdata/constellation5" diff --git a/examples/7nodes/tm6.conf b/examples/7nodes/tm6.conf deleted file mode 100644 index a06326ef..00000000 --- a/examples/7nodes/tm6.conf +++ /dev/null @@ -1,9 +0,0 @@ -url = "http://127.0.0.1:9006/" -port = 9006 -socketPath = "qdata/tm6.ipc" -otherNodeUrls = ["http://127.0.0.1:9000/"] -publicKeyPath = "keys/tm6.pub" -privateKeyPath = "keys/tm6.key" -archivalPublicKeyPath = "keys/tm6a.pub" -archivalPrivateKeyPath = "keys/tm6a.key" -storagePath = "qdata/constellation6" diff --git a/examples/7nodes/tm7.conf b/examples/7nodes/tm7.conf deleted file mode 100644 index c83a8f89..00000000 --- a/examples/7nodes/tm7.conf +++ /dev/null @@ -1,9 +0,0 @@ -url = "http://127.0.0.1:9005/" -port = 9005 -socketPath = "qdata/tm7.ipc" -otherNodeUrls = ["http://127.0.0.1:9000/"] -publicKeyPath = "keys/tm7.pub" -privateKeyPath = "keys/tm7.key" -archivalPublicKeyPath = "keys/tm7a.pub" -archivalPrivateKeyPath = "keys/tm7a.key" -storagePath = "qdata/constellation7" diff --git a/examples/permissions/README.md b/examples/permissions/README.md deleted file mode 100644 index 3488ae5f..00000000 --- a/examples/permissions/README.md +++ /dev/null @@ -1,139 +0,0 @@ - -# Node Permissioning Example - -Node Permissioning is a feature in Quorum that allows only a pre-defined set of nodes (as identified by their remotekey/enodes) to connect to the permissioned network. - -This example demonstrates the following: -* Sets up a network with a combination of permissioned and non-permissioned nodes in the cluster. -* Enabling / Disabling the permissions from command line. -* Details of permissioned-nodes.json file. -* Demonstrate that only the nodes that are specified in permissioned-nodes.json can connect to the network. - -## Usage - -``` -./run_nodes.sh GETH_BINARY DATADIR_BASE PERMISSONED_NODES NON_PERMISSIONED_NODES - -where: - - GETH_BINARY is the geth command you want to use - DATADIR_BASE is the folder under which node specific datadir will be created - PERMISSONED_NODES is the number of Permissioned Nodes to start. - NON_PERMISSIONED_NODES is number of non permissioned nodes to start. - -``` - -For example: -``` -$ ./run_nodes.sh /usr/local/bin/geth /tmp/chaindata 5 3 -``` -will start 5 permissioned nodes with node numbers from 1-5 and 3 -non-permissioned nodes from 6-8. - -or: - -``` -./run_nodes.sh default -``` - -to use default settings. - -Sample output (condensed for clarity): - -``` -$ ./run_nodes.sh default -* -Initializing Environment -*** Starting Permissioned Nodes **** -Running Permissioned Nodes -Started Permissioned node 1 with enode://8475a01f22a1f48116dc1f0d22ecaaaf77e5 -Started Permissioned node 2 with enode://b5660501f496e60e59ded734a889c97b7da9 -Started Permissioned node 3 with enode://54bd7ff4bd971fb80493cf47064553959176 -Started Permissioned node 4 with enode://24a62b436686d550e92c84cc314565012d71 -Started Permissioned node 5 with enode://246740a1ccb5d6f419c1f86e002332a58e246 - -*** All permissioned nodes Started. Please check the output for any errors **** - -*** Starting UnPermissioned Nodes **** - -Started Unpermissioned node 6 with enode://4c80d699a358a915635ae4cc3cedeacb92d -Started Unpermissioned node 7 with enode://005be0525b47039923bb4ed7ab53f14a53b4 -Started Unpermissioned node 8 with enode://375d1b75c230ff7434a4b2534fb1eb6482a6 - -*** All Unpermissoned nodes Started. Please check the output for any errors **** - -**** Update permissions config on each node *** -copying permissioned-nodes.json to pdata/1 -copying permissioned-nodes.json to pdata/2 -copying permissioned-nodes.json to pdata/3 -copying permissioned-nodes.json to pdata/4 -copying permissioned-nodes.json to pdata/5 -``` - -* ### Verify only permissioned nodes are connected to the network. - -* Attach to the individual nodes via - `geth attach ipc:/path/to/geth.ipc` and use `admin.peers` to check the connected nodes. - -``` -geth attach ipc:./pdata/1/geth.ipc -instance: Geth/node_1/v1.5.0-unstable-42adaae1/darwin/go1.6.2 -> admin.peers -[{ - caps: ["eth/62", "eth/63"], - id: "246740a1ccb5d6f419c1f86e002332a58e246f39f411d61e51b763a3f226a082fba275652c9ce01e5d5f81a7ba2850bea4611247d745e278f3a558e6345ee75a", - name: "Geth/node_5/v1.5.0-unstable-42adaae1/darwin/go1.6.2", - network: { - localAddress: "127.0.0.1:59706", - remoteAddress: "127.0.0.1:30305" - }, - protocols: { - eth: { - difficulty: 17179869184, - head: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3", - version: 63 - } - } -}, { - caps: ["eth/62", "eth/63"], - id: "54bd7ff4bd971fb80493cf470645539591767d492a8229dcb8adc10129fc4c6bfd8f6044c75e806c4c9fdcec4e9b956d00d495ce273e9ae6c7347b90a9f5356b", - name: "Geth/node_3/v1.5.0-unstable-42adaae1/darwin/go1.6.2", - network: { - localAddress: "127.0.0.1:30301", - remoteAddress: "127.0.0.1:56980" - }, - protocols: { - eth: { - difficulty: 17179869184, - head: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3", - version: 63 - } - } -}] -``` - - -* You can also inspect the log files under `logs/node*.log` for further diagnostics messages around incoming / outgoing connection requests. Grep for `ALLOWED-BY` or `DENIED-BY`. Please be sure to enable verobsity for p2p module. - -* #### Permissioning configuration - - Permissioning is granted based on the remote key of the geth node. The remote keys are specified in the permissioned-nodes.json and is placed under individual nodes . - - The below sample permissioned-nodes.json provides a list of nodes permissioned to join the network ( node ids truncated for clarity) - -``` -[ - "enode://8475a01f22a1f48116dc1f0d22ecaaaf77e[::]:30301", - "enode://b5660501f496e60e59ded734a889c97b7da[::]:30302", - "enode://54bd7ff4bd971fb80493cf4706455395917[::]:30303" -] -``` - -* #### Enabling/Disabling permissions - - An individual node can enable/disable permissioning by passing the `-permissioned` command line flag. If enabled, then only the nodes that are in the `/permissioned-nodes.json` can connect to it. Further, these are the only nodes that this node can make outbound connections to as well. - -``` -MISCELLANEOUS OPTIONS: ---permissioned If enabled, the node will allow only a defined list of nodes to connect -``` diff --git a/examples/permissions/run_nodes.sh b/examples/permissions/run_nodes.sh deleted file mode 100755 index a0acc3f0..00000000 --- a/examples/permissions/run_nodes.sh +++ /dev/null @@ -1,251 +0,0 @@ -#!/bin/bash - -set -e - -HOST=localhost - -display_usage() { - printf "\n\n======= Either run the script with default setup by exeucting 'run_nodes.sh default' OR Set up the following parameters=======\n" - printf "\nUsage:[$0 GETH_BINARY DATADIR_BASE PERMISSONED_NODES, NODE_PERMISSIONED_NODES]. \n where: - GETH_BINARY is the geth command you want to use - DATADIR_BASE is the folder under which node specific datadir will be created - PERMISSONED_NODES is the number of Permissioned Nodes. - NODE_PERMISSIONED_NODES is number of non permissioned nodes.\n" - printf "\nFor Example:[$0 /usr/local/bin/geth /Users/Library/Ethereum/chaindata 5 3] will start 5 permissioned nodes with node numbers from 1 to 5 & - 3 non permissioned nodes from 5 to 8\n\n" - - } - -validate_inputs() -{ - if [ ! -x $1 ]; then - echo " Geth $1 does exist. Please specify a valid geth executable" - exit 1 - else: - echo "Will use $1 for geth exectuable" - fi - - if [ ! -d $2 ]; then - echo " BASE DATADIR $2 does not exist. Please specify a valid BASE DATADIR." - exit 1 - else: - echo "Will use $2 for Nodes datadir." - fi - - printf "Nodes: $3, $4\n" - if [ "$3" -le 0 ] ; then - echo "Invalid nodes count. Please specify a number greater than 0 and less than $4." - exit 1 - fi - - if [ 10 -lt $4 ]; then - echo "Too many nodes to run for an example. Please specify a number less than 10." - exit 1 - fi - -} - -initialize() -{ - - ############################################### - ### ENVIRONMENT VARIBALES ############# - echo "Initializing Environment " - QUORUM_BIN=$1 - DATADIR_BASE=$2 - BOOTNODE_KEYHEX=77bd02ffa26e3fb8f324bda24ae588066f1873d95680104de5bc2db9e7b2e510 - BOOTNODE_ENODE=enode://6433e8fb82c4638a8a6d499d40eb7d8158883219600bfd49acb968e3a37ccced04c964fa87b3a78a2da1b71dc1b90275f4d055720bb67fad4a118a56925125dc@[127.0.0.1]:33445 - NETWORK_ID=1441 - LOGDIR=$DATADIR_BASE/logs - PERMISSIONED_CONFIG="permissioned-nodes.json" - BASE_PORT=3030 - BASE_RPC_PORT=854 - - VERBOSITY="--vmodule p2p=5" # Needed to view the debug logs - # VERBOSITY="" - PERMISSIONED="--permissioned" # - - #PERMISSIONED="" - set PERMISSIONED to "" if running in non permissioned mode - ############################################### - mkdir -p $LOGDIR - mkdir -p $DATADIR_BASE - printf "Initialization done. QUORUM_BIN: $QUORUM_BIN DATADIR_BASE: $DATADIR_BASE\n" -} - -start_bootnode() -{ - echo -n "[*] Starting bootnode... " - nohup bootnode --nodekeyhex "$BOOTNODE_KEYHEX" --addr="127.0.0.1:33445" 2>>$LOGDIR/bootnode.log & - echo -n "waiting... " - sleep 6 - echo -n "done" -} - -ALL_NODES= - -run_permissioned_nodes() -{ - # run in permssioned node - START=1 - END=$1 - - echo "Running Permissioned Nodes" - PERMISSIONED_NODES+="[" - for ((NODE_NUM=START;NODE_NUM<=END;NODE_NUM++)); do - #clean up previous logs - cp /dev/null $LOGDIR/node$NODE_NUM.log - echo "======== Starting Node: ===== " $NODE_NUM - LISTEN_PORT=$BASE_PORT$NODE_NUM - RPC_PORT=$BASE_RPC_PORT$NODE_NUM - DATADIR=$(readlink -f $DATADIR_BASE/$NODE_NUM) - LOGFILE=$(readlink -f $LOGDIR/node$NODE_NUM.log) - printf "Starting $NODE_NUM with datadir $DATADIR on $HOST:$LISTEN_PORT with RPC Port http://$HOST:$RPC_PORT\n" - COMMAND="$QUORUM_BIN $PERMISSIONED --datadir $DATADIR $VERBOSITY --identity node_$NODE_NUM --networkid=$NETWORK_ID --rpc --port $LISTEN_PORT --rpcaddr $HOST --rpcport $RPC_PORT --bootnodes $BOOTNODE_ENODE" - mkdir -p $DATADIR - echo "nohup $COMMAND 2>> $LOGFILE &" > $DATADIR/start.sh - chmod 755 $DATADIR/start.sh - $DATADIR/start.sh - sleep 5 - ERROR=`awk '/Fatal/ {print $1}' $LOGFILE` - NODE_ID=`awk '/Listening, enode/{ print $5 }' $LOGFILE` - printf "Started Permissioned node $NODE_NUM with ${NODE_ID}\n" - ALL_NODES+="\"$NODE_ID\"," - if [ ${NODE_NUM} == ${END} ]; then - PERMISSIONED_NODES+="\"$NODE_ID\"" - else - PERMISSIONED_NODES+="\"$NODE_ID\"," - fi - - done - PERMISSIONED_NODES+="]" -} - - -run_nonpermissioned_nodes() -{ - # run in permssioned node - START=$1 - END=START+$2 - echo "Running unpermissioned Nodes" - for ((NODE_NUM=START+1;NODE_NUM<=END;NODE_NUM++)); do - #clean up previous logs - cp /dev/null $LOGDIR/node$NODE_NUM.log - echo "======== Starting Node: ===== " $NODE_NUM - LISTEN_PORT=$BASE_PORT$NODE_NUM - RPC_PORT=$BASE_RPC_PORT$NODE_NUM - DATADIR="$DATADIR_BASE/"$NODE_NUM - LOGFILE=$LOGDIR/node$NODE_NUM.log - printf "#Starting $NODE_NUM with datadir $DATADIR on $HOST:$LISTEN_PORT\n" - COMMAND="$QUORUM_BIN $PERMISSIONED --datadir $DATADIR $VERBOSITY --identity node_$NODE_NUM --networkid=$NETWORK_ID --rpc --port $LISTEN_PORT --rpcaddr $HOST --rpcport $RPC_PORT" - printf "Executing command $COMMAND\n" - $COMMAND 2>> $LOGFILE & - sleep 10 - ERROR=`awk '/Fatal/ {print $1}' $LOGFILE` - NODE_ID=`awk '/Listening, enode/{ print $5 }' $LOGFILE` - ALL_NODES+="\"$NODE_ID\"," - printf "Started Unpermissioned node $NODE_NUM with ${NODE_ID}\n" - done - - echo $ALL_NODES > all_nodes - - -} - -update_permissions_file() -{ - - START=1 - END=$1 - echo $PERMISSIONED_NODES > $PERMISSIONED_CONFIG - for ((NODE_NUM=START;NODE_NUM<=END;NODE_NUM++)); do - DATADIR="$DATADIR_BASE/"$NODE_NUM - echo "copying $PERMISSIONED_CONFIG to $DATADIR" - cp $PERMISSIONED_CONFIG $DATADIR - done -} - -# allowed_pattern="ALLOWED-BY" -# denied_pattern="DENIED_BY" - -verify_permissioning() -{ - echo "Verify permissioning" - # grep ALLOWED-BY node*.log - -} - -set_defaults_args() -{ - - QUORUM_BIN='/usr/local/bin/geth' - mkdir -p qdata - DATADIR_BASE="./qdata" - - -} - -#### Run the main script -PERMISSIONED_NODES=() - - -run_default(){ - - printf "**** Validating inputs *** \n" - # QUORUM_BIN='/usr/local/bin/geth' - QUORUM_BIN='/usr/local/bin/geth' - mkdir -p qdata - DATADIR_BASE='./qdata' - PERM_NODES=5 - NON_PERM_NODES=3 - -} - -run_custom(){ - - printf "**** Validating inputs *** $1, $2, $3, $4\n" - QUORUM_BIN=$1 - DATADIR_BASE=$2 - PERM_NODES=$3 - NON_PERM_NODES=$4 - initialize $QUORUM_BIN $DATADIR_BASE - validate_inputs $QUORUM_BIN $DATADIR_BASE $PERM_NODES $NON_PERM_NODES - -} - -cleanup(){ - printf "cleaning up logs" - rm -rf logs/ -} - -if [[ $1 == 'default' ]]; then - printf "*** Running dafault setup ***" - run_default -else - printf "*** Running Custom setup" - if [ $# -ne 4 ] - then - display_usage - exit 1 - fi - run_custom $1 $2 $3 $4 -fi - -set -u - -printf "**** Initialize Environment **** \n" -initialize $QUORUM_BIN $DATADIR_BASE - -start_bootnode - -printf "\n*** Starting Permissioned Nodes **** \n" -run_permissioned_nodes $PERM_NODES -printf "\n*** All permissioned nodes Started. Please check the output for any errors **** \n" - -printf "\n*** Starting UnPermissioned Nodes **** \n" -run_nonpermissioned_nodes $PERM_NODES $NON_PERM_NODES -printf "\n*** All Unpermissoned nodes Started. Please check the output for any errors **** \n" - -printf "\n**** Update permissions config on each node *** \n" -update_permissions_file $PERM_NODES -printf "\n **** End of Script **** \n" - diff --git a/examples/permissions/stop.sh b/examples/permissions/stop.sh deleted file mode 100755 index 2919f95c..00000000 --- a/examples/permissions/stop.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -killall geth bootnode - diff --git a/vagrant/bootstrap.sh b/vagrant/bootstrap.sh deleted file mode 100755 index b8487fa6..00000000 --- a/vagrant/bootstrap.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -set -eu -o pipefail - -# install build deps -add-apt-repository ppa:ethereum/ethereum -apt-get update -apt-get install -y build-essential unzip libdb-dev libsodium-dev zlib1g-dev libtinfo-dev solc sysvbanner wrk - -# install constellation -wget -q https://github.com/jpmorganchase/constellation/releases/download/v0.0.1-alpha/ubuntu1604.zip -unzip ubuntu1604.zip -cp ubuntu1604/constellation-node /usr/local/bin && chmod 0755 /usr/local/bin/constellation-node -cp ubuntu1604/constellation-enclave-keygen /usr/local/bin && chmod 0755 /usr/local/bin/constellation-enclave-keygen -rm -rf ubuntu1604.zip ubuntu1604 - -# install golang -GOREL=go1.7.3.linux-amd64.tar.gz -wget -q https://storage.googleapis.com/golang/$GOREL -tar xfz $GOREL -mv go /usr/local/go -rm -f $GOREL -PATH=$PATH:/usr/local/go/bin -echo 'PATH=$PATH:/usr/local/go/bin' >> /home/ubuntu/.bashrc - -# make/install quorum -git clone https://github.com/jpmorganchase/quorum.git -pushd quorum >/dev/null -git checkout tags/v1.1.0 -make all -cp build/bin/geth /usr/local/bin -cp build/bin/bootnode /usr/local/bin -popd >/dev/null - -# copy examples -cp -r /vagrant/examples /home/ubuntu/quorum-examples -chown -R ubuntu:ubuntu /home/ubuntu/quorum /home/ubuntu/quorum-examples - -# done! -banner "Quorum" -echo -echo 'The Quorum vagrant instance has been provisioned. Examples are available in ~/quorum-examples inside the instance.' -echo "Use 'vagrant ssh' to open a terminal, 'vagrant suspend' to stop the instance, and 'vagrant destroy' to remove it."