From 74fd02a618ecf0ddf1f0394c6a96a2e7a1ce9b8e Mon Sep 17 00:00:00 2001 From: Dan Janosik Date: Mon, 2 Dec 2019 13:12:38 -0500 Subject: [PATCH 01/11] refresh miner configs --- public/txt/mining-pools-configs/BTC/0.json | 68 +++++++- public/txt/mining-pools-configs/BTC/1.json | 60 +++++++ public/txt/mining-pools-configs/LTC/0.json | 172 ++++++++------------- 3 files changed, 188 insertions(+), 112 deletions(-) diff --git a/public/txt/mining-pools-configs/BTC/0.json b/public/txt/mining-pools-configs/BTC/0.json index ffdf871..18aa50a 100644 --- a/public/txt/mining-pools-configs/BTC/0.json +++ b/public/txt/mining-pools-configs/BTC/0.json @@ -1,5 +1,9 @@ { "coinbase_tags" : { + "/1THash&58COIN/": { + "name": "1THash&58COIN", + "link": "https://www.1thash.top" + }, "BITFARMS": { "name": "Bitfarms", "link": "https://www.bitarms.io/" @@ -8,6 +12,10 @@ "name": "Huobi.pool", "link": "https://www.poolhb.com/" }, + "/HuoBi/": { + "name": "Huobi.pool", + "link": "https://www.poolhb.com/" + }, "/E2M & BTC.TOP/": { "name": "WAYI.CN", "link": "http://www.easy2mine.com/" @@ -296,6 +304,14 @@ "name": "Bixin", "link": "https://haopool.com/" }, + "HAOBTC" : { + "name": "Bixin", + "link": "https://haopool.com/" + }, + "/Bixin/" : { + "name": "Bixin", + "link": "https://haopool.com/" + }, "viabtc.com deploy" : { "name": "ViaBTC", "link": "https://viabtc.com" @@ -320,10 +336,6 @@ "name" : "Waterhole", "link" : "https://btc.waterhole.io/" }, - "/BTC.COM/" : { - "name" : "BTC.com", - "link" : "https://pool.btc.com" - }, "/DCExploration/" : { "name" : "DCExploration", "link" : "http://dcexploration.cn" @@ -415,9 +427,33 @@ "/www.okpool.top/": { "name" : "okpool.top", "link" : "https://www.okpool.top" + }, + "HummerPool": { + "name" : "Hummerpool", + "link" : "https://www.hummerpool.com" + }, + "Hummerpool": { + "name" : "Hummerpool", + "link" : "https://www.hummerpool.com" + }, + "/Tangpool/": { + "name" : "Tangpool", + "link" : "http://www.tangpool.com/" + }, + "/bytepool.com/": { + "name" : "BytePool", + "link" : "https://bytepool.com/" + }, + "/SpiderPool.com/": { + "name" : "SpiderPool", + "link" : "https://www.spiderpool.com/" } }, "payout_addresses" : { + "3Bmb9Jig8A5kHdDSxvDZ6eryj3AXd3swuJ": { + "name" : "NovaBlock", + "link" : "https://novablock.com" + }, "3GvEGtnvgeBJ3p3EpdZhvUkxY4pDARkbjd" : { "name" : "Bitfarms", "link" : "https://www.bitfarms.io/" @@ -658,6 +694,10 @@ "name" : "BTC.com", "link" : "https://pool.btc.com" }, + "bc1qjl8uwezzlech723lpnyuza0h2cdkvxvh54v3dn" : { + "name" : "BTC.com", + "link" : "https://pool.btc.com" + }, "18EPLvrs2UE11kWBB3ABS7Crwj5tTBYPoa" : { "name" : "GoGreenLight", "link" : "http://www.gogreenlight.se/" @@ -789,6 +829,26 @@ "3JQSigWTCHyBLRD979JWgEtWP5YiiFwcQB" : { "name" : "Poolin", "link" : "https://www.poolin.com/" + }, + "12Taz8FFXQ3E2AGn3ZW1SZM5bLnYGX4xR6" : { + "name" : "Tangpool", + "link" : "http://www.tangpool.com/" + }, + "1MvYASoHjqynMaMnP7SBmenyEWiLsTqoU6" : { + "name": "Huobi.pool", + "link": "https://www.poolhb.com/" + }, + "1M1Xw2rczxkF3p3wiNHaTmxvbpZZ7M6vaa" : { + "name": "1M1X", + "link": "" + }, + "39m5Wvn9ZqyhYmCYpsyHuGMt5YYw4Vmh1Z" : { + "name": "BytePool", + "link": "https://bytepool.com/" + }, + "38u1srayb1oybVB43UWKBJsrwJbdHGtPx2": { + "name" : "SpiderPool", + "link" : "https://www.spiderpool.com/" } } } diff --git a/public/txt/mining-pools-configs/BTC/1.json b/public/txt/mining-pools-configs/BTC/1.json index a89da24..ae144af 100644 --- a/public/txt/mining-pools-configs/BTC/1.json +++ b/public/txt/mining-pools-configs/BTC/1.json @@ -1,5 +1,13 @@ { "coinbase_tags" : { + "Rawpool.com" : { + "name" : "Rawpool.com", + "link" : "https://www.rawpool.com/" + }, + "/poolin.com/" : { + "name" : "Poolin", + "link" : "https://www.poolin.com" + }, "SigmaPool.com" : { "name" : "SigmaPool.com", "link" : "https://www.sigmapool.com/" @@ -276,6 +284,10 @@ "name": "Bixin", "link": "https://haopool.com/" }, + "/Bixin/" : { + "name": "Bixin", + "link": "https://haopool.com/" + }, "viabtc.com deploy" : { "name": "ViaBTC", "link": "https://viabtc.com" @@ -355,6 +367,10 @@ "/haominer/" : { "name": "Haominer", "link": "http://haominer.com/" + }, + "Hummerpool" : { + "name" : "Hummerpool", + "link" : "" } }, "payout_addresses" : { @@ -694,6 +710,50 @@ "name": "Poolin", "link": "https://www.poolin.com/" }, + "3DXfeMBimuvN3TWnQXDhr47P8M8yxMy9Pd" : { + "name": "Poolin", + "link": "https://www.poolin.com/" + }, + "36aC6xMXYaRdL1nobKfqYVCjKhZVXWN8RX" : { + "name": "Poolin", + "link": "https://www.poolin.com/" + }, + "15kNvZYY9HWg4wE7Fd73o96P5eKb96Yyfa" : { + "name": "Poolin", + "link": "https://www.poolin.com/" + }, + "3KWcQ4Xe5Dc3R1UMWatf1knJY6Zu61MZKV" : { + "name": "Poolin", + "link": "https://www.poolin.com/" + }, + "35qGBQsRQb8CSUzcSWktMykeA6zm5iCEJJ" : { + "name": "Poolin", + "link": "https://www.poolin.com/" + }, + "3JAvzKWgtxPzcbTqKeAT7qfwoZBjtVmkBU" : { + "name": "Poolin", + "link": "https://www.poolin.com/" + }, + "347a2vGV9r4RyrKoBiVnCLnBN4rDYDWUyy" : { + "name": "Poolin", + "link": "https://www.poolin.com/" + }, + "3EFdpy14AqDsbQy3XGYyoGDrLYrbB8XWSs" : { + "name": "Poolin", + "link": "https://www.poolin.com/" + }, + "1382v6T81xCPFeLaQq6UTuq7HFySq27LcX" : { + "name": "Poolin", + "link": "https://www.poolin.com/" + }, + "1D1ULAXyEX2zrLSMX9xMFVQKzEGqPfkJVS" : { + "name": "Poolin", + "link": "https://www.poolin.com/" + }, + "1M1Xw2rczxkF3p3wiNHaTmxvbpZZ7M6vaa" : { + "name": "Poolin", + "link": "https://www.poolin.com/" + }, "3KJrsjfg1dD6CrsTeHdHVH3KqMpvL2XWQn" : { "name": "Poolin", "link": "https://www.poolin.com/" diff --git a/public/txt/mining-pools-configs/LTC/0.json b/public/txt/mining-pools-configs/LTC/0.json index b1d113e..976c0f0 100644 --- a/public/txt/mining-pools-configs/LTC/0.json +++ b/public/txt/mining-pools-configs/LTC/0.json @@ -1,9 +1,17 @@ { "coinbase_tags": { + "BITFARMS": { + "name": "Bitfarms", + "link": "https://www.bitarms.io/" + }, "/Huobi/": { "name": "Huobi.pool", "link": "https://www.poolhb.com/" }, + "/HuoBi/": { + "name": "Huobi.pool", + "link": "https://www.poolhb.com/" + }, "/E2M & BTC.TOP/": { "name": "WAYI.CN", "link": "http://www.easy2mine.com/" @@ -221,13 +229,13 @@ "link": "https://pool.btcc.com/" }, "BW Pool": { - "name" : "BWPool", - "link" : "https://bwpool.net/" - }, - "BWPool": { - "name" : "BWPool", - "link" : "https://bwpool.net/" - }, + "name": "BWPool", + "link": "https://bwpool.net/" + }, + "BWPool": { + "name": "BWPool", + "link": "https://bwpool.net/" + }, "xbtc.exx.com&bw.com": { "name": "EXX&BW", "link": "https://xbtc.exx.com/" @@ -432,10 +440,6 @@ "name": "Rawpool.com", "link": "https://www.rawpool.com/" }, - "tiger": { - "name": "tiger", - "link": "" - }, "/haominer/": { "name": "haominer", "link": "http://haominer.com/" @@ -464,12 +468,40 @@ "name": "suprnova.cc", "link": "https://www.suprnova.cc/" }, - "/SecretSuperstar/": { - "name": "SecretSuperstar", - "link": "http://google.com/search?q=SecretSuperstar" - } + "/SecretSuperstar/": { + "name": "SecretSuperstar", + "link": "https://google.com/search?q=SecretSuperstar" + }, + "/poolin.com": { + "name": "Poolin", + "link": "https://www.poolin.com/" + }, + "/tigerpool.net": { + "name": "tigerpool.net", + "link": "" + }, + "/SigmaPool.com/": { + "name": "sigmapool.com", + "link": "https://sigmapool.com" + }, + "/www.okpool.top/": { + "name": "okpool.top", + "link": "https://www.okpool.top" + }, + "Hummerpool": { + "name": "Hummerpool", + "link": "" + }, + "/Tangpool/": { + "name": "Tangpool", + "link": "http://www.tangpool.com/" + } }, "payout_addresses": { + "3GvEGtnvgeBJ3p3EpdZhvUkxY4pDARkbjd": { + "name": "Bitfarms", + "link": "https://www.bitfarms.io/" + }, "1CjPR7Z5ZSyWk6WtXvSFgkptmpoi4UM9BC": { "name": "GHash.IO", "link": "https://ghash.io/" @@ -826,105 +858,29 @@ "name": "tiger", "link": "" }, - "36n452uGq1x4mK7bfyZR8wgE47AnBb2pzi": { - "name" : "Poolin", - "link" : "https://www.poolin.com/" - }, - "3KJrsjfg1dD6CrsTeHdHVH3KqMpvL2XWQn": { - "name" : "Poolin", - "link" : "https://www.poolin.com/" - }, - "EZBxbLXkHwCRHgbSVGXkTkgNY2RSWaYpAP": { - "name": "CryptoADHD.com", - "link": "https://irl.cryptoadhd.com" + "36n452uGq1x4mK7bfyZR8wgE47AnBb2pzi": { + "name": "Poolin", + "link": "https://www.poolin.com/" }, - "EU43PoAHphjbHzcfoVziWd4aLHdZNQ1XKM": { - "name": "ProHashing", - "link": "https://prohashing.com/" + "3KJrsjfg1dD6CrsTeHdHVH3KqMpvL2XWQn": { + "name": "Poolin", + "link": "https://www.poolin.com/" }, - "Lhh4idZ9eFgZt9wPGxMVdJmGJoGy2o2sCj": { - "name": "hashing.com", - "link": "https://hashing.com" + "3JQSigWTCHyBLRD979JWgEtWP5YiiFwcQB": { + "name": "Poolin", + "link": "https://www.poolin.com/" }, - "Ld7Po2mbs1mWtz5aVEVgmEzDp8Zw3ndwhm": { - "name": "MultiPool", - "link": "https://www.multipool.us" + "12Taz8FFXQ3E2AGn3ZW1SZM5bLnYGX4xR6": { + "name": "Tangpool", + "link": "http://www.tangpool.com/" }, - "LTftBH8seFk7iEJkib7d8bDaaLMFDeq4Sf": { - "name": "suprnova.cc", - "link": "https://www.suprnova.cc/" - }, - "LSAXhjJBeyQ5nqvgrwF96Wnt2VrDGwV2Wf": { - "name": "mining-dutch.nl", - "link": "https://www.mining-dutch.nl" + "EZBxbLXkHwCRHgbSVGXkTkgNY2RSWaYpAP": { + "name": "CryptoADHD.com", + "link": "https://irl.cryptoadhd.com" }, - "LhkFjuGkVcdriLU2HWnph1tSLd9Fk7deCn": { + "EU43PoAHphjbHzcfoVziWd4aLHdZNQ1XKM": { "name": "ProHashing", "link": "https://prohashing.com/" - }, - "Lcvd2ka6ecXaxjGbuyWDKURpUf9pXXPVKK": { - "name": "Coinotron", - "link": "https://www.coinotron.com" - }, - "LeD2fnnDJYZuyt8zgDsZ2oBGmuVcxGKCLd": { - "name": "P2P-multipool.eu", - "link": "http://p2p-multipool.eu/" - }, - "XjRizKLj64toLfPk2vEDxk8d2pBtkVd6oa": { - "name": "CryptoADHD.com", - "link": "https://dash.cryptoadhd.com" - }, - "XqPQ26xGigKkq4yCNmTfgkRPdt8FyB547J": { - "name": "P2P-multipool.eu", - "link": "http://p2p-multipool.eu/" - }, - "XiEFG1tTyXuYbcFvcYYRC8cJgmRJAJi2ue": { - "name": "Coinotron", - "link": "https://www.coinotron.com" - }, - "bitcoincash:qrgrmfhu5wgpvmgzp0sw0s52erx8pavyqvkhmltum6": { - "name": "P2P-multipool.eu", - "link": "http://p2p-multipool.eu/" - }, - "bitcoincash:qrr7jtg5nxkq0ry75vyklk5kzt0hv4a2lqs83a25ky": { - "name": "BitClub", - "link": "https://bitclubpool.com/" - }, - "GK18bp4UzC6wqYKKNLkaJ3hzQazTc3TWBw": { - "name": "MiningPoolHub", - "link": "https://miningpoolhub.com/" - }, - "GJjz2Du9BoJQ3CPcoyVTHUJZSj62i1693U": { - "name": "2miners.com", - "link": "https://2miners.com" - }, - "GWViUY2b3HAYWY9BbeGeFjc6rKdrBffzHa": { - "name": "Pool.Gold", - "link": "http://new.pool.gold" - }, - "GSArGviLRTDBYSY69f7v9o6Dc7jhNY2Txo": { - "name": "MinerGate", - "link": "https://minergate.com" - }, - "GVQiajM9TTSNVATL3JEGLG9s48TWHTJg8S": { - "name": "suprnova.cc", - "link": "https://www.suprnova.cc/" - }, - "GPqm77aX5eR1ydAgiCLPqGMYDjVppc391J": { - "name": "Mining4", - "link": "http://btg.mining4.co.uk/" - }, - "GKgCEhrm9MHVXMXbygFgzeiQQCUGQtgfpQ": { - "name": "Gpool.guru", - "link": "https://gpool.guru" - }, - "GJVJXJgFvSjyUwaZHy2VSbemvLNzAyXQEs": { - "name": "PandaPool", - "link": "https://pandapool.io" - }, - "GfdptpRd1m1jtgi32qEf1UU1myysTxQjsg": { - "name": "coinfoundry", - "link": "https://coinfoundry.org/" } } -} +} \ No newline at end of file From 75ccb9e6469c094d1a5420a6a463606c0f2e3123 Mon Sep 17 00:00:00 2001 From: Dan Janosik Date: Mon, 2 Dec 2019 13:21:54 -0500 Subject: [PATCH 02/11] Fix #158 --- app/api/coreApi.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/api/coreApi.js b/app/api/coreApi.js index 5f38d36..5495a88 100644 --- a/app/api/coreApi.js +++ b/app/api/coreApi.js @@ -394,16 +394,16 @@ function getMempoolStats() { for (var txid in result) { var txMempoolInfo = result[txid]; var fee = txMempoolInfo.modifiedfee; - var feePerByte = txMempoolInfo.modifiedfee / txMempoolInfo.size; + var size = txMempoolInfo.vsize ? txMempoolInfo.vsize : txMempoolInfo.size; + var feePerByte = txMempoolInfo.modifiedfee / size; var age = Date.now() / 1000 - txMempoolInfo.time; - var size = txMempoolInfo.size; if (fee > maxFee) { maxFee = txMempoolInfo.modifiedfee; } if (feePerByte > maxFeePerByte) { - maxFeePerByte = txMempoolInfo.modifiedfee / txMempoolInfo.size; + maxFeePerByte = txMempoolInfo.modifiedfee / size; } ages.push({age:age, txid:txid}); @@ -506,17 +506,17 @@ function getMempoolStats() { for (var txid in result) { var txMempoolInfo = result[txid]; var fee = txMempoolInfo.modifiedfee; - var feePerByte = txMempoolInfo.modifiedfee / txMempoolInfo.size; + var size = txMempoolInfo.vsize ? txMempoolInfo.vsize : txMempoolInfo.size; + var feePerByte = txMempoolInfo.modifiedfee / size; var satoshiPerByte = feePerByte * 100000000; var age = Date.now() / 1000 - txMempoolInfo.time; - var size = txMempoolInfo.size; var addedToBucket = false; for (var i = 0; i < satoshiPerByteBucketMaxima.length; i++) { if (satoshiPerByteBucketMaxima[i] > satoshiPerByte) { satoshiPerByteBuckets[i]["count"]++; satoshiPerByteBuckets[i]["totalFees"] += fee; - satoshiPerByteBuckets[i]["totalBytes"] += txMempoolInfo.size; + satoshiPerByteBuckets[i]["totalBytes"] += size; addedToBucket = true; @@ -527,12 +527,12 @@ function getMempoolStats() { if (!addedToBucket) { satoshiPerByteBuckets[bucketCount - 1]["count"]++; satoshiPerByteBuckets[bucketCount - 1]["totalFees"] += fee; - satoshiPerByteBuckets[bucketCount - 1]["totalBytes"] += txMempoolInfo.size; + satoshiPerByteBuckets[bucketCount - 1]["totalBytes"] += size; } summary["count"]++; summary["totalFees"] += txMempoolInfo.modifiedfee; - summary["totalBytes"] += txMempoolInfo.size; + summary["totalBytes"] += size; var ageBucketIndex = Math.min(ageBucketCount - 1, parseInt(age / (maxAge / ageBucketCount))); var sizeBucketIndex = Math.min(sizeBucketCount - 1, parseInt(size / (maxSize / sizeBucketCount))); From c8971981284dbbfab1c5a468c0969f0539b54a14 Mon Sep 17 00:00:00 2001 From: Dan Janosik Date: Mon, 2 Dec 2019 14:03:47 -0500 Subject: [PATCH 03/11] update dependencies to latest and in the future accept more minor version updates --- app/redisCache.js | 1 - npm-shrinkwrap.json | 641 ++++++++++++++++++-------------------------- package.json | 28 +- 3 files changed, 274 insertions(+), 396 deletions(-) diff --git a/app/redisCache.js b/app/redisCache.js index 3efe6f6..a47d700 100644 --- a/app/redisCache.js +++ b/app/redisCache.js @@ -1,5 +1,4 @@ var redis = require("redis"); -var bluebird = require("bluebird"); var config = require("./config.js"); var utils = require("./utils.js"); diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 063bfda..100691f 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -96,15 +96,14 @@ } }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -169,12 +168,9 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "requires": { - "lodash": "^4.17.11" - } + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz", + "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==" }, "asynckit": { "version": "0.4.0", @@ -222,13 +218,18 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base-x": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", - "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.7.tgz", + "integrity": "sha512-zAKJGuQPihXW22fkrfOclUUZXM2g92z5GzlSMHxhO6r6Qj+Nm0ccaGNBzDZojzwOMkpjAv4J0fOv1U4go+a4iw==", "requires": { "safe-buffer": "^5.0.1" } }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, "basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -263,16 +264,21 @@ "file-uri-to-path": "1.0.0" } }, + "bip174": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bip174/-/bip174-1.0.1.tgz", + "integrity": "sha512-Mq2aFs1TdMfxBpYPg7uzjhsiXbAtoVq44TNjEWtvuZBiBgc3m7+n55orYMtTAxdg7jWbL4DtH0MKocJER4xERQ==" + }, "bip32": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.2.tgz", - "integrity": "sha512-Wws0wBYp+KViCTJLLalmOUhefd1puJslme6ks1HPRuEEXGA28HNRVcx6aIGnH0VNYr/NqoUMYf/QakCjbXcElQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.4.tgz", + "integrity": "sha512-ioPytarPDIrWckWMuK4RNUtvwhvWEc2fvuhnO0WEwu732k5OLjUXv4rXi2c/KJHw9ZMNQMkYRJrBw81RujShGQ==", "requires": { "@types/node": "10.12.18", "bs58check": "^2.1.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "tiny-secp256k1": "^1.0.0", + "tiny-secp256k1": "^1.1.0", "typeforce": "^1.11.5", "wif": "^2.0.6" } @@ -286,9 +292,9 @@ } }, "bitcoin-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bitcoin-core/-/bitcoin-core-2.0.0.tgz", - "integrity": "sha512-I6I7ejzbXfyMtR5/z0BhfjTeN8PMQGD+1B1rpu6IoLcwqoybaSa+P4zYnja/p2xdqjdctmgbOtAaCaaqyVCycQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bitcoin-core/-/bitcoin-core-2.3.0.tgz", + "integrity": "sha512-SMbw2kFu09iBajicODSE4pn/K0tOibWyqct71TlzR8cYUBk+u7rkhqGY7US2iYz0HmP851IW7F7eXfXvz09yXA==", "requires": { "@uphold/request-logger": "^2.0.0", "bluebird": "^3.4.1", @@ -306,13 +312,14 @@ "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" }, "bitcoinjs-lib": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.0.3.tgz", - "integrity": "sha512-uc1htf5acG5vcwyhOnES1MFIe21fNn+0VnJLNAcw1/uAQGDF0SNfzEA8SUwnMZ4J26zHiAmk6hVnlVl8yYOTPA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.1.6.tgz", + "integrity": "sha512-NgvnA8XXUuzpuBnVs1plzZvVOYsuont4KPzaGcVIwjktYQbCk1hUkXnt4wujIOBscNsXuu+plVbPYvtMosZI/w==", "requires": { "@types/node": "10.12.18", "bech32": "^1.1.2", - "bip32": "^2.0.0", + "bip174": "^1.0.1", + "bip32": "^2.0.4", "bip66": "^1.1.0", "bitcoin-ops": "^1.4.0", "bs58check": "^2.0.0", @@ -321,16 +328,16 @@ "merkle-lib": "^2.0.10", "pushdata-bitcoin": "^1.0.1", "randombytes": "^2.0.1", - "tiny-secp256k1": "^1.0.0", + "tiny-secp256k1": "^1.1.1", "typeforce": "^1.11.3", "varuint-bitcoin": "^1.0.4", "wif": "^2.0.1" } }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "bn.js": { "version": "4.11.8", @@ -440,6 +447,39 @@ "safe-buffer": "^5.1.2" } }, + "buffer": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", + "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -483,14 +523,6 @@ } } }, - "can-promise": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/can-promise/-/can-promise-0.0.1.tgz", - "integrity": "sha512-gzVrHyyrvgt0YpDm7pn04MQt8gjh0ZAhN4ZDyCRtGl6YnuuK6b4aiUTD7G52r9l4YNmxfTtEscb92vxtAlL6XQ==", - "requires": { - "window-or-global": "^1.0.1" - } - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -557,16 +589,10 @@ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -574,8 +600,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "combined-stream": { "version": "1.0.7", @@ -634,9 +659,9 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", + "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==" }, "core-util-is": { "version": "1.0.2", @@ -668,18 +693,6 @@ "sha.js": "^2.4.8" } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "crypto-js": { "version": "3.1.9-1", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz", @@ -797,9 +810,9 @@ } }, "decimal.js": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.1.1.tgz", - "integrity": "sha512-vEEgyk1fWVEnv7lPjkNedAIjzxQDue5Iw4FeX4UkNUDSVyD/jZTD0Bw2kAO7k6iyyJRAhM9oxxI0D1ET6k0Mmg==" + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", + "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==" }, "define-properties": { "version": "1.1.3", @@ -836,9 +849,9 @@ "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, "dotenv": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz", - "integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA==" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" }, "double-ended-queue": { "version": "2.1.0-0", @@ -846,12 +859,12 @@ "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" }, "dtrace-provider": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", - "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", "optional": true, "requires": { - "nan": "^2.10.0" + "nan": "^2.14.0" } }, "ecc-jsbn": { @@ -873,9 +886,9 @@ "from": "github:chaintools/node-electrum-client#43a999036f9c5" }, "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -886,19 +899,16 @@ "minimalistic-crypto-utils": "^1.0.0" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } - }, "entities": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", @@ -959,29 +969,15 @@ "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -1045,20 +1041,25 @@ } }, "express-session": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.16.1.tgz", - "integrity": "sha512-pWvUL8Tl5jUy1MLH7DhgUlpoKeVPUTe+y6WQD9YhcN0C5qAhsh4a8feVjiUXo3TFhIy191YGZ4tewW9edbl2xQ==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.0.tgz", + "integrity": "sha512-t4oX2z7uoSqATbMfsxWMbNjAL0T5zpvcJCk3Z9wnPPN7ibddhnmDZXHfEcoBMG2ojKXZoCyPMc5FbtK+G7SoDg==", "requires": { - "cookie": "0.3.1", + "cookie": "0.4.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~2.0.0", "on-headers": "~1.0.2", - "parseurl": "~1.3.2", - "safe-buffer": "5.1.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.0", "uid-safe": "~2.1.5" }, "dependencies": { + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1076,6 +1077,16 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" } } }, @@ -1172,17 +1183,9 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "getpass": { "version": "0.1.7", @@ -1314,6 +1317,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, "image-size": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", @@ -1341,11 +1349,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" - }, "ipaddr.js": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", @@ -1420,11 +1423,6 @@ "has": "^1.0.1" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", @@ -1440,14 +1438,15 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "isarray": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", - "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isstream": { "version": "0.1.2", @@ -1539,14 +1538,6 @@ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "requires": { - "invert-kv": "^2.0.0" - } - }, "less": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", @@ -1608,14 +1599,6 @@ "yallist": "^3.0.2" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "requires": { - "p-defer": "^1.0.0" - } - }, "map-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", @@ -1658,16 +1641,6 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, "memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -1792,11 +1765,6 @@ "mime-db": "~1.35.0" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -1845,9 +1813,9 @@ "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, "moment-duration-format": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.2.2.tgz", - "integrity": "sha1-uVdhLeJgFsmtnrYIfAVFc+USd3k=" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.3.2.tgz", + "integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==" }, "morgan": { "version": "1.9.1", @@ -1888,10 +1856,9 @@ } }, "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "optional": true + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" }, "ncp": { "version": "2.0.0", @@ -1907,7 +1874,8 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "normalize-package-data": { "version": "2.4.0", @@ -2000,19 +1968,6 @@ } } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -2046,35 +2001,11 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "optional": true, "requires": { "wrappy": "1" } }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -2115,7 +2046,8 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true }, "path-parse": { "version": "1.0.6", @@ -2173,127 +2105,118 @@ "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" }, "pug": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.3.tgz", - "integrity": "sha1-ccuoJTfJWl6rftBGluQiH1Oqh44=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz", + "integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==", "requires": { - "pug-code-gen": "^2.0.1", - "pug-filters": "^3.1.0", - "pug-lexer": "^4.0.0", - "pug-linker": "^3.0.5", - "pug-load": "^2.0.11", - "pug-parser": "^5.0.0", - "pug-runtime": "^2.0.4", - "pug-strip-comments": "^1.0.3" + "pug-code-gen": "^2.0.2", + "pug-filters": "^3.1.1", + "pug-lexer": "^4.1.0", + "pug-linker": "^3.0.6", + "pug-load": "^2.0.12", + "pug-parser": "^5.0.1", + "pug-runtime": "^2.0.5", + "pug-strip-comments": "^1.0.4" } }, "pug-attrs": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.3.tgz", - "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz", + "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==", "requires": { "constantinople": "^3.0.1", "js-stringify": "^1.0.1", - "pug-runtime": "^2.0.4" + "pug-runtime": "^2.0.5" } }, "pug-code-gen": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.1.tgz", - "integrity": "sha1-CVHsgyJddNjPxHan+Zolm199BQw=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.2.tgz", + "integrity": "sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw==", "requires": { - "constantinople": "^3.0.1", + "constantinople": "^3.1.2", "doctypes": "^1.1.0", "js-stringify": "^1.0.1", - "pug-attrs": "^2.0.3", - "pug-error": "^1.3.2", - "pug-runtime": "^2.0.4", + "pug-attrs": "^2.0.4", + "pug-error": "^1.3.3", + "pug-runtime": "^2.0.5", "void-elements": "^2.0.1", "with": "^5.0.0" } }, "pug-error": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.2.tgz", - "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY=" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz", + "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==" }, "pug-filters": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.0.tgz", - "integrity": "sha1-JxZVVbwEwjbkqisDZiRt+gIbYm4=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz", + "integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==", "requires": { "clean-css": "^4.1.11", "constantinople": "^3.0.1", "jstransformer": "1.0.0", - "pug-error": "^1.3.2", - "pug-walk": "^1.1.7", + "pug-error": "^1.3.3", + "pug-walk": "^1.1.8", "resolve": "^1.1.6", "uglify-js": "^2.6.1" } }, "pug-lexer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.0.0.tgz", - "integrity": "sha1-IQwYRX7y4XYCQnQMXmR715TOwng=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz", + "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==", "requires": { "character-parser": "^2.1.1", "is-expression": "^3.0.0", - "pug-error": "^1.3.2" + "pug-error": "^1.3.3" } }, "pug-linker": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.5.tgz", - "integrity": "sha1-npp65ABWgtAn3uuWsAD4juuDoC8=", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz", + "integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==", "requires": { - "pug-error": "^1.3.2", - "pug-walk": "^1.1.7" + "pug-error": "^1.3.3", + "pug-walk": "^1.1.8" } }, "pug-load": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.11.tgz", - "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz", + "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==", "requires": { "object-assign": "^4.1.0", - "pug-walk": "^1.1.7" + "pug-walk": "^1.1.8" } }, "pug-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.0.tgz", - "integrity": "sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz", + "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==", "requires": { - "pug-error": "^1.3.2", + "pug-error": "^1.3.3", "token-stream": "0.0.1" } }, "pug-runtime": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.4.tgz", - "integrity": "sha1-4XjhvaaKsujArPybztLFT9iM61g=" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz", + "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw==" }, "pug-strip-comments": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz", - "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz", + "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==", "requires": { - "pug-error": "^1.3.2" + "pug-error": "^1.3.3" } }, "pug-walk": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.7.tgz", - "integrity": "sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM=" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", + "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" }, "punycode": { "version": "2.1.1", @@ -2309,25 +2232,27 @@ } }, "qrcode": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.3.3.tgz", - "integrity": "sha512-SH7V13AcJusH3GT8bMNOGz4w0L+LjcpNOU/NiOgtBhT/5DoWeZE6D5ntMJnJ84AMkoaM4kjJJoHoh9g++8lWFg==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz", + "integrity": "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==", "requires": { - "can-promise": "0.0.1", + "buffer": "^5.4.3", + "buffer-alloc": "^1.2.0", + "buffer-from": "^1.1.1", "dijkstrajs": "^1.0.1", "isarray": "^2.0.1", "pngjs": "^3.3.0", - "yargs": "^12.0.5" + "yargs": "^13.2.4" }, "dependencies": { "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, "find-up": { @@ -2348,9 +2273,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "requires": { "p-try": "^2.0.0" } @@ -2369,22 +2294,20 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" } } } @@ -2519,14 +2442,14 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "resolve": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", - "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz", + "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==", "requires": { "path-parse": "^1.0.6" } @@ -2695,6 +2618,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -2702,7 +2626,8 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true }, "shell-quote": { "version": "1.6.1", @@ -2722,9 +2647,9 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "simple-git": { - "version": "1.112.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.112.0.tgz", - "integrity": "sha512-3vY0SW+RkO+ElWH07n/PQuKmuNLZSz3VAkxKMr3UMm/QnaSnYFjg3nqT8V6a0QCcUFpkyAWVsruQt4oSIIzPXw==", + "version": "1.126.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.126.0.tgz", + "integrity": "sha512-47mqHxgZnN8XRa9HbpWprzUv3Ooqz9RY/LSZgvA7jCkW8jcwLahMz7LKugY91KZehfG0sCVPtgXiU72hd6b1Bw==", "requires": { "debug": "^4.0.1" } @@ -2794,12 +2719,13 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { + "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "strip-ansi": "^5.1.0" } }, "string.prototype.padend": { @@ -2814,11 +2740,11 @@ } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, "strip-bom": { @@ -2826,11 +2752,6 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, "strip-indent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", @@ -2846,22 +2767,15 @@ } }, "tiny-secp256k1": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.0.tgz", - "integrity": "sha512-DIl0SCUIVcPrk/oOiq8/YgQ69Beayw4XSW2icyXJN8xfKMmxo5XM8gXVG1Ex+rYsHg2xuEpNFeeU6J4CtqQFrA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.3.tgz", + "integrity": "sha512-ZpobrhOtHP98VYEN51IYQH1YcrbFpnxFhI6ceWa3OEbJn7eHvSd8YFjGPxbedGCy7PNYU1v/+BRsdvyr5uRd4g==", "requires": { "bindings": "^1.3.0", "bn.js": "^4.11.8", "create-hmac": "^1.1.7", "elliptic": "^6.4.0", - "nan": "^2.12.1" - }, - "dependencies": { - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" - } + "nan": "^2.13.2" } }, "to-fast-properties": { @@ -3016,9 +2930,9 @@ } }, "varuint-bitcoin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.0.tgz", - "integrity": "sha512-jCEPG+COU/1Rp84neKTyDJQr478/hAfVp5xxYn09QEH0yBjbmPeMfuuQIrp+BUD83hybtYZKhr5elV3bvdV1bA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", + "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", "requires": { "safe-buffer": "^5.1.1" } @@ -3047,6 +2961,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -3064,11 +2979,6 @@ "bs58check": "<3.0.0" } }, - "window-or-global": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/window-or-global/-/window-or-global-1.0.1.tgz", - "integrity": "sha1-2+RboqKRqrxW1iz2bEW3+jIpRt4=" - }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", @@ -3089,51 +2999,20 @@ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "optional": true }, "y18n": { "version": "4.0.0", @@ -3157,9 +3036,9 @@ } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" diff --git a/package.json b/package.json index 6d8ec4e..3237101 100644 --- a/package.json +++ b/package.json @@ -20,33 +20,33 @@ "url": "git+https://github.com/janoside/btc-rpc-explorer.git" }, "dependencies": { - "async": "2.6.2", + "async": "^3.1.0", "basic-auth": "^2.0.1", - "bitcoin-core": "2.0.0", - "bitcoinjs-lib": "5.0.3", + "bitcoin-core": "^2.3.0", + "bitcoinjs-lib": "^5.1.6", "body-parser": "~1.19.0", "cookie-parser": "^1.4.4", "crypto-js": "3.1.9-1", "csurf": "^1.10.0", "debug": "~4.1.1", - "decimal.js": "10.1.1", - "dotenv": "^8.1.0", + "decimal.js": "^10.2.0", + "dotenv": "^8.2.0", "electrum-client": "github:chaintools/node-electrum-client#43a999036f9c5", "express": "^4.17.1", - "express-session": "1.16.1", + "express-session": "^1.17.0", "jstransformer-markdown-it": "^2.1.0", - "lru-cache": "5.1.1", - "marked": "0.7.0", + "lru-cache": "^5.1.1", + "marked": "^0.7.0", "meow": "^5.0.0", "moment": "^2.24.0", - "moment-duration-format": "2.2.2", + "moment-duration-format": "^2.3.2", "morgan": "^1.9.1", - "pug": "2.0.3", - "qrcode": "1.3.3", - "redis": "2.8.0", - "request": "2.88.0", + "pug": "^2.0.4", + "qrcode": "^1.4.4", + "redis": "^2.8.0", + "request": "^2.88.0", "serve-favicon": "^2.5.0", - "simple-git": "1.112.0" + "simple-git": "^1.126.0" }, "devDependencies": { "less": "3.9.0", From 1fe199a691d150ca6245f4dc6104cc7b59ba57e1 Mon Sep 17 00:00:00 2001 From: Dan Janosik Date: Mon, 2 Dec 2019 14:04:41 -0500 Subject: [PATCH 04/11] more authoritative link for "Destroyed bitcoin" fun item --- app/coins/btc.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/coins/btc.js b/app/coins/btc.js index 3373260..9ce1fcd 100644 --- a/app/coins/btc.js +++ b/app/coins/btc.js @@ -166,7 +166,8 @@ module.exports = { date: "2011-05-18", txid: "5d80a29be1609db91658b401f85921a86ab4755969729b65257651bb9fd2c10d", summary: "Destroyed bitcoin.", - referenceUrl: "https://www.reddit.com/r/Bitcoin/comments/7mhoks/til_in_2011_a_user_running_a_modified_mining/" + referenceUrl: "https://bitcointalk.org/index.php?topic=7253.msg184414#msg184414", + referenceUrl2: "https://www.reddit.com/r/Bitcoin/comments/7mhoks/til_in_2011_a_user_running_a_modified_mining/" }, { type: "blockheight", From 1441cbd9172a9fc992c254c5965f22ffddc2ea0c Mon Sep 17 00:00:00 2001 From: Dan Janosik Date: Mon, 2 Dec 2019 14:04:56 -0500 Subject: [PATCH 05/11] changelog updates --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 29b5659..d16fa9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ -#### Pending Release +#### v1.1.3 +###### 2019-12-02 +* Fixes related to running bitcoind 0.19.0.1 +* Updated dependencies * Version number in footer * `/changelog` linked in footer From 1f51a11a71a26b1899759dbaeb8f78b0354f56d3 Mon Sep 17 00:00:00 2001 From: Dan Janosik Date: Tue, 3 Dec 2019 14:26:53 -0500 Subject: [PATCH 06/11] add back bluebird for redis --- app/redisCache.js | 1 + package.json | 1 + 2 files changed, 2 insertions(+) diff --git a/app/redisCache.js b/app/redisCache.js index a47d700..3efe6f6 100644 --- a/app/redisCache.js +++ b/app/redisCache.js @@ -1,4 +1,5 @@ var redis = require("redis"); +var bluebird = require("bluebird"); var config = require("./config.js"); var utils = require("./utils.js"); diff --git a/package.json b/package.json index 3237101..f2898a6 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "basic-auth": "^2.0.1", "bitcoin-core": "^2.3.0", "bitcoinjs-lib": "^5.1.6", + "bluebird": "^3.7.2", "body-parser": "~1.19.0", "cookie-parser": "^1.4.4", "crypto-js": "3.1.9-1", From a937d016bdecbf4b5977268d92c6053b8a8d503e Mon Sep 17 00:00:00 2001 From: Dan Janosik Date: Tue, 3 Dec 2019 14:43:25 -0500 Subject: [PATCH 07/11] 1.1.3 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 100691f..8e73df0 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "btc-rpc-explorer", - "version": "1.1.2", + "version": "1.1.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index f2898a6..5f04ccb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "btc-rpc-explorer", - "version": "1.1.2", + "version": "1.1.3", "description": "Explorer for Bitcoin and RPC-compatible blockchains", "private": false, "bin": "bin/cli.js", From 44f3631fb12f384c8cad77c602a7592dfd3a0889 Mon Sep 17 00:00:00 2001 From: Dan Janosik Date: Wed, 4 Dec 2019 13:15:20 -0500 Subject: [PATCH 08/11] first-class support for testnet/regtest * display chain/network in header if not mainnet * indicate active chain/network in startup log * specify which chain/network "fun" items apply to and only show them for that chain * don't display exchange rates for testnet/regtest * use block interval of 150 for regtest halving * regtest hacks: since getblockchaininfo.blocks=0 on a default regtest node despite the genesis block existing, hack in a couple of places in order to display the genesis block * fix /peers page to not throw error with no connections --- CHANGELOG.md | 5 + app.js | 73 +++++--- app/api/coreApi.js | 4 +- app/api/electrumAddressApi.js | 4 +- app/api/rpcApi.js | 10 +- app/coins/btc.js | 206 ++++++++++++++++++---- app/utils.js | 4 +- routes/baseActionsRouter.js | 4 + views/fun.pug | 53 +++--- views/includes/block-content.pug | 2 +- views/includes/transaction-io-details.pug | 2 +- views/layout.pug | 6 + views/peers.pug | 6 +- views/transaction.pug | 4 +- 14 files changed, 279 insertions(+), 104 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d16fa9b..ac4e758 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +#### v1.1.4 +##### 2019-12-04 + +* First-class support for testnet/regtest + #### v1.1.3 ###### 2019-12-02 diff --git a/app.js b/app.js index e495f1b..d321585 100755 --- a/app.js +++ b/app.js @@ -152,6 +152,32 @@ function loadChangelog() { }); } +function loadHistoricalDataForChain(chain) { + global.specialTransactions = {}; + global.specialBlocks = {}; + global.specialAddresses = {}; + + if (config.donations.addresses && config.donations.addresses[coinConfig.ticker]) { + global.specialAddresses[config.donations.addresses[coinConfig.ticker].address] = {type:"donation"}; + } + + if (global.coinConfig.historicalData) { + global.coinConfig.historicalData.forEach(function(item) { + if (item.chain == chain) { + if (item.type == "blockheight") { + global.specialBlocks[item.blockHash] = item; + + } else if (item.type == "tx") { + global.specialTransactions[item.txid] = item; + + } else if (item.type == "address") { + global.specialAddresses[item.address] = {type:"fun", addressInfo:item}; + } + } + }); + } +} + app.onStartup = function() { global.config = config; @@ -209,8 +235,20 @@ app.continueStartup = function() { global.rpcClientNoTimeout = new bitcoinCore(rpcClientNoTimeoutProperties); coreApi.getNetworkInfo().then(function(getnetworkinfo) { - debugLog(`Connected via RPC to node. Basic info: version=${getnetworkinfo.version}, subversion=${getnetworkinfo.subversion}, protocolversion=${getnetworkinfo.protocolversion}, services=${getnetworkinfo.localservices}`); + coreApi.getBlockchainInfo().then(function(getblockchaininfo) { + global.activeBlockchain = getblockchaininfo.chain; + + // localservicenames introduced in 0.19 + var services = getnetworkinfo.localservicesnames ? ("[" + getnetworkinfo.localservicesnames.join(", ") + "]") : getnetworkinfo.localservices; + + debugLog(`RPC Connected: version=${getnetworkinfo.version} (${getnetworkinfo.subversion}), protocolversion=${getnetworkinfo.protocolversion}, chain=${getblockchaininfo.chain}, services=${services}`); + + // load historical/fun items for this chain + loadHistoricalDataForChain(global.activeBlockchain); + }).catch(function(err) { + utils.logError("329u0wsdgewg6ed", err); + }); }).catch(function(err) { utils.logError("32ugegdfsde", err); }); @@ -229,27 +267,6 @@ app.continueStartup = function() { }); } - global.specialTransactions = {}; - global.specialBlocks = {}; - global.specialAddresses = {}; - - if (config.donations.addresses && config.donations.addresses[coinConfig.ticker]) { - global.specialAddresses[config.donations.addresses[coinConfig.ticker].address] = {type:"donation"}; - } - - if (global.coinConfig.historicalData) { - global.coinConfig.historicalData.forEach(function(item) { - if (item.type == "blockheight") { - global.specialBlocks[item.blockHash] = item; - - } else if (item.type == "tx") { - global.specialTransactions[item.txid] = item; - - } else if (item.type == "address") { - global.specialAddresses[item.address] = {type:"fun", addressInfo:item}; - } - }); - } if (config.addressApi) { var supportedAddressApis = addressApi.getSupportedAddressApis(); @@ -280,12 +297,14 @@ app.continueStartup = function() { setInterval(getSourcecodeProjectMetadata, 3600000); } - if (global.exchangeRates == null) { - utils.refreshExchangeRates(); - } + if (global.activeBlockchain == "main") { + if (global.exchangeRates == null) { + utils.refreshExchangeRates(); + } - // refresh exchange rate periodically - setInterval(utils.refreshExchangeRates, 1800000); + // refresh exchange rate periodically + setInterval(utils.refreshExchangeRates, 1800000); + } utils.logMemoryUsage(); setInterval(utils.logMemoryUsage, 5000); diff --git a/app/api/coreApi.js b/app/api/coreApi.js index 5495a88..5ba6531 100644 --- a/app/api/coreApi.js +++ b/app/api/coreApi.js @@ -74,11 +74,11 @@ if (redisCache.active) { function getGenesisBlockHash() { - return coins[config.coin].genesisBlockHash; + return coins[config.coin].genesisBlockHashesByNetwork[global.activeBlockchain]; } function getGenesisCoinbaseTransactionId() { - return coins[config.coin].genesisCoinbaseTransactionId; + return coins[config.coin].genesisCoinbaseTransactionIdsByNetwork[global.activeBlockchain]; } diff --git a/app/api/electrumAddressApi.js b/app/api/electrumAddressApi.js index 69fe331..c6f871c 100644 --- a/app/api/electrumAddressApi.js +++ b/app/api/electrumAddressApi.js @@ -172,7 +172,7 @@ function getAddressTxids(addrScripthash) { if (addrScripthash == coinConfig.genesisCoinbaseOutputAddressScripthash) { for (var i = 0; i < results.length; i++) { - results[i].result.unshift({tx_hash:coinConfig.genesisCoinbaseTransactionId, height:0}); + results[i].result.unshift({tx_hash:coinConfig.genesisCoinbaseTransactionIdsByNetwork[global.activeBlockchain], height:0}); } } @@ -206,7 +206,7 @@ function getAddressBalance(addrScripthash) { if (addrScripthash == coinConfig.genesisCoinbaseOutputAddressScripthash) { for (var i = 0; i < results.length; i++) { - var coinbaseBlockReward = coinConfig.blockRewardFunction(0); + var coinbaseBlockReward = coinConfig.blockRewardFunction(0, global.activeBlockchain); results[i].result.confirmed += (coinbaseBlockReward * coinConfig.baseCurrencyUnit.multiplier); } diff --git a/app/api/rpcApi.js b/app/api/rpcApi.js index 263cec6..cb34a11 100644 --- a/app/api/rpcApi.js +++ b/app/api/rpcApi.js @@ -150,12 +150,18 @@ function getRawTransaction(txid) { debugLog("getRawTransaction: %s", txid); return new Promise(function(resolve, reject) { - if (coins[config.coin].genesisCoinbaseTransactionId && txid == coins[config.coin].genesisCoinbaseTransactionId) { + if (coins[config.coin].genesisCoinbaseTransactionIdsByNetwork[global.activeBlockchain] && txid == coins[config.coin].genesisCoinbaseTransactionIdsByNetwork[global.activeBlockchain]) { // copy the "confirmations" field from genesis block to the genesis-coinbase tx getBlockchainInfo().then(function(blockchainInfoResult) { - var result = coins[config.coin].genesisCoinbaseTransaction; + var result = coins[config.coin].genesisCoinbaseTransactionsByNetwork[global.activeBlockchain]; result.confirmations = blockchainInfoResult.blocks; + // hack: default regtest node returns "0" for number of blocks, despite including a genesis block; + // to display this block without errors, tag it with 1 confirmation + if (global.activeBlockchain == "regtest" && result.confirmations == 0) { + result.confirmations = 1; + } + resolve(result); }).catch(function(err) { diff --git a/app/coins/btc.js b/app/coins/btc.js index 9ce1fcd..7e00c7c 100644 --- a/app/coins/btc.js +++ b/app/coins/btc.js @@ -69,46 +69,121 @@ module.exports = { baseCurrencyUnit:currencyUnits[3], defaultCurrencyUnit:currencyUnits[0], feeSatoshiPerByteBucketMaxima: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 50, 75, 100, 150], - genesisBlockHash: "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", - genesisCoinbaseTransactionId: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", - genesisCoinbaseTransaction: { - "hex": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0804ffff001d02fd04ffffffff0100f2052a01000000434104f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446aac00000000", - "txid": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", - "hash": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", - "size": 204, - "vsize": 204, - "version": 1, - "confirmations":475000, - "vin": [ - { - "coinbase": "04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73", - "sequence": 4294967295 - } - ], - "vout": [ - { - "value": 50, - "n": 0, - "scriptPubKey": { - "asm": "04f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446a OP_CHECKSIG", - "hex": "4104f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446aac", - "reqSigs": 1, - "type": "pubkey", - "addresses": [ - "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa" - ] + genesisBlockHashesByNetwork:{ + "main": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", + "test": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", + "regtest": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206" + }, + genesisCoinbaseTransactionIdsByNetwork: { + "main": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", + "test": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", + "regtest": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b" + }, + genesisCoinbaseTransactionsByNetwork:{ + "main": { + "hex": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0804ffff001d02fd04ffffffff0100f2052a01000000434104f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446aac00000000", + "txid": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", + "hash": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", + "size": 204, + "vsize": 204, + "version": 1, + "confirmations":475000, + "vin": [ + { + "coinbase": "04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73", + "sequence": 4294967295 } - } - ], - "blockhash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", - "time": 1230988505, - "blocktime": 1230988505 + ], + "vout": [ + { + "value": 50, + "n": 0, + "scriptPubKey": { + "asm": "04f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446a OP_CHECKSIG", + "hex": "4104f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446aac", + "reqSigs": 1, + "type": "pubkey", + "addresses": [ + "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa" + ] + } + } + ], + "blockhash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", + "time": 1230988505, + "blocktime": 1230988505 + }, + "test": { + "hex": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000", + "txid": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", + "hash": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", + "version": 1, + "size": 204, + "vsize": 204, + "weight": 816, + "locktime": 0, + "vin": [ + { + "coinbase": "04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73", + "sequence": 4294967295 + } + ], + "vout": [ + { + "value": 50.00000000, + "n": 0, + "scriptPubKey": { + "asm": "04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f OP_CHECKSIG", + "hex": "4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac", + "reqSigs": 1, + "type": "pubkey", + "addresses": [ + "mpXwg4jMtRhuSpVq4xS3HFHmCmWp9NyGKt" + ] + } + } + ], + "blockhash": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", + "time": 1296688602, + "blocktime": 1296688602 + }, + "regtest": { + "hex": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000", + "txid": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", + "hash": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", + "version": 1, + "size": 204, + "vsize": 204, + "weight": 816, + "locktime": 0, + "vin": [ + { + "coinbase": "04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73", + "sequence": 4294967295 + } + ], + "vout": [ + { + "value": 50.00000000, + "n": 0, + "scriptPubKey": { + "asm": "04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f OP_CHECKSIG", + "hex": "4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac", + "type": "pubkey" + } + } + ], + "blockhash": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206", + "time": 1296688602, + "blocktime": 1296688602 + } }, genesisCoinbaseOutputAddressScripthash:"8b01df4e368ea28f8dc0423bcf7a4923e3a12d307c875e47a0cfbf90b5c39161", historicalData: [ { type: "blockheight", date: "2009-01-03", + chain: "main", blockHeight: 0, blockHash: "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", summary: "The Bitcoin Genesis Block.", @@ -118,6 +193,7 @@ module.exports = { { type: "tx", date: "2009-01-03", + chain: "main", txid: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", summary: "The coinbase transaction of the Genesis Block.", alertBodyHtml: "This transaction doesn't really exist! This is the coinbase transaction of the Bitcoin Genesis Block. For more background about this special-case transaction, you can read this brief discussion among some of the Bitcoin developers.", @@ -126,6 +202,7 @@ module.exports = { { type: "tx", date: "2009-10-12", + chain: "main", txid: "7dff938918f07619abd38e4510890396b1cef4fbeca154fb7aafba8843295ea2", summary: "First bitcoin traded for fiat currency.", alertBodyHtml: "In this first-known BTC-to-fiat transaction, 5,050 BTC were exchanged for 5.02 USD, at an effective exchange rate of ~0.001 USD/BTC.", @@ -134,6 +211,7 @@ module.exports = { { type: "blockheight", date: "2017-08-24", + chain: "main", blockHeight: 481824, blockHash: "0000000000000000001c8018d9cb3b742ef25114f27563e3fc4a1902167f9893", summary: "First SegWit block.", @@ -142,6 +220,7 @@ module.exports = { { type: "tx", date: "2017-08-24", + chain: "main", txid: "8f907925d2ebe48765103e6845C06f1f2bb77c6adc1cc002865865eb5cfd5c1c", summary: "First SegWit transaction.", referenceUrl: "https://twitter.com/KHS9NE/status/900553902923362304" @@ -149,6 +228,7 @@ module.exports = { { type: "tx", date: "2014-06-16", + chain: "main", txid: "143a3d7e7599557f9d63e7f224f34d33e9251b2c23c38f95631b3a54de53f024", summary: "Star Wars: A New Hope", referenceUrl: "" @@ -156,6 +236,7 @@ module.exports = { { type: "tx", date: "2010-05-22", + chain: "main", txid: "a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d", summary: "The 'Bitcoin Pizza' transaction.", alertBodyHtml: "This is the famous 'Bitcoin Pizza' transaction.", @@ -164,6 +245,7 @@ module.exports = { { type: "tx", date: "2011-05-18", + chain: "main", txid: "5d80a29be1609db91658b401f85921a86ab4755969729b65257651bb9fd2c10d", summary: "Destroyed bitcoin.", referenceUrl: "https://bitcointalk.org/index.php?topic=7253.msg184414#msg184414", @@ -172,6 +254,7 @@ module.exports = { { type: "blockheight", date: "2009-01-12", + chain: "main", blockHeight: 170, blockHash: "00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee", summary: "First block containing a (non-coinbase) transaction.", @@ -181,6 +264,7 @@ module.exports = { { type: "blockheight", date: "2017-08-25", + chain: "main", blockHeight: 481947, blockHash: "00000000000000000139cb443e16442fcd07a4a0e0788dd045ee3cf268982016", summary: "First block mined that was greater than 1MB.", @@ -189,6 +273,7 @@ module.exports = { { type: "blockheight", date: "2018-01-20", + chain: "main", blockHeight: 505225, blockHash: "0000000000000000001bbb529c64ddf55edec8f4ebc0a0ccf1d3bb21c278bfa7", summary: "First block mined that was greater than 2MB.", @@ -197,6 +282,7 @@ module.exports = { { type: "tx", date: "2017-12-30", + chain: "main", txid: "9bf8853b3a823bbfa1e54017ae11a9e1f4d08a854dcce9f24e08114f2c921182", summary: "Block reward lost", alertBodyHtml: "This coinbase transaction completely fails to collect the block's mining reward. 12.5 BTC were lost.", @@ -205,6 +291,7 @@ module.exports = { { type:"address", date:"2011-12-03", + chain: "main", address:"1JryTePceSiWVpoNBU8SbwiT7J4ghzijzW", summary:"Brainwallet address for 'Satoshi Nakamoto'", referenceUrl:"https://twitter.com/MrHodl/status/1041448002005741568", @@ -213,6 +300,7 @@ module.exports = { { type: "tx", date: "2010-11-14", + chain: "main", txid: "e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468", summary: "Duplicated coinbase transaction #1", referenceUrl: "https://bitcoin.stackexchange.com/questions/38994/will-there-be-21-million-bitcoins-eventually/38998#38998", @@ -221,11 +309,56 @@ module.exports = { { type: "tx", date: "2010-11-14", + chain: "main", txid: "d5d27987d2a3dfc724e359870c6644b40e497bdc0589a033220fe15429d88599", summary: "Duplicated coinbase transaction #2", referenceUrl: "https://bitcoin.stackexchange.com/questions/38994/will-there-be-21-million-bitcoins-eventually/38998#38998", alertBodyHtml: "This is one of 2 'duplicate coinbase' transactions. An early bitcoin bug (fixed by BIP30) allowed identical coinbase transactions - a newer duplicate would overwrite older copies. This transaction was the coinbase transaction for Block #91,812 and, ~3 hours later, Block #91,842. The 50 BTC claimed as the coinbase for block 91,812 were also overwritten and lost." - } + }, + + + // testnet + { + type: "blockheight", + date: "2011-02-02", + chain: "test", + blockHeight: 0, + blockHash: "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943", + summary: "The Bitcoin (regtest) Genesis Block.", + alertBodyHtml: "This is the first block in the Bitcoin blockchain, known as the 'Genesis Block'. You can read more about the genesis block.", + referenceUrl: "https://en.bitcoin.it/wiki/Genesis_block" + }, + { + type: "tx", + date: "2011-02-02", + chain: "test", + txid: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", + summary: "The coinbase transaction of the Genesis Block.", + alertBodyHtml: "This transaction doesn't really exist! This is the coinbase transaction of the Bitcoin Genesis Block. For more background about this special-case transaction, you can read this brief discussion among some of the Bitcoin developers.", + referenceUrl: "https://github.com/bitcoin/bitcoin/issues/3303" + }, + + + // regtest + { + type: "blockheight", + date: "2011-02-02", + chain: "regtest", + blockHeight: 0, + blockHash: "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206", + summary: "The Bitcoin (regtest) Genesis Block.", + alertBodyHtml: "This is the first block in the Bitcoin blockchain, known as the 'Genesis Block'. You can read more about the genesis block.", + referenceUrl: "https://en.bitcoin.it/wiki/Genesis_block" + }, + { + type: "tx", + date: "2011-02-02", + chain: "regtest", + txid: "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b", + summary: "The coinbase transaction of the Genesis Block.", + alertBodyHtml: "This transaction doesn't really exist! This is the coinbase transaction of the Bitcoin Genesis Block. For more background about this special-case transaction, you can read this brief discussion among some of the Bitcoin developers.", + referenceUrl: "https://github.com/bitcoin/bitcoin/issues/3303" + }, ], exchangeRateData:{ jsonUrl:"https://api.coindesk.com/v1/bpi/currentprice.json", @@ -249,14 +382,15 @@ module.exports = { return null; } }, - blockRewardFunction:function(blockHeight) { + blockRewardFunction:function(blockHeight, chain) { var eras = [ new Decimal8(50) ]; for (var i = 1; i < 34; i++) { var previous = eras[i - 1]; eras.push(new Decimal8(previous).dividedBy(2)); } - var index = Math.floor(blockHeight / 210000); + var halvingBlockInterval = (chain == "regtest" ? 150 : 210000); + var index = Math.floor(blockHeight / halvingBlockInterval); return eras[index]; } diff --git a/app/utils.js b/app/utils.js index e507955..3dcc0ef 100644 --- a/app/utils.js +++ b/app/utils.js @@ -284,7 +284,7 @@ function getTxTotalInputOutputValues(tx, txInputs, blockHeight) { try { for (var i = 0; i < tx.vin.length; i++) { if (tx.vin[i].coinbase) { - totalInputValue = totalInputValue.plus(new Decimal(coinConfig.blockRewardFunction(blockHeight))); + totalInputValue = totalInputValue.plus(new Decimal(coinConfig.blockRewardFunction(blockHeight, global.activeBlockchain))); } else { var txInput = txInputs[i]; @@ -317,7 +317,7 @@ function getBlockTotalFeesFromCoinbaseTxAndBlockHeight(coinbaseTx, blockHeight) return 0; } - var blockReward = coinConfig.blockRewardFunction(blockHeight); + var blockReward = coinConfig.blockRewardFunction(blockHeight, global.activeBlockchain); var totalOutput = new Decimal(0); for (var i = 0; i < coinbaseTx.vout.length; i++) { diff --git a/routes/baseActionsRouter.js b/routes/baseActionsRouter.js index ac069c9..64f118b 100644 --- a/routes/baseActionsRouter.js +++ b/routes/baseActionsRouter.js @@ -74,6 +74,10 @@ router.get("/", function(req, res, next) { for (var i = 0; i < 10; i++) { blockHeights.push(getblockchaininfo.blocks - i); } + } else if (global.activeBlockchain == "regtest") { + // hack: default regtest node returns getblockchaininfo.blocks=0, despite having a genesis block + // hack this to display the genesis block + blockHeights.push(0); } if (getblockchaininfo.chain !== 'regtest') { diff --git a/views/fun.pug b/views/fun.pug index e194fa1..74b2aac 100644 --- a/views/fun.pug +++ b/views/fun.pug @@ -19,34 +19,35 @@ block content th(class="data-header") Reference tbody each item, index in coinConfig.historicalData - tr - td(class="data-cell") #{item.date} + if (item.chain == global.activeBlockchain) + tr + td(class="data-cell") #{item.date} - td(class="data-cell") #{item.summary} - - td(class="data-cell monospace") - if (item.type == "tx") - a(href=("/tx/" + item.txid), title=item.txid, data-toggle="tooltip") Tx #{item.txid.substring(0, 23)}... - else if (item.type == "block") - a(href=("/block/" + item.blockHash), title="Block #{item.blockHash}", data-toggle="tooltip") Block #{item.blockHash.substring(0, 20)}... - else if (item.type == "blockheight") - a(href=("/block/" + item.blockHash)) Block ##{item.blockHeight} - else if (item.type == "address") - a(href=("/address/" + item.address), title=item.address, data-toggle="tooltip") Address #{item.address.substring(0, 18)}... - else if (item.type == "link") - a(href=item.url) #{item.url.substring(0, 20)}... + td(class="data-cell") #{item.summary} + + td(class="data-cell monospace") + if (item.type == "tx") + a(href=("/tx/" + item.txid), title=item.txid, data-toggle="tooltip") Tx #{item.txid.substring(0, 23)}... + else if (item.type == "block") + a(href=("/block/" + item.blockHash), title="Block #{item.blockHash}", data-toggle="tooltip") Block #{item.blockHash.substring(0, 20)}... + else if (item.type == "blockheight") + a(href=("/block/" + item.blockHash)) Block ##{item.blockHeight} + else if (item.type == "address") + a(href=("/address/" + item.address), title=item.address, data-toggle="tooltip") Address #{item.address.substring(0, 18)}... + else if (item.type == "link") + a(href=item.url) #{item.url.substring(0, 20)}... - td(class="data-cell") - if (item.referenceUrl && item.referenceUrl.trim().length > 0) - - var matches = item.referenceUrl.match(/^https?\:\/\/([^\/:?#]+)(?:[\/:?#]|$)/i); + td(class="data-cell") + if (item.referenceUrl && item.referenceUrl.trim().length > 0) + - var matches = item.referenceUrl.match(/^https?\:\/\/([^\/:?#]+)(?:[\/:?#]|$)/i); - - var domain = null; - - var domain = matches && matches[1]; + - var domain = null; + - var domain = matches && matches[1]; - if (domain) - a(href=item.referenceUrl, rel="nofollow") #{domain} - i(class="fas fa-external-link-alt") + if (domain) + a(href=item.referenceUrl, rel="nofollow") #{domain} + i(class="fas fa-external-link-alt") + else + a(href=item.referenceUrl, rel="nofollow") Reference else - a(href=item.referenceUrl, rel="nofollow") Reference - else - span - \ No newline at end of file + span - \ No newline at end of file diff --git a/views/includes/block-content.pug b/views/includes/block-content.pug index 765f227..ba97ab6 100644 --- a/views/includes/block-content.pug +++ b/views/includes/block-content.pug @@ -73,7 +73,7 @@ div(class="tab-content") - var currencyValue = new Decimal(result.getblock.totalFees).dividedBy(result.getblock.tx.length); include ./value-display.pug - - var blockRewardMax = coinConfig.blockRewardFunction(result.getblock.height); + - var blockRewardMax = coinConfig.blockRewardFunction(result.getblock.height, global.activeBlockchain); - var coinbaseTxTotalOutputValue = new Decimal(0); each vout in result.getblock.coinbaseTx.vout - coinbaseTxTotalOutputValue = coinbaseTxTotalOutputValue.plus(new Decimal(vout.value)); diff --git a/views/includes/transaction-io-details.pug b/views/includes/transaction-io-details.pug index b14a145..0dc9eee 100644 --- a/views/includes/transaction-io-details.pug +++ b/views/includes/transaction-io-details.pug @@ -61,7 +61,7 @@ div(class="row monospace") div(class="tx-io-value") if (txVin.coinbase) - - var currencyValue = coinConfig.blockRewardFunction(blockHeight); + - var currencyValue = coinConfig.blockRewardFunction(blockHeight, global.activeBlockchain); include ./value-display.pug else if (vout && vout.value) diff --git a/views/layout.pug b/views/layout.pug index 5acb4de..4379043 100644 --- a/views/layout.pug +++ b/views/layout.pug @@ -44,6 +44,12 @@ html(lang="en") a(href="/about", class="nav-link") span About + if (global.activeBlockchain != "main") + - var chainName = global.activeBlockchain == "test" ? "testnet" : global.activeBlockchain + + li.nav-item + a.nav-link.text-warning(title=`Current node's chain: ${global.activeBlockchain}` data-toggle="tooltip") [#{chainName}] + if (config.siteTools) li(class="nav-item dropdown") a(class="nav-link dropdown-toggle", href="javascript:void(0)", role="button", data-toggle="dropdown", aria-haspopup="true", aria-expanded="false") diff --git a/views/peers.pug b/views/peers.pug index 3244ae4..8dbc291 100644 --- a/views/peers.pug +++ b/views/peers.pug @@ -34,7 +34,7 @@ block content div(id="tab-summary", class="tab-pane active", role="tabpanel") - if (peerIpSummary.ips) + if (peerIpSummary && peerIpSummary.ips) div(id="map", class="mb-4") div(class="card mb-4 shadow-sm") @@ -93,7 +93,7 @@ block content th(class="data-header") Address th(class="data-header") Services - if (peerIpSummary.ips) + if (peerIpSummary && peerIpSummary.ips) th(class="data-header") Location th(class="data-header") Last Send / Receive @@ -161,7 +161,7 @@ block endOfBody $(".data-table").DataTable(); }); - if (peerIpSummary.ips) + if (peerIpSummary && peerIpSummary.ips) script. var mymap = L.map('map').setView([21.505, -0.09], 3); diff --git a/views/transaction.pug b/views/transaction.pug index ae1a5f7..95b3e0d 100644 --- a/views/transaction.pug +++ b/views/transaction.pug @@ -27,7 +27,7 @@ block content - var totalInputValue = new Decimal(0); if (result.getrawtransaction.vin[0].coinbase) - - totalInputValue = totalInputValue.plus(new Decimal(coinConfig.blockRewardFunction(result.getblock.height))); + - totalInputValue = totalInputValue.plus(new Decimal(coinConfig.blockRewardFunction(result.getblock.height, global.activeBlockchain))); each txInput, txInputIndex in result.txInputs if (txInput) - var vout = txInput.vout[result.getrawtransaction.vin[txInputIndex].vout]; @@ -168,7 +168,7 @@ block content - var currencyValue = new Decimal(totalOutputValue).minus(totalInputValue); include includes/value-display.pug - - var blockRewardMax = coinConfig.blockRewardFunction(result.getblock.height); + - var blockRewardMax = coinConfig.blockRewardFunction(result.getblock.height, global.activeBlockchain); if (parseFloat(totalOutputValue) < parseFloat(blockRewardMax)) div(class="row") div(class="summary-table-label") From ff4dea980d4b4f640e9553fe1f455449a1d69742 Mon Sep 17 00:00:00 2001 From: Dan Janosik Date: Wed, 4 Dec 2019 13:15:37 -0500 Subject: [PATCH 09/11] 1.1.4 --- npm-shrinkwrap.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 8e73df0..97ef898 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "btc-rpc-explorer", - "version": "1.1.3", + "version": "1.1.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 5f04ccb..454d452 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "btc-rpc-explorer", - "version": "1.1.3", + "version": "1.1.4", "description": "Explorer for Bitcoin and RPC-compatible blockchains", "private": false, "bin": "bin/cli.js", From 75dd5d1f2410d9ce00e2d95ae34b2fa1e4eb436b Mon Sep 17 00:00:00 2001 From: Dan Janosik Date: Thu, 5 Dec 2019 16:10:11 -0500 Subject: [PATCH 10/11] refresh mining configs to pull in luxor pool --- public/txt/mining-pools-configs/BTC/0.json | 4 ++++ public/txt/mining-pools-configs/BTC/1.json | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/public/txt/mining-pools-configs/BTC/0.json b/public/txt/mining-pools-configs/BTC/0.json index 18aa50a..debc534 100644 --- a/public/txt/mining-pools-configs/BTC/0.json +++ b/public/txt/mining-pools-configs/BTC/0.json @@ -1,5 +1,9 @@ { "coinbase_tags" : { + "/LUXOR/": { + "name": "Luxor", + "link": "https://mining.luxor.tech" + }, "/1THash&58COIN/": { "name": "1THash&58COIN", "link": "https://www.1thash.top" diff --git a/public/txt/mining-pools-configs/BTC/1.json b/public/txt/mining-pools-configs/BTC/1.json index ae144af..3094b79 100644 --- a/public/txt/mining-pools-configs/BTC/1.json +++ b/public/txt/mining-pools-configs/BTC/1.json @@ -1,5 +1,9 @@ { "coinbase_tags" : { + "/LUXOR/": { + "name": "Luxor", + "link": "https://mining.luxor.tech" + }, "Rawpool.com" : { "name" : "Rawpool.com", "link" : "https://www.rawpool.com/" From 497f05e57638442a4c6a0b6bee30c0fd9d72d8a7 Mon Sep 17 00:00:00 2001 From: Dan Janosik Date: Thu, 5 Dec 2019 21:11:13 +0000 Subject: [PATCH 11/11] consistent formatting --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac4e758..96c6663 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ #### v1.1.4 -##### 2019-12-04 +###### 2019-12-04 * First-class support for testnet/regtest @@ -59,4 +59,4 @@ #### v1.0.0 ###### 2019-02-23 -* Initial release \ No newline at end of file +* Initial release