From a163c83474002b67219430b608438150505eb026 Mon Sep 17 00:00:00 2001 From: Collin Chin Date: Thu, 28 Mar 2019 14:17:22 -0700 Subject: [PATCH 1/5] btc-block-tracker online --- example.js | 3 +- package-lock.json | 416 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 2 + src/base.js | 2 +- src/polling.js | 35 ++-- 5 files changed, 431 insertions(+), 27 deletions(-) diff --git a/example.js b/example.js index 0363f6ef..d2e9a44e 100644 --- a/example.js +++ b/example.js @@ -3,7 +3,8 @@ const PollingBlockTracker = require('./src/polling') const provider = createInfuraProvider({ network: 'mainnet' }) -const blockTracker = new PollingBlockTracker({ provider }) +// const blockTracker = new PollingBlockTracker({ provider }) +const blockTracker = new PollingBlockTracker(); blockTracker.on('sync', ({ newBlock, oldBlock }) => { if (oldBlock) { diff --git a/package-lock.json b/package-lock.json index 7fdc88ec..42debb43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,6 +53,17 @@ "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", "dev": true }, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -125,6 +136,14 @@ "dev": true, "optional": true }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, "asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", @@ -162,6 +181,11 @@ } } }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -194,6 +218,11 @@ "async": "^2.4.0" } }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -201,6 +230,25 @@ "dev": true, "optional": true }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "axios": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", + "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "requires": { + "follow-redirects": "^1.3.0", + "is-buffer": "^1.1.5" + } + }, "babel-cli": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", @@ -956,6 +1004,14 @@ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "dev": true }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, "binary-extensions": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", @@ -981,6 +1037,15 @@ "safe-buffer": "^5.0.1" } }, + "blockcypher": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/blockcypher/-/blockcypher-0.2.0.tgz", + "integrity": "sha1-W9K2sCQTYORbtbkTNOOaB3th+Jc=", + "requires": { + "request": "^2.67.0", + "xtend": "^4.0.1" + } + }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", @@ -1258,6 +1323,11 @@ "integrity": "sha512-Cs+4U9T0okW2ftBsCIHuEYXXkki7mjXmjCh4c6PzYShk04qDEr76/iC7KwhLoWoY65wcra1XOsRD+S7BptEb5A==", "dev": true }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -1377,6 +1447,14 @@ } } }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", @@ -1448,8 +1526,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "create-ecdh": { "version": "4.0.3", @@ -1523,6 +1600,14 @@ "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", "dev": true }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -1642,6 +1727,11 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, "deps-sort": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", @@ -1729,6 +1819,15 @@ "readable-stream": "^2.0.2" } }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "electron-to-chromium": { "version": "1.3.116", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.116.tgz", @@ -2063,6 +2162,11 @@ "fill-range": "^2.1.0" } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -2096,6 +2200,11 @@ "is-extglob": "^1.0.0" } }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, "fake-merkle-patricia-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", @@ -2105,6 +2214,16 @@ "checkpoint-store": "^1.1.0" } }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, "fetch-ponyfill": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz", @@ -2153,6 +2272,29 @@ "repeat-string": "^1.5.2" } }, + "follow-redirects": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "requires": { + "debug": "^3.2.6" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -2179,6 +2321,21 @@ "for-in": "^1.0.1" } }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -4873,8 +5030,25 @@ "from": "git+https://github.com/ethereumjs/ethereumjs-abi.git", "dev": true, "requires": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^5.0.0" + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "0.1.6", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + } } }, "ethereumjs-block": { @@ -8944,8 +9118,25 @@ "from": "git+https://github.com/ethereumjs/ethereumjs-abi.git", "dev": true, "requires": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^5.0.0" + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", + "dev": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "ethjs-util": "0.1.6", + "keccak": "^1.0.2", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + } } }, "ethereumjs-block": { @@ -9269,6 +9460,14 @@ "dev": true, "optional": true }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -9316,6 +9515,20 @@ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", "dev": true }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -9453,6 +9666,16 @@ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", "dev": true }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -9555,8 +9778,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { "version": "1.1.4", @@ -9730,6 +9952,11 @@ "has-symbols": "^1.0.0" } }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -9753,12 +9980,22 @@ "isarray": "1.0.0" } }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", @@ -9805,6 +10042,16 @@ "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", "integrity": "sha1-uknZat7RRE27jaPSA3SKy7zeyMg=" }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, "json-stable-stringify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", @@ -9814,6 +10061,11 @@ "jsonify": "~0.0.0" } }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", @@ -9832,6 +10084,17 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, "keccak": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", @@ -10129,6 +10392,19 @@ "brorand": "^1.0.1" } }, + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "requires": { + "mime-db": "~1.38.0" + } + }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -10288,6 +10564,11 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -10503,6 +10784,11 @@ "sha.js": "^2.4.8" } }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -10556,6 +10842,11 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -10573,8 +10864,12 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "querystring": { "version": "0.2.0", @@ -11073,6 +11368,33 @@ "is-finite": "^1.0.0" } }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, "resolve": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", @@ -11134,8 +11456,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-event-emitter": { "version": "1.0.1", @@ -11158,8 +11479,7 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "secp256k1": { "version": "3.6.2", @@ -11440,6 +11760,22 @@ "extend-shallow": "^3.0.0" } }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -11688,6 +12024,15 @@ } } }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -11700,6 +12045,19 @@ "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -11832,6 +12190,21 @@ } } }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -11885,6 +12258,11 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, "v8flags": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", @@ -11894,6 +12272,16 @@ "user-home": "^1.1.1" } }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "vm-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", diff --git a/package.json b/package.json index 06e5f7de..2c548d05 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,8 @@ "author": "kumavis", "license": "MIT", "dependencies": { + "axios": "^0.18.0", + "blockcypher": "^0.2.0", "eth-query": "^2.1.0", "pify": "^3.0.0", "safe-event-emitter": "^1.0.1" diff --git a/src/base.js b/src/base.js index 8c6de302..3b07bedb 100644 --- a/src/base.js +++ b/src/base.js @@ -121,7 +121,7 @@ class BaseBlockTracker extends SafeEventEmitter { _newPotentialLatest (newBlock) { const currentBlock = this._currentBlock // only update if blok number is higher - if (currentBlock && (hexToInt(newBlock) <= hexToInt(currentBlock))) return + if (currentBlock && (newBlock <= currentBlock)) return this._setCurrentBlock(newBlock) } diff --git a/src/polling.js b/src/polling.js index 59302ccc..c16bf312 100644 --- a/src/polling.js +++ b/src/polling.js @@ -1,13 +1,15 @@ const pify = require('pify') const BaseBlockTracker = require('./base') +const axios = require('axios') +// const bcypher = require('blockcypher'); const sec = 1000 class PollingBlockTracker extends BaseBlockTracker { - constructor (opts = {}) { + constructor(opts = {}) { // parse + validate args - if (!opts.provider) throw new Error('PollingBlockTracker - no provider specified.') + // if (!opts.provider) throw new Error('PollingBlockTracker - no provider specified.') const pollingInterval = opts.pollingInterval || 20 * sec const retryTimeout = opts.retryTimeout || pollingInterval / 10 const keepEventLoopActive = opts.keepEventLoopActive !== undefined ? opts.keepEventLoopActive : true @@ -29,7 +31,7 @@ class PollingBlockTracker extends BaseBlockTracker { // // trigger block polling - async checkForLatestBlock () { + async checkForLatestBlock() { await this._updateLatestBlock() return await this.getLatestBlock() } @@ -38,11 +40,11 @@ class PollingBlockTracker extends BaseBlockTracker { // private // - _start () { + _start() { this._performSync().catch(err => this.emit('error', err)) } - async _performSync () { + async _performSync() { while (this._isRunning) { try { await this._updateLatestBlock() @@ -59,25 +61,36 @@ class PollingBlockTracker extends BaseBlockTracker { } } - async _updateLatestBlock () { + async _updateLatestBlock() { // fetch + set latest block const latestBlock = await this._fetchLatestBlock() this._newPotentialLatest(latestBlock) } - async _fetchLatestBlock () { - const req = { id: 1, method: 'eth_blockNumber', params: [] } + async _fetchLatestBlock() { + // let bcapi = new bcypher('btc', 'main', 'e5ae43f99a9847aea3cb6b4d8ff9e59d'); + // function printResponse(err, data) { + // if (err != null) { + // console.log(err); + // } else { + + // console.log(data); + // } + // } + // const req = { id: 1, method: 'eth_blockNumber', params: [] } if (this._setSkipCacheFlag) req.skipCache = true - const res = await pify((cb) => this._provider.sendAsync(req, cb))() + // const res = await pify((cb) => this._provider.sendAsync(req, cb))() + const res = await axios.get('https://api.blockcypher.com/v1/btc/main') + // console.log(res.data); if (res.error) throw new Error(`PollingBlockTracker - encountered error fetching block:\n${res.error}`) - return res.result + return res.data.height } } module.exports = PollingBlockTracker -function timeout (duration, unref) { +function timeout(duration, unref) { return new Promise(resolve => { const timoutRef = setTimeout(resolve, duration) // don't keep process open From 66c907a0f7ab78d7fddd8715304dbb1be7343410 Mon Sep 17 00:00:00 2001 From: Collin Chin Date: Thu, 28 Mar 2019 15:00:52 -0700 Subject: [PATCH 2/5] update dependencies and README --- README.md | 12 +++++++----- package.json | 1 - src/base.js | 1 - src/polling.js | 1 - 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 7560e0b8..a5a73041 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,17 @@ -# eth-block-tracker +# btc-block-tracker -This module walks the Ethereum blockchain, keeping track of the latest block. -It uses a web3 provider as a data source and will continuously poll for the next block. +This project is forked from [eth-block-tracker](https://github.com/MetaMask/eth-block-tracker) and has been adapted for the Bitcoin Blockchain. + +This module walks the Bitcoin blockchain, keeping track of the latest block. +It uses a BlockCypher provider as a data source and will continuously poll for the next block. ```js const HttpProvider = require('ethjs-provider-http') const PollingBlockTracker = require('eth-block-tracker') const provider = new HttpProvider('https://mainnet.infura.io') -const blockTracker = new PollingBlockTracker({ provider }) +const blockTracker = new PollingBlockTracker({pollingInterval : 600000}) blockTracker.on('latest', console.log) ``` @@ -17,7 +19,7 @@ blockTracker.on('latest', console.log) ##### new PollingBlockTracker({ provider, pollingInterval, retryTimeout, keepEventLoopActive }) -creates a new block tracker with `provider` as a data source and +creates a new block tracker with BlockCypher as a data source and `pollingInterval` (ms) timeout between polling for the latest block. If an Error is encountered when fetching blocks, it will wait `retryTimeout` (ms) before attempting again. If `keepEventLoopActive` is false, in Node.js it will [unref the polling timeout](https://nodejs.org/api/timers.html#timers_timeout_unref), allowing the process to exit during the polling interval. defaults to `true`, meaning the process will be kept alive. diff --git a/package.json b/package.json index 2c548d05..4c8ad138 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,6 @@ "axios": "^0.18.0", "blockcypher": "^0.2.0", "eth-query": "^2.1.0", - "pify": "^3.0.0", "safe-event-emitter": "^1.0.1" }, "devDependencies": { diff --git a/src/base.js b/src/base.js index 3b07bedb..02c46848 100644 --- a/src/base.js +++ b/src/base.js @@ -1,5 +1,4 @@ const EthQuery = require('eth-query') -const pify = require('pify') const SafeEventEmitter = require('safe-event-emitter') const sec = 1000 diff --git a/src/polling.js b/src/polling.js index c16bf312..35c664c9 100644 --- a/src/polling.js +++ b/src/polling.js @@ -1,4 +1,3 @@ -const pify = require('pify') const BaseBlockTracker = require('./base') const axios = require('axios') // const bcypher = require('blockcypher'); From f1390ab6b2ff4f9b5e3fd9cc266eccc5ad0a2b33 Mon Sep 17 00:00:00 2001 From: Collin Chin Date: Thu, 28 Mar 2019 15:03:50 -0700 Subject: [PATCH 3/5] more README changes --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a5a73041..ae067699 100644 --- a/README.md +++ b/README.md @@ -7,17 +7,14 @@ This module walks the Bitcoin blockchain, keeping track of the latest block. It uses a BlockCypher provider as a data source and will continuously poll for the next block. ```js -const HttpProvider = require('ethjs-provider-http') -const PollingBlockTracker = require('eth-block-tracker') - -const provider = new HttpProvider('https://mainnet.infura.io') +const PollingBlockTracker = require('./src/polling') const blockTracker = new PollingBlockTracker({pollingInterval : 600000}) blockTracker.on('latest', console.log) ``` ### methods -##### new PollingBlockTracker({ provider, pollingInterval, retryTimeout, keepEventLoopActive }) +##### new PollingBlockTracker({ pollingInterval, retryTimeout, keepEventLoopActive }) creates a new block tracker with BlockCypher as a data source and `pollingInterval` (ms) timeout between polling for the latest block. From 65cfb2e9dbae9be7045f5cb1bf984225a19bf3e0 Mon Sep 17 00:00:00 2001 From: Collin Chin Date: Thu, 28 Mar 2019 17:27:53 -0700 Subject: [PATCH 4/5] remove comments --- example.js | 4 ---- src/polling.js | 16 +--------------- 2 files changed, 1 insertion(+), 19 deletions(-) diff --git a/example.js b/example.js index d2e9a44e..fca26581 100644 --- a/example.js +++ b/example.js @@ -1,9 +1,5 @@ -const createInfuraProvider = require('eth-json-rpc-infura/src/createProvider') const PollingBlockTracker = require('./src/polling') - -const provider = createInfuraProvider({ network: 'mainnet' }) -// const blockTracker = new PollingBlockTracker({ provider }) const blockTracker = new PollingBlockTracker(); blockTracker.on('sync', ({ newBlock, oldBlock }) => { diff --git a/src/polling.js b/src/polling.js index 35c664c9..614e888e 100644 --- a/src/polling.js +++ b/src/polling.js @@ -1,6 +1,5 @@ const BaseBlockTracker = require('./base') const axios = require('axios') -// const bcypher = require('blockcypher'); const sec = 1000 @@ -8,7 +7,6 @@ class PollingBlockTracker extends BaseBlockTracker { constructor(opts = {}) { // parse + validate args - // if (!opts.provider) throw new Error('PollingBlockTracker - no provider specified.') const pollingInterval = opts.pollingInterval || 20 * sec const retryTimeout = opts.retryTimeout || pollingInterval / 10 const keepEventLoopActive = opts.keepEventLoopActive !== undefined ? opts.keepEventLoopActive : true @@ -67,22 +65,10 @@ class PollingBlockTracker extends BaseBlockTracker { } async _fetchLatestBlock() { - // let bcapi = new bcypher('btc', 'main', 'e5ae43f99a9847aea3cb6b4d8ff9e59d'); - // function printResponse(err, data) { - // if (err != null) { - // console.log(err); - // } else { - - // console.log(data); - // } - // } - // const req = { id: 1, method: 'eth_blockNumber', params: [] } if (this._setSkipCacheFlag) req.skipCache = true - // const res = await pify((cb) => this._provider.sendAsync(req, cb))() const res = await axios.get('https://api.blockcypher.com/v1/btc/main') - // console.log(res.data); if (res.error) throw new Error(`PollingBlockTracker - encountered error fetching block:\n${res.error}`) - return res.data.height + return res.data.height; } } From c3ece1cdeef893d92d804875f819275387704e39 Mon Sep 17 00:00:00 2001 From: Collin Chin Date: Mon, 1 Apr 2019 14:48:41 -0700 Subject: [PATCH 5/5] refactor repo for publish --- .babelrc | 2 +- CHANGELOG.md | 5 +++++ circle.yml | 3 --- package-lock.json | 15 ++++++++++++--- package.json | 27 ++++++++++++--------------- src/base.js | 1 - 6 files changed, 30 insertions(+), 23 deletions(-) delete mode 100644 circle.yml diff --git a/.babelrc b/.babelrc index b2543e0f..576891a6 100644 --- a/.babelrc +++ b/.babelrc @@ -3,5 +3,5 @@ "targets": { "uglify": true } - }]] + }]], } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index e390989c..2ef7f449 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ + +### 1.0.0 +Rewritten to use Blockcypher API requests to poll for new blocks. Name changed to `btc-block-tracker`. + +# eth-block-tracker ### 4.0.0 Significant rewrite of `eth-block-tracker`. Primary reason was optimizing network IO. diff --git a/circle.yml b/circle.yml deleted file mode 100644 index b904835a..00000000 --- a/circle.yml +++ /dev/null @@ -1,3 +0,0 @@ -machine: - node: - version: 7.7.3 diff --git a/package-lock.json b/package-lock.json index 42debb43..3f0c027d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -772,6 +772,15 @@ "regenerator-transform": "^0.10.0" } }, + "babel-plugin-transform-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", + "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, "babel-plugin-transform-strict-mode": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", @@ -10790,9 +10799,9 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, "posix-character-classes": { "version": "0.1.1", diff --git a/package.json b/package.json index 4c8ad138..3fa305c6 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,31 @@ { - "name": "eth-block-tracker", - "version": "4.3.0", - "description": "A block tracker for the Ethereum blockchain. Keeps track of the latest block.", + "name": "btc-block-tracker", + "version": "1.0.0", + "description": "A block tracker for the Bitcoin blockchain. Keeps track of the latest block.", "main": "src/polling.js", "scripts": { "test": "npm run build && node test/index.js", "prepublishOnly": "npm run build", - "build": "npm run build:clean && npm run build:es5 && npm run build:bundle && npm run build:validate", + "build": "npm run build:clean && npm run build:bundle", "build:clean": "rm -rf ./dist && mkdir -p ./dist", - "build:es5": "babel ./src -d dist/es5/", "build:bundle": "npm run build:bundle:polling && npm run build:bundle:base", - "build:bundle:polling": "browserify -s PollingBlockTracker -e src/polling.js -g babelify > dist/PollingBlockTracker.js", - "build:bundle:base": "browserify -s BaseBlockTracker -e src/base.js -g babelify > dist/BaseBlockTracker.js", - "build:validate": "uglifyjs dist/es5/**.js > /dev/null" + "build:bundle:polling": "browserify -s PollingBlockTracker -e src/polling.js > dist/PollingBlockTracker.js", + "build:bundle:base": "browserify -s BaseBlockTracker -e src/base.js > dist/BaseBlockTracker.js" }, - "author": "kumavis", + "authors": ["collinc97","kumavis"], "license": "MIT", "dependencies": { "axios": "^0.18.0", "blockcypher": "^0.2.0", - "eth-query": "^2.1.0", + "pify": "^4.0.1", "safe-event-emitter": "^1.0.1" }, "devDependencies": { "babel-cli": "^6.24.1", + "babel-plugin-transform-runtime": "^6.23.0", "babel-preset-env": "^1.7.0", "babelify": "^8.0.0", "browserify": "^16.2.3", - "eth-json-rpc-infura": "^3.1.2", - "ganache-core": "^2.2.1", "tape": "^4.9.0", "uglify-js": "^3.4.10" }, @@ -37,10 +34,10 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/kumavis/eth-block-tracker.git" + "url": "git+https://github.com/collinc97/btc-block-tracker.git" }, "bugs": { - "url": "https://github.com/kumavis/eth-block-tracker/issues" + "url": "https://github.com/collinc97/btc-block-tracker/issues" }, - "homepage": "https://github.com/kumavis/eth-block-tracker#readme" + "homepage": "https://github.com/collinc97/btc-block-tracker#readme" } diff --git a/src/base.js b/src/base.js index 02c46848..20c6c311 100644 --- a/src/base.js +++ b/src/base.js @@ -1,4 +1,3 @@ -const EthQuery = require('eth-query') const SafeEventEmitter = require('safe-event-emitter') const sec = 1000