echo
Install prerequisites
Install golang.
We install the golang language to be able to build Geth / go-ethereum, the official golang implementation of the Ethereum protocol. This might not be necessary in other SO.
[root@echo ~]$ sudo yum -y update
[root@echo ~]$ sudo yum -y install golang
[root@echo ~]$ sudo yum -y install gmp-devel
Install git
Now we install git using yum to be able to clone the go-ethereum repository. Once we've done it we clone the github repository to our local device.
[root@echo ~]$ sudo yum -y install git
[root@echo ~]$ git clone GitHub - ethereum/go-ethereum: Go implementation of the Ethereum protocol
Install geth
Once we have cloned the repository we build the project using the rule geth of the Makefile. It is also possible to use the all rule to build all the executables but it was not not necessary in this case.
[root@echo ~]$ make go-ethereum/geth
[root@echo ~]$ ls -al build/bin/geth
[jestape@echo]$ export PATH=/home/jestape/go-ethereum/build/bin:$PATH
Init private blockchain
Now that we have installed our prerequisites we have to initialized our private blockchain (sidechain). To do so we create a directory in which we'll store all the data generated and we create the genesis file. (Genesis file explanation: https://medium.com/taipei-ethereum-meetup/beginners-guide-to-ethereum-3-explain-the-genesis-file-and-use-it-to-customize-your-blockchain-552eb6265145 )
[jestape@echo ]$ mkdir private-blockchain
[jestape@echo ~]$ cd private-blockchain/
[jestape@echo private-blockchain]$ vim genesis.json
[jestape@echo private-blockchain] mkdir costaflores-node
[jestape@echo costaflores-node]$ geth --datadir /home/jestape/private-blockchain/costaflores-node init ../genesis.json
genesis.json content:
{
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x400",
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x436861696e536b696c6c732047656e6573697320426c6f636b",
"gasLimit": "0xffffffff",
"config": {
"chainId": ---,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
}
}
Running the node (costaflores-node1)
Creating an account.
After having initialised our private blockchain we have to create a new account on the node to mine.
[jestape@echo costaflores-node]$ geth --datadir /home/jestape/private-blockchain/costaflores-node/ account new
INFO [11-29|16:49:24.814] Maximum peer count ETH=25 LES=0 total=25
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase: ************
Repeat passphrase: ************
Address: {d542791cfed183f9ac52f207706f30f0ce3df231}
[jestape@echo costaflores-node]$ vim password.txt
Booting the node.
The last step we must take is to boot the node in the background. This node is identified as "costaflores-node1" and it's accesible through HTTP 10.112.48.25:8545 from anywhere. To pair with this node you must use UPD 10.112.48.25:30303.
[jestape@echo costaflores-node]$ nohup ./../../go-ethereum/build/bin/geth --identity "costaflores-node1" --networkid ** --datadir "/home/jestape/private-blockchain/costaflores-node" --nodiscover --rpc --rpcaddr 10.112.48.25 --rpcport "8545" --port "30303" --rpccorsdomain "*" --nat "any" --rpcapi eth,web3,personal,net --unlock "0xD542791cfeD183F9aC52f207706f30f0ce3dF231" --password "/home/jestape/private-blockchain/costaflores-node/password.txt" --mine --verbosity 5 >> geth.log &
INFO [12-07|14:45:19.581] HTTP endpoint opened url=http://10.112.48.25:8545 cors=* vhosts=localhost
INFO [12-07|14:45:19.578] Started P2P networking self="enode://38418871173ac795eddea15d28f9b13f6af29ca318cabbd0a4708bc39379d8b16a04edc7d47c1a70a1017d11304a46a9bb813740feea6efa0a6572fb60971f59@127.0.0.1:30303?discport=0"
Install monitoring tool (https://medium.com/@jake.henningsgaard/monitoring-the-ethereum-blockchain-24384064fad3 )
[root@echo mbarrow]# sudo yum install epel-release
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Determining fastest mirrors
base:
extras:
updates:
base | 3.6 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
(1/4): base/7/x86_64/group_gz | 166 kB 00:00:00
(2/4): extras/7/x86_64/primary_db | 156 kB 00:00:00
(3/4): base/7/x86_64/primary_db | 6.0 MB 00:00:00
(4/4): updates/7/x86_64/primary_db | 1.3 MB 00:00:00
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-11 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=====================================================================================================================================================================================
Package Arch Version Repository Size
=====================================================================================================================================================================================
Installing:
epel-release noarch 7-11 extras 15 k
Transaction Summary
=====================================================================================================================================================================================
Install 1 Package
Total download size: 15 k
Installed size: 24 k
Is this ok [y/d/N]: y
Downloading packages:
epel-release-7-11.noarch.rpm | 15 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : epel-release-7-11.noarch 1/1
Verifying : epel-release-7-11.noarch 1/1
Installed:
epel-release.noarch 0:7-11
Complete!
[root@echo mbarrow]# curl --silent --location https://rpm.nodesource.com/setup_6.x| sudo bash -
## Installing the NodeSource Node.js 6.x LTS Boron repo...
## Inspecting system...
+ rpm -q --whatprovides redhat-release || rpm -q --whatprovides centos-release || rpm -q --whatprovides cloudlinux-release || rpm -q --whatprovides sl-release
+ uname -m
## Confirming "el7-x86_64" is supported...
+ curl -sLf -o /dev/null 'https://rpm.nodesource.com/pub_6.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm'
## Downloading release setup RPM...
+ mktemp
+ curl -sL -o '/tmp/tmp.mM60sPPSY4' 'https://rpm.nodesource.com/pub_6.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm'
## Installing release setup RPM...
+ rpm -i --nosignature --force '/tmp/tmp.mM60sPPSY4'
## Cleaning up...
+ rm -f '/tmp/tmp.mM60sPPSY4'
## Checking for existing installations...
+ rpm -qa 'node|npm' | grep -v nodesource
## Run `sudo yum install -y nodejs` to install Node.js 6.x LTS Boron and npm.
## You may also need development tools to build native addons:
sudo yum install gcc-c++ make
## To install the Yarn package manager, run:
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo yum install yarn
[root@echo mbarrow]# sudo yum install nodejs
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 33 kB 00:00:00
base:
epel:
extras:
updates:
epel | 4.7 kB 00:00:00
nodesource | 2.5 kB 00:00:00
(1/4): epel/x86_64/group_gz | 88 kB 00:00:00
(2/4): epel/x86_64/updateinfo | 952 kB 00:00:00
(3/4): nodesource/x86_64/primary_db | 58 kB 00:00:00
(4/4): epel/x86_64/primary_db | 6.6 MB 00:00:00
Resolving Dependencies
--> Running transaction check
---> Package nodejs.x86_64 2:6.16.0-1nodesource will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=====================================================================================================================================================================================
Package Arch Version Repository Size
=====================================================================================================================================================================================
Installing:
nodejs x86_64 2:6.16.0-1nodesource nodesource 13 M
Transaction Summary
=====================================================================================================================================================================================
Install 1 Package
Total download size: 13 M
Installed size: 39 M
Is this ok [y/d/N]: y
Downloading packages:
warning: /var/cache/yum/x86_64/7/nodesource/packages/nodejs-6.16.0-1nodesource.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 34fa74dd: NOKEY ] 0.0 B/s | 12 MB --:--:-- ETA
Public key for nodejs-6.16.0-1nodesource.x86_64.rpm is not installed
nodejs-6.16.0-1nodesource.x86_64.rpm | 13 MB 00:00:00
Retrieving key from file:///etc/pki/rpm-gpg/NODESOURCE-GPG-SIGNING-KEY-EL
Importing GPG key 0x34FA74DD:
Userid : "NodeSource <gpg-rpm@nodesource.com>"
Fingerprint: 2e55 207a 95d9 944b 0cc9 3261 5ddb e8d4 34fa 74dd
Package : nodesource-release-el7-1.noarch (installed)
From : /etc/pki/rpm-gpg/NODESOURCE-GPG-SIGNING-KEY-EL
Is this ok [y/N]: y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
Installing : 2:nodejs-6.16.0-1nodesource.x86_64 1/1
Verifying : 2:nodejs-6.16.0-1nodesource.x86_64 1/1
Installed:
nodejs.x86_64 2:6.16.0-1nodesource
Complete!
sudo yum install gcc-c++ make
Verify that it is working with:
[root@echo mbarrow]# node -v
v6.16.0
[root@echo mbarrow]# npm -v
3.10.10
npm install
npm WARN deprecated jade@1.11.0: Jade has been renamed to pug, please install the latest version of pug instead of jade
npm WARN deprecated minimatch@0.3.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated graceful-fs@1.1.14: please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js
npm WARN deprecated graceful-fs@3.0.11: please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js
npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated coffee-script@1.3.3: CoffeeScript on NPM has moved to "coffeescript" (no hyphen)
npm WARN deprecated graceful-fs@1.2.3: please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js
npm WARN deprecated jade@1.9.2: Jade has been renamed to pug, please install the latest version of pug instead of jade
npm WARN deprecated constantinople@3.0.2: Please update to at least constantinople 3.1.1
npm WARN deprecated transformers@2.1.0: Deprecated, use jstransformer
eth-netstats@0.0.9 /home/jestape/private-blockchain/eth-netstats
├─┬ body-parser@1.13.3
│ ├── bytes@2.1.0
│ ├── content-type@1.0.4
│ ├── depd@1.0.1
│ ├─┬ http-errors@1.3.1
│ │ ├── inherits@2.0.3
│ │ └── statuses@1.5.0
│ ├── iconv-lite@0.4.11
│ ├─┬ on-finished@2.3.0
│ │ └── ee-first@1.1.1
│ ├── qs@4.0.0
│ ├─┬ raw-body@2.1.7
│ │ ├── bytes@2.4.0
│ │ ├── iconv-lite@0.4.13
│ │ └── unpipe@1.0.0
│ └─┬ type-is@1.6.16
│ ├── media-typer@0.3.0
│ └─┬ mime-types@2.1.21
│ └── mime-db@1.37.0
├─┬ chalk@1.1.1
│ ├── ansi-styles@2.2.1
│ ├── escape-string-regexp@1.0.5
│ ├─┬ has-ansi@2.0.0
│ │ └── ansi-regex@2.1.1
│ ├── strip-ansi@3.0.1
│ └── supports-color@2.0.0
├── d3@3.5.6
├─┬ debug@2.2.0
│ └── ms@0.7.1
├─┬ express@4.13.3
│ ├─┬ accepts@1.2.13
│ │ └── negotiator@0.5.3
│ ├── array-flatten@1.1.1
│ ├── content-disposition@0.5.0
│ ├── cookie@0.1.3
│ ├── cookie-signature@1.0.6
│ ├── escape-html@1.0.2
│ ├── etag@1.7.0
│ ├── finalhandler@0.4.0
│ ├── fresh@0.3.0
│ ├── merge-descriptors@1.0.0
│ ├── methods@1.1.2
│ ├── parseurl@1.3.2
│ ├── path-to-regexp@0.1.7
│ ├─┬ proxy-addr@1.0.10
│ │ ├── forwarded@0.1.2
│ │ └── ipaddr.js@1.0.5
│ ├── range-parser@1.0.3
│ ├─┬ send@0.13.0
│ │ ├── destroy@1.0.3
│ │ ├── mime@1.3.4
│ │ └── statuses@1.2.1
│ ├─┬ serve-static@1.10.3
│ │ ├── escape-html@1.0.3
│ │ └─┬ send@0.13.2
│ │ ├── depd@1.1.2
│ │ ├── destroy@1.0.4
│ │ └── statuses@1.2.1
│ ├── utils-merge@1.0.0
│ └── vary@1.0.1
├─┬ geoip-lite@1.1.6
│ ├── async@0.1.22
│ ├── colors@0.6.0-1
│ ├─┬ glob@3.2.11
│ │ └── minimatch@0.3.0
│ ├── lazy@1.0.11
│ ├─┬ rimraf@2.0.3
│ │ └── graceful-fs@1.1.14
│ └─┬ unzip@0.0.4
│ ├─┬ binary@0.3.0
│ │ ├── buffers@0.1.1
│ │ └─┬ chainsaw@0.1.0
│ │ └── traverse@0.3.9
│ ├─┬ fstream@0.1.31
│ │ └─┬ graceful-fs@3.0.11
│ │ └── natives@1.1.6
│ └─┬ pullstream@0.0.4
│ ├── over@0.0.5
│ └── stream-buffers@0.2.6
├─┬ grunt@0.4.5
│ ├── coffee-script@1.3.3
│ ├── colors@0.6.2
│ ├── dateformat@1.0.2-1.2.3
│ ├── eventemitter2@0.4.14
│ ├── exit@0.1.2
│ ├─┬ findup-sync@0.1.3
│ │ └── lodash@2.4.2
│ ├── getobject@0.1.0
│ ├─┬ glob@3.1.21
│ │ ├── graceful-fs@1.2.3
│ │ └── inherits@1.0.2
│ ├─┬ grunt-legacy-log@0.1.3
│ │ ├── colors@0.6.2
│ │ ├─┬ grunt-legacy-log-utils@0.1.1
│ │ │ ├── colors@0.6.2
│ │ │ ├── lodash@2.4.2
│ │ │ └── underscore.string@2.3.3
│ │ ├── lodash@2.4.2
│ │ └── underscore.string@2.3.3
│ ├─┬ grunt-legacy-util@0.2.0
│ │ └── lodash@0.9.2
│ ├── hooker@0.2.3
│ ├── iconv-lite@0.2.11
│ ├─┬ js-yaml@2.0.5
│ │ ├─┬ argparse@0.1.16
│ │ │ ├── underscore@1.7.0
│ │ │ └── underscore.string@2.4.0
│ │ └── esprima@1.0.4
│ ├── lodash@0.9.2
│ ├─┬ minimatch@0.2.14
│ │ ├── lru-cache@2.7.3
│ │ └── sigmund@1.0.1
│ ├─┬ nopt@1.0.10
│ │ └── abbrev@1.1.1
│ ├── rimraf@2.2.8
│ ├── underscore.string@2.2.1
│ └── which@1.0.9
├─┬ grunt-contrib-clean@0.6.0
│ └── rimraf@2.2.8
├─┬ grunt-contrib-concat@0.5.1
│ ├─┬ chalk@0.5.1
│ │ ├── ansi-styles@1.1.0
│ │ ├─┬ has-ansi@0.1.0
│ │ │ └── ansi-regex@0.2.1
│ │ ├── strip-ansi@0.3.0
│ │ └── supports-color@0.2.0
│ └─┬ source-map@0.3.0
│ └── amdefine@1.0.1
├─┬ grunt-contrib-copy@0.8.2
│ └── file-sync-cmp@0.1.1
├─┬ grunt-contrib-cssmin@0.12.3
│ ├─┬ clean-css@3.4.28
│ │ ├─┬ commander@2.8.1
│ │ │ └── graceful-readlink@1.0.1
│ │ └── source-map@0.4.4
│ └─┬ maxmin@1.1.0
│ ├─┬ figures@1.7.0
│ │ └── object-assign@4.1.1
│ ├─┬ gzip-size@1.0.0
│ │ ├─┬ browserify-zlib@0.1.4
│ │ │ └── pako@0.2.9
│ │ └─┬ concat-stream@1.6.2
│ │ ├── buffer-from@1.1.1
│ │ ├─┬ readable-stream@2.3.6
│ │ │ ├── core-util-is@1.0.2
│ │ │ ├── isarray@1.0.0
│ │ │ ├── process-nextick-args@2.0.0
│ │ │ ├── safe-buffer@5.1.2
│ │ │ ├── string_decoder@1.1.1
│ │ │ └── util-deprecate@1.0.2
│ │ └── typedarray@0.0.6
│ └─┬ pretty-bytes@1.0.4
│ ├── get-stdin@4.0.1
│ └─┬ meow@3.7.0
│ ├─┬ camelcase-keys@2.1.0
│ │ └── camelcase@2.1.1
│ ├─┬ loud-rejection@1.6.0
│ │ ├─┬ currently-unhandled@0.4.1
│ │ │ └── array-find-index@1.0.2
│ │ └── signal-exit@3.0.2
│ ├── map-obj@1.0.1
│ ├── minimist@1.2.0
│ ├─┬ normalize-package-data@2.4.0
│ │ ├── hosted-git-info@2.7.1
│ │ ├─┬ is-builtin-module@1.0.0
│ │ │ └── builtin-modules@1.1.1
│ │ ├── semver@5.6.0
│ │ └─┬ validate-npm-package-license@3.0.4
│ │ ├─┬ spdx-correct@3.1.0
│ │ │ └── spdx-license-ids@3.0.3
│ │ └─┬ spdx-expression-parse@3.0.0
│ │ └── spdx-exceptions@2.2.0
│ ├─┬ read-pkg-up@1.0.1
│ │ ├─┬ find-up@1.1.2
│ │ │ ├── path-exists@2.1.0
│ │ │ └─┬ pinkie-promise@2.0.1
│ │ │ └── pinkie@2.0.4
│ │ └─┬ read-pkg@1.1.0
│ │ ├─┬ load-json-file@1.1.0
│ │ │ ├── graceful-fs@4.1.15
│ │ │ ├─┬ parse-json@2.2.0
│ │ │ │ └─┬ error-ex@1.3.2
│ │ │ │ └── is-arrayish@0.2.1
│ │ │ ├── pify@2.3.0
│ │ │ └─┬ strip-bom@2.0.0
│ │ │ └── is-utf8@0.2.1
│ │ └─┬ path-type@1.1.0
│ │ └── graceful-fs@4.1.15
│ ├─┬ redent@1.0.0
│ │ ├─┬ indent-string@2.1.0
│ │ │ └─┬ repeating@2.0.1
│ │ │ └─┬ is-finite@1.0.2
│ │ │ └── number-is-nan@1.0.1
│ │ └── strip-indent@1.0.1
│ └── trim-newlines@1.0.0
├─┬ grunt-contrib-jade@0.14.1
│ ├─┬ chalk@0.5.1
│ │ ├── ansi-styles@1.1.0
│ │ ├─┬ has-ansi@0.1.0
│ │ │ └── ansi-regex@0.2.1
│ │ ├── strip-ansi@0.3.0
│ │ └── supports-color@0.2.0
│ └─┬ jade@1.9.2
│ └── commander@2.6.0
├─┬ grunt-contrib-uglify@0.9.2
│ ├─┬ uglify-js@2.8.29
│ │ ├── source-map@0.5.7
│ │ ├── uglify-to-browserify@1.0.2
│ │ └─┬ yargs@3.10.0
│ │ ├── camelcase@1.2.1
│ │ ├─┬ cliui@2.1.0
│ │ │ ├─┬ center-align@0.1.3
│ │ │ │ ├─┬ align-text@0.1.4
│ │ │ │ │ ├─┬ kind-of@3.2.2
│ │ │ │ │ │ └── is-buffer@1.1.6
│ │ │ │ │ ├── longest@1.0.1
│ │ │ │ │ └── repeat-string@1.6.1
│ │ │ │ └── lazy-cache@1.0.4
│ │ │ ├── right-align@0.1.3
│ │ │ └── wordwrap@0.0.2
│ │ ├── decamelize@1.2.0
│ │ └── window-size@0.1.0
│ └── uri-path@0.0.2
├─┬ jade@1.11.0
│ ├── character-parser@1.2.1
│ ├── commander@2.6.0
│ ├─┬ constantinople@3.0.2
│ │ └── acorn@2.7.0
│ ├─┬ jstransformer@0.0.2
│ │ ├── is-promise@2.1.0
│ │ └─┬ promise@6.1.0
│ │ └── asap@1.0.0
│ ├─┬ mkdirp@0.5.1
│ │ └── minimist@0.0.8
│ ├─┬ transformers@2.1.0
│ │ ├─┬ css@1.0.8
│ │ │ ├── css-parse@1.0.4
│ │ │ └── css-stringify@1.0.5
│ │ ├─┬ promise@2.0.0
│ │ │ └── is-promise@1.0.1
│ │ └─┬ uglify-js@2.2.5
│ │ ├─┬ optimist@0.3.7
│ │ │ └── wordwrap@0.0.3
│ │ └── source-map@0.1.43
│ ├─┬ uglify-js@2.8.29
│ │ └── source-map@0.5.7
│ ├── void-elements@2.0.1
│ └─┬ with@4.0.3
│ ├── acorn@1.2.2
│ └── acorn-globals@1.0.9
├── lodash@3.10.1
├─┬ primus@6.1.0
│ ├─┬ access-control@1.0.1
│ │ ├── millisecond@0.1.2
│ │ ├── setheader@1.0.1
│ │ └── vary@1.1.2
│ ├── asyncemit@3.0.1
│ ├─┬ create-server@1.0.1
│ │ └── connected@0.0.2
│ ├─┬ diagnostics@1.1.1
│ │ ├─┬ colorspace@1.1.1
│ │ │ ├─┬ color@3.0.0
│ │ │ │ ├─┬ color-convert@1.9.3
│ │ │ │ │ └── color-name@1.1.3
│ │ │ │ └─┬ color-string@1.5.3
│ │ │ │ └─┬ simple-swizzle@0.2.2
│ │ │ │ └── is-arrayish@0.3.2
│ │ │ └── text-hex@1.0.0
│ │ ├─┬ enabled@1.0.2
│ │ │ └── env-variable@0.0.5
│ │ └─┬ kuler@1.0.1
│ │ └── colornames@1.1.1
│ ├── eventemitter3@2.0.3
│ ├── forwarded-for@1.0.1
│ ├─┬ fusing@1.0.0
│ │ ├── emits@3.0.0
│ │ └─┬ predefine@0.1.2
│ │ └── extendible@0.1.1
│ ├─┬ setheader@0.0.4
│ │ └── debug@0.7.4
│ ├── ultron@1.1.1
│ └── yeast@0.1.2
├── primus-emit@1.0.0
├── primus-spark-latency@0.1.1
└─┬ ws@1.1.5
├── options@0.0.6
└── ultron@1.0.2
[root@echo eth-netstats]# sudo npm install -g grunt-cli
/usr/bin/grunt -> /usr/lib/node_modules/grunt-cli/bin/grunt
/usr/lib
└─┬ grunt-cli@1.3.2
├── grunt-known-options@1.1.1
├── interpret@1.1.0
├─┬ liftoff@2.5.0
│ ├── extend@3.0.2
│ ├─┬ findup-sync@2.0.0
│ │ ├── detect-file@1.0.0
│ │ ├─┬ is-glob@3.1.0
│ │ │ └── is-extglob@2.1.1
│ │ ├─┬ micromatch@3.1.10
│ │ │ ├── arr-diff@4.0.0
│ │ │ ├── array-unique@0.3.2
│ │ │ ├─┬ braces@2.3.2
│ │ │ │ ├── arr-flatten@1.1.0
│ │ │ │ ├─┬ extend-shallow@2.0.1
│ │ │ │ │ └── is-extendable@0.1.1
│ │ │ │ ├─┬ fill-range@4.0.0
│ │ │ │ │ ├── extend-shallow@2.0.1
│ │ │ │ │ ├─┬ is-number@3.0.0
│ │ │ │ │ │ └─┬ kind-of@3.2.2
│ │ │ │ │ │ └── is-buffer@1.1.6
│ │ │ │ │ ├── repeat-string@1.6.1
│ │ │ │ │ └── to-regex-range@2.1.1
│ │ │ │ ├── repeat-element@1.1.3
│ │ │ │ ├─┬ snapdragon-node@2.1.1
│ │ │ │ │ ├─┬ define-property@1.0.0
│ │ │ │ │ │ └─┬ is-descriptor@1.0.2
│ │ │ │ │ │ ├── is-accessor-descriptor@1.0.0
│ │ │ │ │ │ └── is-data-descriptor@1.0.0
│ │ │ │ │ └─┬ snapdragon-util@3.0.1
│ │ │ │ │ └── kind-of@3.2.2
│ │ │ │ └── split-string@3.1.0
│ │ │ ├─┬ define-property@2.0.2
│ │ │ │ └─┬ is-descriptor@1.0.2
│ │ │ │ ├── is-accessor-descriptor@1.0.0
│ │ │ │ └── is-data-descriptor@1.0.0
│ │ │ ├─┬ extend-shallow@3.0.2
│ │ │ │ ├── assign-symbols@1.0.0
│ │ │ │ └── is-extendable@1.0.1
│ │ │ ├─┬ extglob@2.0.4
│ │ │ │ ├─┬ define-property@1.0.0
│ │ │ │ │ └─┬ is-descriptor@1.0.2
│ │ │ │ │ ├── is-accessor-descriptor@1.0.0
│ │ │ │ │ └── is-data-descriptor@1.0.0
│ │ │ │ ├─┬ expand-brackets@2.1.4
│ │ │ │ │ ├── define-property@0.2.5
│ │ │ │ │ ├── extend-shallow@2.0.1
│ │ │ │ │ └── posix-character-classes@0.1.1
│ │ │ │ └── extend-shallow@2.0.1
│ │ │ ├── fragment-cache@0.2.1
│ │ │ ├── kind-of@6.0.2
│ │ │ ├─┬ nanomatch@1.2.13
│ │ │ │ └── is-windows@1.0.2
│ │ │ ├─┬ regex-not@1.0.2
│ │ │ │ └─┬ safe-regex@1.1.0
│ │ │ │ └── ret@0.1.15
│ │ │ ├─┬ snapdragon@0.8.2
│ │ │ │ ├─┬ base@0.11.2
│ │ │ │ │ ├─┬ cache-base@1.0.1
│ │ │ │ │ │ ├─┬ collection-visit@1.0.0
│ │ │ │ │ │ │ ├── map-visit@1.0.0
│ │ │ │ │ │ │ └── object-visit@1.0.1
│ │ │ │ │ │ ├── get-value@2.0.6
│ │ │ │ │ │ ├─┬ has-value@1.0.0
│ │ │ │ │ │ │ └─┬ has-values@1.0.0
│ │ │ │ │ │ │ └── kind-of@4.0.0
│ │ │ │ │ │ ├─┬ set-value@2.0.0
│ │ │ │ │ │ │ └── extend-shallow@2.0.1
│ │ │ │ │ │ ├─┬ to-object-path@0.3.0
│ │ │ │ │ │ │ └── kind-of@3.2.2
│ │ │ │ │ │ ├─┬ union-value@1.0.0
│ │ │ │ │ │ │ └─┬ set-value@0.4.3
│ │ │ │ │ │ │ └── extend-shallow@2.0.1
│ │ │ │ │ │ └─┬ unset-value@1.0.0
│ │ │ │ │ │ └─┬ has-value@0.3.1
│ │ │ │ │ │ ├── has-values@0.1.4
│ │ │ │ │ │ └─┬ isobject@2.1.0
│ │ │ │ │ │ └── isarray@1.0.0
│ │ │ │ │ ├─┬ class-utils@0.3.6
│ │ │ │ │ │ ├── arr-union@3.1.0
│ │ │ │ │ │ ├── define-property@0.2.5
│ │ │ │ │ │ └─┬ static-extend@0.1.2
│ │ │ │ │ │ ├── define-property@0.2.5
│ │ │ │ │ │ └─┬ object-copy@0.1.0
│ │ │ │ │ │ ├── copy-descriptor@0.1.1
│ │ │ │ │ │ ├── define-property@0.2.5
│ │ │ │ │ │ └── kind-of@3.2.2
│ │ │ │ │ ├── component-emitter@1.2.1
│ │ │ │ │ ├─┬ define-property@1.0.0
│ │ │ │ │ │ └─┬ is-descriptor@1.0.2
│ │ │ │ │ │ ├── is-accessor-descriptor@1.0.0
│ │ │ │ │ │ └── is-data-descriptor@1.0.0
│ │ │ │ │ ├─┬ mixin-deep@1.3.1
│ │ │ │ │ │ └── is-extendable@1.0.1
│ │ │ │ │ └── pascalcase@0.1.1
│ │ │ │ ├─┬ debug@2.6.9
│ │ │ │ │ └── ms@2.0.0
│ │ │ │ ├─┬ define-property@0.2.5
│ │ │ │ │ └─┬ is-descriptor@0.1.6
│ │ │ │ │ ├─┬ is-accessor-descriptor@0.1.6
│ │ │ │ │ │ └── kind-of@3.2.2
│ │ │ │ │ ├─┬ is-data-descriptor@0.1.4
│ │ │ │ │ │ └── kind-of@3.2.2
│ │ │ │ │ └── kind-of@5.1.0
│ │ │ │ ├── extend-shallow@2.0.1
│ │ │ │ ├── source-map@0.5.7
│ │ │ │ ├─┬ source-map-resolve@0.5.2
│ │ │ │ │ ├── atob@2.1.2
│ │ │ │ │ ├── decode-uri-component@0.2.0
│ │ │ │ │ ├── resolve-url@0.2.1
│ │ │ │ │ ├── source-map-url@0.4.0
│ │ │ │ │ └── urix@0.1.0
│ │ │ │ └── use@3.1.1
│ │ │ └── to-regex@3.0.2
│ │ └─┬ resolve-dir@1.0.1
│ │ └─┬ global-modules@1.0.0
│ │ └─┬ global-prefix@1.0.2
│ │ ├── ini@1.3.5
│ │ └─┬ which@1.3.1
│ │ └── isexe@2.0.0
│ ├─┬ fined@1.1.1
│ │ ├── expand-tilde@2.0.2
│ │ ├─┬ object.defaults@1.1.0
│ │ │ ├── array-each@1.0.1
│ │ │ └── array-slice@1.1.0
│ │ ├── object.pick@1.3.0
│ │ └─┬ parse-filepath@1.0.2
│ │ ├─┬ is-absolute@1.0.0
│ │ │ └─┬ is-relative@1.0.0
│ │ │ └─┬ is-unc-path@1.0.0
│ │ │ └── unc-path-regex@0.1.2
│ │ ├── map-cache@0.2.2
│ │ └─┬ path-root@0.1.1
│ │ └── path-root-regex@0.1.2
│ ├── flagged-respawn@1.0.1
│ ├─┬ is-plain-object@2.0.4
│ │ └── isobject@3.0.1
│ ├─┬ object.map@1.0.1
│ │ ├─┬ for-own@1.0.0
│ │ │ └── for-in@1.0.2
│ │ └── make-iterator@1.0.1
│ ├── rechoir@0.6.2
│ └─┬ resolve@1.9.0
│ └── path-parse@1.0.6
├─┬ nopt@4.0.1
│ ├── abbrev@1.1.1
│ └─┬ osenv@0.1.5
│ ├── os-homedir@1.0.2
│ └── os-tmpdir@1.0.2
└─┬ v8flags@3.1.2
└─┬ homedir-polyfill@1.0.1
└── parse-passwd@1.0.0
[root@echo eth-netstats]# grunt
Running "clean:build" (clean) task
>> 0 paths cleaned.
Running "clean:cleanup_js" (clean) task
>> 0 paths cleaned.
Running "clean:cleanup_css" (clean) task
>> 0 paths cleaned.
Running "jade:build" (jade) task
>> 1 file created.
Running "copy:build" (copy) task
Copied 31 files
Running "cssmin:build" (cssmin) task
>> 2 files created. 33.36 kB → 30.53 kB
Running "concat:vendor" (concat) task
File dist/js/vendor.min.js created.
Running "concat:scripts" (concat) task
File dist/js/app.js created.
Running "uglify:app" (uglify) task
>> 1 file created.
Running "concat:netstats" (concat) task
File dist/js/netstats.min.js created.
Running "concat:css" (concat) task
File dist/css/netstats.min.css created.
Running "clean:cleanup_js" (clean) task
>> 3 paths cleaned.
Running "clean:cleanup_css" (clean) task
>> 4 paths cleaned.
Done, without errors.
[root@echo eth-netstats]# git clone GitHub - cubedro/eth-net-intelligence-api: Ethereum Network Intelligence API
Cloning into 'eth-net-intelligence-api'...
remote: Enumerating objects: 1699, done.
remote: Total 1699 (delta 0), reused 0 (delta 0), pack-reused 1699
Receiving objects: 100% (1699/1699), 279.72 KiB | 0 bytes/s, done.
Resolving deltas: 100% (833/833), done.
[root@echo eth-net-intelligence-api]# npm install pm2 -g
/usr/bin/pm2 -> /usr/lib/node_modules/pm2/bin/pm2
/usr/bin/pm2-dev -> /usr/lib/node_modules/pm2/bin/pm2-dev
/usr/bin/pm2-docker -> /usr/lib/node_modules/pm2/bin/pm2-docker
/usr/bin/pm2-runtime -> /usr/lib/node_modules/pm2/bin/pm2-runtime
/usr/lib
└─┬ pm2@3.2.9
├─┬ @pm2/agent@0.5.22
│ └─┬ ws@5.2.2
│ └── async-limiter@1.0.0
├─┬ @pm2/io@2.4.7
│ ├─┬ @pm2/agent-node@1.1.3
│ │ ├─┬ proxy-agent@3.0.3
│ │ │ ├─┬ agent-base@4.2.1
│ │ │ │ └─┬ es6-promisify@5.0.0
│ │ │ │ └── es6-promise@4.2.5
│ │ │ ├─┬ http-proxy-agent@2.1.0
│ │ │ │ └─┬ debug@3.1.0
│ │ │ │ └── ms@2.0.0
│ │ │ ├── https-proxy-agent@2.2.1
│ │ │ ├─┬ lru-cache@4.1.5
│ │ │ │ ├── pseudomap@1.0.2
│ │ │ │ └── yallist@2.1.2
│ │ │ ├─┬ pac-proxy-agent@3.0.0
│ │ │ │ ├─┬ get-uri@2.0.3
│ │ │ │ │ ├─┬ data-uri-to-buffer@2.0.0
│ │ │ │ │ │ └── @types/node@8.10.39
│ │ │ │ │ ├── debug@4.1.1
│ │ │ │ │ ├── file-uri-to-path@1.0.0
│ │ │ │ │ ├─┬ ftp@0.3.10
│ │ │ │ │ │ ├─┬ readable-stream@1.1.14
│ │ │ │ │ │ │ ├── isarray@0.0.1
│ │ │ │ │ │ │ └── string_decoder@0.10.31
│ │ │ │ │ │ └── xregexp@2.0.0
│ │ │ │ │ └─┬ readable-stream@3.1.1
│ │ │ │ │ └── string_decoder@1.2.0
│ │ │ │ ├─┬ pac-resolver@3.0.0
│ │ │ │ │ ├── co@4.6.0
│ │ │ │ │ ├─┬ degenerator@1.0.4
│ │ │ │ │ │ ├── ast-types@0.11.7
│ │ │ │ │ │ ├─┬ escodegen@1.11.0
│ │ │ │ │ │ │ ├── estraverse@4.2.0
│ │ │ │ │ │ │ ├── esutils@2.0.2
│ │ │ │ │ │ │ └─┬ optionator@0.8.2
│ │ │ │ │ │ │ ├── deep-is@0.1.3
│ │ │ │ │ │ │ ├── fast-levenshtein@2.0.6
│ │ │ │ │ │ │ ├── levn@0.3.0
│ │ │ │ │ │ │ ├── prelude-ls@1.1.2
│ │ │ │ │ │ │ ├── type-check@0.3.2
│ │ │ │ │ │ │ └── wordwrap@1.0.0
│ │ │ │ │ │ └── esprima@3.1.3
│ │ │ │ │ ├── ip@1.1.5
│ │ │ │ │ ├── netmask@1.0.6
│ │ │ │ │ └── thunkify@2.1.2
│ │ │ │ └─┬ raw-body@2.3.3
│ │ │ │ ├── bytes@3.0.0
│ │ │ │ ├─┬ http-errors@1.6.3
│ │ │ │ │ ├── depd@1.1.2
│ │ │ │ │ ├── setprototypeof@1.1.0
│ │ │ │ │ └── statuses@1.5.0
│ │ │ │ └── unpipe@1.0.0
│ │ │ ├── proxy-from-env@1.0.0
│ │ │ └─┬ socks-proxy-agent@4.0.1
│ │ │ └─┬ socks@2.2.2
│ │ │ └── smart-buffer@4.0.1
│ │ └── ws@6.1.2
│ ├─┬ debug@3.1.0
│ │ └── ms@2.0.0
│ ├── deep-metrics@0.0.2
│ ├── deepmerge@2.1.1
│ ├── event-loop-inspector@1.2.2
│ ├── json-stringify-safe@5.0.1
│ ├── semver@5.5.0
│ ├── signal-exit@3.0.2
│ ├── tslib@1.9.3
│ └─┬ vxx@1.2.2
│ ├─┬ continuation-local-storage@3.2.1
│ │ ├── async-listener@0.6.10
│ │ └── emitter-listener@1.1.2
│ ├─┬ debug@2.6.9
│ │ └── ms@2.0.0
│ ├── extend@3.0.2
│ ├── is@3.3.0
│ ├── lodash.isequal@4.5.0
│ ├── lodash.merge@4.6.1
│ ├── methods@1.1.2
│ ├── shimmer@1.2.1
│ └── uuid@3.3.2
├─┬ @pm2/js-api@0.5.45
│ ├─┬ axios@0.16.2
│ │ ├─┬ follow-redirects@1.6.1
│ │ │ └─┬ debug@3.1.0
│ │ │ └── ms@2.0.0
│ │ └── is-buffer@1.1.6
│ ├─┬ debug@2.6.9
│ │ └── ms@2.0.0
│ ├── eventemitter2@4.1.2
│ └─┬ ws@3.3.3
│ └── ultron@1.1.1
├─┬ async@2.6.1
│ └── lodash@4.17.11
├── blessed@0.1.81
├─┬ chalk@2.4.2
│ ├─┬ ansi-styles@3.2.1
│ │ └─┬ color-convert@1.9.3
│ │ └── color-name@1.1.3
│ ├── escape-string-regexp@1.0.5
│ └─┬ supports-color@5.5.0
│ └── has-flag@3.0.0
├─┬ chokidar@2.0.4
│ ├─┬ anymatch@2.0.0
│ │ └─┬ micromatch@3.1.10
│ │ ├── arr-diff@4.0.0
│ │ ├─┬ define-property@2.0.2
│ │ │ └─┬ is-descriptor@1.0.2
│ │ │ ├── is-accessor-descriptor@1.0.0
│ │ │ └── is-data-descriptor@1.0.0
│ │ ├─┬ extend-shallow@3.0.2
│ │ │ ├── assign-symbols@1.0.0
│ │ │ └─┬ is-extendable@1.0.1
│ │ │ └── is-plain-object@2.0.4
│ │ ├─┬ extglob@2.0.4
│ │ │ ├─┬ define-property@1.0.0
│ │ │ │ └─┬ is-descriptor@1.0.2
│ │ │ │ ├── is-accessor-descriptor@1.0.0
│ │ │ │ └── is-data-descriptor@1.0.0
│ │ │ ├─┬ expand-brackets@2.1.4
│ │ │ │ ├─┬ debug@2.6.9
│ │ │ │ │ └── ms@2.0.0
│ │ │ │ ├── define-property@0.2.5
│ │ │ │ ├── extend-shallow@2.0.1
│ │ │ │ └── posix-character-classes@0.1.1
│ │ │ └── extend-shallow@2.0.1
│ │ ├── fragment-cache@0.2.1
│ │ ├── kind-of@6.0.2
│ │ ├─┬ nanomatch@1.2.13
│ │ │ └── is-windows@1.0.2
│ │ ├── object.pick@1.3.0
│ │ └── regex-not@1.0.2
│ ├── async-each@1.0.1
│ ├─┬ braces@2.3.2
│ │ ├── arr-flatten@1.1.0
│ │ ├── array-unique@0.3.2
│ │ ├─┬ extend-shallow@2.0.1
│ │ │ └── is-extendable@0.1.1
│ │ ├─┬ fill-range@4.0.0
│ │ │ ├── extend-shallow@2.0.1
│ │ │ ├─┬ is-number@3.0.0
│ │ │ │ └── kind-of@3.2.2
│ │ │ ├── repeat-string@1.6.1
│ │ │ └── to-regex-range@2.1.1
│ │ ├── isobject@3.0.1
│ │ ├── repeat-element@1.1.3
│ │ ├─┬ snapdragon@0.8.2
│ │ │ ├─┬ base@0.11.2
│ │ │ │ ├─┬ cache-base@1.0.1
│ │ │ │ │ ├─┬ collection-visit@1.0.0
│ │ │ │ │ │ ├── map-visit@1.0.0
│ │ │ │ │ │ └── object-visit@1.0.1
│ │ │ │ │ ├── get-value@2.0.6
│ │ │ │ │ ├─┬ has-value@1.0.0
│ │ │ │ │ │ └─┬ has-values@1.0.0
│ │ │ │ │ │ └── kind-of@4.0.0
│ │ │ │ │ ├─┬ set-value@2.0.0
│ │ │ │ │ │ └── extend-shallow@2.0.1
│ │ │ │ │ ├─┬ to-object-path@0.3.0
│ │ │ │ │ │ └── kind-of@3.2.2
│ │ │ │ │ ├─┬ union-value@1.0.0
│ │ │ │ │ │ └─┬ set-value@0.4.3
│ │ │ │ │ │ └── extend-shallow@2.0.1
│ │ │ │ │ └─┬ unset-value@1.0.0
│ │ │ │ │ └─┬ has-value@0.3.1
│ │ │ │ │ ├── has-values@0.1.4
│ │ │ │ │ └─┬ isobject@2.1.0
│ │ │ │ │ └── isarray@1.0.0
│ │ │ │ ├─┬ class-utils@0.3.6
│ │ │ │ │ ├── arr-union@3.1.0
│ │ │ │ │ ├── define-property@0.2.5
│ │ │ │ │ └─┬ static-extend@0.1.2
│ │ │ │ │ ├── define-property@0.2.5
│ │ │ │ │ └─┬ object-copy@0.1.0
│ │ │ │ │ ├── copy-descriptor@0.1.1
│ │ │ │ │ ├── define-property@0.2.5
│ │ │ │ │ └── kind-of@3.2.2
│ │ │ │ ├── component-emitter@1.2.1
│ │ │ │ ├─┬ define-property@1.0.0
│ │ │ │ │ └─┬ is-descriptor@1.0.2
│ │ │ │ │ ├── is-accessor-descriptor@1.0.0
│ │ │ │ │ └── is-data-descriptor@1.0.0
│ │ │ │ ├─┬ mixin-deep@1.3.1
│ │ │ │ │ ├── for-in@1.0.2
│ │ │ │ │ └── is-extendable@1.0.1
│ │ │ │ └── pascalcase@0.1.1
│ │ │ ├─┬ debug@2.6.9
│ │ │ │ └── ms@2.0.0
│ │ │ ├─┬ define-property@0.2.5
│ │ │ │ └─┬ is-descriptor@0.1.6
│ │ │ │ ├─┬ is-accessor-descriptor@0.1.6
│ │ │ │ │ └── kind-of@3.2.2
│ │ │ │ ├─┬ is-data-descriptor@0.1.4
│ │ │ │ │ └── kind-of@3.2.2
│ │ │ │ └── kind-of@5.1.0
│ │ │ ├── extend-shallow@2.0.1
│ │ │ ├── map-cache@0.2.2
│ │ │ ├── source-map@0.5.7
│ │ │ ├─┬ source-map-resolve@0.5.2
│ │ │ │ ├── atob@2.1.2
│ │ │ │ ├── decode-uri-component@0.2.0
│ │ │ │ ├── resolve-url@0.2.1
│ │ │ │ ├── source-map-url@0.4.0
│ │ │ │ └── urix@0.1.0
│ │ │ └── use@3.1.1
│ │ ├─┬ snapdragon-node@2.1.1
│ │ │ ├─┬ define-property@1.0.0
│ │ │ │ └─┬ is-descriptor@1.0.2
│ │ │ │ ├── is-accessor-descriptor@1.0.0
│ │ │ │ └── is-data-descriptor@1.0.0
│ │ │ └─┬ snapdragon-util@3.0.1
│ │ │ └── kind-of@3.2.2
│ │ ├── split-string@3.1.0
│ │ └─┬ to-regex@3.0.2
│ │ └─┬ safe-regex@1.1.0
│ │ └── ret@0.1.15
│ ├─┬ glob-parent@3.1.0
│ │ ├── is-glob@3.1.0
│ │ └── path-dirname@1.0.2
│ ├── inherits@2.0.3
│ ├─┬ is-binary-path@1.0.1
│ │ └── binary-extensions@1.12.0
│ ├─┬ is-glob@4.0.0
│ │ └── is-extglob@2.1.1
│ ├── lodash.debounce@4.0.8
│ ├─┬ normalize-path@2.1.1
│ │ └── remove-trailing-separator@1.1.0
│ ├── path-is-absolute@1.0.1
│ ├─┬ readdirp@2.2.1
│ │ ├── graceful-fs@4.1.15
│ │ └─┬ readable-stream@2.3.6
│ │ ├── core-util-is@1.0.2
│ │ ├── isarray@1.0.0
│ │ ├── process-nextick-args@2.0.0
│ │ ├── string_decoder@1.1.1
│ │ └── util-deprecate@1.0.2
│ └── upath@1.1.0
├─┬ cli-table-redemption@1.0.1
│ └─┬ chalk@1.1.3
│ ├── ansi-styles@2.2.1
│ ├─┬ has-ansi@2.0.0
│ │ └── ansi-regex@2.1.1
│ ├── strip-ansi@3.0.1
│ └── supports-color@2.0.0
├── commander@2.15.1
├─┬ cron@1.6.0
│ └── moment-timezone@0.5.23
├── date-fns@1.30.1
├─┬ debug@3.2.6
│ └── ms@2.1.1
├── eventemitter2@5.0.1
├── fclone@1.0.11
├── gkt@1.0.0
├─┬ mkdirp@0.5.1
│ └── minimist@0.0.8
├── moment@2.23.0
├─┬ needle@2.2.4
│ ├─┬ debug@2.6.9
│ │ └── ms@2.0.0
│ ├─┬ iconv-lite@0.4.23
│ │ └── safer-buffer@2.1.2
│ └── sax@1.2.4
├─┬ nssocket@0.6.0
│ ├── eventemitter2@0.4.14
│ └── lazy@1.0.11
├─┬ pidusage@2.0.17
│ └── safe-buffer@5.1.2
├─┬ pm2-axon@3.3.0
│ ├── amp@0.3.1
│ ├── amp-message@0.1.2
│ └── escape-regexp@0.0.1
├── pm2-axon-rpc@0.5.1
├─┬ pm2-deploy@0.4.0
│ └── tv4@1.3.0
├─┬ pm2-multimeter@0.1.2
│ └── charm@0.1.2
├─┬ promptly@2.2.0
│ └─┬ read@1.0.7
│ └── mute-stream@0.0.8
├── semver@5.6.0
├─┬ shelljs@0.8.3
│ ├─┬ glob@7.1.3
│ │ ├── fs.realpath@1.0.0
│ │ ├─┬ inflight@1.0.6
│ │ │ └── wrappy@1.0.2
│ │ ├─┬ minimatch@3.0.4
│ │ │ └─┬ brace-expansion@1.1.11
│ │ │ ├── balanced-match@1.0.0
│ │ │ └── concat-map@0.0.1
│ │ └── once@1.4.0
│ ├── interpret@1.2.0
│ └─┬ rechoir@0.6.2
│ └─┬ resolve@1.9.0
│ └── path-parse@1.0.6
├─┬ source-map-support@0.5.10
│ ├── buffer-from@1.1.1
│ └── source-map@0.6.1
├── sprintf-js@1.1.1
├── v8-compile-cache@2.0.2
├─┬ vizion@2.0.2
│ ├── git-node-fs@1.0.0
│ ├── ini@1.3.5
│ ├─┬ js-git@0.7.8
│ │ ├── bodec@0.1.0
│ │ ├── culvert@0.1.2
│ │ ├── git-sha1@0.1.2
│ │ └── pako@0.2.9
│ ├── lodash.findindex@4.6.0
│ ├── lodash.foreach@4.5.0
│ ├── lodash.get@4.4.2
│ └── lodash.last@3.0.0
└─┬ yamljs@0.3.0
└─┬ argparse@1.0.10
└── sprintf-js@1.0.3
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.2 (node_modules/pm2/node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.7: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
[root@echo eth-net-intelligence-api]# npm install -g web3
npm WARN deprecated fs-promise@2.0.3: Use mz or fs-extra^3.0 with Promise Support
npm WARN deprecated tar.gz@1.0.7: ⚠️ WARNING ⚠️ tar.gz module has been deprecated and your application is vulnerable. Please use tar module instead: npm: tar
npm WARN lifecycle scrypt@6.0.3~preinstall: cannot run in wd %s %s (wd=%s) scrypt@6.0.3 node node-scrypt-preinstall.js /usr/lib/node_modules/.staging/scrypt-6e09b00c
> scrypt@6.0.3 install /usr/lib/node_modules/web3/node_modules/scrypt
> node-gyp rebuild
gyp WARN EACCES user "mbarrow" does not have permission to access the dev dir "/root/.node-gyp/6.16.0"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/lib/node_modules/web3/node_modules/scrypt/.node-gyp"
make: Entering directory `/usr/lib/node_modules/web3/node_modules/scrypt/build'
SOLINK_MODULE(target) Release/obj.target/copied_files.node
COPY Release/copied_files.node
CC(target) Release/obj.target/scrypt_wrapper/src/util/memlimit.o
CC(target) Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o
CC(target) Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o
CC(target) Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o
AR(target) Release/obj.target/scrypt_wrapper.a
COPY Release/scrypt_wrapper.a
CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o
CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o
CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o
CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o
CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o
CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o
AR(target) Release/obj.target/scrypt_lib.a
COPY Release/scrypt_lib.a
CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o
CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o
In file included from ../src/node-boilerplate/inc/scrypt_params_async.h:28:0,
from ../src/node-boilerplate/scrypt_params_async.cc:4:
../src/node-boilerplate/inc/scrypt_async.h: In member function 'virtual void ScryptAsyncWorker::HandleErrorCallback()':
../src/node-boilerplate/inc/scrypt_async.h:53:29: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated (declared at ../../nan/nan.h:1618) [-Wdeprecated-declarations]
callback->Call(1, argv);
^
../src/node-boilerplate/scrypt_params_async.cc: In member function 'virtual void ScryptParamsAsyncWorker::HandleOKCallback()':
../src/node-boilerplate/scrypt_params_async.cc:32:25: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated (declared at ../../nan/nan.h:1618) [-Wdeprecated-declarations]
callback->Call(2, argv);
^
CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_sync.o
CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_async.o
In file included from ../src/node-boilerplate/inc/scrypt_kdf_async.h:28:0,
from ../src/node-boilerplate/scrypt_kdf_async.cc:4:
../src/node-boilerplate/inc/scrypt_async.h: In member function 'virtual void ScryptAsyncWorker::HandleErrorCallback()':
../src/node-boilerplate/inc/scrypt_async.h:53:29: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated (declared at ../../nan/nan.h:1618) [-Wdeprecated-declarations]
callback->Call(1, argv);
^
../src/node-boilerplate/scrypt_kdf_async.cc: In member function 'virtual void ScryptKDFAsyncWorker::HandleOKCallback()':
../src/node-boilerplate/scrypt_kdf_async.cc:28:27: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated (declared at ../../nan/nan.h:1618) [-Wdeprecated-declarations]
callback->Call(2, argv);
^
CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf_sync.o
CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_sync.o
CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_kdf-verify_async.o
In file included from ../src/node-boilerplate/inc/scrypt_kdf-verify_async.h:28:0,
from ../src/node-boilerplate/scrypt_kdf-verify_async.cc:4:
../src/node-boilerplate/inc/scrypt_async.h: In member function 'virtual void ScryptAsyncWorker::HandleErrorCallback()':
../src/node-boilerplate/inc/scrypt_async.h:53:29: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated (declared at ../../nan/nan.h:1618) [-Wdeprecated-declarations]
callback->Call(1, argv);
^
../src/node-boilerplate/scrypt_kdf-verify_async.cc: In member function 'virtual void ScryptKDFVerifyAsyncWorker::HandleOKCallback()':
../src/node-boilerplate/scrypt_kdf-verify_async.cc:30:25: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated (declared at ../../nan/nan.h:1618) [-Wdeprecated-declarations]
callback->Call(2, argv);
^
CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_sync.o
CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_hash_async.o
In file included from ../src/node-boilerplate/inc/scrypt_hash_async.h:28:0,
from ../src/node-boilerplate/scrypt_hash_async.cc:28:
../src/node-boilerplate/inc/scrypt_async.h: In member function 'virtual void ScryptAsyncWorker::HandleErrorCallback()':
../src/node-boilerplate/inc/scrypt_async.h:53:29: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated (declared at ../../nan/nan.h:1618) [-Wdeprecated-declarations]
callback->Call(1, argv);
^
../src/node-boilerplate/scrypt_hash_async.cc: In member function 'virtual void ScryptHashAsyncWorker::HandleOKCallback()':
../src/node-boilerplate/scrypt_hash_async.cc:52:25: warning: 'v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const' is deprecated (declared at ../../nan/nan.h:1618) [-Wdeprecated-declarations]
callback->Call(2, argv);
^
CXX(target) Release/obj.target/scrypt/scrypt_node.o
SOLINK_MODULE(target) Release/obj.target/scrypt.node
COPY Release/scrypt.node
make: Leaving directory `/usr/lib/node_modules/web3/node_modules/scrypt/build'
> sha3@1.2.2 install /usr/lib/node_modules/web3/node_modules/sha3
> node-gyp rebuild
gyp WARN EACCES user "mbarrow" does not have permission to access the dev dir "/root/.node-gyp/6.16.0"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/lib/node_modules/web3/node_modules/sha3/.node-gyp"
make: Entering directory `/usr/lib/node_modules/web3/node_modules/sha3/build'
CXX(target) Release/obj.target/sha3/src/addon.o
CXX(target) Release/obj.target/sha3/src/displayIntermediateValues.o
CXX(target) Release/obj.target/sha3/src/KeccakF-1600-reference.o
CXX(target) Release/obj.target/sha3/src/KeccakNISTInterface.o
CXX(target) Release/obj.target/sha3/src/KeccakSponge.o
SOLINK_MODULE(target) Release/obj.target/sha3.node
COPY Release/sha3.node
make: Leaving directory `/usr/lib/node_modules/web3/node_modules/sha3/build'
> websocket@1.0.26 install /usr/lib/node_modules/web3/node_modules/websocket
> (node-gyp rebuild 2> builderror.log) || (exit 0)
make: Entering directory `/usr/lib/node_modules/web3/node_modules/websocket/build'
CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
SOLINK_MODULE(target) Release/obj.target/bufferutil.node
COPY Release/bufferutil.node
CXX(target) Release/obj.target/validation/src/validation.o
SOLINK_MODULE(target) Release/obj.target/validation.node
COPY Release/validation.node
make: Leaving directory `/usr/lib/node_modules/web3/node_modules/websocket/build'
/usr/lib
└─┬ web3@1.0.0-beta.37
├─┬ web3-bzz@1.0.0-beta.37
│ ├─┬ got@7.1.0
│ │ ├─┬ decompress-response@3.3.0
│ │ │ └── mimic-response@1.0.1
│ │ ├── duplexer3@0.1.4
│ │ ├── get-stream@3.0.0
│ │ ├── is-plain-obj@1.1.0
│ │ ├── is-retry-allowed@1.1.0
│ │ ├── is-stream@1.1.0
│ │ ├─┬ isurl@1.0.0
│ │ │ ├─┬ has-to-string-tag-x@1.4.1
│ │ │ │ └── has-symbol-support-x@1.4.2
│ │ │ └── is-object@1.0.1
│ │ ├── lowercase-keys@1.0.1
│ │ ├── p-cancelable@0.3.0
│ │ ├─┬ p-timeout@1.2.1
│ │ │ └── p-finally@1.0.0
│ │ ├── safe-buffer@5.1.2
│ │ ├── timed-out@4.0.1
│ │ ├─┬ url-parse-lax@1.0.0
│ │ │ └── prepend-http@1.0.4
│ │ └── url-to-options@1.0.1
│ ├─┬ swarm-js@0.1.37
│ │ ├── bluebird@3.5.3
│ │ ├─┬ buffer@5.2.1
│ │ │ ├── base64-js@1.3.0
│ │ │ └── ieee754@1.1.12
│ │ ├─┬ decompress@4.2.0
│ │ │ ├─┬ decompress-tar@4.1.1
│ │ │ │ ├── file-type@5.2.0
│ │ │ │ └─┬ tar-stream@1.6.2
│ │ │ │ ├── bl@1.2.2
│ │ │ │ ├─┬ buffer-alloc@1.2.0
│ │ │ │ │ ├── buffer-alloc-unsafe@1.1.0
│ │ │ │ │ └── buffer-fill@1.0.0
│ │ │ │ ├── end-of-stream@1.4.1
│ │ │ │ ├── fs-constants@1.0.0
│ │ │ │ ├─┬ readable-stream@2.3.6
│ │ │ │ │ ├── core-util-is@1.0.2
│ │ │ │ │ ├── isarray@1.0.0
│ │ │ │ │ ├── process-nextick-args@2.0.0
│ │ │ │ │ ├── string_decoder@1.1.1
│ │ │ │ │ └── util-deprecate@1.0.2
│ │ │ │ └── to-buffer@1.1.1
│ │ │ ├─┬ decompress-tarbz2@4.1.1
│ │ │ │ ├── file-type@6.2.0
│ │ │ │ ├── seek-bzip@1.0.5
│ │ │ │ └─┬ unbzip2-stream@1.3.1
│ │ │ │ ├─┬ buffer@3.6.0
│ │ │ │ │ └── base64-js@0.0.8
│ │ │ │ └── through@2.3.8
│ │ │ ├── decompress-targz@4.1.1
│ │ │ ├─┬ decompress-unzip@4.0.1
│ │ │ │ ├── file-type@3.9.0
│ │ │ │ ├─┬ get-stream@2.3.1
│ │ │ │ │ └─┬ pinkie-promise@2.0.1
│ │ │ │ │ └── pinkie@2.0.4
│ │ │ │ └─┬ yauzl@2.10.0
│ │ │ │ ├── buffer-crc32@0.2.13
│ │ │ │ └─┬ fd-slicer@1.1.0
│ │ │ │ └── pend@1.2.0
│ │ │ ├── graceful-fs@4.1.15
│ │ │ ├─┬ make-dir@1.3.0
│ │ │ │ └── pify@3.0.0
│ │ │ ├── pify@2.3.0
│ │ │ └─┬ strip-dirs@2.1.0
│ │ │ └── is-natural-number@4.0.1
│ │ ├─┬ fs-extra@2.1.2
│ │ │ └── jsonfile@2.4.0
│ │ ├─┬ fs-promise@2.0.3
│ │ │ ├─┬ mz@2.7.0
│ │ │ │ └── object-assign@4.1.1
│ │ │ └─┬ thenify-all@1.6.0
│ │ │ └── thenify@3.3.0
│ │ ├─┬ mime-types@2.1.21
│ │ │ └── mime-db@1.37.0
│ │ ├─┬ mkdirp-promise@5.0.1
│ │ │ └─┬ mkdirp@0.5.1
│ │ │ └── minimist@0.0.8
│ │ ├── mock-fs@4.7.0
│ │ ├── setimmediate@1.0.5
│ │ ├─┬ tar.gz@1.0.7
│ │ │ ├── bluebird@2.11.0
│ │ │ ├─┬ commander@2.8.1
│ │ │ │ └── graceful-readlink@1.0.1
│ │ │ ├─┬ fstream@1.0.11
│ │ │ │ └─┬ rimraf@2.6.3
│ │ │ │ └─┬ glob@7.1.3
│ │ │ │ ├── fs.realpath@1.0.0
│ │ │ │ ├── inflight@1.0.6
│ │ │ │ ├─┬ minimatch@3.0.4
│ │ │ │ │ └─┬ brace-expansion@1.1.11
│ │ │ │ │ ├── balanced-match@1.0.0
│ │ │ │ │ └── concat-map@0.0.1
│ │ │ │ └── path-is-absolute@1.0.1
│ │ │ ├── mout@0.11.1
│ │ │ └─┬ tar@2.2.1
│ │ │ └── block-stream@0.0.9
│ │ └─┬ xhr-request-promise@0.1.2
│ │ └─┬ xhr-request@1.1.0
│ │ ├── buffer-to-arraybuffer@0.0.5
│ │ ├─┬ query-string@5.1.1
│ │ │ ├── decode-uri-component@0.2.0
│ │ │ └── strict-uri-encode@1.1.0
│ │ ├─┬ simple-get@2.8.1
│ │ │ ├─┬ once@1.4.0
│ │ │ │ └── wrappy@1.0.2
│ │ │ └── simple-concat@1.0.0
│ │ └── url-set-query@1.0.0
│ └── underscore@1.8.3
├─┬ web3-core@1.0.0-beta.37
│ ├── web3-core-helpers@1.0.0-beta.37
│ ├─┬ web3-core-method@1.0.0-beta.37
│ │ └── web3-core-promievent@1.0.0-beta.37
│ └─┬ web3-core-requestmanager@1.0.0-beta.37
│ ├─┬ web3-providers-http@1.0.0-beta.37
│ │ └─┬ xhr2-cookies@1.1.0
│ │ └── cookiejar@2.1.2
│ ├─┬ web3-providers-ipc@1.0.0-beta.37
│ │ └─┬ oboe@2.1.3
│ │ └── http-https@1.0.0
│ └─┬ web3-providers-ws@1.0.0-beta.37
│ └─┬ websocket@1.0.26 (git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2)
│ ├─┬ debug@2.6.9
│ │ └── ms@2.0.0
│ ├── nan@2.10.0
│ ├── typedarray-to-buffer@3.1.5
│ └── yaeti@0.0.6
├─┬ web3-eth@1.0.0-beta.37
│ ├─┬ web3-core-subscriptions@1.0.0-beta.37
│ │ └── eventemitter3@1.1.1
│ ├─┬ web3-eth-abi@1.0.0-beta.37
│ │ └─┬ ethers@4.0.0-beta.1
│ │ ├── @types/node@10.12.18
│ │ ├── aes-js@3.0.0
│ │ ├── elliptic@6.3.3
│ │ ├── hash.js@1.1.3
│ │ ├── js-sha3@0.5.7
│ │ ├── scrypt-js@2.0.3
│ │ ├── setimmediate@1.0.4
│ │ ├── uuid@2.0.1
│ │ └── xmlhttprequest@1.8.0
│ ├─┬ web3-eth-accounts@1.0.0-beta.37
│ │ ├── any-promise@1.3.0
│ │ ├─┬ crypto-browserify@3.12.0
│ │ │ ├─┬ browserify-cipher@1.0.1
│ │ │ │ ├─┬ browserify-aes@1.2.0
│ │ │ │ │ └── buffer-xor@1.0.3
│ │ │ │ ├─┬ browserify-des@1.0.2
│ │ │ │ │ └── des.js@1.0.0
│ │ │ │ └── evp_bytestokey@1.0.3
│ │ │ ├─┬ browserify-sign@4.0.4
│ │ │ │ ├── browserify-rsa@4.0.1
│ │ │ │ └─┬ parse-asn1@5.1.3
│ │ │ │ └── asn1.js@4.10.1
│ │ │ ├── create-ecdh@4.0.3
│ │ │ ├─┬ create-hash@1.2.0
│ │ │ │ ├── cipher-base@1.0.4
│ │ │ │ ├─┬ md5.js@1.3.5
│ │ │ │ │ └── hash-base@3.0.4
│ │ │ │ ├── ripemd160@2.0.2
│ │ │ │ └── sha.js@2.4.11
│ │ │ ├── create-hmac@1.1.7
│ │ │ ├─┬ diffie-hellman@5.0.3
│ │ │ │ └── miller-rabin@4.0.1
│ │ │ ├── inherits@2.0.3
│ │ │ ├── pbkdf2@3.0.17
│ │ │ ├── public-encrypt@4.0.3
│ │ │ ├── randombytes@2.0.6
│ │ │ └── randomfill@1.0.4
│ │ ├── eth-lib@0.2.7
│ │ ├─┬ scrypt.js@0.2.0
│ │ │ ├── scrypt@6.0.3
│ │ │ └── scryptsy@1.2.1
│ │ └── uuid@2.0.1
│ ├── web3-eth-contract@1.0.0-beta.37
│ ├─┬ web3-eth-ens@1.0.0-beta.37
│ │ └─┬ eth-ens-namehash@2.0.8
│ │ ├─┬ idna-uts46-hx@2.3.1
│ │ │ └── punycode@2.1.0
│ │ └── js-sha3@0.5.7
│ └─┬ web3-eth-iban@1.0.0-beta.37
│ └── bn.js@4.11.6
├── web3-eth-personal@1.0.0-beta.37
├── web3-net@1.0.0-beta.37
├── web3-shh@1.0.0-beta.37
└─┬ web3-utils@1.0.0-beta.37
├── bn.js@4.11.6
├─┬ eth-lib@0.1.27
│ ├── bn.js@4.11.8
│ ├─┬ elliptic@6.4.1
│ │ ├── brorand@1.1.0
│ │ ├── hash.js@1.1.7
│ │ ├── hmac-drbg@1.0.1
│ │ ├── minimalistic-assert@1.0.1
│ │ └── minimalistic-crypto-utils@1.0.1
│ ├─┬ keccakjs@0.2.3
│ │ ├─┬ browserify-sha3@0.0.4
│ │ │ └── js-sha3@0.6.1
│ │ └── sha3@1.2.2
│ ├── nano-json-stream-parser@0.1.2
│ ├─┬ servify@0.1.12
│ │ ├─┬ body-parser@1.18.3
│ │ │ ├── bytes@3.0.0
│ │ │ ├── content-type@1.0.4
│ │ │ ├── depd@1.1.2
│ │ │ ├─┬ http-errors@1.6.3
│ │ │ │ └── statuses@1.5.0
│ │ │ ├─┬ iconv-lite@0.4.23
│ │ │ │ └── safer-buffer@2.1.2
│ │ │ ├─┬ on-finished@2.3.0
│ │ │ │ └── ee-first@1.1.1
│ │ │ ├── qs@6.5.2
│ │ │ ├─┬ raw-body@2.3.3
│ │ │ │ └── unpipe@1.0.0
│ │ │ └─┬ type-is@1.6.16
│ │ │ └── media-typer@0.3.0
│ │ ├─┬ cors@2.8.5
│ │ │ └── vary@1.1.2
│ │ ├─┬ express@4.16.4
│ │ │ ├─┬ accepts@1.3.5
│ │ │ │ └── negotiator@0.6.1
│ │ │ ├── array-flatten@1.1.1
│ │ │ ├── content-disposition@0.5.2
│ │ │ ├── cookie@0.3.1
│ │ │ ├── cookie-signature@1.0.6
│ │ │ ├── encodeurl@1.0.2
│ │ │ ├── escape-html@1.0.3
│ │ │ ├── etag@1.8.1
│ │ │ ├─┬ finalhandler@1.1.1
│ │ │ │ └── statuses@1.4.0
│ │ │ ├── fresh@0.5.2
│ │ │ ├── merge-descriptors@1.0.1
│ │ │ ├── methods@1.1.2
│ │ │ ├── parseurl@1.3.2
│ │ │ ├── path-to-regexp@0.1.7
│ │ │ ├─┬ proxy-addr@2.0.4
│ │ │ │ ├── forwarded@0.1.2
│ │ │ │ └── ipaddr.js@1.8.0
│ │ │ ├── range-parser@1.2.0
│ │ │ ├─┬ send@0.16.2
│ │ │ │ ├── destroy@1.0.4
│ │ │ │ ├── mime@1.4.1
│ │ │ │ └── statuses@1.4.0
│ │ │ ├── serve-static@1.13.2
│ │ │ ├── setprototypeof@1.1.0
│ │ │ ├── statuses@1.4.0
│ │ │ └── utils-merge@1.0.1
│ │ ├─┬ request@2.88.0
│ │ │ ├── aws-sign2@0.7.0
│ │ │ ├── aws4@1.8.0
│ │ │ ├── caseless@0.12.0
│ │ │ ├─┬ combined-stream@1.0.7
│ │ │ │ └── delayed-stream@1.0.0
│ │ │ ├── extend@3.0.2
│ │ │ ├── forever-agent@0.6.1
│ │ │ ├─┬ form-data@2.3.3
│ │ │ │ └── asynckit@0.4.0
│ │ │ ├─┬ har-validator@5.1.3
│ │ │ │ ├─┬ ajv@6.7.0
│ │ │ │ │ ├── fast-deep-equal@2.0.1
│ │ │ │ │ ├── fast-json-stable-stringify@2.0.0
│ │ │ │ │ ├── json-schema-traverse@0.4.1
│ │ │ │ │ └─┬ uri-js@4.2.2
│ │ │ │ │ └── punycode@2.1.1
│ │ │ │ └── har-schema@2.0.0
│ │ │ ├─┬ http-signature@1.2.0
│ │ │ │ ├── assert-plus@1.0.0
│ │ │ │ ├─┬ jsprim@1.4.1
│ │ │ │ │ ├── extsprintf@1.3.0
│ │ │ │ │ ├── json-schema@0.2.3
│ │ │ │ │ └── verror@1.10.0
│ │ │ │ └─┬ sshpk@1.16.0
│ │ │ │ ├── asn1@0.2.4
│ │ │ │ ├── bcrypt-pbkdf@1.0.2
│ │ │ │ ├── dashdash@1.14.1
│ │ │ │ ├── ecc-jsbn@0.1.2
│ │ │ │ ├── getpass@0.1.7
│ │ │ │ ├── jsbn@0.1.1
│ │ │ │ └── tweetnacl@0.14.5
│ │ │ ├── is-typedarray@1.0.0
│ │ │ ├── isstream@0.1.2
│ │ │ ├── json-stringify-safe@5.0.1
│ │ │ ├── oauth-sign@0.9.0
│ │ │ ├── performance-now@2.1.0
│ │ │ ├─┬ tough-cookie@2.4.3
│ │ │ │ ├── psl@1.1.31
│ │ │ │ └── punycode@1.4.1
│ │ │ ├── tunnel-agent@0.6.0
│ │ │ └── uuid@3.3.2
│ │ └─┬ xhr@2.5.0
│ │ ├─┬ global@4.3.2
│ │ │ ├─┬ min-document@2.19.0
│ │ │ │ └── dom-walk@0.1.1
│ │ │ └── process@0.5.2
│ │ ├── is-function@1.0.1
│ │ ├─┬ parse-headers@2.0.1
│ │ │ ├─┬ for-each@0.3.3
│ │ │ │ └── is-callable@1.1.4
│ │ │ └── trim@0.0.1
│ │ └── xtend@4.0.1
│ └─┬ ws@3.3.3
│ ├── async-limiter@1.0.0
│ └── ultron@1.1.1
├─┬ ethjs-unit@0.1.6
│ └── bn.js@4.11.6
├─┬ number-to-bn@1.7.0
│ ├── bn.js@4.11.6
│ └─┬ strip-hex-prefix@1.0.0
│ └── is-hex-prefixed@1.0.0
├── randomhex@0.1.5
└── utf8@2.1.1