├── version ├── .dockerignore ├── bin ├── bash.sh ├── build-and-run.sh ├── accounts-list.sh ├── logs-fullnode.sh ├── run-simple.sh ├── push.sh ├── tag.sh ├── verify.sh ├── run-preapproved.sh ├── run-no-accounts.sh ├── run-official.sh ├── build.sh ├── run.sh ├── run-persistent.sh ├── README.md └── prepare.js ├── scripts └── accounts-generation.sh ├── .gitignore ├── conf ├── eventron ├── FullNode.jar ├── BlockParser.jar ├── process.json ├── run_eventron.sh ├── run.sh └── full.conf ├── app ├── version.js ├── src │ ├── utils │ │ ├── tronWebBuilder.js │ │ ├── wait.js │ │ ├── accountsGeneration.js │ │ └── deriveAccountsFromSeedAndOrMnemonic.js │ ├── config.js │ └── routes │ │ └── admin.js ├── README.md ├── package.json ├── index.js └── package-lock.json ├── tronWeb ├── .gitattributes ├── pre-approve.sh ├── quickstart.sh ├── Dockerfile └── README.md /version: -------------------------------------------------------------------------------- 1 | 2.1.1 2 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | .cache 3 | app/node_modules 4 | /tmp -------------------------------------------------------------------------------- /bin/bash.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | docker exec -it tron bash 4 | -------------------------------------------------------------------------------- /bin/build-and-run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | bin/build.sh 4 | bin/run.sh 5 | -------------------------------------------------------------------------------- /bin/accounts-list.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | wget -qO- http://127.0.0.1:9090/admin/accounts 4 | -------------------------------------------------------------------------------- /bin/logs-fullnode.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | docker exec -it tron tail -f /tron/FullNode/logs/tron.log 4 | -------------------------------------------------------------------------------- /scripts/accounts-generation.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | sleep 2 3 | wget http://127.0.0.1:9090/admin/accounts-generation 4 | -------------------------------------------------------------------------------- /bin/run-simple.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | docker run -it \ 4 | --rm \ 5 | -p 9090:9090 \ 6 | --name tron \ 7 | tronquickstart 8 | -------------------------------------------------------------------------------- /bin/push.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | version=`cat version` 4 | docker push trontools/quickstart:$version 5 | docker push trontools/quickstart:latest -------------------------------------------------------------------------------- /bin/tag.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | docker tag tronquickstart trontools/quickstart:$1 4 | docker tag tronquickstart trontools/quickstart:latest 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | scripts/deploy_tron.sh 3 | /tmp 4 | /tron-data 5 | output-directory/ 6 | jdk1.8.0_201/ 7 | logs/ 8 | /jre 9 | .env 10 | -------------------------------------------------------------------------------- /conf/eventron: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:818d51198eacfe636d23e4b0c5175505f9a14a714836aa8246fcace41bd04e9f 3 | size 56937744 4 | -------------------------------------------------------------------------------- /app/version.js: -------------------------------------------------------------------------------- 1 | console.log( 2 | '\n\n------------------------------' 3 | + '\n\nTron Quickstart v' + require('./package').version 4 | + '\n\n' 5 | ) -------------------------------------------------------------------------------- /conf/FullNode.jar: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:dca97adeb1b754de7c2d543eaba39be98d2f5fe651837db7ee549d00e7c948c6 3 | size 76546504 4 | -------------------------------------------------------------------------------- /conf/BlockParser.jar: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:eca37df709be29ecc8ceef4d2dd082379e1804873fbe73019fe11b793dbd17ed 3 | size 66904068 4 | -------------------------------------------------------------------------------- /tronWeb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const tronWebBuilder = require('./app/src/utils/tronWebBuilder') 4 | global.tronWeb = tronWebBuilder() 5 | require('repl').start({}) 6 | 7 | 8 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | conf/BlockParser.jar filter=lfs diff=lfs merge=lfs -text 2 | conf/eventron filter=lfs diff=lfs merge=lfs -text 3 | conf/FullNode.jar filter=lfs diff=lfs merge=lfs -text 4 | -------------------------------------------------------------------------------- /conf/process.json: -------------------------------------------------------------------------------- 1 | { 2 | "apps" : [{ 3 | "name" : "eventron", 4 | "script" : "./eventron", 5 | "exec_interpreter": "none", 6 | "exec_mode" : "fork_mode" 7 | }] 8 | } -------------------------------------------------------------------------------- /bin/verify.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | wget -qO- http://127.0.0.1:9090/wallet/getnowblock 4 | wget -qO- http://127.0.0.1:9090/walletsolidity/getnowblock 5 | wget -qO- http://127.0.0.1:9090/healthcheck 6 | -------------------------------------------------------------------------------- /conf/run_eventron.sh: -------------------------------------------------------------------------------- 1 | SECRET=TNSpckEZhGfZ4ryidHG2fYWMARLpZ6U139 \ 2 | REDISDBID=0 \ 3 | REDISHOSTM=127.0.0.1 \ 4 | REDISHOST=127.0.0.1 \ 5 | REDISPORT=6379 \ 6 | NODE_ENV=development \ 7 | DEBUG_MODE=1 \ 8 | ONLY_REDIS=yes && ./eventron 9 | -------------------------------------------------------------------------------- /conf/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | sleep 10 4 | nohup java -jar BlockParser.jar --node-list 127.0.0.1 --start 1 --end -1 --event-server http://127.0.0.1:8060 --secret-key TNSpckEZhGfZ4ryidHG2fYWMARLpZ6U139 --as-list --event > /dev/null 2>&1 & 5 | -------------------------------------------------------------------------------- /app/src/utils/tronWebBuilder.js: -------------------------------------------------------------------------------- 1 | const TronWeb = require('tronweb') 2 | const network = require('../config').network 3 | 4 | let instance 5 | 6 | module.exports = function () { 7 | if (!instance) { 8 | instance = new TronWeb(network) 9 | } 10 | return instance 11 | } 12 | -------------------------------------------------------------------------------- /app/README.md: -------------------------------------------------------------------------------- 1 | # Proxy app for Tron Quickstart 2 | 3 | This folder's copied into the image, during the build, and runs inside the image. 4 | 5 | The only exception is `tronWeb.js` which can be used, outside the image, to interact with the image. See the general README in the repo's root for more info. -------------------------------------------------------------------------------- /bin/run-preapproved.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ $(docker inspect tron | grep NetworkSettings) != "" ]]; then 4 | docker rm -f tron 5 | fi 6 | 7 | docker run -it --rm \ 8 | -p 9090:9090 \ 9 | -e "preapprove=maxCpuTimeOfOneTx:20" \ 10 | --name tron \ 11 | tronquickstart 12 | -------------------------------------------------------------------------------- /bin/run-no-accounts.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | docker run -it \ 4 | --rm \ 5 | -p 9090:9090 \ 6 | -e "defaultBalance=100000" \ 7 | -e "showQueryString=true" \ 8 | -e "showBody=true" \ 9 | -e "formatJson=true" \ 10 | -e "useDefaultPrivateKey=true" \ 11 | -e "accounts=1" \ 12 | --name tron \ 13 | tronquickstart 14 | -------------------------------------------------------------------------------- /pre-approve.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ $preapprove != '' ]]; then 4 | 5 | while IFS=',' read -ra ADDR; do 6 | for i in "${ADDR[@]}"; do 7 | echo " ${i/:/ = }" >> /tron/FullNode/fullnode.conf 8 | done 9 | done <<< "$preapprove" 10 | 11 | fi 12 | 13 | echo "}" >> /tron/FullNode/fullnode.conf 14 | -------------------------------------------------------------------------------- /bin/run-official.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ $(docker inspect tron | grep NetworkSettings) != "" ]]; then 4 | docker rm -f tron 5 | fi 6 | 7 | docker run -it --rm \ 8 | -p 9090:9090 \ 9 | -e "defaultBalance=100000" \ 10 | -e "showQueryString=true" \ 11 | -e "showBody=true" \ 12 | -e "formatJson=true" \ 13 | --name tron \ 14 | trontools/quickstart:2.0.15 15 | -------------------------------------------------------------------------------- /app/src/utils/wait.js: -------------------------------------------------------------------------------- 1 | const sleep = async millis => { 2 | return new Promise(resolve => setTimeout(resolve, millis)) 3 | } 4 | 5 | const chalk = require('chalk') 6 | 7 | function log(x) { 8 | process.stdout.write(chalk.yellow(x)) 9 | } 10 | 11 | module.exports = async function (secs) { 12 | secs = secs || 1 13 | log(`Sleeping for ${secs} second${secs === 1 ? '' : 's'}...`) 14 | await sleep(1000 * (secs || 1)) 15 | log(' Slept.\n') 16 | } 17 | -------------------------------------------------------------------------------- /bin/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | BPSIZE=$(wc -c conf/BlockParser.jar | awk '{print $1}') 4 | BPSIZE=$(($BPSIZE)) 5 | 6 | if [[ $BPSIZE < 1000000 ]]; then 7 | 8 | echo " 9 | Whoops... Your repo is not ready. 10 | Most likely you didn't pull a couple of large files. 11 | To do it, install git-lfs: 12 | 13 | git lfs install 14 | 15 | and pull the large files: 16 | 17 | git lfs pull 18 | " 19 | 20 | fi 21 | 22 | docker build -t tronquickstart . -------------------------------------------------------------------------------- /bin/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ $(docker inspect tron | grep NetworkSettings) != "" ]]; then 4 | docker rm -f tron 5 | fi 6 | 7 | docker run -it --rm \ 8 | -p 9090:9090 \ 9 | -e "defaultBalance=100000" \ 10 | -e "showQueryString=true" \ 11 | -e "showBody=true" \ 12 | -e "formatJson=true" \ 13 | -e "preapprove=multiSignFee:1,allowMultiSign:1,updateAccountPermissionFee:1,totalEnergyTargetLimit:1" \ 14 | --name tron \ 15 | tronquickstart 16 | -------------------------------------------------------------------------------- /bin/run-persistent.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script is here to support the development. 4 | # If you like to use this with the actual image replace tronquickstart with trontools/quickstart 5 | 6 | ( 7 | 8 | # creating the local folders if it do not exist yet 9 | if [[ ! -d "tron-data" ]]; then 10 | mkdir tron-data 11 | fi 12 | 13 | # running the container using the local volumes 14 | docker run -it -p 9090:9090 \ 15 | --name tron \ 16 | -v $PWD/tron-data:/config \ 17 | tronquickstart 18 | ) -------------------------------------------------------------------------------- /quickstart.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | node app/version 4 | 5 | bash pre-approve.sh 6 | 7 | nohup redis-server > /dev/null 2>&1 & 8 | 9 | (cd FullNode && nohup java -jar FullNode.jar -c fullnode.conf --witness >/dev/null 2>&1 &) 10 | 11 | # run eventron 12 | (cd eventron && SECRET=TNSpckEZhGfZ4ryidHG2fYWMARLpZ6U139 \ 13 | REDISDBID=0 \ 14 | REDISHOSTM=127.0.0.1 \ 15 | REDISHOST=127.0.0.1 \ 16 | REDISPORT=6379 \ 17 | NODE_ENV=development \ 18 | ONLY_REDIS=yes \ 19 | SHASTAURL=http://127.0.0.1:18190 \ 20 | PRIVATE_NETWORK=yes pm2 start process.json) 21 | 22 | # run blockparser 23 | (cd BlockParser && nohup ./run.sh >/dev/null 2>&1 &) 24 | 25 | echo "Start the http proxy for dApps..." 26 | nohup scripts/accounts-generation.sh > /dev/null 2>&1 & 27 | 28 | node /tron/app 29 | -------------------------------------------------------------------------------- /app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tron-quickstart", 3 | "version": "2.1.1", 4 | "description": "A minimalist proxy for a Tron private network", 5 | "main": "index.js", 6 | "repository": "https://github.com/tronprotocol/docker-tron-quickstart", 7 | "scripts": { 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "author": "Francesco Sullo ", 11 | "license": "MIT", 12 | "dependencies": { 13 | "bip39": "^2.6.0", 14 | "body-parser": "^1.18.3", 15 | "chalk": "^2.4.2", 16 | "ethereumjs-util": "^6.1.0", 17 | "ethereumjs-wallet": "^0.6.3", 18 | "express": "^4.16.3", 19 | "fs-extra": "^7.0.1", 20 | "http-proxy-middleware": "^0.19.1", 21 | "lodash": "^4.17.11", 22 | "morgan": "^1.9.1", 23 | "scrypt": "^6.0.3", 24 | "seedrandom": "^2.4.4", 25 | "tronweb": "^2.8.0" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /bin/README.md: -------------------------------------------------------------------------------- 1 | # Utilities 2 | 3 | __The following tools are useful during debugging and development__ 4 | 5 | `build.sh` builds the local image `tronquickstart`. 6 | 7 | `run.sh` runs `tronquickstart` generating a `tron` container on ports 8090, 8091 and 8092. 8 | 9 | `run-persistent.sh` runs `tronquickstart` using local folders for data persistence, generating a `tron` container. 10 | 11 | `bash.sh` connects to the `tron` container opening a bash prompt. 12 | 13 | `build-and-run.sh` is a shortcut for `build.sh && run.sh`. 14 | 15 | `accounts-list.sh` shows the accounts available in the `tron` container. 16 | 17 | `tag.sh` tags a new `tronquickstart` image in preparation of a push to the Docker Hub. 18 | 19 | `verify.sh` verifies the full node, solidity node and eventServer are listening. 20 | 21 | `run-previous-latest.sh` runs latest released version of `trontools/quickstart` on ports 88090, 88091, 88092 and 89090 (to avoid conflicts with the work-in-progress `tronquickstart` which runs, typically, on ports 8090, 8091, 8092 and 9090). 22 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Tron Quickstart 2 | 3 | FROM sullof/ubu18jdk8node10redis 4 | LABEL maintainer="Francesco Sullo " 5 | 6 | # Prepare the work directory 7 | RUN mkdir -p tron/conf 8 | WORKDIR /tron 9 | 10 | # Install proxy dependencies 11 | RUN mkdir /tron/app 12 | ADD app/package.json /tron/app/package.json 13 | RUN cd app && npm install 14 | 15 | # Configures full node 16 | RUN mkdir FullNode 17 | ADD conf/full.conf FullNode/fullnode.conf 18 | ADD conf/FullNode.jar FullNode/FullNode.jar 19 | 20 | RUN mkdir BlockParser 21 | ADD conf/run.sh BlockParser/run.sh 22 | ADD conf/BlockParser.jar BlockParser/BlockParser.jar 23 | 24 | RUN mkdir eventron 25 | ADD conf/process.json eventron/process.json 26 | ADD conf/eventron eventron/eventron 27 | 28 | # Separating install from src speeds up the rebuilding 29 | # if the node app is changed, but has the ADD app/version 30 | 31 | ADD app/index.js app/index.js 32 | ADD app/version.js app/version.js 33 | ADD app/src app/src 34 | ADD scripts scripts 35 | RUN chmod +x scripts/accounts-generation.sh 36 | 37 | ADD tronWeb tronWeb 38 | RUN chmod +x tronWeb 39 | 40 | ADD pre-approve.sh pre-approve.sh 41 | ADD quickstart.sh quickstart 42 | RUN chmod +x quickstart 43 | 44 | CMD ["./quickstart", "v2.1.1"] 45 | -------------------------------------------------------------------------------- /bin/prepare.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const {execSync, spawn} = require('child_process') 4 | const fs = require('fs') 5 | const path = require('path') 6 | 7 | execSync('(cd app && npm version patch)') 8 | 9 | let ver = require('../app/package.json').version 10 | let fsPath = path.resolve(__dirname, '../README.md') 11 | let readme = fs.readFileSync(fsPath, 'utf-8') 12 | readme = readme.replace(/### Latest version is `[\d\.]+`/, "### Latest version is `" + ver + "`") 13 | fs.writeFileSync(fsPath, readme) 14 | 15 | fsPath = path.resolve(__dirname, '../Dockerfile') 16 | let dockerfile = fs.readFileSync(fsPath, 'utf-8') 17 | dockerfile = dockerfile.replace(/"v[0-9\.]+"/, '"v' + ver + '"') 18 | fs.writeFileSync(fsPath, dockerfile) 19 | 20 | fsPath = path.resolve(__dirname, '../version') 21 | fs.writeFileSync(fsPath, ver) 22 | 23 | const build = spawn('bin/build.sh', []) 24 | 25 | build.stdout.on('data', function (data) { 26 | process.stdout.write(data.toString()) 27 | }) 28 | 29 | build.stderr.on('data', function (data) { 30 | console.log('stderr: ' + data.toString()) 31 | }) 32 | 33 | build.on('exit', function (code) { 34 | 35 | console.log(`Tagging new version ${ver}\n`) 36 | execSync(`bin/tag.sh ${ver}`) 37 | 38 | console.log('To push run "bin/push.sh"') 39 | }) 40 | 41 | -------------------------------------------------------------------------------- /app/src/config.js: -------------------------------------------------------------------------------- 1 | const _ = require('lodash') 2 | 3 | let port0 = 18190 4 | let port1 = 18191 5 | let port2 = 18891 6 | 7 | if (process.platform === 'darwin') { 8 | port0 = 9090 9 | port1 = 9090 10 | port2 = 9090 11 | } 12 | 13 | const config = { 14 | network: { 15 | from: 'TPL66VK2gCXNCD7EJg9pgJRfqcRazjhUZY', 16 | privateKey: 'da146374a75310b9666e834ee4ad0866d6f4035967bfc76217c5a495fff9f0d0', 17 | consume_user_resource_percent: 30, 18 | fee_limit: 100000000, 19 | fullNode: `http://127.0.0.1:${port0}`, 20 | solidityNode: `http://127.0.0.1:${port1}`, 21 | eventServer: `http://127.0.0.1:${port2}`, 22 | network_id: "*" 23 | }, 24 | env: [ 25 | 'showBody', 26 | 'showQueryString', 27 | 'verbose', 28 | 'quiet', 29 | 'useDefaultPrivateKey', 30 | 'accounts', 31 | 'mnemonic', 32 | 'hdPath', 33 | 'seed', 34 | 'addAccounts', 35 | 'formatJson', 36 | 'defaultBalance' 37 | ], 38 | getEnv: (env = process.env) => { 39 | env = _.pick(env, config.env) 40 | for (let key in env) { 41 | if (env[key] === 'false') { 42 | env[key] = false 43 | } else if (env[key] === 'true') { 44 | env[key] = true 45 | } else if (env[key] === parseInt(env[key]).toString()) { 46 | env[key] = parseInt(env[key]) 47 | } 48 | } 49 | if (typeof env.accounts !== 'number') env.accounts = 10 50 | if (!process.env.quiet || process.env.verbose === 'verbose') { 51 | env.verbose = true 52 | } 53 | return env 54 | } 55 | } 56 | 57 | module.exports = config 58 | -------------------------------------------------------------------------------- /app/src/utils/accountsGeneration.js: -------------------------------------------------------------------------------- 1 | const _ = require('lodash') 2 | const fs = require('fs-extra') 3 | const path = require('path') 4 | const chalk = require('chalk') 5 | const wait = require('./wait') 6 | const deriveAccountsFromSeedAndOrMnemonic = require('./deriveAccountsFromSeedAndOrMnemonic') 7 | const config = require('../config') 8 | 9 | const isDev = process.platform === 'darwin' 10 | 11 | const tronWebBuilder = require('../utils/tronWebBuilder') 12 | let tronWeb 13 | let count = 1 14 | let done = false 15 | let defSet = false 16 | let printed = false 17 | 18 | function waiting() { 19 | const env = config.getEnv() 20 | if (!printed) { 21 | console.log(chalk.gray(`Waiting when nodes are ready to generate ${env.accounts} accounts...`)) 22 | printed = true 23 | } 24 | if (!done) { 25 | console.log(chalk.gray(`(${count++}) Waiting for sync...`)) 26 | setTimeout(waiting, 5000) 27 | } 28 | } 29 | 30 | async function accountsGeneration(options) { 31 | 32 | const env = config.getEnv() 33 | 34 | if (!options) { 35 | options = env 36 | } else { 37 | options = _.defaults(options, env) 38 | } 39 | 40 | if (!defSet) { 41 | tronWeb = tronWebBuilder() 42 | tronWeb.setDefaultBlock('latest') 43 | setTimeout(waiting, 1000) 44 | defSet = true 45 | } 46 | 47 | if (!await tronWeb.fullNode.isConnected()) { 48 | await wait(1) 49 | return await accountsGeneration() 50 | } 51 | 52 | done = true 53 | let accounts 54 | 55 | const tmpDir = '/config' 56 | const jsonPath = path.join(tmpDir, 'accounts.json') 57 | 58 | if (!isDev && fs.existsSync(jsonPath)) { 59 | accounts = JSON.parse(fs.readFileSync(jsonPath, 'utf-8')) 60 | 61 | if (Array.isArray(accounts)) { 62 | // for retro-compatibility 63 | accounts = { 64 | privateKeys: accounts 65 | } 66 | } else if (typeof accounts !== 'object') { 67 | // wrong format 68 | accounts = null 69 | } 70 | } 71 | 72 | if (!accounts || options.addAccounts) { 73 | const newAccounts = await deriveAccountsFromSeedAndOrMnemonic(options) 74 | 75 | if (!accounts) { 76 | accounts = newAccounts 77 | accounts.more = [] 78 | } else { 79 | accounts.more.push(newAccounts) 80 | } 81 | if (!isDev) { 82 | fs.ensureDirSync(tmpDir) 83 | fs.writeFileSync(path.join(tmpDir, 'accounts.json'), JSON.stringify(accounts, null, 2)) 84 | } 85 | } 86 | 87 | return Promise.resolve(accounts) 88 | } 89 | 90 | 91 | module.exports = accountsGeneration 92 | -------------------------------------------------------------------------------- /app/src/utils/deriveAccountsFromSeedAndOrMnemonic.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | // thanks to Trufflesuite/Ganache-core 4 | // https://github.com/trufflesuite/ganache-core/blob/develop/lib/statemanager.js 5 | 6 | const _ = require('lodash') 7 | const utils = require("ethereumjs-util") 8 | const seedrandom = require("seedrandom") 9 | const bip39 = require("bip39") 10 | const hdkey = require("ethereumjs-wallet/hdkey") 11 | const tronWebBuilder = require('../utils/tronWebBuilder') 12 | const config = require('../config') 13 | 14 | function toHex(val) { 15 | if (typeof val === "string") { 16 | if (val.indexOf("0x") === 0) { 17 | return val.trim() 18 | } else { 19 | val = new utils.BN(val) 20 | } 21 | } 22 | 23 | if (typeof val === "boolean") { 24 | val = val ? 1 : 0 25 | } 26 | 27 | if (typeof val === "number") { 28 | val = utils.intToHex(val) 29 | } 30 | 31 | // Support Buffer, BigInteger and BN library 32 | // Hint: BN is used in ethereumjs 33 | if (typeof val === "object") { 34 | val = val.toString("hex") 35 | } 36 | 37 | return utils.addHexPrefix(val) 38 | } 39 | 40 | 41 | function randomBytes(length, rng) { 42 | let buf = [] 43 | 44 | for (let i = 0; i < length; i++) { 45 | buf.push(rng() * 255) 46 | } 47 | 48 | return Buffer.from(buf) 49 | } 50 | 51 | function randomAlphaNumericString(length, rng) { 52 | const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" 53 | 54 | let text = "" 55 | 56 | for (let i = 0; i < length; i++) { 57 | text += alphabet.charAt(Math.floor((rng || Math.random)() * alphabet.length)) 58 | } 59 | 60 | return text 61 | } 62 | 63 | async function deriveAccountsFromSeedAndOrMnemonic(options) { 64 | 65 | const env = config.getEnv() 66 | 67 | if (!options) { 68 | options = env 69 | } else { 70 | options = _.defaults(options, env) 71 | } 72 | 73 | if (options.addAccounts) { 74 | for (let key of 'mnemonic,hdPath,seed,useDefaultPrivateKey'.split(',')) { 75 | delete options[key] 76 | } 77 | } 78 | 79 | const tronWeb = tronWebBuilder() 80 | 81 | const total_accounts = options.accounts 82 | 83 | const hdPath = options.hdPath || "m/44'/195'/0'/0/" 84 | 85 | let seed = options.seed 86 | let mnemonic = options.mnemonic 87 | 88 | if (!mnemonic) { 89 | seed = seed || randomAlphaNumericString(10, seedrandom()) 90 | mnemonic = options.mnemonic || bip39.entropyToMnemonic(randomBytes(16, seedrandom(seed)).toString("hex")) 91 | } 92 | 93 | const wallet = hdkey.fromMasterSeed(bip39.mnemonicToSeed(mnemonic)) 94 | 95 | const privateKeys = [] 96 | 97 | for (let i = 0; i < total_accounts; i++) { 98 | let acct = wallet.derivePath(hdPath + i) 99 | let privateKey = acct.getWallet().getPrivateKey().toString('hex') 100 | if (!i && options.useDefaultPrivateKey) { 101 | privateKey = tronWeb.defaultPrivateKey 102 | } 103 | privateKeys.push(privateKey) 104 | } 105 | 106 | return Promise.resolve({ 107 | hdPath, 108 | mnemonic, 109 | usingDefaultPrivateKey: options.useDefaultPrivateKey, 110 | privateKeys 111 | }) 112 | } 113 | 114 | 115 | module.exports = deriveAccountsFromSeedAndOrMnemonic 116 | -------------------------------------------------------------------------------- /app/index.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const proxy = require('http-proxy-middleware') 3 | const morgan = require('morgan') 4 | const chalk = require('chalk') 5 | const _ = require('lodash') 6 | const config = require('./src/config') 7 | const bodyParser = require('body-parser') 8 | 9 | const admin = require('./src/routes/admin') 10 | 11 | process.on('uncaughtException', function (error) { 12 | console.error(error.message) 13 | }) 14 | 15 | const only = () => { 16 | return function (tokens, req, res) { 17 | const status = tokens.status(req, res) 18 | const color = status < 400 ? 'green' : 'red' 19 | return chalk[color]([ 20 | tokens.method(req, res), 21 | // tokens.url(req, res), 22 | status, 23 | tokens.res(req, res, 'content-length'), '-', 24 | tokens['response-time'](req, res), 'ms' 25 | ].join(' ')) 26 | } 27 | } 28 | 29 | const setHeaders = (who) => { 30 | 31 | return function onProxyRes(proxyRes, req, res) { 32 | 33 | res.setHeader('Access-Control-Allow-Origin', '*') 34 | res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type,Accept') 35 | res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS') 36 | 37 | const env = config.getEnv() 38 | 39 | if (env.verbose) { 40 | const oldWrite = res.write, 41 | oldEnd = res.end 42 | 43 | const chunks = [] 44 | 45 | res.write = function (chunk) { 46 | chunks.push(chunk) 47 | 48 | oldWrite.apply(res, arguments) 49 | } 50 | 51 | res.end = function (chunk) { 52 | 53 | if (chunk) 54 | chunks.push(chunk) 55 | 56 | let body = Buffer.concat(chunks).toString('utf8').replace(/\n+$/g, '') 57 | console.log(chalk.bold(chalk.cyan(who), req.path), chalk.gray(`\n[Output]`), env.formatJson ? JSON.stringify(JSON.parse(body), null, 2) : body) 58 | 59 | oldEnd.apply(res, arguments) 60 | } 61 | } 62 | } 63 | } 64 | 65 | function onProxyReq(proxyReq, req, res) { 66 | const env = config.getEnv() 67 | let qs = false 68 | 69 | if (env.verbose) { 70 | if (env.showQueryString && _.keys(req.query).length) { 71 | qs = true 72 | console.log('\n') 73 | console.log(chalk.gray('[QueryString]'), JSON.stringify(req.query, null, env.formatJson ? 2 : null)) 74 | } 75 | 76 | if (env.showBody && req.method === "POST" && _.keys(req.body).length) { 77 | if (!qs) { 78 | console.log('\n') 79 | } 80 | console.log(chalk.gray('[PostBody]'), JSON.stringify(req.body, null, env.formatJson ? 2 : null)) 81 | } 82 | } 83 | 84 | if (req.method === "POST") { 85 | let bodyData = JSON.stringify(req.body) 86 | proxyReq.setHeader('Content-Type', 'application/json') 87 | proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData)) 88 | proxyReq.write(bodyData) 89 | } 90 | } 91 | 92 | function onError(err, req, res) { 93 | res.writeHead(500, { 94 | 'Content-Type': 'text/plain' 95 | }) 96 | res.end(err) 97 | } 98 | 99 | const conf = { 100 | changeOrigin: true, 101 | onProxyReq, 102 | onError 103 | } 104 | 105 | const app = express(); 106 | app.use(morgan(only())) 107 | app.use(bodyParser.json({limit: '100mb'})) 108 | 109 | app.use('/walletsolidity', proxy({ 110 | ...conf, 111 | onProxyRes: setHeaders('SOLIDITY-NODE'), 112 | target: 'http://127.0.0.1:18191' 113 | })); 114 | 115 | app.use('/wallet', proxy({ 116 | ...conf, 117 | onProxyRes: setHeaders('FULL-NODE'), 118 | target: 'http://127.0.0.1:18190' 119 | })); 120 | 121 | app.use('/favicon.ico', function (req, res) { 122 | res.send('') 123 | }) 124 | 125 | app.use('/admin', admin) 126 | 127 | app.use('/', proxy({ 128 | ...conf, 129 | onProxyRes: setHeaders('EVENT-SERVER'), 130 | target: 'http://127.0.0.1:8060' 131 | })); 132 | 133 | app.listen(9090); 134 | 135 | 136 | const n = "\n" 137 | 138 | console.log(n, 139 | chalk.blue('Tron Quickstart listening on', chalk.bold('http://127.0.0.1:9090')), n) 140 | 141 | -------------------------------------------------------------------------------- /app/src/routes/admin.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const router = express.Router() 3 | const chalk = require('chalk') 4 | const wait = require('../utils/wait') 5 | const _ = require('lodash') 6 | const accountsGeneration = require('../utils/accountsGeneration') 7 | 8 | const tronWebBuilder = require('../utils/tronWebBuilder') 9 | const config = require('../config') 10 | 11 | let testingAccounts 12 | let formattedTestingAccounts 13 | 14 | function flatAccounts() { 15 | let privateKeys = testingAccounts.privateKeys 16 | for (let j = 0; j < testingAccounts.more.length; j++) { 17 | privateKeys = privateKeys.concat(testingAccounts.more[j].privateKeys) 18 | } 19 | return privateKeys 20 | } 21 | 22 | async function getBalances() { 23 | const tronWeb = tronWebBuilder() 24 | 25 | const balances = [] 26 | let k = 0 27 | let privateKeys = flatAccounts() 28 | 29 | for (let i = 0; i < privateKeys.length; i++) { 30 | let address = tronWeb.address.fromPrivateKey(privateKeys[i]) 31 | balances[k++] = await tronWeb.trx.getBalance(address) 32 | } 33 | return Promise.resolve(balances) 34 | } 35 | 36 | let trxSent = {} 37 | 38 | 39 | async function verifyAccountsBalance(options) { 40 | 41 | const env = config.getEnv() 42 | 43 | if (!options) { 44 | options = env 45 | } else { 46 | options = _.defaults(options, env) 47 | } 48 | 49 | const tronWeb = tronWebBuilder() 50 | 51 | console.log(chalk.gray("...\nLoading the accounts and waiting for the node to mine the transactions...")) 52 | 53 | const amount = options.defaultBalance || 10000 54 | const balances = [] 55 | let ready = 0 56 | let count = 1 57 | let accounts = !testingAccounts.more.length ? testingAccounts : testingAccounts.more[testingAccounts.more.length - 1] 58 | let privateKeys = accounts.privateKeys 59 | 60 | while (true) { 61 | console.log(chalk.gray(`(${count++}) Waiting for receipts...`)) 62 | for (let i = 0; i < privateKeys.length; i++) { 63 | let address = tronWeb.address.fromPrivateKey(privateKeys[i]) 64 | if (privateKeys[i] !== tronWeb.defaultPrivateKey && !trxSent[address]) { 65 | let result = await tronWeb.trx.sendTransaction(address, tronWeb.toSun(amount)) 66 | if (result.result) { 67 | console.log(chalk.gray(`Sending ${amount} TRX to ${address}`)) 68 | trxSent[address] = true 69 | } 70 | } else if (!balances[i]) { 71 | let balance = await tronWeb.trx.getBalance(address) 72 | if (balance > 0) { 73 | balances[i] = balance 74 | ready++ 75 | } 76 | } 77 | } 78 | if (ready < privateKeys.length) 79 | await wait(3) 80 | else break 81 | } 82 | console.log(chalk.gray('Done.\n')) 83 | return Promise.resolve(balances) 84 | } 85 | 86 | async function formatAccounts(balances, format) { 87 | const tronWeb = tronWebBuilder() 88 | 89 | const privateKeys = flatAccounts() 90 | 91 | formattedTestingAccounts = 'Available Accounts\n==================\n\n' 92 | for (let i = 0; i < privateKeys.length; i++) { 93 | let address = tronWeb.address.fromPrivateKey(privateKeys[i]) 94 | 95 | formattedTestingAccounts += `(${i}) ${format === 'hex' ? tronWeb.address.toHex(address) : address} (${tronWeb.fromSun(balances[i])} TRX)\n${format === 'all' ? ' ' + tronWeb.address.toHex(address) + '\n' : ''}` 96 | 97 | } 98 | 99 | formattedTestingAccounts += '\nPrivate Keys\n==================\n\n' 100 | 101 | for (let i = 0; i < privateKeys.length; i++) { 102 | formattedTestingAccounts += `(${i}) ${privateKeys[i]}\n` 103 | } 104 | 105 | formattedTestingAccounts += '\nHD Wallet\n' + 106 | '==================\n' + 107 | 'Mnemonic: ' + testingAccounts.mnemonic + '\n' + 108 | 'Base HD Path: ' + testingAccounts.hdPath + '{account_index}\n' 109 | 110 | return Promise.resolve() 111 | } 112 | 113 | 114 | function logRouter(route) { 115 | console.log( chalk.bold(chalk.cyan('\n\nADMIN'), `/admin/${route}`)) 116 | } 117 | 118 | function setCors(res) { 119 | res.setHeader('Access-Control-Allow-Origin', '*') 120 | res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type,Accept') 121 | res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS') 122 | return res 123 | } 124 | 125 | router.get('/accounts', async function (req, res) { 126 | logRouter('accounts') 127 | const balances = await getBalances() 128 | await formatAccounts(balances, req.query.format) 129 | res.set('Content-Type', 'text/plain').send(formattedTestingAccounts) 130 | }) 131 | 132 | 133 | router.get('/set-env', async function (req, res) { 134 | logRouter('set-env') 135 | const env = config.getEnv(req.query) 136 | 137 | for (let key in env) { 138 | process.env[key] = env[key] 139 | } 140 | 141 | console.log('New env: ', config.getEnv()) 142 | res.set('Content-Type', 'text/plain').send('Environment variable updated') 143 | }) 144 | 145 | 146 | router.get('/accounts-json', function (req, res) { 147 | logRouter('accounts-json') 148 | res.header("Content-Type", 'application/json') 149 | res = setCors(res) 150 | res.json(testingAccounts) 151 | }) 152 | 153 | router.get('/accounts-generation', async function (req, res) { 154 | logRouter('accounts-generation') 155 | 156 | testingAccounts = await accountsGeneration() 157 | await verifyAccountsBalance() 158 | const balances = await getBalances() 159 | await formatAccounts(balances) 160 | console.log(formattedTestingAccounts) 161 | res.send() 162 | }) 163 | 164 | router.get('/temporary-accounts-generation', async function (req, res) { 165 | logRouter('accounts-generation') 166 | 167 | const options = req.query || {} 168 | options.addAccounts = true 169 | testingAccounts = await accountsGeneration(options) 170 | await verifyAccountsBalance() 171 | const balances = await getBalances() 172 | await formatAccounts(balances) 173 | res = setCors(res) 174 | res.set('Content-Type', 'text/plain').send(formattedTestingAccounts) 175 | }) 176 | 177 | router.get('/', function (req, res) { 178 | res.send('Welcome to Tron Quickstart ' + require('../../package').version) 179 | }) 180 | 181 | 182 | module.exports = router 183 | -------------------------------------------------------------------------------- /conf/full.conf: -------------------------------------------------------------------------------- 1 | net { 2 | type = mainnet 3 | # type = testnet 4 | } 5 | 6 | storage { 7 | # Directory for storing persistent data 8 | 9 | db.version = 2, 10 | db.directory = "database", 11 | index.directory = "index", 12 | 13 | # You can custom these 14 databases' configs: 14 | transHistory.switch = "on", 15 | 16 | # account, account-index, asset-issue, block, block-index, 17 | # block_KDB, peers, properties, recent-block, trans, 18 | # utxo, votes, witness, witness_schedule. 19 | 20 | # Otherwise, db configs will remain defualt and data will be stored in 21 | # the path of "output-directory" or which is set by "-d" ("--output-directory"). 22 | 23 | # Attention: name is a required field that must be set !!! 24 | properties = [ 25 | // { 26 | // name = "account", 27 | // path = "storage_directory_test", 28 | // createIfMissing = true, 29 | // paranoidChecks = true, 30 | // verifyChecksums = true, 31 | // compressionType = 1, // compressed with snappy 32 | // blockSize = 4096, // 4 KB = 4 * 1024 B 33 | // writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B 34 | // cacheSize = 10485760, // 10 MB = 10 * 1024 * 1024 B 35 | // maxOpenFiles = 100 36 | // }, 37 | // { 38 | // name = "account-index", 39 | // path = "storage_directory_test", 40 | // createIfMissing = true, 41 | // paranoidChecks = true, 42 | // verifyChecksums = true, 43 | // compressionType = 1, // compressed with snappy 44 | // blockSize = 4096, // 4 KB = 4 * 1024 B 45 | // writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B 46 | // cacheSize = 10485760, // 10 MB = 10 * 1024 * 1024 B 47 | // maxOpenFiles = 100 48 | // }, 49 | ] 50 | 51 | } 52 | 53 | node.discovery = { 54 | enable = false 55 | persist = true 56 | bind.ip = "" 57 | external.ip = 127.0.0.1 58 | } 59 | 60 | node.backup { 61 | port = 10001 62 | priority = 8 63 | members = [ 64 | ] 65 | } 66 | 67 | node { 68 | # trust node for solidity node 69 | # trustNode = "ip:port" 70 | trustNode = "127.0.0.1:50051" 71 | 72 | # expose extension api to public or not 73 | walletExtensionApi = true 74 | 75 | listen.port = 18888 76 | 77 | connection.timeout = 2 78 | 79 | tcpNettyWorkThreadNum = 0 80 | 81 | udpNettyWorkThreadNum = 1 82 | 83 | # Number of validate sign thread, default availableProcessors / 2 84 | # validateSignThreadNum = 16 85 | 86 | maxActiveNodes = 30 87 | 88 | maxActiveNodesWithSameIp = 2 89 | 90 | minParticipationRate = 0 91 | 92 | # check the peer data transfer ,disconnect factor 93 | disconnectNumberFactor = 0.4 94 | maxConnectNumberFactor = 0.8 95 | receiveTcpMinDataLength = 2048 96 | isOpenFullTcpDisconnect = true 97 | 98 | p2p { 99 | version = 1 # 11111: mainnet; 20180622: testnet 100 | } 101 | 102 | active = [ 103 | # Active establish connection in any case 104 | # Sample entries: 105 | # "ip:port", 106 | # "ip:port" 107 | ] 108 | 109 | passive = [ 110 | # Passive accept connection in any case 111 | # Sample entries: 112 | # "ip:port", 113 | # "ip:port" 114 | ] 115 | 116 | http { 117 | fullNodePort = 18190 118 | solidityPort = 18191 119 | } 120 | 121 | rpc { 122 | port = 50051 123 | solidityPort = 50052 124 | 125 | # Number of gRPC thread, default availableProcessors / 2 126 | # thread = 16 127 | 128 | # The maximum number of concurrent calls permitted for each incoming connection 129 | # maxConcurrentCallsPerConnection = 130 | 131 | # The HTTP/2 flow control window, default 1MB 132 | # flowControlWindow = 133 | 134 | # Connection being idle for longer than which will be gracefully terminated 135 | maxConnectionIdleInMillis = 60000 136 | 137 | # Connection lasting longer than which will be gracefully terminated 138 | # maxConnectionAgeInMillis = 139 | 140 | # The maximum message size allowed to be received on the server, default 4MB 141 | # maxMessageSize = 142 | 143 | # The maximum size of header list allowed to be received, default 8192 144 | # maxHeaderListSize = 145 | minEffectiveConnection = 0 146 | } 147 | 148 | } 149 | 150 | 151 | 152 | seed.node = { 153 | # List of the seed nodes 154 | # Seed nodes are stable full nodes 155 | # example: 156 | # ip.list = [ 157 | # "ip:port", 158 | # "ip:port" 159 | # ] 160 | ip.list = [ 161 | ] 162 | } 163 | 164 | genesis.block = { 165 | # Reserve balance 166 | assets = [ 167 | { 168 | accountName = "Zion" 169 | accountType = "AssetIssue" 170 | address = "TPL66VK2gCXNCD7EJg9pgJRfqcRazjhUZY" 171 | balance = "95000000000000000" 172 | }, 173 | { 174 | accountName = "Sun" 175 | accountType = "AssetIssue" 176 | address = "TWsm8HtU2A5eEzoT8ev8yaoFjHsXLLrckb" 177 | balance = "5000000000000000" 178 | }, 179 | { 180 | accountName = "Blackhole" 181 | accountType = "AssetIssue" 182 | address = "TSJD5rdu6wZXP7F2m3a3tn8Co3JcMjtBip" 183 | balance = "-9223372036854775808" 184 | }, 185 | { 186 | accountName = "TestA" 187 | accountType = "AssetIssue" 188 | address = "TVdyt1s88BdiCjKt6K2YuoSmpWScZYK1QF" 189 | balance = "1000000000000000" 190 | }, 191 | { 192 | accountName = "TestB" 193 | accountType = "AssetIssue" 194 | address = "TCNVmGtkfknHpKSZXepZDXRowHF7kosxcv" 195 | balance = "1000000000000000" 196 | }, 197 | { 198 | accountName = "TestC" 199 | accountType = "AssetIssue" 200 | address = "TAbzgkG8p3yF5aywKVgq9AaAu6hvF2JrVC" 201 | balance = "1000000000000000" 202 | }, 203 | { 204 | accountName = "TestD" 205 | accountType = "AssetIssue" 206 | address = "TMmmvwvkBPBv3Gkw9cGKbZ8PLznYkTu3ep" 207 | balance = "1000000000000000" 208 | }, 209 | { 210 | accountName = "TestE" 211 | accountType = "AssetIssue" 212 | address = "TBJHZu4Sm86aWHtt6VF6KQSzot8vKTuTKx" 213 | balance = "1000000000000000" 214 | } 215 | ] 216 | 217 | witnesses = [ 218 | { 219 | address: TPL66VK2gCXNCD7EJg9pgJRfqcRazjhUZY, 220 | url = "http://tronstudio.com", 221 | voteCount = 10000 222 | } 223 | ] 224 | 225 | timestamp = "0" #2017-8-26 12:00:00 226 | 227 | parentHash = "957dc2d350daecc7bb6a38f3938ebde0a0c1cedafe15f0edae4256a2907449f6" 228 | } 229 | 230 | localwitness = [ 231 | da146374a75310b9666e834ee4ad0866d6f4035967bfc76217c5a495fff9f0d0 232 | ] 233 | 234 | #localwitnesskeystore = [ 235 | # "src/main/resources/localwitnesskeystore.json" 236 | #] 237 | 238 | block = { 239 | needSyncCheck = false # first node : false, other : true 240 | maintenanceTimeInterval = 86400000 // 1 day: 86400000(ms), 6 hours: 21600000(ms) 241 | } 242 | 243 | 244 | vm = { 245 | supportConstant = true 246 | minTimeRatio = 0 247 | maxTimeRatio = 5.0 248 | saveInternalTx = true 249 | } 250 | 251 | committee = { 252 | allowCreationOfContracts = 1 //mainnet:0 (reset by committee),test:1 253 | allowUpdateAccountName = 1 254 | allowSameTokenName = 1 255 | allowDelegateResource = 1 256 | allowTvmTransferTrc10 = 1 257 | allowAdaptiveEnergy = 1 258 | allowTvmConstantinople = 1 259 | multiSignFee = 1 260 | allowMultiSign = 1 261 | updateAccountPermissionFee = 1 262 | 263 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tron Quickstart (Docker image) 2 | 3 | __The purpose of it is to set up a complete private network for Tron development.__ 4 | 5 | The image exposes: 6 | * FullNode 7 | * SolidityNode 8 | * EventServer 9 | 10 | ## Usage 11 | 12 | __Pull the image using docker:__ 13 | ``` 14 | docker pull trontools/quickstart 15 | ``` 16 | 17 | __Run the container:__ 18 | ``` 19 | docker run -it \ 20 | -p 9090:9090 \ 21 | --rm \ 22 | --name tron \ 23 | trontools/quickstart 24 | ``` 25 | Notice the `--rm` option automatically removes the container after it exits. This is very important because the container cannot be restarted, it MUST be run from scratch to correctly configure the environment. 26 | 27 | __Verify the image is running correctly:__ 28 | ``` 29 | docker exec -it tron ps aux 30 | ``` 31 | You should see something like this: 32 | 33 | ``` 34 | USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 35 | root 1 0.0 0.0 20044 1900 pts/0 Ss+ 01:42 0:00 bash ./quickstart v2.0.0 36 | root 13 0.2 0.0 50148 1740 pts/0 Sl+ 01:42 0:00 redis-server *:6379 37 | root 15 0.0 0.0 20044 40 pts/0 S+ 01:42 0:00 bash ./quickstart v2.0.0 38 | root 16 11.5 19.2 5277964 393692 pts/0 Sl+ 01:42 0:31 java -jar FullNode.jar -c fullnode.conf --witness 39 | root 43 0.1 1.8 930932 37456 ? Ssl 01:42 0:00 PM2 v3.3.1: God Daemon (/root/.pm2) 40 | root 54 0.2 2.6 939316 54880 ? Ssl 01:42 0:00 /tron/eventron/eventron 41 | root 67 0.5 3.1 941540 64212 pts/0 Sl+ 01:42 0:01 node /tron/app 42 | root 72 412 32.0 5208448 655136 pts/0 Sl+ 01:42 18:49 java -jar BlockParser.jar --Node-list 127.0.0.1 --intial-block 1 -end -1 --event-server http://127.0.0.1:8060 --secret-key TNSpckEZhGfZ4ryidHG2fYWMARLpZ6U139 43 | root 261 0.0 0.1 20176 3748 pts/1 Ss 01:46 0:00 bash 44 | root 289 0.0 0.1 36068 3168 pts/1 R+ 01:47 0:00 ps aux 45 | ``` 46 | 47 | If redis-server, nodes, or the event server are not running, exit and run the container again. 48 | 49 | To see the logs of the full node you can execute 50 | ``` 51 | docker exec -it tron tail -f /tron/FullNode/logs/tron.log 52 | ``` 53 | 54 | ### TronBox 2.1+ configuration 55 | 56 | Configure your `tronbox.js` file as: 57 | 58 | ``` 59 | module.exports = { 60 | networks: { 61 | development: { 62 | privateKey: 'da146374a75310b9666e834ee4ad0866d6f4035967bfc76217c5a495fff9f0d0', 63 | fullHost: "http://127.0.0.1:9090", 64 | network_id: "9" 65 | } 66 | } 67 | }; 68 | ``` 69 | 70 | ### TronWeb configuration 71 | 72 | Instantiate tronWeb as in the following example: 73 | ``` 74 | const TronWeb = require('tronweb') 75 | 76 | const tronWeb = new TronWeb( 77 | "http://127.0.0.1:9090", 78 | "http://127.0.0.1:9090", 79 | "http://127.0.0.1:9090", 80 | 'da146374a75310b9666e834ee4ad0866d6f4035967bfc76217c5a495fff9f0d0', 81 | ) 82 | 83 | ``` 84 | 85 | ### Testing 86 | 87 | Tron Quickstart sets up accounts to be used for tests with TronBox 2.1+ (10 accounts by default). Once the transactions are mined, the final output is printed out: 88 | ``` 89 | Available Accounts 90 | ================== 91 | 92 | (0) TJdDmJVYa9TcMJvCc9WsdaEXEYgeJrGVPq (100000 TRX) 93 | (1) TNmLX3rJZNdq7kxgxs1y39FP3hp8LWHLUX (100000 TRX) 94 | (2) TASrJ76QANNPRgdDHHikWWApQzxh3HPku4 (100000 TRX) 95 | (3) TNkzaPqNipxKbU5ecUZz7P7UdejiE82zc7 (100000 TRX) 96 | (4) TWCcS3cAVeNWhX1J6LHMEsEkWGq43t4EXc (100000 TRX) 97 | (5) TW1QH88er9UqUKhoHLdm8dQTG2NsYU6C2h (100000 TRX) 98 | (6) TKJu6vpKAknBwzovm5NiBZ1j69nWmeXGyw (100000 TRX) 99 | (7) TQUddX2gBhGV7d33a2kZchVsPuWLdZBeXY (100000 TRX) 100 | (8) TXjdePoR6ZRfBeiaZ9QoUyGwdHGhTPdy6x (100000 TRX) 101 | (9) TGJnVM3TcvsKaDL3zpNm92gw2YHrPx8s3Y (100000 TRX) 102 | 103 | Private Keys 104 | ================== 105 | 106 | (0) 86134c8a51446c21b501f3a05844e18fdb72d3a5420867737c8640ce0ec656ca 107 | (1) 57e04ac5484dd2c3d97b44c5e232b6203c2759642f38c5ea6787b0e4044de165 108 | (2) 138a22c03039e688daa2b7c785d1e8d6b9375d4413e6ea82471b1e7a61701a9d 109 | (3) e83a4958e81654efb162cef269e323ac501aa81d850ba9aed5a7d4f3c26d5a0a 110 | (4) 05cdb18a4638d21d3f1f18e6bdb601a60b4debc85ee9bf8b385a2613693da24f 111 | (5) b66225af9b24c9eb92ef65e3ff540c5c260de9fc8bb01a51fc44490bafe7ab3e 112 | (6) 0b75b702316f1dcb2c7ca5aee9e1cd9bbdcf747e27fc417c324971caaf59772c 113 | (7) 15e2547daf170c6f0e0dd0d64c35c1259206bc481a0c9d571bac0b1197f51d11 114 | (8) 858c97998d9bebddc9320157e538d248dfcc64cd4c5c8ea97dfcb5d8396b37a0 115 | (9) 32d2d45c05758f7de37a542798aac91315bd269565c99eafb33ebfb3a54ac046 116 | 117 | HD Wallet 118 | ================== 119 | Mnemonic: treat nation math panel calm spy much obey moral hazard they sorry 120 | Base HD Path: m/44'/60'/0'/0/{account_index} 121 | 122 | ``` 123 | 124 | #### Quickstart options: 125 | Use `-e` flag to pass environmental variables to the docker. 126 | Example: 127 | ``` 128 | docker run -it \ 129 | -p 9090:9090 \ 130 | --rm \ 131 | --name tron \ 132 | -e "accounts=20" \ 133 | trontools/quickstart 134 | ``` 135 | 136 | __List of options:__ 137 | * `accounts=12` sets the number of generated accounts 138 | * `useDefaultPrivateKey=true` tells Quickstart to use the default account as `accounts[0]` 139 | * `mnemonic=wrong bit chicken kitchen rat` uses a specified mnemonic 140 | * `defaultBalance=100000` sets the initial balance for the generated accounts (in the example to 100,000 TRX) 141 | * `seed=ushwe63hgeWUS` sets the seed to be used to generate the mnemonic (if none is passed) 142 | * `hdPath=m/44'/60'/0'/0` sets a custom bit39 hdPath 143 | * `formatJson=true` formats the output 144 | * `preapprove=...` pre approved proposals (see below for more help) 145 | 146 | 147 | __Pre-approved proposals__ 148 | 149 | To pre-approve, for example, `getMultiSignFee` and `allowMultiSign`, you can run the images as: 150 | ``` 151 | docker run -it \ 152 | -p 9090:9090 \ 153 | --rm \ 154 | --name tron \ 155 | -e "preapprove=multiSignFee:1,allowMultiSign:1" \ 156 | trontools/quickstart 157 | ``` 158 | 159 | 160 | For a complete list of option proposals check out https://api.trongrid.io/wallet/getchainparameters. Note that you remove the "get" part of this chain parameter and lowercase the first character. This allows you to directly edit these parameters. 161 | 162 | #### Available accounts 163 | 164 | At any moment, to see the generated accounts, run 165 | ``` 166 | curl http://127.0.0.1:9090/admin/accounts 167 | ``` 168 | 169 | If you prefer to see the addresses in hex format you can run 170 | ``` 171 | curl http://127.0.0.1:9090/admin/accounts?format=hex 172 | ``` 173 | And if you like to see both formats, you can run 174 | ``` 175 | curl http://127.0.0.1:9090/admin/accounts?format=all 176 | ``` 177 | 178 | 179 | #### More accounts? 180 | 181 | If your test requires additional accounts, use the following code to generate new addresses and retrieve them: 182 | 183 | ```js 184 | async function newTestAccounts(amount) => { 185 | return await tronWeb.fullNode.request('/admin/temporary-accounts-generation?accounts=' + amount); 186 | } 187 | 188 | async function getTestAccounts() => { 189 | const accounts = { 190 | b58: [], 191 | hex: [], 192 | pks: [] 193 | } 194 | const accountsJson = await tronWeb.fullNode.request('/admin/accounts-json'); 195 | accounts.pks = accountsJson.more[accountsJson.more.length - 1].privateKeys 196 | for (let i = 0; i < accounts.pks.length; i++) { 197 | let addr = tronWeb.address.fromPrivateKey(accounts.pks[i]); 198 | accounts.b58.push(addr); 199 | accounts.hex.push(tronWeb.address.toHex(addr)); 200 | } 201 | return accounts; 202 | } 203 | ``` 204 | 205 | 206 | #### Persistency 207 | 208 | If you would like to use the same accounts each time, there are two ways to do that: 209 | 1. By passing a mnemonic to the docker 210 | 2. By using `accounts.json` 211 | 212 | Example use of `accounts.json`: 213 | ```sh 214 | if [[ ! -d "accounts-data" ]]; then mkdir accounts-data; fi 215 | 216 | docker run -it -p 9090:9090 \ 217 | --name tron \ 218 | -v $PWD/accounts-data:/config \ 219 | trontools/quickstart 220 | ``` 221 | 222 | If `accounts-data/accounts.json` exists, Tron Quickstart will use it each time it runs. If you need specific addresses, you can edit `accounts.json`, put your own private keys in the `privateKeys` array, and run the container. 223 | 224 | #### Logging 225 | 226 | By default, the proxy server returns a verbose log, containing the response of any command. If you prefer just to know what has been called, you can add the option `-e "quiet=true"`. For consistency there is also the option `-e "verbose=true"`. In case both `"quiet=true"` and `"verbose=true"` options are passed, the `"verbose=true"` takes precedence, with `quiet` being ignored. 227 | 228 | __verbose mode options:__ 229 | 230 | * `-e "showQueryString=true"`: shows the queryString of any command 231 | * `-e "showBody=true"`: shows the parameter passed to a POST command 232 | 233 | 234 | ### Update environment variables 235 | 236 | You can update environmental variables, at any time, with `curl` as follows: 237 | ``` 238 | curl http://127.0.0.1:9090/admin/set-env?showBody=true 239 | ``` 240 | 241 | ### Interacting with the private network 242 | 243 | The easiest way to interact with the private network is by using TronWeb from the container: 244 | ``` 245 | docker exec -it tron ./tronWeb 246 | ``` 247 | It opens a console with a `tronWeb` instance ready to use. Run any command — for example: `tronWeb.toHex("some")` — to verify that it works. 248 | 249 | ### What about RPC? 250 | 251 | If you are running [Tron Wallet-cli](https://github.com/tronprotocol/wallet-cli) or any other tool which connects to the private network via RPC, you can just expose the ports . . . and voila! 252 | 253 | ``` 254 | docker run -it -p 50051:50051 -p 50052:50052 \ 255 | --name tron \ 256 | trontools/quickstart 257 | ``` 258 | 259 | ### Known issues 260 | 261 | __The "SERVER_BUSY" error__ 262 | 263 | Running TronBox can put a lot of stress on the local network. If the FullNode is busy, it returns the "SERVER_BUSY" error. If it does, just repeat your command. 264 | 265 | ### Latest version is `2.0.22` 266 | 267 | To be updated, take a look at https://hub.docker.com/r/trontools/quickstart/tags/ 268 | 269 | You can see which version you currently running executing 270 | ``` 271 | docker ps 272 | ``` 273 | If you want also to know which version of JavaTron is used by Tron Quickstart, run 274 | ``` 275 | curl localhost:9090/wallet/getnodeinfo 276 | ``` 277 | and look for `codeVersion`. 278 | 279 | ### Selected recent history 280 | 281 | _Notice that deprecated version will stay here in the history but will be removed from the Docker hub._ 282 | 283 | __2.1.1__ 284 | * Upgrade Eventron to ed9c7a7, BlockParser to 75b4fec. 285 | 286 | __2.1.0__ 287 | * Upgrade FullNode to 3.6.6. 288 | 289 | __2.0.22__ 290 | * Fix hdPath. 291 | 292 | __2.0.21__ 293 | * Extending the http body size. 294 | 295 | __2.0.20__ 296 | * Update TronWeb to version 2.8.0 supporting Solidity 0.5.9. 297 | 298 | __2.0.19__ 299 | * Update TronWeb to version 2.7.4. 300 | 301 | __2.0.18__ 302 | * Update JavaTron to version 3.6.5. 303 | * Update TronWeb to version 2.7.3. 304 | 305 | __2.0.17__ 306 | * Update TronWeb to version 2.6.8. 307 | 308 | __2.0.17__ 309 | * Update TronWeb to version 2.6.4. 310 | 311 | __2.0.16__ 312 | * Pre-approve `allowTvmConstantinople` and others. 313 | 314 | __2.0.15__ 315 | * Upgrade Eventron. 316 | 317 | __2.0.14__ 318 | * Upgrade JavaTron to version 3.6. 319 | * Upgrade TronWeb to version 2.5.6. 320 | 321 | __2.0.13__ 322 | * Remove sleep dependency. 323 | 324 | __2.0.12__ 325 | * Allow the proxy to accept large JSON files. 326 | 327 | __2.0.11__ 328 | * Fix minor bug with unsupported APIs. 329 | 330 | __2.0.10__ 331 | * Update eventron to version 2.2.8. 332 | * Fix issue with APIs not supported in private networks. 333 | 334 | __2.0.9__ 335 | * Update eventron to version 2.2.6. 336 | 337 | __2.0.8__ 338 | * Update TronWeb to 2.3.6. 339 | * Fix naming issue with JavaTron 3.2 approved proposals. 340 | 341 | __2.0.7__ 342 | * Support generic pre-approved options. 343 | 344 | __2.0.6__ 345 | * Disable caching in Eventron. 346 | 347 | __2.0.5__ 348 | * Pre-approve JavaTron 3.2 proposals. 349 | 350 | __2.0.4__ 351 | * Fix bug with fullnode not starting correctly. 352 | 353 | __2.0.3__ 354 | * Fix bug with pre-approved proposals. 355 | 356 | __2.0.2__ 357 | * Updates to TronGrid v2.2.0 358 | * Updates to a new BlockParser using less resources 359 | 360 | __2.0.1__ 361 | * Updates to TronGrid v2.1.1 (better support of sort by timestamps) 362 | 363 | __2.0.1__ 364 | * Updates to TronGrid v2.1.1 (better support of sort by timestamps) 365 | 366 | __2.0.0__ 367 | * Updates to JavaTron 3.5.0.1 368 | * Uses TronGrid v2 369 | * Supports pre-approved proposals, to be set using env variables (see above) 370 | * getMultiSignFee 371 | * getUpdateAccountPermissionFee 372 | * getTotalEnergyTargetLimit 373 | 374 | __1.2.8__ 375 | * Supports pre-approved proposals, to be set using env variables (see above) 376 | * allowSameTokenName 377 | * allowDelegateResource 378 | * allowTvmTransferTrc10 379 | 380 | __1.2.7__ 381 | * Updates to JavaTron v3.2.2. 382 | * Supports events emitted by internal transactions. 383 | 384 | __1.2.6__ 385 | * Uses JavaTron v3.2.1.2. 386 | * Adds a script to have info about the current version of Tron Quickstart and JavaTron. 387 | 388 | __1.2.5__ 389 | * Uses JavaTron v3.2.1.1. 390 | 391 | __1.2.4__ 392 | * Allow to see the version of the current image from `docker ps`. 393 | 394 | __1.2.3__ 395 | * Add CORS to any /admin routes that returns JSON objects. 396 | 397 | __1.2.2__ 398 | * Introduce compatibility with JavaTron 3.2. It requires TronBox >= 2.2.1, because JavaTron 3.2 requires the new parameter 399 | `origin_energy_limit`. 400 | 401 | ----- 402 | 403 | For more historic data, check the original repo at 404 | [https://github.com/tronprotocol/docker-tron-quickstart](https://github.com/tronprotocol/docker-tron-quickstart) 405 | -------------------------------------------------------------------------------- /app/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tron-quickstart", 3 | "version": "2.1.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/runtime": { 8 | "version": "7.6.3", 9 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", 10 | "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", 11 | "requires": { 12 | "regenerator-runtime": "^0.13.2" 13 | } 14 | }, 15 | "@types/node": { 16 | "version": "10.14.22", 17 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.22.tgz", 18 | "integrity": "sha512-9taxKC944BqoTVjE+UT3pQH0nHZlTvITwfsOZqyc+R3sfJuxaTtxWjfn1K2UlxyPcKHf0rnaXcVFrS9F9vf0bw==" 19 | }, 20 | "accepts": { 21 | "version": "1.3.7", 22 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 23 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 24 | "requires": { 25 | "mime-types": "~2.1.24", 26 | "negotiator": "0.6.2" 27 | } 28 | }, 29 | "aes-js": { 30 | "version": "3.1.2", 31 | "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", 32 | "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" 33 | }, 34 | "ansi-styles": { 35 | "version": "3.2.1", 36 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 37 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 38 | "requires": { 39 | "color-convert": "^1.9.0" 40 | } 41 | }, 42 | "arr-diff": { 43 | "version": "4.0.0", 44 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", 45 | "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" 46 | }, 47 | "arr-flatten": { 48 | "version": "1.1.0", 49 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 50 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" 51 | }, 52 | "arr-union": { 53 | "version": "3.1.0", 54 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", 55 | "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" 56 | }, 57 | "array-flatten": { 58 | "version": "1.1.1", 59 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 60 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 61 | }, 62 | "array-unique": { 63 | "version": "0.3.2", 64 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", 65 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" 66 | }, 67 | "assign-symbols": { 68 | "version": "1.0.0", 69 | "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", 70 | "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" 71 | }, 72 | "atob": { 73 | "version": "2.1.2", 74 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 75 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" 76 | }, 77 | "axios": { 78 | "version": "0.19.0", 79 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", 80 | "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", 81 | "requires": { 82 | "follow-redirects": "1.5.10", 83 | "is-buffer": "^2.0.2" 84 | }, 85 | "dependencies": { 86 | "debug": { 87 | "version": "3.1.0", 88 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 89 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 90 | "requires": { 91 | "ms": "2.0.0" 92 | } 93 | }, 94 | "follow-redirects": { 95 | "version": "1.5.10", 96 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", 97 | "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", 98 | "requires": { 99 | "debug": "=3.1.0" 100 | } 101 | }, 102 | "is-buffer": { 103 | "version": "2.0.4", 104 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", 105 | "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" 106 | } 107 | } 108 | }, 109 | "babel-runtime": { 110 | "version": "6.26.0", 111 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 112 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 113 | "requires": { 114 | "core-js": "^2.4.0", 115 | "regenerator-runtime": "^0.11.0" 116 | }, 117 | "dependencies": { 118 | "regenerator-runtime": { 119 | "version": "0.11.1", 120 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 121 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" 122 | } 123 | } 124 | }, 125 | "base": { 126 | "version": "0.11.2", 127 | "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", 128 | "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", 129 | "requires": { 130 | "cache-base": "^1.0.1", 131 | "class-utils": "^0.3.5", 132 | "component-emitter": "^1.2.1", 133 | "define-property": "^1.0.0", 134 | "isobject": "^3.0.1", 135 | "mixin-deep": "^1.2.0", 136 | "pascalcase": "^0.1.1" 137 | }, 138 | "dependencies": { 139 | "define-property": { 140 | "version": "1.0.0", 141 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 142 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 143 | "requires": { 144 | "is-descriptor": "^1.0.0" 145 | } 146 | }, 147 | "is-accessor-descriptor": { 148 | "version": "1.0.0", 149 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 150 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 151 | "requires": { 152 | "kind-of": "^6.0.0" 153 | } 154 | }, 155 | "is-data-descriptor": { 156 | "version": "1.0.0", 157 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 158 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 159 | "requires": { 160 | "kind-of": "^6.0.0" 161 | } 162 | }, 163 | "is-descriptor": { 164 | "version": "1.0.2", 165 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 166 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 167 | "requires": { 168 | "is-accessor-descriptor": "^1.0.0", 169 | "is-data-descriptor": "^1.0.0", 170 | "kind-of": "^6.0.2" 171 | } 172 | } 173 | } 174 | }, 175 | "base-x": { 176 | "version": "3.0.6", 177 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.6.tgz", 178 | "integrity": "sha512-4PaF8u2+AlViJxRVjurkLTxpp7CaFRD/jo5rPT9ONnKxyhQ8f59yzamEvq7EkriG56yn5On4ONyaG75HLqr46w==", 179 | "requires": { 180 | "safe-buffer": "^5.0.1" 181 | } 182 | }, 183 | "basic-auth": { 184 | "version": "2.0.1", 185 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", 186 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", 187 | "requires": { 188 | "safe-buffer": "5.1.2" 189 | }, 190 | "dependencies": { 191 | "safe-buffer": { 192 | "version": "5.1.2", 193 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 194 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 195 | } 196 | } 197 | }, 198 | "bignumber.js": { 199 | "version": "7.2.1", 200 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", 201 | "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" 202 | }, 203 | "bindings": { 204 | "version": "1.5.0", 205 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 206 | "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 207 | "requires": { 208 | "file-uri-to-path": "1.0.0" 209 | } 210 | }, 211 | "bip39": { 212 | "version": "2.6.0", 213 | "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.6.0.tgz", 214 | "integrity": "sha512-RrnQRG2EgEoqO24ea+Q/fftuPUZLmrEM3qNhhGsA3PbaXaCW791LTzPuVyx/VprXQcTbPJ3K3UeTna8ZnVl2sg==", 215 | "requires": { 216 | "create-hash": "^1.1.0", 217 | "pbkdf2": "^3.0.9", 218 | "randombytes": "^2.0.1", 219 | "safe-buffer": "^5.0.1", 220 | "unorm": "^1.3.3" 221 | } 222 | }, 223 | "bip66": { 224 | "version": "1.1.5", 225 | "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", 226 | "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", 227 | "requires": { 228 | "safe-buffer": "^5.0.1" 229 | } 230 | }, 231 | "bn.js": { 232 | "version": "4.11.8", 233 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 234 | "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" 235 | }, 236 | "body-parser": { 237 | "version": "1.19.0", 238 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 239 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 240 | "requires": { 241 | "bytes": "3.1.0", 242 | "content-type": "~1.0.4", 243 | "debug": "2.6.9", 244 | "depd": "~1.1.2", 245 | "http-errors": "1.7.2", 246 | "iconv-lite": "0.4.24", 247 | "on-finished": "~2.3.0", 248 | "qs": "6.7.0", 249 | "raw-body": "2.4.0", 250 | "type-is": "~1.6.17" 251 | } 252 | }, 253 | "braces": { 254 | "version": "2.3.2", 255 | "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", 256 | "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", 257 | "requires": { 258 | "arr-flatten": "^1.1.0", 259 | "array-unique": "^0.3.2", 260 | "extend-shallow": "^2.0.1", 261 | "fill-range": "^4.0.0", 262 | "isobject": "^3.0.1", 263 | "repeat-element": "^1.1.2", 264 | "snapdragon": "^0.8.1", 265 | "snapdragon-node": "^2.0.1", 266 | "split-string": "^3.0.2", 267 | "to-regex": "^3.0.1" 268 | }, 269 | "dependencies": { 270 | "extend-shallow": { 271 | "version": "2.0.1", 272 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 273 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 274 | "requires": { 275 | "is-extendable": "^0.1.0" 276 | } 277 | } 278 | } 279 | }, 280 | "brorand": { 281 | "version": "1.1.0", 282 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 283 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" 284 | }, 285 | "browserify-aes": { 286 | "version": "1.2.0", 287 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 288 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 289 | "requires": { 290 | "buffer-xor": "^1.0.3", 291 | "cipher-base": "^1.0.0", 292 | "create-hash": "^1.1.0", 293 | "evp_bytestokey": "^1.0.3", 294 | "inherits": "^2.0.1", 295 | "safe-buffer": "^5.0.1" 296 | } 297 | }, 298 | "bs58": { 299 | "version": "4.0.1", 300 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", 301 | "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", 302 | "requires": { 303 | "base-x": "^3.0.2" 304 | } 305 | }, 306 | "bs58check": { 307 | "version": "2.1.2", 308 | "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", 309 | "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", 310 | "requires": { 311 | "bs58": "^4.0.0", 312 | "create-hash": "^1.1.0", 313 | "safe-buffer": "^5.1.2" 314 | } 315 | }, 316 | "buffer-xor": { 317 | "version": "1.0.3", 318 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 319 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" 320 | }, 321 | "bytes": { 322 | "version": "3.1.0", 323 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 324 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 325 | }, 326 | "cache-base": { 327 | "version": "1.0.1", 328 | "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", 329 | "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", 330 | "requires": { 331 | "collection-visit": "^1.0.0", 332 | "component-emitter": "^1.2.1", 333 | "get-value": "^2.0.6", 334 | "has-value": "^1.0.0", 335 | "isobject": "^3.0.1", 336 | "set-value": "^2.0.0", 337 | "to-object-path": "^0.3.0", 338 | "union-value": "^1.0.0", 339 | "unset-value": "^1.0.0" 340 | } 341 | }, 342 | "chalk": { 343 | "version": "2.4.2", 344 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 345 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 346 | "requires": { 347 | "ansi-styles": "^3.2.1", 348 | "escape-string-regexp": "^1.0.5", 349 | "supports-color": "^5.3.0" 350 | } 351 | }, 352 | "cipher-base": { 353 | "version": "1.0.4", 354 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 355 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 356 | "requires": { 357 | "inherits": "^2.0.1", 358 | "safe-buffer": "^5.0.1" 359 | } 360 | }, 361 | "class-utils": { 362 | "version": "0.3.6", 363 | "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", 364 | "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", 365 | "requires": { 366 | "arr-union": "^3.1.0", 367 | "define-property": "^0.2.5", 368 | "isobject": "^3.0.0", 369 | "static-extend": "^0.1.1" 370 | }, 371 | "dependencies": { 372 | "define-property": { 373 | "version": "0.2.5", 374 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 375 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 376 | "requires": { 377 | "is-descriptor": "^0.1.0" 378 | } 379 | } 380 | } 381 | }, 382 | "coinstring": { 383 | "version": "2.3.0", 384 | "resolved": "https://registry.npmjs.org/coinstring/-/coinstring-2.3.0.tgz", 385 | "integrity": "sha1-zbYzY6lhUCQEolr7gsLibV/2J6Q=", 386 | "requires": { 387 | "bs58": "^2.0.1", 388 | "create-hash": "^1.1.1" 389 | }, 390 | "dependencies": { 391 | "bs58": { 392 | "version": "2.0.1", 393 | "resolved": "https://registry.npmjs.org/bs58/-/bs58-2.0.1.tgz", 394 | "integrity": "sha1-VZCNWPGYKrogCPob7Y+RmYopv40=" 395 | } 396 | } 397 | }, 398 | "collection-visit": { 399 | "version": "1.0.0", 400 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", 401 | "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", 402 | "requires": { 403 | "map-visit": "^1.0.0", 404 | "object-visit": "^1.0.0" 405 | } 406 | }, 407 | "color-convert": { 408 | "version": "1.9.3", 409 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 410 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 411 | "requires": { 412 | "color-name": "1.1.3" 413 | } 414 | }, 415 | "color-name": { 416 | "version": "1.1.3", 417 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 418 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 419 | }, 420 | "component-emitter": { 421 | "version": "1.3.0", 422 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", 423 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" 424 | }, 425 | "content-disposition": { 426 | "version": "0.5.3", 427 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 428 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 429 | "requires": { 430 | "safe-buffer": "5.1.2" 431 | }, 432 | "dependencies": { 433 | "safe-buffer": { 434 | "version": "5.1.2", 435 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 436 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 437 | } 438 | } 439 | }, 440 | "content-type": { 441 | "version": "1.0.4", 442 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 443 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 444 | }, 445 | "cookie": { 446 | "version": "0.4.0", 447 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 448 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 449 | }, 450 | "cookie-signature": { 451 | "version": "1.0.6", 452 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 453 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 454 | }, 455 | "copy-descriptor": { 456 | "version": "0.1.1", 457 | "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", 458 | "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" 459 | }, 460 | "core-js": { 461 | "version": "2.6.10", 462 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", 463 | "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==" 464 | }, 465 | "create-hash": { 466 | "version": "1.2.0", 467 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 468 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 469 | "requires": { 470 | "cipher-base": "^1.0.1", 471 | "inherits": "^2.0.1", 472 | "md5.js": "^1.3.4", 473 | "ripemd160": "^2.0.1", 474 | "sha.js": "^2.4.0" 475 | } 476 | }, 477 | "create-hmac": { 478 | "version": "1.1.7", 479 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 480 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 481 | "requires": { 482 | "cipher-base": "^1.0.3", 483 | "create-hash": "^1.1.0", 484 | "inherits": "^2.0.1", 485 | "ripemd160": "^2.0.0", 486 | "safe-buffer": "^5.0.1", 487 | "sha.js": "^2.4.8" 488 | } 489 | }, 490 | "debug": { 491 | "version": "2.6.9", 492 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 493 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 494 | "requires": { 495 | "ms": "2.0.0" 496 | } 497 | }, 498 | "decode-uri-component": { 499 | "version": "0.2.0", 500 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 501 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" 502 | }, 503 | "define-property": { 504 | "version": "2.0.2", 505 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", 506 | "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", 507 | "requires": { 508 | "is-descriptor": "^1.0.2", 509 | "isobject": "^3.0.1" 510 | }, 511 | "dependencies": { 512 | "is-accessor-descriptor": { 513 | "version": "1.0.0", 514 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 515 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 516 | "requires": { 517 | "kind-of": "^6.0.0" 518 | } 519 | }, 520 | "is-data-descriptor": { 521 | "version": "1.0.0", 522 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 523 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 524 | "requires": { 525 | "kind-of": "^6.0.0" 526 | } 527 | }, 528 | "is-descriptor": { 529 | "version": "1.0.2", 530 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 531 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 532 | "requires": { 533 | "is-accessor-descriptor": "^1.0.0", 534 | "is-data-descriptor": "^1.0.0", 535 | "kind-of": "^6.0.2" 536 | } 537 | } 538 | } 539 | }, 540 | "depd": { 541 | "version": "1.1.2", 542 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 543 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 544 | }, 545 | "destroy": { 546 | "version": "1.0.4", 547 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 548 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 549 | }, 550 | "drbg.js": { 551 | "version": "1.0.1", 552 | "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", 553 | "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", 554 | "requires": { 555 | "browserify-aes": "^1.0.6", 556 | "create-hash": "^1.1.2", 557 | "create-hmac": "^1.1.4" 558 | } 559 | }, 560 | "ee-first": { 561 | "version": "1.1.1", 562 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 563 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 564 | }, 565 | "elliptic": { 566 | "version": "6.5.0", 567 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", 568 | "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", 569 | "requires": { 570 | "bn.js": "^4.4.0", 571 | "brorand": "^1.0.1", 572 | "hash.js": "^1.0.0", 573 | "hmac-drbg": "^1.0.0", 574 | "inherits": "^2.0.1", 575 | "minimalistic-assert": "^1.0.0", 576 | "minimalistic-crypto-utils": "^1.0.0" 577 | } 578 | }, 579 | "encodeurl": { 580 | "version": "1.0.2", 581 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 582 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 583 | }, 584 | "escape-html": { 585 | "version": "1.0.3", 586 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 587 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 588 | }, 589 | "escape-string-regexp": { 590 | "version": "1.0.5", 591 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 592 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 593 | }, 594 | "etag": { 595 | "version": "1.8.1", 596 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 597 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 598 | }, 599 | "ethereumjs-util": { 600 | "version": "6.1.0", 601 | "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", 602 | "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", 603 | "requires": { 604 | "bn.js": "^4.11.0", 605 | "create-hash": "^1.1.2", 606 | "ethjs-util": "0.1.6", 607 | "keccak": "^1.0.2", 608 | "rlp": "^2.0.0", 609 | "safe-buffer": "^5.1.1", 610 | "secp256k1": "^3.0.1" 611 | } 612 | }, 613 | "ethereumjs-wallet": { 614 | "version": "0.6.3", 615 | "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.3.tgz", 616 | "integrity": "sha512-qiXPiZOsStem+Dj/CQHbn5qex+FVkuPmGH7SvSnA9F3tdRDt8dLMyvIj3+U05QzVZNPYh4HXEdnzoYI4dZkr9w==", 617 | "requires": { 618 | "aes-js": "^3.1.1", 619 | "bs58check": "^2.1.2", 620 | "ethereumjs-util": "^6.0.0", 621 | "hdkey": "^1.1.0", 622 | "randombytes": "^2.0.6", 623 | "safe-buffer": "^5.1.2", 624 | "scrypt.js": "^0.3.0", 625 | "utf8": "^3.0.0", 626 | "uuid": "^3.3.2" 627 | } 628 | }, 629 | "ethers": { 630 | "version": "4.0.38", 631 | "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.38.tgz", 632 | "integrity": "sha512-l7l7RIfk2/rIFgRRVLFY3H06S9dhXXPUdMlYm6SCelB6oG+ABmoRig7xSVOLcHLayBfSwssjAAYLKxf1jWhbuQ==", 633 | "requires": { 634 | "@types/node": "^10.3.2", 635 | "aes-js": "3.0.0", 636 | "bn.js": "^4.4.0", 637 | "elliptic": "6.3.3", 638 | "hash.js": "1.1.3", 639 | "js-sha3": "0.5.7", 640 | "scrypt-js": "2.0.4", 641 | "setimmediate": "1.0.4", 642 | "uuid": "2.0.1", 643 | "xmlhttprequest": "1.8.0" 644 | }, 645 | "dependencies": { 646 | "aes-js": { 647 | "version": "3.0.0", 648 | "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", 649 | "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" 650 | }, 651 | "elliptic": { 652 | "version": "6.3.3", 653 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", 654 | "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", 655 | "requires": { 656 | "bn.js": "^4.4.0", 657 | "brorand": "^1.0.1", 658 | "hash.js": "^1.0.0", 659 | "inherits": "^2.0.1" 660 | } 661 | }, 662 | "hash.js": { 663 | "version": "1.1.3", 664 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", 665 | "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", 666 | "requires": { 667 | "inherits": "^2.0.3", 668 | "minimalistic-assert": "^1.0.0" 669 | } 670 | }, 671 | "uuid": { 672 | "version": "2.0.1", 673 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", 674 | "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" 675 | } 676 | } 677 | }, 678 | "ethjs-util": { 679 | "version": "0.1.6", 680 | "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", 681 | "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", 682 | "requires": { 683 | "is-hex-prefixed": "1.0.0", 684 | "strip-hex-prefix": "1.0.0" 685 | } 686 | }, 687 | "eventemitter3": { 688 | "version": "3.1.2", 689 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", 690 | "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" 691 | }, 692 | "evp_bytestokey": { 693 | "version": "1.0.3", 694 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 695 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 696 | "requires": { 697 | "md5.js": "^1.3.4", 698 | "safe-buffer": "^5.1.1" 699 | } 700 | }, 701 | "expand-brackets": { 702 | "version": "2.1.4", 703 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", 704 | "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", 705 | "requires": { 706 | "debug": "^2.3.3", 707 | "define-property": "^0.2.5", 708 | "extend-shallow": "^2.0.1", 709 | "posix-character-classes": "^0.1.0", 710 | "regex-not": "^1.0.0", 711 | "snapdragon": "^0.8.1", 712 | "to-regex": "^3.0.1" 713 | }, 714 | "dependencies": { 715 | "define-property": { 716 | "version": "0.2.5", 717 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 718 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 719 | "requires": { 720 | "is-descriptor": "^0.1.0" 721 | } 722 | }, 723 | "extend-shallow": { 724 | "version": "2.0.1", 725 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 726 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 727 | "requires": { 728 | "is-extendable": "^0.1.0" 729 | } 730 | } 731 | } 732 | }, 733 | "express": { 734 | "version": "4.17.1", 735 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 736 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 737 | "requires": { 738 | "accepts": "~1.3.7", 739 | "array-flatten": "1.1.1", 740 | "body-parser": "1.19.0", 741 | "content-disposition": "0.5.3", 742 | "content-type": "~1.0.4", 743 | "cookie": "0.4.0", 744 | "cookie-signature": "1.0.6", 745 | "debug": "2.6.9", 746 | "depd": "~1.1.2", 747 | "encodeurl": "~1.0.2", 748 | "escape-html": "~1.0.3", 749 | "etag": "~1.8.1", 750 | "finalhandler": "~1.1.2", 751 | "fresh": "0.5.2", 752 | "merge-descriptors": "1.0.1", 753 | "methods": "~1.1.2", 754 | "on-finished": "~2.3.0", 755 | "parseurl": "~1.3.3", 756 | "path-to-regexp": "0.1.7", 757 | "proxy-addr": "~2.0.5", 758 | "qs": "6.7.0", 759 | "range-parser": "~1.2.1", 760 | "safe-buffer": "5.1.2", 761 | "send": "0.17.1", 762 | "serve-static": "1.14.1", 763 | "setprototypeof": "1.1.1", 764 | "statuses": "~1.5.0", 765 | "type-is": "~1.6.18", 766 | "utils-merge": "1.0.1", 767 | "vary": "~1.1.2" 768 | }, 769 | "dependencies": { 770 | "safe-buffer": { 771 | "version": "5.1.2", 772 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 773 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 774 | } 775 | } 776 | }, 777 | "extend-shallow": { 778 | "version": "3.0.2", 779 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", 780 | "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", 781 | "requires": { 782 | "assign-symbols": "^1.0.0", 783 | "is-extendable": "^1.0.1" 784 | }, 785 | "dependencies": { 786 | "is-extendable": { 787 | "version": "1.0.1", 788 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 789 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 790 | "requires": { 791 | "is-plain-object": "^2.0.4" 792 | } 793 | } 794 | } 795 | }, 796 | "extglob": { 797 | "version": "2.0.4", 798 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", 799 | "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", 800 | "requires": { 801 | "array-unique": "^0.3.2", 802 | "define-property": "^1.0.0", 803 | "expand-brackets": "^2.1.4", 804 | "extend-shallow": "^2.0.1", 805 | "fragment-cache": "^0.2.1", 806 | "regex-not": "^1.0.0", 807 | "snapdragon": "^0.8.1", 808 | "to-regex": "^3.0.1" 809 | }, 810 | "dependencies": { 811 | "define-property": { 812 | "version": "1.0.0", 813 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 814 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 815 | "requires": { 816 | "is-descriptor": "^1.0.0" 817 | } 818 | }, 819 | "extend-shallow": { 820 | "version": "2.0.1", 821 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 822 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 823 | "requires": { 824 | "is-extendable": "^0.1.0" 825 | } 826 | }, 827 | "is-accessor-descriptor": { 828 | "version": "1.0.0", 829 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 830 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 831 | "requires": { 832 | "kind-of": "^6.0.0" 833 | } 834 | }, 835 | "is-data-descriptor": { 836 | "version": "1.0.0", 837 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 838 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 839 | "requires": { 840 | "kind-of": "^6.0.0" 841 | } 842 | }, 843 | "is-descriptor": { 844 | "version": "1.0.2", 845 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 846 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 847 | "requires": { 848 | "is-accessor-descriptor": "^1.0.0", 849 | "is-data-descriptor": "^1.0.0", 850 | "kind-of": "^6.0.2" 851 | } 852 | } 853 | } 854 | }, 855 | "file-uri-to-path": { 856 | "version": "1.0.0", 857 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 858 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" 859 | }, 860 | "fill-range": { 861 | "version": "4.0.0", 862 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", 863 | "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", 864 | "requires": { 865 | "extend-shallow": "^2.0.1", 866 | "is-number": "^3.0.0", 867 | "repeat-string": "^1.6.1", 868 | "to-regex-range": "^2.1.0" 869 | }, 870 | "dependencies": { 871 | "extend-shallow": { 872 | "version": "2.0.1", 873 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 874 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 875 | "requires": { 876 | "is-extendable": "^0.1.0" 877 | } 878 | } 879 | } 880 | }, 881 | "finalhandler": { 882 | "version": "1.1.2", 883 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 884 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 885 | "requires": { 886 | "debug": "2.6.9", 887 | "encodeurl": "~1.0.2", 888 | "escape-html": "~1.0.3", 889 | "on-finished": "~2.3.0", 890 | "parseurl": "~1.3.3", 891 | "statuses": "~1.5.0", 892 | "unpipe": "~1.0.0" 893 | } 894 | }, 895 | "follow-redirects": { 896 | "version": "1.7.0", 897 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", 898 | "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", 899 | "requires": { 900 | "debug": "^3.2.6" 901 | }, 902 | "dependencies": { 903 | "debug": { 904 | "version": "3.2.6", 905 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 906 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 907 | "requires": { 908 | "ms": "^2.1.1" 909 | } 910 | }, 911 | "ms": { 912 | "version": "2.1.2", 913 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 914 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 915 | } 916 | } 917 | }, 918 | "for-in": { 919 | "version": "1.0.2", 920 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 921 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" 922 | }, 923 | "forwarded": { 924 | "version": "0.1.2", 925 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 926 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 927 | }, 928 | "fragment-cache": { 929 | "version": "0.2.1", 930 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", 931 | "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", 932 | "requires": { 933 | "map-cache": "^0.2.2" 934 | } 935 | }, 936 | "fresh": { 937 | "version": "0.5.2", 938 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 939 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 940 | }, 941 | "fs-extra": { 942 | "version": "7.0.1", 943 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 944 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", 945 | "requires": { 946 | "graceful-fs": "^4.1.2", 947 | "jsonfile": "^4.0.0", 948 | "universalify": "^0.1.0" 949 | } 950 | }, 951 | "get-value": { 952 | "version": "2.0.6", 953 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", 954 | "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" 955 | }, 956 | "graceful-fs": { 957 | "version": "4.2.1", 958 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz", 959 | "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==" 960 | }, 961 | "has-flag": { 962 | "version": "3.0.0", 963 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 964 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 965 | }, 966 | "has-value": { 967 | "version": "1.0.0", 968 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", 969 | "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", 970 | "requires": { 971 | "get-value": "^2.0.6", 972 | "has-values": "^1.0.0", 973 | "isobject": "^3.0.0" 974 | } 975 | }, 976 | "has-values": { 977 | "version": "1.0.0", 978 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", 979 | "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", 980 | "requires": { 981 | "is-number": "^3.0.0", 982 | "kind-of": "^4.0.0" 983 | }, 984 | "dependencies": { 985 | "kind-of": { 986 | "version": "4.0.0", 987 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 988 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 989 | "requires": { 990 | "is-buffer": "^1.1.5" 991 | } 992 | } 993 | } 994 | }, 995 | "hash-base": { 996 | "version": "3.0.4", 997 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", 998 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", 999 | "requires": { 1000 | "inherits": "^2.0.1", 1001 | "safe-buffer": "^5.0.1" 1002 | } 1003 | }, 1004 | "hash.js": { 1005 | "version": "1.1.7", 1006 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 1007 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 1008 | "requires": { 1009 | "inherits": "^2.0.3", 1010 | "minimalistic-assert": "^1.0.1" 1011 | } 1012 | }, 1013 | "hdkey": { 1014 | "version": "1.1.1", 1015 | "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-1.1.1.tgz", 1016 | "integrity": "sha512-DvHZ5OuavsfWs5yfVJZestsnc3wzPvLWNk6c2nRUfo6X+OtxypGt20vDDf7Ba+MJzjL3KS1og2nw2eBbLCOUTA==", 1017 | "requires": { 1018 | "coinstring": "^2.0.0", 1019 | "safe-buffer": "^5.1.1", 1020 | "secp256k1": "^3.0.1" 1021 | } 1022 | }, 1023 | "hmac-drbg": { 1024 | "version": "1.0.1", 1025 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 1026 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 1027 | "requires": { 1028 | "hash.js": "^1.0.3", 1029 | "minimalistic-assert": "^1.0.0", 1030 | "minimalistic-crypto-utils": "^1.0.1" 1031 | } 1032 | }, 1033 | "http-errors": { 1034 | "version": "1.7.2", 1035 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 1036 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 1037 | "requires": { 1038 | "depd": "~1.1.2", 1039 | "inherits": "2.0.3", 1040 | "setprototypeof": "1.1.1", 1041 | "statuses": ">= 1.5.0 < 2", 1042 | "toidentifier": "1.0.0" 1043 | }, 1044 | "dependencies": { 1045 | "inherits": { 1046 | "version": "2.0.3", 1047 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1048 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1049 | } 1050 | } 1051 | }, 1052 | "http-proxy": { 1053 | "version": "1.17.0", 1054 | "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", 1055 | "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", 1056 | "requires": { 1057 | "eventemitter3": "^3.0.0", 1058 | "follow-redirects": "^1.0.0", 1059 | "requires-port": "^1.0.0" 1060 | } 1061 | }, 1062 | "http-proxy-middleware": { 1063 | "version": "0.19.1", 1064 | "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", 1065 | "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", 1066 | "requires": { 1067 | "http-proxy": "^1.17.0", 1068 | "is-glob": "^4.0.0", 1069 | "lodash": "^4.17.11", 1070 | "micromatch": "^3.1.10" 1071 | } 1072 | }, 1073 | "iconv-lite": { 1074 | "version": "0.4.24", 1075 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1076 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1077 | "requires": { 1078 | "safer-buffer": ">= 2.1.2 < 3" 1079 | } 1080 | }, 1081 | "inherits": { 1082 | "version": "2.0.4", 1083 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1084 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1085 | }, 1086 | "injectpromise": { 1087 | "version": "1.0.0", 1088 | "resolved": "https://registry.npmjs.org/injectpromise/-/injectpromise-1.0.0.tgz", 1089 | "integrity": "sha512-qNq5wy4qX4uWHcVFOEU+RqZkoVG65FhvGkyDWbuBxILMjK6A1LFf5A1mgXZkD4nRx5FCorD81X/XvPKp/zVfPA==" 1090 | }, 1091 | "ipaddr.js": { 1092 | "version": "1.9.0", 1093 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", 1094 | "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" 1095 | }, 1096 | "is-accessor-descriptor": { 1097 | "version": "0.1.6", 1098 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", 1099 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", 1100 | "requires": { 1101 | "kind-of": "^3.0.2" 1102 | }, 1103 | "dependencies": { 1104 | "kind-of": { 1105 | "version": "3.2.2", 1106 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1107 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1108 | "requires": { 1109 | "is-buffer": "^1.1.5" 1110 | } 1111 | } 1112 | } 1113 | }, 1114 | "is-buffer": { 1115 | "version": "1.1.6", 1116 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1117 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 1118 | }, 1119 | "is-data-descriptor": { 1120 | "version": "0.1.4", 1121 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", 1122 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", 1123 | "requires": { 1124 | "kind-of": "^3.0.2" 1125 | }, 1126 | "dependencies": { 1127 | "kind-of": { 1128 | "version": "3.2.2", 1129 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1130 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1131 | "requires": { 1132 | "is-buffer": "^1.1.5" 1133 | } 1134 | } 1135 | } 1136 | }, 1137 | "is-descriptor": { 1138 | "version": "0.1.6", 1139 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", 1140 | "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", 1141 | "requires": { 1142 | "is-accessor-descriptor": "^0.1.6", 1143 | "is-data-descriptor": "^0.1.4", 1144 | "kind-of": "^5.0.0" 1145 | }, 1146 | "dependencies": { 1147 | "kind-of": { 1148 | "version": "5.1.0", 1149 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 1150 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" 1151 | } 1152 | } 1153 | }, 1154 | "is-extendable": { 1155 | "version": "0.1.1", 1156 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 1157 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" 1158 | }, 1159 | "is-extglob": { 1160 | "version": "2.1.1", 1161 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1162 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 1163 | }, 1164 | "is-glob": { 1165 | "version": "4.0.1", 1166 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1167 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1168 | "requires": { 1169 | "is-extglob": "^2.1.1" 1170 | } 1171 | }, 1172 | "is-hex-prefixed": { 1173 | "version": "1.0.0", 1174 | "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", 1175 | "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" 1176 | }, 1177 | "is-number": { 1178 | "version": "3.0.0", 1179 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 1180 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 1181 | "requires": { 1182 | "kind-of": "^3.0.2" 1183 | }, 1184 | "dependencies": { 1185 | "kind-of": { 1186 | "version": "3.2.2", 1187 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1188 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1189 | "requires": { 1190 | "is-buffer": "^1.1.5" 1191 | } 1192 | } 1193 | } 1194 | }, 1195 | "is-plain-object": { 1196 | "version": "2.0.4", 1197 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 1198 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 1199 | "requires": { 1200 | "isobject": "^3.0.1" 1201 | } 1202 | }, 1203 | "is-windows": { 1204 | "version": "1.0.2", 1205 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 1206 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" 1207 | }, 1208 | "isarray": { 1209 | "version": "1.0.0", 1210 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1211 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1212 | }, 1213 | "isobject": { 1214 | "version": "3.0.1", 1215 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 1216 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" 1217 | }, 1218 | "js-sha3": { 1219 | "version": "0.5.7", 1220 | "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", 1221 | "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" 1222 | }, 1223 | "jsonfile": { 1224 | "version": "4.0.0", 1225 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1226 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 1227 | "requires": { 1228 | "graceful-fs": "^4.1.6" 1229 | } 1230 | }, 1231 | "keccak": { 1232 | "version": "1.4.0", 1233 | "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", 1234 | "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", 1235 | "requires": { 1236 | "bindings": "^1.2.1", 1237 | "inherits": "^2.0.3", 1238 | "nan": "^2.2.1", 1239 | "safe-buffer": "^5.1.0" 1240 | } 1241 | }, 1242 | "kind-of": { 1243 | "version": "6.0.2", 1244 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 1245 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" 1246 | }, 1247 | "lodash": { 1248 | "version": "4.17.15", 1249 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 1250 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" 1251 | }, 1252 | "map-cache": { 1253 | "version": "0.2.2", 1254 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 1255 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" 1256 | }, 1257 | "map-visit": { 1258 | "version": "1.0.0", 1259 | "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", 1260 | "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", 1261 | "requires": { 1262 | "object-visit": "^1.0.0" 1263 | } 1264 | }, 1265 | "md5.js": { 1266 | "version": "1.3.5", 1267 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 1268 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 1269 | "requires": { 1270 | "hash-base": "^3.0.0", 1271 | "inherits": "^2.0.1", 1272 | "safe-buffer": "^5.1.2" 1273 | } 1274 | }, 1275 | "media-typer": { 1276 | "version": "0.3.0", 1277 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1278 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 1279 | }, 1280 | "merge-descriptors": { 1281 | "version": "1.0.1", 1282 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1283 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 1284 | }, 1285 | "methods": { 1286 | "version": "1.1.2", 1287 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1288 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 1289 | }, 1290 | "micromatch": { 1291 | "version": "3.1.10", 1292 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", 1293 | "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", 1294 | "requires": { 1295 | "arr-diff": "^4.0.0", 1296 | "array-unique": "^0.3.2", 1297 | "braces": "^2.3.1", 1298 | "define-property": "^2.0.2", 1299 | "extend-shallow": "^3.0.2", 1300 | "extglob": "^2.0.4", 1301 | "fragment-cache": "^0.2.1", 1302 | "kind-of": "^6.0.2", 1303 | "nanomatch": "^1.2.9", 1304 | "object.pick": "^1.3.0", 1305 | "regex-not": "^1.0.0", 1306 | "snapdragon": "^0.8.1", 1307 | "to-regex": "^3.0.2" 1308 | } 1309 | }, 1310 | "mime": { 1311 | "version": "1.6.0", 1312 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1313 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 1314 | }, 1315 | "mime-db": { 1316 | "version": "1.40.0", 1317 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", 1318 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" 1319 | }, 1320 | "mime-types": { 1321 | "version": "2.1.24", 1322 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", 1323 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", 1324 | "requires": { 1325 | "mime-db": "1.40.0" 1326 | } 1327 | }, 1328 | "minimalistic-assert": { 1329 | "version": "1.0.1", 1330 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 1331 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 1332 | }, 1333 | "minimalistic-crypto-utils": { 1334 | "version": "1.0.1", 1335 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 1336 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" 1337 | }, 1338 | "mixin-deep": { 1339 | "version": "1.3.2", 1340 | "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", 1341 | "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", 1342 | "requires": { 1343 | "for-in": "^1.0.2", 1344 | "is-extendable": "^1.0.1" 1345 | }, 1346 | "dependencies": { 1347 | "is-extendable": { 1348 | "version": "1.0.1", 1349 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 1350 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 1351 | "requires": { 1352 | "is-plain-object": "^2.0.4" 1353 | } 1354 | } 1355 | } 1356 | }, 1357 | "morgan": { 1358 | "version": "1.9.1", 1359 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", 1360 | "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", 1361 | "requires": { 1362 | "basic-auth": "~2.0.0", 1363 | "debug": "2.6.9", 1364 | "depd": "~1.1.2", 1365 | "on-finished": "~2.3.0", 1366 | "on-headers": "~1.0.1" 1367 | } 1368 | }, 1369 | "ms": { 1370 | "version": "2.0.0", 1371 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1372 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1373 | }, 1374 | "nan": { 1375 | "version": "2.14.0", 1376 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", 1377 | "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" 1378 | }, 1379 | "nanomatch": { 1380 | "version": "1.2.13", 1381 | "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", 1382 | "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", 1383 | "requires": { 1384 | "arr-diff": "^4.0.0", 1385 | "array-unique": "^0.3.2", 1386 | "define-property": "^2.0.2", 1387 | "extend-shallow": "^3.0.2", 1388 | "fragment-cache": "^0.2.1", 1389 | "is-windows": "^1.0.2", 1390 | "kind-of": "^6.0.2", 1391 | "object.pick": "^1.3.0", 1392 | "regex-not": "^1.0.0", 1393 | "snapdragon": "^0.8.1", 1394 | "to-regex": "^3.0.1" 1395 | } 1396 | }, 1397 | "negotiator": { 1398 | "version": "0.6.2", 1399 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 1400 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 1401 | }, 1402 | "object-copy": { 1403 | "version": "0.1.0", 1404 | "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", 1405 | "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", 1406 | "requires": { 1407 | "copy-descriptor": "^0.1.0", 1408 | "define-property": "^0.2.5", 1409 | "kind-of": "^3.0.3" 1410 | }, 1411 | "dependencies": { 1412 | "define-property": { 1413 | "version": "0.2.5", 1414 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 1415 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 1416 | "requires": { 1417 | "is-descriptor": "^0.1.0" 1418 | } 1419 | }, 1420 | "kind-of": { 1421 | "version": "3.2.2", 1422 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1423 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1424 | "requires": { 1425 | "is-buffer": "^1.1.5" 1426 | } 1427 | } 1428 | } 1429 | }, 1430 | "object-visit": { 1431 | "version": "1.0.1", 1432 | "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", 1433 | "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", 1434 | "requires": { 1435 | "isobject": "^3.0.0" 1436 | } 1437 | }, 1438 | "object.pick": { 1439 | "version": "1.3.0", 1440 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", 1441 | "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", 1442 | "requires": { 1443 | "isobject": "^3.0.1" 1444 | } 1445 | }, 1446 | "on-finished": { 1447 | "version": "2.3.0", 1448 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1449 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 1450 | "requires": { 1451 | "ee-first": "1.1.1" 1452 | } 1453 | }, 1454 | "on-headers": { 1455 | "version": "1.0.2", 1456 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 1457 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" 1458 | }, 1459 | "parseurl": { 1460 | "version": "1.3.3", 1461 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1462 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 1463 | }, 1464 | "pascalcase": { 1465 | "version": "0.1.1", 1466 | "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", 1467 | "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" 1468 | }, 1469 | "path-to-regexp": { 1470 | "version": "0.1.7", 1471 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1472 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 1473 | }, 1474 | "pbkdf2": { 1475 | "version": "3.0.17", 1476 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", 1477 | "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", 1478 | "requires": { 1479 | "create-hash": "^1.1.2", 1480 | "create-hmac": "^1.1.4", 1481 | "ripemd160": "^2.0.1", 1482 | "safe-buffer": "^5.0.1", 1483 | "sha.js": "^2.4.8" 1484 | } 1485 | }, 1486 | "posix-character-classes": { 1487 | "version": "0.1.1", 1488 | "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", 1489 | "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" 1490 | }, 1491 | "proxy-addr": { 1492 | "version": "2.0.5", 1493 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", 1494 | "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", 1495 | "requires": { 1496 | "forwarded": "~0.1.2", 1497 | "ipaddr.js": "1.9.0" 1498 | } 1499 | }, 1500 | "qs": { 1501 | "version": "6.7.0", 1502 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 1503 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 1504 | }, 1505 | "randombytes": { 1506 | "version": "2.1.0", 1507 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1508 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1509 | "requires": { 1510 | "safe-buffer": "^5.1.0" 1511 | } 1512 | }, 1513 | "range-parser": { 1514 | "version": "1.2.1", 1515 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1516 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 1517 | }, 1518 | "raw-body": { 1519 | "version": "2.4.0", 1520 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 1521 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 1522 | "requires": { 1523 | "bytes": "3.1.0", 1524 | "http-errors": "1.7.2", 1525 | "iconv-lite": "0.4.24", 1526 | "unpipe": "1.0.0" 1527 | } 1528 | }, 1529 | "regenerator-runtime": { 1530 | "version": "0.13.3", 1531 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", 1532 | "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" 1533 | }, 1534 | "regex-not": { 1535 | "version": "1.0.2", 1536 | "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", 1537 | "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", 1538 | "requires": { 1539 | "extend-shallow": "^3.0.2", 1540 | "safe-regex": "^1.1.0" 1541 | } 1542 | }, 1543 | "repeat-element": { 1544 | "version": "1.1.3", 1545 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", 1546 | "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" 1547 | }, 1548 | "repeat-string": { 1549 | "version": "1.6.1", 1550 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 1551 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" 1552 | }, 1553 | "requires-port": { 1554 | "version": "1.0.0", 1555 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 1556 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" 1557 | }, 1558 | "resolve-url": { 1559 | "version": "0.2.1", 1560 | "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", 1561 | "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" 1562 | }, 1563 | "ret": { 1564 | "version": "0.1.15", 1565 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", 1566 | "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" 1567 | }, 1568 | "ripemd160": { 1569 | "version": "2.0.2", 1570 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 1571 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 1572 | "requires": { 1573 | "hash-base": "^3.0.0", 1574 | "inherits": "^2.0.1" 1575 | } 1576 | }, 1577 | "rlp": { 1578 | "version": "2.2.3", 1579 | "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.3.tgz", 1580 | "integrity": "sha512-l6YVrI7+d2vpW6D6rS05x2Xrmq8oW7v3pieZOJKBEdjuTF4Kz/iwk55Zyh1Zaz+KOB2kC8+2jZlp2u9L4tTzCQ==", 1581 | "requires": { 1582 | "bn.js": "^4.11.1", 1583 | "safe-buffer": "^5.1.1" 1584 | } 1585 | }, 1586 | "safe-buffer": { 1587 | "version": "5.2.0", 1588 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 1589 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 1590 | }, 1591 | "safe-regex": { 1592 | "version": "1.1.0", 1593 | "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", 1594 | "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", 1595 | "requires": { 1596 | "ret": "~0.1.10" 1597 | } 1598 | }, 1599 | "safer-buffer": { 1600 | "version": "2.1.2", 1601 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1602 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1603 | }, 1604 | "scrypt": { 1605 | "version": "6.0.3", 1606 | "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", 1607 | "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", 1608 | "requires": { 1609 | "nan": "^2.0.8" 1610 | } 1611 | }, 1612 | "scrypt-js": { 1613 | "version": "2.0.4", 1614 | "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", 1615 | "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" 1616 | }, 1617 | "scrypt.js": { 1618 | "version": "0.3.0", 1619 | "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.3.0.tgz", 1620 | "integrity": "sha512-42LTc1nyFsyv/o0gcHtDztrn+aqpkaCNt5Qh7ATBZfhEZU7IC/0oT/qbBH+uRNoAPvs2fwiOId68FDEoSRA8/A==", 1621 | "requires": { 1622 | "scrypt": "^6.0.2", 1623 | "scryptsy": "^1.2.1" 1624 | } 1625 | }, 1626 | "scryptsy": { 1627 | "version": "1.2.1", 1628 | "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", 1629 | "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", 1630 | "requires": { 1631 | "pbkdf2": "^3.0.3" 1632 | } 1633 | }, 1634 | "secp256k1": { 1635 | "version": "3.7.1", 1636 | "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.7.1.tgz", 1637 | "integrity": "sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g==", 1638 | "requires": { 1639 | "bindings": "^1.5.0", 1640 | "bip66": "^1.1.5", 1641 | "bn.js": "^4.11.8", 1642 | "create-hash": "^1.2.0", 1643 | "drbg.js": "^1.0.1", 1644 | "elliptic": "^6.4.1", 1645 | "nan": "^2.14.0", 1646 | "safe-buffer": "^5.1.2" 1647 | } 1648 | }, 1649 | "seedrandom": { 1650 | "version": "2.4.4", 1651 | "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz", 1652 | "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==" 1653 | }, 1654 | "semver": { 1655 | "version": "5.7.1", 1656 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1657 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 1658 | }, 1659 | "send": { 1660 | "version": "0.17.1", 1661 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 1662 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 1663 | "requires": { 1664 | "debug": "2.6.9", 1665 | "depd": "~1.1.2", 1666 | "destroy": "~1.0.4", 1667 | "encodeurl": "~1.0.2", 1668 | "escape-html": "~1.0.3", 1669 | "etag": "~1.8.1", 1670 | "fresh": "0.5.2", 1671 | "http-errors": "~1.7.2", 1672 | "mime": "1.6.0", 1673 | "ms": "2.1.1", 1674 | "on-finished": "~2.3.0", 1675 | "range-parser": "~1.2.1", 1676 | "statuses": "~1.5.0" 1677 | }, 1678 | "dependencies": { 1679 | "ms": { 1680 | "version": "2.1.1", 1681 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 1682 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 1683 | } 1684 | } 1685 | }, 1686 | "serve-static": { 1687 | "version": "1.14.1", 1688 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 1689 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 1690 | "requires": { 1691 | "encodeurl": "~1.0.2", 1692 | "escape-html": "~1.0.3", 1693 | "parseurl": "~1.3.3", 1694 | "send": "0.17.1" 1695 | } 1696 | }, 1697 | "set-value": { 1698 | "version": "2.0.1", 1699 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", 1700 | "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", 1701 | "requires": { 1702 | "extend-shallow": "^2.0.1", 1703 | "is-extendable": "^0.1.1", 1704 | "is-plain-object": "^2.0.3", 1705 | "split-string": "^3.0.1" 1706 | }, 1707 | "dependencies": { 1708 | "extend-shallow": { 1709 | "version": "2.0.1", 1710 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1711 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1712 | "requires": { 1713 | "is-extendable": "^0.1.0" 1714 | } 1715 | } 1716 | } 1717 | }, 1718 | "setimmediate": { 1719 | "version": "1.0.4", 1720 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", 1721 | "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" 1722 | }, 1723 | "setprototypeof": { 1724 | "version": "1.1.1", 1725 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 1726 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 1727 | }, 1728 | "sha.js": { 1729 | "version": "2.4.11", 1730 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 1731 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 1732 | "requires": { 1733 | "inherits": "^2.0.1", 1734 | "safe-buffer": "^5.0.1" 1735 | } 1736 | }, 1737 | "snapdragon": { 1738 | "version": "0.8.2", 1739 | "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", 1740 | "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", 1741 | "requires": { 1742 | "base": "^0.11.1", 1743 | "debug": "^2.2.0", 1744 | "define-property": "^0.2.5", 1745 | "extend-shallow": "^2.0.1", 1746 | "map-cache": "^0.2.2", 1747 | "source-map": "^0.5.6", 1748 | "source-map-resolve": "^0.5.0", 1749 | "use": "^3.1.0" 1750 | }, 1751 | "dependencies": { 1752 | "define-property": { 1753 | "version": "0.2.5", 1754 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 1755 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 1756 | "requires": { 1757 | "is-descriptor": "^0.1.0" 1758 | } 1759 | }, 1760 | "extend-shallow": { 1761 | "version": "2.0.1", 1762 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1763 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1764 | "requires": { 1765 | "is-extendable": "^0.1.0" 1766 | } 1767 | } 1768 | } 1769 | }, 1770 | "snapdragon-node": { 1771 | "version": "2.1.1", 1772 | "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", 1773 | "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", 1774 | "requires": { 1775 | "define-property": "^1.0.0", 1776 | "isobject": "^3.0.0", 1777 | "snapdragon-util": "^3.0.1" 1778 | }, 1779 | "dependencies": { 1780 | "define-property": { 1781 | "version": "1.0.0", 1782 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 1783 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 1784 | "requires": { 1785 | "is-descriptor": "^1.0.0" 1786 | } 1787 | }, 1788 | "is-accessor-descriptor": { 1789 | "version": "1.0.0", 1790 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 1791 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 1792 | "requires": { 1793 | "kind-of": "^6.0.0" 1794 | } 1795 | }, 1796 | "is-data-descriptor": { 1797 | "version": "1.0.0", 1798 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 1799 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 1800 | "requires": { 1801 | "kind-of": "^6.0.0" 1802 | } 1803 | }, 1804 | "is-descriptor": { 1805 | "version": "1.0.2", 1806 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 1807 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 1808 | "requires": { 1809 | "is-accessor-descriptor": "^1.0.0", 1810 | "is-data-descriptor": "^1.0.0", 1811 | "kind-of": "^6.0.2" 1812 | } 1813 | } 1814 | } 1815 | }, 1816 | "snapdragon-util": { 1817 | "version": "3.0.1", 1818 | "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", 1819 | "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", 1820 | "requires": { 1821 | "kind-of": "^3.2.0" 1822 | }, 1823 | "dependencies": { 1824 | "kind-of": { 1825 | "version": "3.2.2", 1826 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1827 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1828 | "requires": { 1829 | "is-buffer": "^1.1.5" 1830 | } 1831 | } 1832 | } 1833 | }, 1834 | "source-map": { 1835 | "version": "0.5.7", 1836 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1837 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 1838 | }, 1839 | "source-map-resolve": { 1840 | "version": "0.5.2", 1841 | "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", 1842 | "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", 1843 | "requires": { 1844 | "atob": "^2.1.1", 1845 | "decode-uri-component": "^0.2.0", 1846 | "resolve-url": "^0.2.1", 1847 | "source-map-url": "^0.4.0", 1848 | "urix": "^0.1.0" 1849 | } 1850 | }, 1851 | "source-map-url": { 1852 | "version": "0.4.0", 1853 | "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", 1854 | "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" 1855 | }, 1856 | "split-string": { 1857 | "version": "3.1.0", 1858 | "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", 1859 | "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", 1860 | "requires": { 1861 | "extend-shallow": "^3.0.0" 1862 | } 1863 | }, 1864 | "static-extend": { 1865 | "version": "0.1.2", 1866 | "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", 1867 | "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", 1868 | "requires": { 1869 | "define-property": "^0.2.5", 1870 | "object-copy": "^0.1.0" 1871 | }, 1872 | "dependencies": { 1873 | "define-property": { 1874 | "version": "0.2.5", 1875 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 1876 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 1877 | "requires": { 1878 | "is-descriptor": "^0.1.0" 1879 | } 1880 | } 1881 | } 1882 | }, 1883 | "statuses": { 1884 | "version": "1.5.0", 1885 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1886 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 1887 | }, 1888 | "strip-hex-prefix": { 1889 | "version": "1.0.0", 1890 | "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", 1891 | "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", 1892 | "requires": { 1893 | "is-hex-prefixed": "1.0.0" 1894 | } 1895 | }, 1896 | "supports-color": { 1897 | "version": "5.5.0", 1898 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1899 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1900 | "requires": { 1901 | "has-flag": "^3.0.0" 1902 | } 1903 | }, 1904 | "to-object-path": { 1905 | "version": "0.3.0", 1906 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", 1907 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", 1908 | "requires": { 1909 | "kind-of": "^3.0.2" 1910 | }, 1911 | "dependencies": { 1912 | "kind-of": { 1913 | "version": "3.2.2", 1914 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1915 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1916 | "requires": { 1917 | "is-buffer": "^1.1.5" 1918 | } 1919 | } 1920 | } 1921 | }, 1922 | "to-regex": { 1923 | "version": "3.0.2", 1924 | "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", 1925 | "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", 1926 | "requires": { 1927 | "define-property": "^2.0.2", 1928 | "extend-shallow": "^3.0.2", 1929 | "regex-not": "^1.0.2", 1930 | "safe-regex": "^1.1.0" 1931 | } 1932 | }, 1933 | "to-regex-range": { 1934 | "version": "2.1.1", 1935 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", 1936 | "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", 1937 | "requires": { 1938 | "is-number": "^3.0.0", 1939 | "repeat-string": "^1.6.1" 1940 | } 1941 | }, 1942 | "toidentifier": { 1943 | "version": "1.0.0", 1944 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 1945 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 1946 | }, 1947 | "tronweb": { 1948 | "version": "2.8.0", 1949 | "resolved": "https://registry.npmjs.org/tronweb/-/tronweb-2.8.0.tgz", 1950 | "integrity": "sha512-B5vn2TsH8hV9z7jvxlmMlIcKjd+qq7TS4p5E1w4422FJ1tBVe3cQqQZ0YP09aj/9k6eJQsGdWfBB1WYQQb0d5Q==", 1951 | "requires": { 1952 | "@babel/runtime": "^7.0.0", 1953 | "axios": "^0.19.0", 1954 | "babel-runtime": "^6.26.0", 1955 | "bignumber.js": "^7.2.1", 1956 | "elliptic": "^6.4.1", 1957 | "ethers": "^4.0.7", 1958 | "eventemitter3": "^3.1.0", 1959 | "injectpromise": "^1.0.0", 1960 | "lodash": "^4.17.14", 1961 | "semver": "^5.6.0", 1962 | "validator": "^10.7.1" 1963 | } 1964 | }, 1965 | "type-is": { 1966 | "version": "1.6.18", 1967 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1968 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1969 | "requires": { 1970 | "media-typer": "0.3.0", 1971 | "mime-types": "~2.1.24" 1972 | } 1973 | }, 1974 | "union-value": { 1975 | "version": "1.0.1", 1976 | "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", 1977 | "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", 1978 | "requires": { 1979 | "arr-union": "^3.1.0", 1980 | "get-value": "^2.0.6", 1981 | "is-extendable": "^0.1.1", 1982 | "set-value": "^2.0.1" 1983 | } 1984 | }, 1985 | "universalify": { 1986 | "version": "0.1.2", 1987 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1988 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" 1989 | }, 1990 | "unorm": { 1991 | "version": "1.6.0", 1992 | "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", 1993 | "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==" 1994 | }, 1995 | "unpipe": { 1996 | "version": "1.0.0", 1997 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1998 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1999 | }, 2000 | "unset-value": { 2001 | "version": "1.0.0", 2002 | "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", 2003 | "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", 2004 | "requires": { 2005 | "has-value": "^0.3.1", 2006 | "isobject": "^3.0.0" 2007 | }, 2008 | "dependencies": { 2009 | "has-value": { 2010 | "version": "0.3.1", 2011 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", 2012 | "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", 2013 | "requires": { 2014 | "get-value": "^2.0.3", 2015 | "has-values": "^0.1.4", 2016 | "isobject": "^2.0.0" 2017 | }, 2018 | "dependencies": { 2019 | "isobject": { 2020 | "version": "2.1.0", 2021 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 2022 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 2023 | "requires": { 2024 | "isarray": "1.0.0" 2025 | } 2026 | } 2027 | } 2028 | }, 2029 | "has-values": { 2030 | "version": "0.1.4", 2031 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", 2032 | "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" 2033 | } 2034 | } 2035 | }, 2036 | "urix": { 2037 | "version": "0.1.0", 2038 | "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", 2039 | "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" 2040 | }, 2041 | "use": { 2042 | "version": "3.1.1", 2043 | "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", 2044 | "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" 2045 | }, 2046 | "utf8": { 2047 | "version": "3.0.0", 2048 | "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", 2049 | "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" 2050 | }, 2051 | "utils-merge": { 2052 | "version": "1.0.1", 2053 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2054 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 2055 | }, 2056 | "uuid": { 2057 | "version": "3.3.2", 2058 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 2059 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" 2060 | }, 2061 | "validator": { 2062 | "version": "10.11.0", 2063 | "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", 2064 | "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" 2065 | }, 2066 | "vary": { 2067 | "version": "1.1.2", 2068 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2069 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 2070 | }, 2071 | "xmlhttprequest": { 2072 | "version": "1.8.0", 2073 | "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", 2074 | "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" 2075 | } 2076 | } 2077 | } 2078 | --------------------------------------------------------------------------------