@rosen-bridge/bitcoin-scanner 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/network/BitcoinRpcNetwork.js +2 -2
- package/dist/network/DogeRpcNetwork.js +2 -2
- package/dist/network/EsploraNetwork.js +2 -2
- package/package.json +12 -5
- package/.eslintignore +0 -1
- package/lib/index.ts +0 -8
- package/lib/network/BitcoinRpcNetwork.ts +0 -111
- package/lib/network/DogeRpcNetwork.ts +0 -112
- package/lib/network/EsploraNetwork.ts +0 -92
- package/lib/scanner/BitcoinEsploraScanner.ts +0 -15
- package/lib/scanner/BitcoinRpcScanner.ts +0 -16
- package/lib/scanner/DogeEsploraScanner.ts +0 -15
- package/lib/scanner/DogeRpcScanner.ts +0 -16
- package/lib/types.ts +0 -155
- package/tests/bitcoinEsploraTestData.ts +0 -1773
- package/tests/bitcoinRpcTestData.ts +0 -305
- package/tests/dogeRpcTestData.ts +0 -659
- package/tests/mocked/axiosEsplora.mock.ts +0 -28
- package/tests/mocked/axiosRpc.mock.ts +0 -28
- package/tests/network/BitcoinRpcNetwork.spec.ts +0 -112
- package/tests/network/DogeRpcNetwork.spec.ts +0 -111
- package/tests/network/EsploraNetwork.spec.ts +0 -106
- package/tsconfig.build.json +0 -11
- package/tsconfig.build.tsbuildinfo +0 -1
- package/tsconfig.json +0 -12
- package/vitest.config.ts +0 -18
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @rosen-bridge/bitcoin-scanner
|
|
2
2
|
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Use @rosen-clients/rate-limited-axios instead of @rosen-bridge/rate-limited-axios
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Update dependencies
|
|
12
|
+
- @rosen-bridge/abstract-scanner@0.2.0
|
|
13
|
+
|
|
3
14
|
## 0.1.0
|
|
4
15
|
|
|
5
16
|
- This package was **integrated** from `@rosen-bridge/bitcoin-esplora-scanner` and `@rosen-bridge/bitcoin-rpc-scanner`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import axios from '@rosen-
|
|
1
|
+
import axios from '@rosen-clients/rate-limited-axios';
|
|
2
2
|
import { AbstractNetworkConnector, } from '@rosen-bridge/scanner-interfaces';
|
|
3
3
|
import { randomBytes } from 'crypto';
|
|
4
4
|
export class BitcoinRpcNetwork extends AbstractNetworkConnector {
|
|
@@ -85,4 +85,4 @@ export class BitcoinRpcNetwork extends AbstractNetworkConnector {
|
|
|
85
85
|
return blockTxs;
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQml0Y29pblJwY05ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbmV0d29yay9CaXRjb2luUnBjTmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQWdCLE1BQU0sbUNBQW1DLENBQUM7QUFDakUsT0FBTyxFQUNMLHdCQUF3QixHQUV6QixNQUFNLGtDQUFrQyxDQUFDO0FBRzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFckMsTUFBTSxPQUFPLGlCQUFrQixTQUFRLHdCQUErQztJQUNuRSxHQUFHLENBQVM7SUFDWixPQUFPLENBQVM7SUFDekIsTUFBTSxDQUFRO0lBRXRCLFlBQ0UsR0FBVyxFQUNYLE9BQWUsRUFDZixJQUdDO1FBRUQsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRTtZQUMvQyxJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFOzs7O09BSUc7SUFDSCxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsTUFBYyxFQUFrQixFQUFFO1FBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFDLG9DQUFvQztRQUNwQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWdCLEVBQUUsRUFBRTtZQUNsRSxNQUFNLEVBQUUsY0FBYztZQUN0QixFQUFFLEVBQUUsU0FBUztZQUNiLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUNqQixDQUFDLENBQUM7UUFDSCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssU0FBUztZQUN6QyxNQUFNLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUMscUNBQXFDO1FBQ3JDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBZ0IsRUFBRSxFQUFFO1lBQ3BFLE1BQU0sRUFBRSxnQkFBZ0I7WUFDeEIsRUFBRSxFQUFFLFNBQVM7WUFDYixNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO1NBQzFCLENBQUMsQ0FBQztRQUNILElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTO1lBQzNDLE1BQU0sS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDM0UsTUFBTSxXQUFXLEdBQWdCLG1CQUFtQixDQUFDLElBQUk7YUFDdEQsTUFBcUIsQ0FBQztRQUN6QixPQUFPO1lBQ0wsVUFBVSxFQUFFLFdBQVcsQ0FBQyxpQkFBaUI7WUFDekMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO1lBQ3RCLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTTtZQUMxQixTQUFTLEVBQUUsV0FBVyxDQUFDLElBQUk7WUFDM0IsT0FBTyxFQUFFLFdBQVcsQ0FBQyxHQUFHO1NBQ3pCLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxnQkFBZ0IsR0FBRyxLQUFLLElBQXFCLEVBQUU7UUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBZ0IsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sRUFBRSxtQkFBbUI7WUFDM0IsRUFBRSxFQUFFLFFBQVE7WUFDWixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUTtZQUM3QixNQUFNLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQzNFLE9BQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUE2QixDQUFDLE1BQU0sQ0FBQztJQUMzRCxDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsV0FBVyxHQUFHLEtBQUssRUFDakIsU0FBaUIsRUFDc0IsRUFBRTtRQUN6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWdCLEVBQUUsRUFBRTtZQUNsRSxNQUFNLEVBQUUsVUFBVTtZQUNsQixFQUFFLEVBQUUsUUFBUTtZQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxtRUFBbUU7U0FDNUYsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVE7WUFDeEMsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMzRSxNQUFNLFFBQVEsR0FDWixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFDeEIsQ0FBQyxFQUFFLENBQUM7UUFFTCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcywgeyBBeGlvcyB9IGZyb20gJ0Byb3Nlbi1jbGllbnRzL3JhdGUtbGltaXRlZC1heGlvcyc7XG5pbXBvcnQge1xuICBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3IsXG4gIEJsb2NrLFxufSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBCaXRjb2luUnBjVHJhbnNhY3Rpb24sIEJsb2NrSGVhZGVyLCBKc29uUnBjUmVzdWx0IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5cbmV4cG9ydCBjbGFzcyBCaXRjb2luUnBjTmV0d29yayBleHRlbmRzIEFic3RyYWN0TmV0d29ya0Nvbm5lY3RvcjxCaXRjb2luUnBjVHJhbnNhY3Rpb24+IHtcbiAgcHJpdmF0ZSByZWFkb25seSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB0aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgY2xpZW50OiBBeGlvcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICB1cmw6IHN0cmluZyxcbiAgICB0aW1lb3V0OiBudW1iZXIsXG4gICAgYXV0aD86IHtcbiAgICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgICBwYXNzd29yZDogc3RyaW5nO1xuICAgIH0sXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgICB0aGlzLmNsaWVudCA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICBiYXNlVVJMOiB0aGlzLnVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYXV0aDogYXV0aCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVSYW5kb21JZCA9ICgpID0+IHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYmxvY2sgYXQgaGVpZ2h0XG4gICAqIEBwYXJhbSBoZWlnaHRcbiAgICogQHJldHVybnMgQmxvY2tcbiAgICovXG4gIGdldEJsb2NrQXRIZWlnaHQgPSBhc3luYyAoaGVpZ2h0OiBudW1iZXIpOiBQcm9taXNlPEJsb2NrPiA9PiB7XG4gICAgY29uc3QgcmFuZG9tSWQxID0gdGhpcy5nZW5lcmF0ZVJhbmRvbUlkKCk7XG4gICAgLy8gZ2V0IGJsb2NrIGhhc2ggdXNpbmcgYmxvY2sgaGVpZ2h0XG4gICAgY29uc3QgYmxvY2tIYXNoUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PEpzb25ScGNSZXN1bHQ+KCcnLCB7XG4gICAgICBtZXRob2Q6ICdnZXRibG9ja2hhc2gnLFxuICAgICAgaWQ6IHJhbmRvbUlkMSxcbiAgICAgIHBhcmFtczogW2hlaWdodF0sXG4gICAgfSk7XG4gICAgaWYgKGJsb2NrSGFzaFJlc3BvbnNlLmRhdGEuaWQgIT09IHJhbmRvbUlkMSlcbiAgICAgIHRocm93IEVycm9yKGBVbmV4cGVjdGVkQmVoYXZpb3I6IFJlcXVlc3QgYW5kIHJlc3BvbnNlIGlkIGFyZSBkaWZmZXJlbnRgKTtcbiAgICBjb25zdCBibG9ja0hhc2ggPSBibG9ja0hhc2hSZXNwb25zZS5kYXRhLnJlc3VsdDtcblxuICAgIGNvbnN0IHJhbmRvbUlkMiA9IHRoaXMuZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgIC8vIGdldCBibG9jayBoZWFkZXJzIHVzaW5nIGJsb2NrIGhhc2hcbiAgICBjb25zdCBibG9ja0hlYWRlclJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxKc29uUnBjUmVzdWx0PignJywge1xuICAgICAgbWV0aG9kOiAnZ2V0YmxvY2toZWFkZXInLFxuICAgICAgaWQ6IHJhbmRvbUlkMixcbiAgICAgIHBhcmFtczogW2Jsb2NrSGFzaCwgdHJ1ZV0sXG4gICAgfSk7XG4gICAgaWYgKGJsb2NrSGVhZGVyUmVzcG9uc2UuZGF0YS5pZCAhPT0gcmFuZG9tSWQyKVxuICAgICAgdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWRCZWhhdmlvcjogUmVxdWVzdCBhbmQgcmVzcG9uc2UgaWQgYXJlIGRpZmZlcmVudGApO1xuICAgIGNvbnN0IGJsb2NrSGVhZGVyOiBCbG9ja0hlYWRlciA9IGJsb2NrSGVhZGVyUmVzcG9uc2UuZGF0YVxuICAgICAgLnJlc3VsdCBhcyBCbG9ja0hlYWRlcjtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50SGFzaDogYmxvY2tIZWFkZXIucHJldmlvdXNibG9ja2hhc2gsXG4gICAgICBoYXNoOiBibG9ja0hlYWRlci5oYXNoLFxuICAgICAgaGVpZ2h0OiBibG9ja0hlYWRlci5oZWlnaHQsXG4gICAgICB0aW1lc3RhbXA6IGJsb2NrSGVhZGVyLnRpbWUsXG4gICAgICB0eENvdW50OiBibG9ja0hlYWRlci5uVHgsXG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBjdXJyZW50IG5ldHdvcmsgaGVpZ2h0XG4gICAqIEByZXR1cm5zIGN1cnJlbnQgaGVpZ2h0XG4gICAqL1xuICBnZXRDdXJyZW50SGVpZ2h0ID0gYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgY29uc3QgcmFuZG9tSWQgPSB0aGlzLmdlbmVyYXRlUmFuZG9tSWQoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PEpzb25ScGNSZXN1bHQ+KCcnLCB7XG4gICAgICBtZXRob2Q6ICdnZXRibG9ja2NoYWluaW5mbycsXG4gICAgICBpZDogcmFuZG9tSWQsXG4gICAgICBwYXJhbXM6IFtdLFxuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZGF0YS5pZCAhPT0gcmFuZG9tSWQpXG4gICAgICB0aHJvdyBFcnJvcihgVW5leHBlY3RlZEJlaGF2aW9yOiBSZXF1ZXN0IGFuZCByZXNwb25zZSBpZCBhcmUgZGlmZmVyZW50YCk7XG4gICAgcmV0dXJuIChyZXN1bHQuZGF0YS5yZXN1bHQgYXMgeyBibG9ja3M6IG51bWJlciB9KS5ibG9ja3M7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiB0cmFuc2FjdGlvbnMgaW4gYSBibG9jayB3aXRoIHNwZWNpZmllZCBoYXNoXG4gICAqIEBwYXJhbSBibG9ja0hhc2hcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldEJsb2NrVHhzID0gYXN5bmMgKFxuICAgIGJsb2NrSGFzaDogc3RyaW5nLFxuICApOiBQcm9taXNlPEFycmF5PEJpdGNvaW5ScGNUcmFuc2FjdGlvbj4+ID0+IHtcbiAgICBjb25zdCByYW5kb21JZCA9IHRoaXMuZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgIGNvbnN0IGJsb2NrSGFzaFJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxKc29uUnBjUmVzdWx0PignJywge1xuICAgICAgbWV0aG9kOiAnZ2V0YmxvY2snLFxuICAgICAgaWQ6IHJhbmRvbUlkLFxuICAgICAgcGFyYW1zOiBbYmxvY2tIYXNoLCAyXSwgLy8gdmVyYm9zaXR5IHNob3VsZCBiZSAyIGluIG9yZGVyIHRvIHJldHJpZXZlIGZ1bGwgdHJhbnNhY3Rpb24gaW5mb1xuICAgIH0pO1xuICAgIGlmIChibG9ja0hhc2hSZXNwb25zZS5kYXRhLmlkICE9PSByYW5kb21JZClcbiAgICAgIHRocm93IEVycm9yKGBVbmV4cGVjdGVkQmVoYXZpb3I6IFJlcXVlc3QgYW5kIHJlc3BvbnNlIGlkIGFyZSBkaWZmZXJlbnRgKTtcbiAgICBjb25zdCBibG9ja1R4cyA9IChcbiAgICAgIGJsb2NrSGFzaFJlc3BvbnNlLmRhdGEucmVzdWx0IGFzIHsgdHg6IEFycmF5PEJpdGNvaW5ScGNUcmFuc2FjdGlvbj4gfVxuICAgICkudHg7XG5cbiAgICByZXR1cm4gYmxvY2tUeHM7XG4gIH07XG59XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import axios from '@rosen-
|
|
1
|
+
import axios from '@rosen-clients/rate-limited-axios';
|
|
2
2
|
import { AbstractNetworkConnector, } from '@rosen-bridge/scanner-interfaces';
|
|
3
3
|
import { randomBytes } from 'crypto';
|
|
4
4
|
export class DogeRpcNetwork extends AbstractNetworkConnector {
|
|
@@ -85,4 +85,4 @@ export class DogeRpcNetwork extends AbstractNetworkConnector {
|
|
|
85
85
|
return blockTxs;
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG9nZVJwY05ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbmV0d29yay9Eb2dlUnBjTmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQWdCLE1BQU0sbUNBQW1DLENBQUM7QUFDakUsT0FBTyxFQUNMLHdCQUF3QixHQUV6QixNQUFNLGtDQUFrQyxDQUFDO0FBRzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFckMsTUFBTSxPQUFPLGNBQWUsU0FBUSx3QkFBNEM7SUFDN0QsR0FBRyxDQUFTO0lBQ1osT0FBTyxDQUFTO0lBQ3pCLE1BQU0sQ0FBUTtJQUV0QixZQUNFLEdBQVcsRUFDWCxPQUFlLEVBQ2YsSUFHQztRQUVELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDekIsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7WUFDL0MsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRTs7OztPQUlHO0lBQ0gsZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLE1BQWMsRUFBa0IsRUFBRTtRQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQyxvQ0FBb0M7UUFDcEMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFnQixFQUFFLEVBQUU7WUFDbEUsTUFBTSxFQUFFLGNBQWM7WUFDdEIsRUFBRSxFQUFFLFNBQVM7WUFDYixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVM7WUFDekMsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMzRSxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRWhELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFDLHFDQUFxQztRQUNyQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWdCLEVBQUUsRUFBRTtZQUNyRSxNQUFNLEVBQUUsVUFBVTtZQUNsQixFQUFFLEVBQUUsU0FBUztZQUNiLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVM7WUFDNUMsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMzRSxNQUFNLFlBQVksR0FBcUIsb0JBQW9CLENBQUMsSUFBSTthQUM3RCxNQUEwQixDQUFDO1FBRTlCLE9BQU87WUFDTCxVQUFVLEVBQUUsWUFBWSxDQUFDLGlCQUFpQjtZQUMxQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDdkIsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQzNCLFNBQVMsRUFBRSxZQUFZLENBQUMsSUFBSTtZQUM1QixPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNO1NBQ2hDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxnQkFBZ0IsR0FBRyxLQUFLLElBQXFCLEVBQUU7UUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBZ0IsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sRUFBRSxtQkFBbUI7WUFDM0IsRUFBRSxFQUFFLFFBQVE7WUFDWixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUTtZQUM3QixNQUFNLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQzNFLE9BQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUE2QixDQUFDLE1BQU0sQ0FBQztJQUMzRCxDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsV0FBVyxHQUFHLEtBQUssRUFDakIsU0FBaUIsRUFDbUIsRUFBRTtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWdCLEVBQUUsRUFBRTtZQUNsRSxNQUFNLEVBQUUsVUFBVTtZQUNsQixFQUFFLEVBQUUsUUFBUTtZQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxtRUFBbUU7U0FDNUYsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVE7WUFDeEMsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMzRSxNQUFNLFFBQVEsR0FDWixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFDeEIsQ0FBQyxFQUFFLENBQUM7UUFFTCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcywgeyBBeGlvcyB9IGZyb20gJ0Byb3Nlbi1jbGllbnRzL3JhdGUtbGltaXRlZC1heGlvcyc7XG5pbXBvcnQge1xuICBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3IsXG4gIEJsb2NrLFxufSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBEb2dlUnBjVHJhbnNhY3Rpb24sIEpzb25ScGNSZXN1bHQsIERvZ2VCbG9ja1N1bW1hcnkgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuZXhwb3J0IGNsYXNzIERvZ2VScGNOZXR3b3JrIGV4dGVuZHMgQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yPERvZ2VScGNUcmFuc2FjdGlvbj4ge1xuICBwcml2YXRlIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBjbGllbnQ6IEF4aW9zO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHVybDogc3RyaW5nLFxuICAgIHRpbWVvdXQ6IG51bWJlcixcbiAgICBhdXRoPzoge1xuICAgICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgfSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICAgIHRoaXMuY2xpZW50ID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IHRoaXMudXJsLFxuICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBhdXRoOiBhdXRoLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVJhbmRvbUlkID0gKCkgPT4gcmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAvKipcbiAgICogUmV0dXJucyBibG9jayBhdCBoZWlnaHRcbiAgICogQHBhcmFtIGhlaWdodFxuICAgKiBAcmV0dXJucyBCbG9ja1xuICAgKi9cbiAgZ2V0QmxvY2tBdEhlaWdodCA9IGFzeW5jIChoZWlnaHQ6IG51bWJlcik6IFByb21pc2U8QmxvY2s+ID0+IHtcbiAgICBjb25zdCByYW5kb21JZDEgPSB0aGlzLmdlbmVyYXRlUmFuZG9tSWQoKTtcbiAgICAvLyBnZXQgYmxvY2sgaGFzaCB1c2luZyBibG9jayBoZWlnaHRcbiAgICBjb25zdCBibG9ja0hhc2hSZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3Q8SnNvblJwY1Jlc3VsdD4oJycsIHtcbiAgICAgIG1ldGhvZDogJ2dldGJsb2NraGFzaCcsXG4gICAgICBpZDogcmFuZG9tSWQxLFxuICAgICAgcGFyYW1zOiBbaGVpZ2h0XSxcbiAgICB9KTtcbiAgICBpZiAoYmxvY2tIYXNoUmVzcG9uc2UuZGF0YS5pZCAhPT0gcmFuZG9tSWQxKVxuICAgICAgdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWRCZWhhdmlvcjogUmVxdWVzdCBhbmQgcmVzcG9uc2UgaWQgYXJlIGRpZmZlcmVudGApO1xuICAgIGNvbnN0IGJsb2NrSGFzaCA9IGJsb2NrSGFzaFJlc3BvbnNlLmRhdGEucmVzdWx0O1xuXG4gICAgY29uc3QgcmFuZG9tSWQyID0gdGhpcy5nZW5lcmF0ZVJhbmRvbUlkKCk7XG4gICAgLy8gZ2V0IGJsb2NrIGhlYWRlcnMgdXNpbmcgYmxvY2sgaGFzaFxuICAgIGNvbnN0IGJsb2NrU3VtbWFyeVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxKc29uUnBjUmVzdWx0PignJywge1xuICAgICAgbWV0aG9kOiAnZ2V0YmxvY2snLFxuICAgICAgaWQ6IHJhbmRvbUlkMixcbiAgICAgIHBhcmFtczogW2Jsb2NrSGFzaCwgMV0sXG4gICAgfSk7XG4gICAgaWYgKGJsb2NrU3VtbWFyeVJlc3BvbnNlLmRhdGEuaWQgIT09IHJhbmRvbUlkMilcbiAgICAgIHRocm93IEVycm9yKGBVbmV4cGVjdGVkQmVoYXZpb3I6IFJlcXVlc3QgYW5kIHJlc3BvbnNlIGlkIGFyZSBkaWZmZXJlbnRgKTtcbiAgICBjb25zdCBibG9ja1N1bW1hcnk6IERvZ2VCbG9ja1N1bW1hcnkgPSBibG9ja1N1bW1hcnlSZXNwb25zZS5kYXRhXG4gICAgICAucmVzdWx0IGFzIERvZ2VCbG9ja1N1bW1hcnk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50SGFzaDogYmxvY2tTdW1tYXJ5LnByZXZpb3VzYmxvY2toYXNoLFxuICAgICAgaGFzaDogYmxvY2tTdW1tYXJ5Lmhhc2gsXG4gICAgICBoZWlnaHQ6IGJsb2NrU3VtbWFyeS5oZWlnaHQsXG4gICAgICB0aW1lc3RhbXA6IGJsb2NrU3VtbWFyeS50aW1lLFxuICAgICAgdHhDb3VudDogYmxvY2tTdW1tYXJ5LnR4Lmxlbmd0aCxcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGN1cnJlbnQgbmV0d29yayBoZWlnaHRcbiAgICogQHJldHVybnMgY3VycmVudCBoZWlnaHRcbiAgICovXG4gIGdldEN1cnJlbnRIZWlnaHQgPSBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICBjb25zdCByYW5kb21JZCA9IHRoaXMuZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3Q8SnNvblJwY1Jlc3VsdD4oJycsIHtcbiAgICAgIG1ldGhvZDogJ2dldGJsb2NrY2hhaW5pbmZvJyxcbiAgICAgIGlkOiByYW5kb21JZCxcbiAgICAgIHBhcmFtczogW10sXG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5kYXRhLmlkICE9PSByYW5kb21JZClcbiAgICAgIHRocm93IEVycm9yKGBVbmV4cGVjdGVkQmVoYXZpb3I6IFJlcXVlc3QgYW5kIHJlc3BvbnNlIGlkIGFyZSBkaWZmZXJlbnRgKTtcbiAgICByZXR1cm4gKHJlc3VsdC5kYXRhLnJlc3VsdCBhcyB7IGJsb2NrczogbnVtYmVyIH0pLmJsb2NrcztcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJuIHRyYW5zYWN0aW9ucyBpbiBhIGJsb2NrIHdpdGggc3BlY2lmaWVkIGhhc2hcbiAgICogQHBhcmFtIGJsb2NrSGFzaFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QmxvY2tUeHMgPSBhc3luYyAoXG4gICAgYmxvY2tIYXNoOiBzdHJpbmcsXG4gICk6IFByb21pc2U8QXJyYXk8RG9nZVJwY1RyYW5zYWN0aW9uPj4gPT4ge1xuICAgIGNvbnN0IHJhbmRvbUlkID0gdGhpcy5nZW5lcmF0ZVJhbmRvbUlkKCk7XG4gICAgY29uc3QgYmxvY2tIYXNoUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PEpzb25ScGNSZXN1bHQ+KCcnLCB7XG4gICAgICBtZXRob2Q6ICdnZXRibG9jaycsXG4gICAgICBpZDogcmFuZG9tSWQsXG4gICAgICBwYXJhbXM6IFtibG9ja0hhc2gsIDJdLCAvLyB2ZXJib3NpdHkgc2hvdWxkIGJlIDIgaW4gb3JkZXIgdG8gcmV0cmlldmUgZnVsbCB0cmFuc2FjdGlvbiBpbmZvXG4gICAgfSk7XG4gICAgaWYgKGJsb2NrSGFzaFJlc3BvbnNlLmRhdGEuaWQgIT09IHJhbmRvbUlkKVxuICAgICAgdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWRCZWhhdmlvcjogUmVxdWVzdCBhbmQgcmVzcG9uc2UgaWQgYXJlIGRpZmZlcmVudGApO1xuICAgIGNvbnN0IGJsb2NrVHhzID0gKFxuICAgICAgYmxvY2tIYXNoUmVzcG9uc2UuZGF0YS5yZXN1bHQgYXMgeyB0eDogQXJyYXk8RG9nZVJwY1RyYW5zYWN0aW9uPiB9XG4gICAgKS50eDtcblxuICAgIHJldHVybiBibG9ja1R4cztcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import axios from '@rosen-
|
|
1
|
+
import axios from '@rosen-clients/rate-limited-axios';
|
|
2
2
|
import { AbstractNetworkConnector, } from '@rosen-bridge/scanner-interfaces';
|
|
3
3
|
export class EsploraNetwork extends AbstractNetworkConnector {
|
|
4
4
|
url;
|
|
@@ -61,4 +61,4 @@ export class EsploraNetwork extends AbstractNetworkConnector {
|
|
|
61
61
|
return blockTxs;
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXNwbG9yYU5ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbmV0d29yay9Fc3Bsb3JhTmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQWdCLE1BQU0sbUNBQW1DLENBQUM7QUFDakUsT0FBTyxFQUNMLHdCQUF3QixHQUV6QixNQUFNLGtDQUFrQyxDQUFDO0FBRzFDLE1BQU0sT0FBTyxjQUFlLFNBQVEsd0JBQW1EO0lBQ3BFLEdBQUcsQ0FBUztJQUNaLE9BQU8sQ0FBUztJQUNoQix1QkFBdUIsR0FBRyxFQUFFLENBQUM7SUFDdEMsTUFBTSxDQUFRO0lBQ2QsU0FBUyxDQUFTO0lBRTFCLFlBQVksR0FBVyxFQUFFLE9BQWUsRUFBRSxTQUFrQjtRQUMxRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRztZQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1NBQ2hELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdCQUFnQixHQUFHLEtBQUssRUFBRSxNQUFjLEVBQWtCLEVBQUU7UUFDMUQsb0NBQW9DO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLENBQ2hCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxpQkFBaUIsTUFBTSxFQUFFLENBQUMsQ0FDMUUsQ0FBQyxJQUFJLENBQUM7UUFFUCxxQ0FBcUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsQ0FDbEIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDbkIsR0FBRyxJQUFJLENBQUMsU0FBUyxVQUFVLFNBQVMsRUFBRSxDQUN2QyxDQUNGLENBQUMsSUFBSSxDQUFDO1FBQ1AsT0FBTztZQUNMLFVBQVUsRUFBRSxXQUFXLENBQUMsaUJBQWlCO1lBQ3pDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRTtZQUNwQixNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU07WUFDMUIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO1lBQ2hDLE9BQU8sRUFBRSxXQUFXLENBQUMsUUFBUTtTQUM5QixDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsZ0JBQWdCLEdBQUcsR0FBb0IsRUFBRTtRQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNO2FBQ2YsR0FBRyxDQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsb0JBQW9CLENBQUM7YUFDbEQsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILFdBQVcsR0FBRyxLQUFLLEVBQ2pCLFNBQWlCLEVBQzBCLEVBQUU7UUFDN0MsTUFBTSxPQUFPLEdBQUcsQ0FDZCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNuQixHQUFHLElBQUksQ0FBQyxTQUFTLFVBQVUsU0FBUyxFQUFFLENBQ3ZDLENBQ0YsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRWhCLE1BQU0sUUFBUSxHQUFxQyxFQUFFLENBQUM7UUFDdEQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsT0FBTyxNQUFNLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDeEIsTUFBTSxHQUFHLEdBQUcsQ0FDVixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNuQixHQUFHLElBQUksQ0FBQyxTQUFTLFVBQVUsU0FBUyxRQUFRLE1BQU0sRUFBRSxDQUNyRCxDQUNGLENBQUMsSUFBSSxDQUFDO1lBQ1AsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zLCB7IEF4aW9zIH0gZnJvbSAnQHJvc2VuLWNsaWVudHMvcmF0ZS1saW1pdGVkLWF4aW9zJztcbmltcG9ydCB7XG4gIEFic3RyYWN0TmV0d29ya0Nvbm5lY3RvcixcbiAgQmxvY2ssXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJpdGNvaW5Fc3Bsb3JhVHJhbnNhY3Rpb24sIEVzcGxvcmFCbG9jayB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEVzcGxvcmFOZXR3b3JrIGV4dGVuZHMgQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yPEJpdGNvaW5Fc3Bsb3JhVHJhbnNhY3Rpb24+IHtcbiAgcHJpdmF0ZSByZWFkb25seSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB0aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgRVNQTE9SQV9CTE9DS19UWFNfTElNSVQgPSAyNTtcbiAgcHJpdmF0ZSBjbGllbnQ6IEF4aW9zO1xuICBwcml2YXRlIGFwaVByZWZpeDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHVybDogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIsIGFwaVByZWZpeD86IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgICB0aGlzLmNsaWVudCA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICBiYXNlVVJMOiB0aGlzLnVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIH0pO1xuICAgIHRoaXMuYXBpUHJlZml4ID0gYXBpUHJlZml4IHx8ICcvYXBpJztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGJsb2NrIGF0IGhlaWdodFxuICAgKiBAcGFyYW0gaGVpZ2h0XG4gICAqIEByZXR1cm5zIEJsb2NrXG4gICAqL1xuICBnZXRCbG9ja0F0SGVpZ2h0ID0gYXN5bmMgKGhlaWdodDogbnVtYmVyKTogUHJvbWlzZTxCbG9jaz4gPT4ge1xuICAgIC8vIGdldCBibG9jayBoYXNoIHVzaW5nIGJsb2NrIGhlaWdodFxuICAgIGNvbnN0IGJsb2NrSGFzaCA9IChcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmdldDxzdHJpbmc+KGAke3RoaXMuYXBpUHJlZml4fS9ibG9jay1oZWlnaHQvJHtoZWlnaHR9YClcbiAgICApLmRhdGE7XG5cbiAgICAvLyBnZXQgYmxvY2sgaGVhZGVycyB1c2luZyBibG9jayBoYXNoXG4gICAgY29uc3QgYmxvY2tIZWFkZXIgPSAoXG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5nZXQ8RXNwbG9yYUJsb2NrPihcbiAgICAgICAgYCR7dGhpcy5hcGlQcmVmaXh9L2Jsb2NrLyR7YmxvY2tIYXNofWAsXG4gICAgICApXG4gICAgKS5kYXRhO1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnRIYXNoOiBibG9ja0hlYWRlci5wcmV2aW91c2Jsb2NraGFzaCxcbiAgICAgIGhhc2g6IGJsb2NrSGVhZGVyLmlkLFxuICAgICAgaGVpZ2h0OiBibG9ja0hlYWRlci5oZWlnaHQsXG4gICAgICB0aW1lc3RhbXA6IGJsb2NrSGVhZGVyLnRpbWVzdGFtcCxcbiAgICAgIHR4Q291bnQ6IGJsb2NrSGVhZGVyLnR4X2NvdW50LFxuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY3VycmVudCBuZXR3b3JrIGhlaWdodFxuICAgKiBAcmV0dXJucyBjdXJyZW50IGhlaWdodFxuICAgKi9cbiAgZ2V0Q3VycmVudEhlaWdodCA9ICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAgIHJldHVybiB0aGlzLmNsaWVudFxuICAgICAgLmdldDxudW1iZXI+KGAke3RoaXMuYXBpUHJlZml4fS9ibG9ja3MvdGlwL2hlaWdodGApXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuZGF0YSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiB0cmFuc2FjdGlvbnMgaW4gYSBibG9jayB3aXRoIHNwZWNpZmllZCBoYXNoXG4gICAqIEBwYXJhbSBibG9ja0hhc2hcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldEJsb2NrVHhzID0gYXN5bmMgKFxuICAgIGJsb2NrSGFzaDogc3RyaW5nLFxuICApOiBQcm9taXNlPEFycmF5PEJpdGNvaW5Fc3Bsb3JhVHJhbnNhY3Rpb24+PiA9PiB7XG4gICAgY29uc3QgdHhDb3VudCA9IChcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmdldDxFc3Bsb3JhQmxvY2s+KFxuICAgICAgICBgJHt0aGlzLmFwaVByZWZpeH0vYmxvY2svJHtibG9ja0hhc2h9YCxcbiAgICAgIClcbiAgICApLmRhdGEudHhfY291bnQ7XG5cbiAgICBjb25zdCBibG9ja1R4czogQXJyYXk8Qml0Y29pbkVzcGxvcmFUcmFuc2FjdGlvbj4gPSBbXTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcblxuICAgIHdoaWxlIChvZmZzZXQgPCB0eENvdW50KSB7XG4gICAgICBjb25zdCB0eHMgPSAoXG4gICAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmdldDxBcnJheTxCaXRjb2luRXNwbG9yYVRyYW5zYWN0aW9uPj4oXG4gICAgICAgICAgYCR7dGhpcy5hcGlQcmVmaXh9L2Jsb2NrLyR7YmxvY2tIYXNofS90eHMvJHtvZmZzZXR9YCxcbiAgICAgICAgKVxuICAgICAgKS5kYXRhO1xuICAgICAgYmxvY2tUeHMucHVzaCguLi50eHMpO1xuICAgICAgb2Zmc2V0ICs9IHRoaXMuRVNQTE9SQV9CTE9DS19UWFNfTElNSVQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJsb2NrVHhzO1xuICB9O1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rosen-bridge/bitcoin-scanner",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "A Bitcoin blockchain scanner based on Esplora or Rpc Block Explorer API",
|
|
5
|
-
"repository":
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/rosen-bridge/scanner.git"
|
|
8
|
+
},
|
|
6
9
|
"license": "MIT",
|
|
7
10
|
"author": "Rosen Team",
|
|
8
11
|
"type": "module",
|
|
9
12
|
"main": "dist/index.js",
|
|
10
13
|
"types": "dist/index.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"CHANGELOG.md"
|
|
17
|
+
],
|
|
11
18
|
"scripts": {
|
|
12
19
|
"build": "tsc --build tsconfig.build.json",
|
|
13
20
|
"coverage": "npm run test -- --coverage",
|
|
@@ -28,8 +35,8 @@
|
|
|
28
35
|
"node": ">=22.18.0"
|
|
29
36
|
},
|
|
30
37
|
"dependencies": {
|
|
31
|
-
"@rosen-bridge/abstract-scanner": "^0.
|
|
32
|
-
"@rosen-bridge/
|
|
33
|
-
"@rosen-
|
|
38
|
+
"@rosen-bridge/abstract-scanner": "^0.2.0",
|
|
39
|
+
"@rosen-bridge/scanner-interfaces": "^0.2.0",
|
|
40
|
+
"@rosen-clients/rate-limited-axios": "^1.0.0"
|
|
34
41
|
}
|
|
35
42
|
}
|
package/.eslintignore
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
dist
|
package/lib/index.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { BitcoinEsploraScanner } from './scanner/BitcoinEsploraScanner';
|
|
2
|
-
export * from './types';
|
|
3
|
-
export { DogeEsploraScanner } from './scanner/DogeEsploraScanner';
|
|
4
|
-
export { EsploraNetwork } from './network/EsploraNetwork';
|
|
5
|
-
export * from './scanner/BitcoinRpcScanner';
|
|
6
|
-
export * from './scanner/DogeRpcScanner';
|
|
7
|
-
export * from './network/BitcoinRpcNetwork';
|
|
8
|
-
export * from './network/DogeRpcNetwork';
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import axios, { Axios } from '@rosen-bridge/rate-limited-axios';
|
|
2
|
-
import {
|
|
3
|
-
AbstractNetworkConnector,
|
|
4
|
-
Block,
|
|
5
|
-
} from '@rosen-bridge/scanner-interfaces';
|
|
6
|
-
import { BitcoinRpcTransaction, BlockHeader, JsonRpcResult } from '../types';
|
|
7
|
-
|
|
8
|
-
import { randomBytes } from 'crypto';
|
|
9
|
-
|
|
10
|
-
export class BitcoinRpcNetwork extends AbstractNetworkConnector<BitcoinRpcTransaction> {
|
|
11
|
-
private readonly url: string;
|
|
12
|
-
private readonly timeout: number;
|
|
13
|
-
private client: Axios;
|
|
14
|
-
|
|
15
|
-
constructor(
|
|
16
|
-
url: string,
|
|
17
|
-
timeout: number,
|
|
18
|
-
auth?: {
|
|
19
|
-
username: string;
|
|
20
|
-
password: string;
|
|
21
|
-
},
|
|
22
|
-
) {
|
|
23
|
-
super();
|
|
24
|
-
this.url = url;
|
|
25
|
-
this.timeout = timeout;
|
|
26
|
-
this.client = axios.create({
|
|
27
|
-
baseURL: this.url,
|
|
28
|
-
timeout: this.timeout,
|
|
29
|
-
headers: { 'Content-Type': 'application/json' },
|
|
30
|
-
auth: auth,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
private generateRandomId = () => randomBytes(32).toString('hex');
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Returns block at height
|
|
38
|
-
* @param height
|
|
39
|
-
* @returns Block
|
|
40
|
-
*/
|
|
41
|
-
getBlockAtHeight = async (height: number): Promise<Block> => {
|
|
42
|
-
const randomId1 = this.generateRandomId();
|
|
43
|
-
// get block hash using block height
|
|
44
|
-
const blockHashResponse = await this.client.post<JsonRpcResult>('', {
|
|
45
|
-
method: 'getblockhash',
|
|
46
|
-
id: randomId1,
|
|
47
|
-
params: [height],
|
|
48
|
-
});
|
|
49
|
-
if (blockHashResponse.data.id !== randomId1)
|
|
50
|
-
throw Error(`UnexpectedBehavior: Request and response id are different`);
|
|
51
|
-
const blockHash = blockHashResponse.data.result;
|
|
52
|
-
|
|
53
|
-
const randomId2 = this.generateRandomId();
|
|
54
|
-
// get block headers using block hash
|
|
55
|
-
const blockHeaderResponse = await this.client.post<JsonRpcResult>('', {
|
|
56
|
-
method: 'getblockheader',
|
|
57
|
-
id: randomId2,
|
|
58
|
-
params: [blockHash, true],
|
|
59
|
-
});
|
|
60
|
-
if (blockHeaderResponse.data.id !== randomId2)
|
|
61
|
-
throw Error(`UnexpectedBehavior: Request and response id are different`);
|
|
62
|
-
const blockHeader: BlockHeader = blockHeaderResponse.data
|
|
63
|
-
.result as BlockHeader;
|
|
64
|
-
return {
|
|
65
|
-
parentHash: blockHeader.previousblockhash,
|
|
66
|
-
hash: blockHeader.hash,
|
|
67
|
-
height: blockHeader.height,
|
|
68
|
-
timestamp: blockHeader.time,
|
|
69
|
-
txCount: blockHeader.nTx,
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Returns current network height
|
|
75
|
-
* @returns current height
|
|
76
|
-
*/
|
|
77
|
-
getCurrentHeight = async (): Promise<number> => {
|
|
78
|
-
const randomId = this.generateRandomId();
|
|
79
|
-
const result = await this.client.post<JsonRpcResult>('', {
|
|
80
|
-
method: 'getblockchaininfo',
|
|
81
|
-
id: randomId,
|
|
82
|
-
params: [],
|
|
83
|
-
});
|
|
84
|
-
if (result.data.id !== randomId)
|
|
85
|
-
throw Error(`UnexpectedBehavior: Request and response id are different`);
|
|
86
|
-
return (result.data.result as { blocks: number }).blocks;
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Return transactions in a block with specified hash
|
|
91
|
-
* @param blockHash
|
|
92
|
-
* @returns
|
|
93
|
-
*/
|
|
94
|
-
getBlockTxs = async (
|
|
95
|
-
blockHash: string,
|
|
96
|
-
): Promise<Array<BitcoinRpcTransaction>> => {
|
|
97
|
-
const randomId = this.generateRandomId();
|
|
98
|
-
const blockHashResponse = await this.client.post<JsonRpcResult>('', {
|
|
99
|
-
method: 'getblock',
|
|
100
|
-
id: randomId,
|
|
101
|
-
params: [blockHash, 2], // verbosity should be 2 in order to retrieve full transaction info
|
|
102
|
-
});
|
|
103
|
-
if (blockHashResponse.data.id !== randomId)
|
|
104
|
-
throw Error(`UnexpectedBehavior: Request and response id are different`);
|
|
105
|
-
const blockTxs = (
|
|
106
|
-
blockHashResponse.data.result as { tx: Array<BitcoinRpcTransaction> }
|
|
107
|
-
).tx;
|
|
108
|
-
|
|
109
|
-
return blockTxs;
|
|
110
|
-
};
|
|
111
|
-
}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import axios, { Axios } from '@rosen-bridge/rate-limited-axios';
|
|
2
|
-
import {
|
|
3
|
-
AbstractNetworkConnector,
|
|
4
|
-
Block,
|
|
5
|
-
} from '@rosen-bridge/scanner-interfaces';
|
|
6
|
-
import { DogeRpcTransaction, JsonRpcResult, DogeBlockSummary } from '../types';
|
|
7
|
-
|
|
8
|
-
import { randomBytes } from 'crypto';
|
|
9
|
-
|
|
10
|
-
export class DogeRpcNetwork extends AbstractNetworkConnector<DogeRpcTransaction> {
|
|
11
|
-
private readonly url: string;
|
|
12
|
-
private readonly timeout: number;
|
|
13
|
-
private client: Axios;
|
|
14
|
-
|
|
15
|
-
constructor(
|
|
16
|
-
url: string,
|
|
17
|
-
timeout: number,
|
|
18
|
-
auth?: {
|
|
19
|
-
username: string;
|
|
20
|
-
password: string;
|
|
21
|
-
},
|
|
22
|
-
) {
|
|
23
|
-
super();
|
|
24
|
-
this.url = url;
|
|
25
|
-
this.timeout = timeout;
|
|
26
|
-
this.client = axios.create({
|
|
27
|
-
baseURL: this.url,
|
|
28
|
-
timeout: this.timeout,
|
|
29
|
-
headers: { 'Content-Type': 'application/json' },
|
|
30
|
-
auth: auth,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
private generateRandomId = () => randomBytes(32).toString('hex');
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Returns block at height
|
|
38
|
-
* @param height
|
|
39
|
-
* @returns Block
|
|
40
|
-
*/
|
|
41
|
-
getBlockAtHeight = async (height: number): Promise<Block> => {
|
|
42
|
-
const randomId1 = this.generateRandomId();
|
|
43
|
-
// get block hash using block height
|
|
44
|
-
const blockHashResponse = await this.client.post<JsonRpcResult>('', {
|
|
45
|
-
method: 'getblockhash',
|
|
46
|
-
id: randomId1,
|
|
47
|
-
params: [height],
|
|
48
|
-
});
|
|
49
|
-
if (blockHashResponse.data.id !== randomId1)
|
|
50
|
-
throw Error(`UnexpectedBehavior: Request and response id are different`);
|
|
51
|
-
const blockHash = blockHashResponse.data.result;
|
|
52
|
-
|
|
53
|
-
const randomId2 = this.generateRandomId();
|
|
54
|
-
// get block headers using block hash
|
|
55
|
-
const blockSummaryResponse = await this.client.post<JsonRpcResult>('', {
|
|
56
|
-
method: 'getblock',
|
|
57
|
-
id: randomId2,
|
|
58
|
-
params: [blockHash, 1],
|
|
59
|
-
});
|
|
60
|
-
if (blockSummaryResponse.data.id !== randomId2)
|
|
61
|
-
throw Error(`UnexpectedBehavior: Request and response id are different`);
|
|
62
|
-
const blockSummary: DogeBlockSummary = blockSummaryResponse.data
|
|
63
|
-
.result as DogeBlockSummary;
|
|
64
|
-
|
|
65
|
-
return {
|
|
66
|
-
parentHash: blockSummary.previousblockhash,
|
|
67
|
-
hash: blockSummary.hash,
|
|
68
|
-
height: blockSummary.height,
|
|
69
|
-
timestamp: blockSummary.time,
|
|
70
|
-
txCount: blockSummary.tx.length,
|
|
71
|
-
};
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Returns current network height
|
|
76
|
-
* @returns current height
|
|
77
|
-
*/
|
|
78
|
-
getCurrentHeight = async (): Promise<number> => {
|
|
79
|
-
const randomId = this.generateRandomId();
|
|
80
|
-
const result = await this.client.post<JsonRpcResult>('', {
|
|
81
|
-
method: 'getblockchaininfo',
|
|
82
|
-
id: randomId,
|
|
83
|
-
params: [],
|
|
84
|
-
});
|
|
85
|
-
if (result.data.id !== randomId)
|
|
86
|
-
throw Error(`UnexpectedBehavior: Request and response id are different`);
|
|
87
|
-
return (result.data.result as { blocks: number }).blocks;
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Return transactions in a block with specified hash
|
|
92
|
-
* @param blockHash
|
|
93
|
-
* @returns
|
|
94
|
-
*/
|
|
95
|
-
getBlockTxs = async (
|
|
96
|
-
blockHash: string,
|
|
97
|
-
): Promise<Array<DogeRpcTransaction>> => {
|
|
98
|
-
const randomId = this.generateRandomId();
|
|
99
|
-
const blockHashResponse = await this.client.post<JsonRpcResult>('', {
|
|
100
|
-
method: 'getblock',
|
|
101
|
-
id: randomId,
|
|
102
|
-
params: [blockHash, 2], // verbosity should be 2 in order to retrieve full transaction info
|
|
103
|
-
});
|
|
104
|
-
if (blockHashResponse.data.id !== randomId)
|
|
105
|
-
throw Error(`UnexpectedBehavior: Request and response id are different`);
|
|
106
|
-
const blockTxs = (
|
|
107
|
-
blockHashResponse.data.result as { tx: Array<DogeRpcTransaction> }
|
|
108
|
-
).tx;
|
|
109
|
-
|
|
110
|
-
return blockTxs;
|
|
111
|
-
};
|
|
112
|
-
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import axios, { Axios } from '@rosen-bridge/rate-limited-axios';
|
|
2
|
-
import {
|
|
3
|
-
AbstractNetworkConnector,
|
|
4
|
-
Block,
|
|
5
|
-
} from '@rosen-bridge/scanner-interfaces';
|
|
6
|
-
import { BitcoinEsploraTransaction, EsploraBlock } from '../types';
|
|
7
|
-
|
|
8
|
-
export class EsploraNetwork extends AbstractNetworkConnector<BitcoinEsploraTransaction> {
|
|
9
|
-
private readonly url: string;
|
|
10
|
-
private readonly timeout: number;
|
|
11
|
-
private readonly ESPLORA_BLOCK_TXS_LIMIT = 25;
|
|
12
|
-
private client: Axios;
|
|
13
|
-
private apiPrefix: string;
|
|
14
|
-
|
|
15
|
-
constructor(url: string, timeout: number, apiPrefix?: string) {
|
|
16
|
-
super();
|
|
17
|
-
this.url = url;
|
|
18
|
-
this.timeout = timeout;
|
|
19
|
-
this.client = axios.create({
|
|
20
|
-
baseURL: this.url,
|
|
21
|
-
timeout: this.timeout,
|
|
22
|
-
headers: { 'Content-Type': 'application/json' },
|
|
23
|
-
});
|
|
24
|
-
this.apiPrefix = apiPrefix || '/api';
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Returns block at height
|
|
29
|
-
* @param height
|
|
30
|
-
* @returns Block
|
|
31
|
-
*/
|
|
32
|
-
getBlockAtHeight = async (height: number): Promise<Block> => {
|
|
33
|
-
// get block hash using block height
|
|
34
|
-
const blockHash = (
|
|
35
|
-
await this.client.get<string>(`${this.apiPrefix}/block-height/${height}`)
|
|
36
|
-
).data;
|
|
37
|
-
|
|
38
|
-
// get block headers using block hash
|
|
39
|
-
const blockHeader = (
|
|
40
|
-
await this.client.get<EsploraBlock>(
|
|
41
|
-
`${this.apiPrefix}/block/${blockHash}`,
|
|
42
|
-
)
|
|
43
|
-
).data;
|
|
44
|
-
return {
|
|
45
|
-
parentHash: blockHeader.previousblockhash,
|
|
46
|
-
hash: blockHeader.id,
|
|
47
|
-
height: blockHeader.height,
|
|
48
|
-
timestamp: blockHeader.timestamp,
|
|
49
|
-
txCount: blockHeader.tx_count,
|
|
50
|
-
};
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Returns current network height
|
|
55
|
-
* @returns current height
|
|
56
|
-
*/
|
|
57
|
-
getCurrentHeight = (): Promise<number> => {
|
|
58
|
-
return this.client
|
|
59
|
-
.get<number>(`${this.apiPrefix}/blocks/tip/height`)
|
|
60
|
-
.then((res) => res.data);
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Return transactions in a block with specified hash
|
|
65
|
-
* @param blockHash
|
|
66
|
-
* @returns
|
|
67
|
-
*/
|
|
68
|
-
getBlockTxs = async (
|
|
69
|
-
blockHash: string,
|
|
70
|
-
): Promise<Array<BitcoinEsploraTransaction>> => {
|
|
71
|
-
const txCount = (
|
|
72
|
-
await this.client.get<EsploraBlock>(
|
|
73
|
-
`${this.apiPrefix}/block/${blockHash}`,
|
|
74
|
-
)
|
|
75
|
-
).data.tx_count;
|
|
76
|
-
|
|
77
|
-
const blockTxs: Array<BitcoinEsploraTransaction> = [];
|
|
78
|
-
let offset = 0;
|
|
79
|
-
|
|
80
|
-
while (offset < txCount) {
|
|
81
|
-
const txs = (
|
|
82
|
-
await this.client.get<Array<BitcoinEsploraTransaction>>(
|
|
83
|
-
`${this.apiPrefix}/block/${blockHash}/txs/${offset}`,
|
|
84
|
-
)
|
|
85
|
-
).data;
|
|
86
|
-
blockTxs.push(...txs);
|
|
87
|
-
offset += this.ESPLORA_BLOCK_TXS_LIMIT;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return blockTxs;
|
|
91
|
-
};
|
|
92
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { GeneralScanner, ScannerConfig } from '@rosen-bridge/abstract-scanner';
|
|
2
|
-
import { BitcoinEsploraTransaction } from '../types';
|
|
3
|
-
export class BitcoinEsploraScanner extends GeneralScanner<BitcoinEsploraTransaction> {
|
|
4
|
-
constructor(config: ScannerConfig<BitcoinEsploraTransaction>) {
|
|
5
|
-
super(
|
|
6
|
-
'bitcoin',
|
|
7
|
-
config.dataSource,
|
|
8
|
-
config.initialHeight,
|
|
9
|
-
config.network,
|
|
10
|
-
config.blockRetrieveGap,
|
|
11
|
-
config.logger,
|
|
12
|
-
config.suffix,
|
|
13
|
-
);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { GeneralScanner, ScannerConfig } from '@rosen-bridge/abstract-scanner';
|
|
2
|
-
import { BitcoinRpcTransaction } from '../types';
|
|
3
|
-
|
|
4
|
-
export class BitcoinRpcScanner extends GeneralScanner<BitcoinRpcTransaction> {
|
|
5
|
-
constructor(config: ScannerConfig<BitcoinRpcTransaction>) {
|
|
6
|
-
super(
|
|
7
|
-
'bitcoin',
|
|
8
|
-
config.dataSource,
|
|
9
|
-
config.initialHeight,
|
|
10
|
-
config.network,
|
|
11
|
-
config.blockRetrieveGap,
|
|
12
|
-
config.logger,
|
|
13
|
-
config.suffix,
|
|
14
|
-
);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { GeneralScanner, ScannerConfig } from '@rosen-bridge/abstract-scanner';
|
|
2
|
-
import { BitcoinEsploraTransaction } from '../types';
|
|
3
|
-
export class DogeEsploraScanner extends GeneralScanner<BitcoinEsploraTransaction> {
|
|
4
|
-
constructor(config: ScannerConfig<BitcoinEsploraTransaction>) {
|
|
5
|
-
super(
|
|
6
|
-
'doge',
|
|
7
|
-
config.dataSource,
|
|
8
|
-
config.initialHeight,
|
|
9
|
-
config.network,
|
|
10
|
-
config.blockRetrieveGap,
|
|
11
|
-
config.logger,
|
|
12
|
-
config.suffix,
|
|
13
|
-
);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { GeneralScanner, ScannerConfig } from '@rosen-bridge/abstract-scanner';
|
|
2
|
-
import { DogeRpcTransaction } from '../types';
|
|
3
|
-
|
|
4
|
-
export class DogeRpcScanner extends GeneralScanner<DogeRpcTransaction> {
|
|
5
|
-
constructor(config: ScannerConfig<DogeRpcTransaction>) {
|
|
6
|
-
super(
|
|
7
|
-
'doge',
|
|
8
|
-
config.dataSource,
|
|
9
|
-
config.initialHeight,
|
|
10
|
-
config.network,
|
|
11
|
-
config.blockRetrieveGap,
|
|
12
|
-
config.logger,
|
|
13
|
-
config.suffix,
|
|
14
|
-
);
|
|
15
|
-
}
|
|
16
|
-
}
|