@my-packages-changeit/bitcoin-scanner 1.1.3

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 ADDED
@@ -0,0 +1,128 @@
1
+ # @rosen-bridge/bitcoin-scanner
2
+
3
+ ## 1.1.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Update dependencies
8
+ - @rosen-bridge/abstract-scanner@2.0.3
9
+
10
+ ## 1.1.2
11
+
12
+ ### Patch Changes
13
+
14
+ - Update dependencies
15
+ - @rosen-bridge/abstract-scanner@2.0.2
16
+ - @rosen-clients/rate-limited-axios@2.0.1
17
+
18
+ ## 1.1.1
19
+
20
+ ### Patch Changes
21
+
22
+ - Update dependencies
23
+ - @rosen-bridge/abstract-scanner@2.0.1
24
+
25
+ ## 1.1.0
26
+
27
+ ### Minor Changes
28
+
29
+ - Add heightGap config into scanners config
30
+
31
+ ### Patch Changes
32
+
33
+ - Update dependencies
34
+ - @rosen-bridge/abstract-scanner@2.0.0
35
+ - @rosen-bridge/scanner-interfaces@1.0.0
36
+
37
+ ## 1.0.4
38
+
39
+ ### Patch Changes
40
+
41
+ - Update dependencies
42
+ - @rosen-bridge/abstract-scanner@1.0.4
43
+
44
+ ## 1.0.3
45
+
46
+ ### Patch Changes
47
+
48
+ - Update dependencies
49
+ - @rosen-bridge/abstract-scanner@1.0.3
50
+ - @rosen-clients/rate-limited-axios@2.0.0
51
+
52
+ ## 1.0.2
53
+
54
+ ### Patch Changes
55
+
56
+ - @rosen-bridge/abstract-scanner@1.0.2
57
+
58
+ ## 1.0.1
59
+
60
+ ### Patch Changes
61
+
62
+ - Update dependencies
63
+ - @rosen-bridge/scanner-interfaces@0.2.2
64
+ - @rosen-bridge/abstract-scanner@1.0.1
65
+
66
+ ## 1.0.0
67
+
68
+ ### Major Changes
69
+
70
+ - Update AbstractExtractor interface; use `BlockInfo` in `processTransactions` and rename `initializeBoxes` to `initializeData`
71
+
72
+ ### Patch Changes
73
+
74
+ - Update dependencies
75
+ - @rosen-bridge/abstract-logger@4.0.0
76
+ - @rosen-bridge/abstract-scanner@1.0.0
77
+
78
+ ## 0.2.3
79
+
80
+ ### Patch Changes
81
+
82
+ - Update dependencies
83
+ - @rosen-bridge/abstract-scanner@0.2.3
84
+
85
+ ## 0.2.2
86
+
87
+ ### Patch Changes
88
+
89
+ - Update dependencies
90
+ - @rosen-bridge/abstract-scanner@0.2.2
91
+
92
+ ## 0.2.1
93
+
94
+ ### Patch Changes
95
+
96
+ - Fix package-lock and move typescript and types/node into root
97
+ - Update eslint and plugins:
98
+ - Apply new rules such as sort imports and file name
99
+ - Update dependencies
100
+ - @rosen-bridge/extended-typeorm@1.0.1
101
+ - @rosen-clients/rate-limited-axios@1.1.0
102
+ - @rosen-bridge/rosen-extractor@10.1.1
103
+ - @rosen-bridge/tokens@4.0.1
104
+ - @rosen-bridge/abstract-logger@3.0.1
105
+ - @rosen-bridge/json-bigint@1.1.0
106
+ - @rosen-clients/ergo-explorer@2.1.0
107
+ - @rosen-clients/ergo-node@3.1.0
108
+ - Update dependencies
109
+ - @rosen-bridge/scanner-interfaces@0.2.1
110
+ - @rosen-bridge/abstract-scanner@0.2.1
111
+
112
+ ## 0.2.0
113
+
114
+ ### Minor Changes
115
+
116
+ - Use @rosen-clients/rate-limited-axios instead of @rosen-bridge/rate-limited-axios
117
+
118
+ ### Patch Changes
119
+
120
+ - Update dependencies
121
+ - @rosen-bridge/abstract-scanner@0.2.0
122
+
123
+ ## 0.1.0
124
+
125
+ - This package was **integrated** from `@rosen-bridge/bitcoin-esplora-scanner` and `@rosen-bridge/bitcoin-rpc-scanner`.
126
+ You can follow the previous history in the old package’s changelog. The last changelog updates for the integrated packages are available below:
127
+ - [Bitcoin Esplora Scanner Changelog](https://github.com/rosen-bridge/scanner/blob/d4a5539b01c523b101104470b03ff7023a10b70b/packages/scanners/bitcoin-esplora-scanner/CHANGELOG.md)
128
+ - [Bitcoin RPC Scanner Changelog](https://github.com/rosen-bridge/scanner/blob/d4a5539b01c523b101104470b03ff7023a10b70b/packages/scanners/bitcoin-rpc-scanner/CHANGELOG.md)
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # @rosen-bridge/bitcoin-esplora-scanner
2
+
3
+ ## Table of contents
4
+
5
+ - [Introduction](#introduction)
6
+ - [Installation](#installation)
7
+
8
+ ## Introduction
9
+
10
+ A Bitcoin blockchain scanner based on Rpc and Esplora Block Explorer API.
11
+
12
+ ## Installation
13
+
14
+ npm:
15
+
16
+ ```sh
17
+ npm i @rosen-bridge/bitcoin-esplora-scanner
18
+ ```
19
+
20
+ yarn:
21
+
22
+ ```sh
23
+ yarn add @rosen-bridge/bitcoin-esplora-scanner
24
+ ```
@@ -0,0 +1,9 @@
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';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
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';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsY0FBYyxTQUFTLENBQUM7QUFDeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBCaXRjb2luRXNwbG9yYVNjYW5uZXIgfSBmcm9tICcuL3NjYW5uZXIvYml0Y29pbkVzcGxvcmFTY2FubmVyJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IHsgRG9nZUVzcGxvcmFTY2FubmVyIH0gZnJvbSAnLi9zY2FubmVyL2RvZ2VFc3Bsb3JhU2Nhbm5lcic7XG5leHBvcnQgeyBFc3Bsb3JhTmV0d29yayB9IGZyb20gJy4vbmV0d29yay9lc3Bsb3JhTmV0d29yayc7XG5leHBvcnQgKiBmcm9tICcuL3NjYW5uZXIvYml0Y29pblJwY1NjYW5uZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zY2FubmVyL2RvZ2VScGNTY2FubmVyJztcbmV4cG9ydCAqIGZyb20gJy4vbmV0d29yay9iaXRjb2luUnBjTmV0d29yayc7XG5leHBvcnQgKiBmcm9tICcuL25ldHdvcmsvZG9nZVJwY05ldHdvcmsnO1xuIl19
@@ -0,0 +1,30 @@
1
+ import { AbstractNetworkConnector, Block } from '@rosen-bridge/scanner-interfaces';
2
+ import { BitcoinRpcTransaction } from '../types';
3
+ export declare class BitcoinRpcNetwork extends AbstractNetworkConnector<BitcoinRpcTransaction> {
4
+ private readonly url;
5
+ private readonly timeout;
6
+ private client;
7
+ constructor(url: string, timeout: number, auth?: {
8
+ username: string;
9
+ password: string;
10
+ });
11
+ private generateRandomId;
12
+ /**
13
+ * Returns block at height
14
+ * @param height
15
+ * @returns Block
16
+ */
17
+ getBlockAtHeight: (height: number) => Promise<Block>;
18
+ /**
19
+ * Returns current network height
20
+ * @returns current height
21
+ */
22
+ getCurrentHeight: () => Promise<number>;
23
+ /**
24
+ * Return transactions in a block with specified hash
25
+ * @param blockHash
26
+ * @returns
27
+ */
28
+ getBlockTxs: (blockHash: string) => Promise<Array<BitcoinRpcTransaction>>;
29
+ }
30
+ //# sourceMappingURL=bitcoinRpcNetwork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitcoinRpcNetwork.d.ts","sourceRoot":"","sources":["../../lib/network/bitcoinRpcNetwork.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,qBAAqB,EAA8B,MAAM,UAAU,CAAC;AAE7E,qBAAa,iBAAkB,SAAQ,wBAAwB,CAAC,qBAAqB,CAAC;IACpF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,MAAM,CAAQ;gBAGpB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAaH,OAAO,CAAC,gBAAgB,CAAyC;IAEjE;;;;OAIG;IACH,gBAAgB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,KAAK,CAAC,CA8BvD;IAEF;;;OAGG;IACH,gBAAgB,QAAa,OAAO,CAAC,MAAM,CAAC,CAU1C;IAEF;;;;OAIG;IACH,WAAW,GACT,WAAW,MAAM,KAChB,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CActC;CACH"}
@@ -0,0 +1,88 @@
1
+ import { randomBytes } from 'crypto';
2
+ import { AbstractNetworkConnector, } from '@rosen-bridge/scanner-interfaces';
3
+ import axios from '@rosen-clients/rate-limited-axios';
4
+ export class BitcoinRpcNetwork extends AbstractNetworkConnector {
5
+ url;
6
+ timeout;
7
+ client;
8
+ constructor(url, timeout, auth) {
9
+ super();
10
+ this.url = url;
11
+ this.timeout = timeout;
12
+ this.client = axios.create({
13
+ baseURL: this.url,
14
+ timeout: this.timeout,
15
+ headers: { 'Content-Type': 'application/json' },
16
+ auth: auth,
17
+ });
18
+ }
19
+ generateRandomId = () => randomBytes(32).toString('hex');
20
+ /**
21
+ * Returns block at height
22
+ * @param height
23
+ * @returns Block
24
+ */
25
+ getBlockAtHeight = async (height) => {
26
+ const randomId1 = this.generateRandomId();
27
+ // get block hash using block height
28
+ const blockHashResponse = await this.client.post('', {
29
+ method: 'getblockhash',
30
+ id: randomId1,
31
+ params: [height],
32
+ });
33
+ if (blockHashResponse.data.id !== randomId1)
34
+ throw Error(`UnexpectedBehavior: Request and response id are different`);
35
+ const blockHash = blockHashResponse.data.result;
36
+ const randomId2 = this.generateRandomId();
37
+ // get block headers using block hash
38
+ const blockHeaderResponse = await this.client.post('', {
39
+ method: 'getblockheader',
40
+ id: randomId2,
41
+ params: [blockHash, true],
42
+ });
43
+ if (blockHeaderResponse.data.id !== randomId2)
44
+ throw Error(`UnexpectedBehavior: Request and response id are different`);
45
+ const blockHeader = blockHeaderResponse.data
46
+ .result;
47
+ return {
48
+ parentHash: blockHeader.previousblockhash,
49
+ hash: blockHeader.hash,
50
+ height: blockHeader.height,
51
+ timestamp: blockHeader.time,
52
+ txCount: blockHeader.nTx,
53
+ };
54
+ };
55
+ /**
56
+ * Returns current network height
57
+ * @returns current height
58
+ */
59
+ getCurrentHeight = async () => {
60
+ const randomId = this.generateRandomId();
61
+ const result = await this.client.post('', {
62
+ method: 'getblockchaininfo',
63
+ id: randomId,
64
+ params: [],
65
+ });
66
+ if (result.data.id !== randomId)
67
+ throw Error(`UnexpectedBehavior: Request and response id are different`);
68
+ return result.data.result.blocks;
69
+ };
70
+ /**
71
+ * Return transactions in a block with specified hash
72
+ * @param blockHash
73
+ * @returns
74
+ */
75
+ getBlockTxs = async (blockHash) => {
76
+ const randomId = this.generateRandomId();
77
+ const blockHashResponse = await this.client.post('', {
78
+ method: 'getblock',
79
+ id: randomId,
80
+ params: [blockHash, 2], // verbosity should be 2 in order to retrieve full transaction info
81
+ });
82
+ if (blockHashResponse.data.id !== randomId)
83
+ throw Error(`UnexpectedBehavior: Request and response id are different`);
84
+ const blockTxs = blockHashResponse.data.result.tx;
85
+ return blockTxs;
86
+ };
87
+ }
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Y29pblJwY05ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbmV0d29yay9iaXRjb2luUnBjTmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXJDLE9BQU8sRUFDTCx3QkFBd0IsR0FFekIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEtBQWdCLE1BQU0sbUNBQW1DLENBQUM7QUFJakUsTUFBTSxPQUFPLGlCQUFrQixTQUFRLHdCQUErQztJQUNuRSxHQUFHLENBQVM7SUFDWixPQUFPLENBQVM7SUFDekIsTUFBTSxDQUFRO0lBRXRCLFlBQ0UsR0FBVyxFQUNYLE9BQWUsRUFDZixJQUdDO1FBRUQsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRTtZQUMvQyxJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFOzs7O09BSUc7SUFDSCxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsTUFBYyxFQUFrQixFQUFFO1FBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFDLG9DQUFvQztRQUNwQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWdCLEVBQUUsRUFBRTtZQUNsRSxNQUFNLEVBQUUsY0FBYztZQUN0QixFQUFFLEVBQUUsU0FBUztZQUNiLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUNqQixDQUFDLENBQUM7UUFDSCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssU0FBUztZQUN6QyxNQUFNLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUMscUNBQXFDO1FBQ3JDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBZ0IsRUFBRSxFQUFFO1lBQ3BFLE1BQU0sRUFBRSxnQkFBZ0I7WUFDeEIsRUFBRSxFQUFFLFNBQVM7WUFDYixNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO1NBQzFCLENBQUMsQ0FBQztRQUNILElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTO1lBQzNDLE1BQU0sS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDM0UsTUFBTSxXQUFXLEdBQWdCLG1CQUFtQixDQUFDLElBQUk7YUFDdEQsTUFBcUIsQ0FBQztRQUN6QixPQUFPO1lBQ0wsVUFBVSxFQUFFLFdBQVcsQ0FBQyxpQkFBaUI7WUFDekMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO1lBQ3RCLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTTtZQUMxQixTQUFTLEVBQUUsV0FBVyxDQUFDLElBQUk7WUFDM0IsT0FBTyxFQUFFLFdBQVcsQ0FBQyxHQUFHO1NBQ3pCLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxnQkFBZ0IsR0FBRyxLQUFLLElBQXFCLEVBQUU7UUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBZ0IsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sRUFBRSxtQkFBbUI7WUFDM0IsRUFBRSxFQUFFLFFBQVE7WUFDWixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUTtZQUM3QixNQUFNLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQzNFLE9BQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUE2QixDQUFDLE1BQU0sQ0FBQztJQUMzRCxDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsV0FBVyxHQUFHLEtBQUssRUFDakIsU0FBaUIsRUFDc0IsRUFBRTtRQUN6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWdCLEVBQUUsRUFBRTtZQUNsRSxNQUFNLEVBQUUsVUFBVTtZQUNsQixFQUFFLEVBQUUsUUFBUTtZQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxtRUFBbUU7U0FDNUYsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVE7WUFDeEMsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMzRSxNQUFNLFFBQVEsR0FDWixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFDeEIsQ0FBQyxFQUFFLENBQUM7UUFFTCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IHtcbiAgQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yLFxuICBCbG9jayxcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zIH0gZnJvbSAnQHJvc2VuLWNsaWVudHMvcmF0ZS1saW1pdGVkLWF4aW9zJztcblxuaW1wb3J0IHsgQml0Y29pblJwY1RyYW5zYWN0aW9uLCBCbG9ja0hlYWRlciwgSnNvblJwY1Jlc3VsdCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEJpdGNvaW5ScGNOZXR3b3JrIGV4dGVuZHMgQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yPEJpdGNvaW5ScGNUcmFuc2FjdGlvbj4ge1xuICBwcml2YXRlIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBjbGllbnQ6IEF4aW9zO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHVybDogc3RyaW5nLFxuICAgIHRpbWVvdXQ6IG51bWJlcixcbiAgICBhdXRoPzoge1xuICAgICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgfSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICAgIHRoaXMuY2xpZW50ID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IHRoaXMudXJsLFxuICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBhdXRoOiBhdXRoLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVJhbmRvbUlkID0gKCkgPT4gcmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAvKipcbiAgICogUmV0dXJucyBibG9jayBhdCBoZWlnaHRcbiAgICogQHBhcmFtIGhlaWdodFxuICAgKiBAcmV0dXJucyBCbG9ja1xuICAgKi9cbiAgZ2V0QmxvY2tBdEhlaWdodCA9IGFzeW5jIChoZWlnaHQ6IG51bWJlcik6IFByb21pc2U8QmxvY2s+ID0+IHtcbiAgICBjb25zdCByYW5kb21JZDEgPSB0aGlzLmdlbmVyYXRlUmFuZG9tSWQoKTtcbiAgICAvLyBnZXQgYmxvY2sgaGFzaCB1c2luZyBibG9jayBoZWlnaHRcbiAgICBjb25zdCBibG9ja0hhc2hSZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3Q8SnNvblJwY1Jlc3VsdD4oJycsIHtcbiAgICAgIG1ldGhvZDogJ2dldGJsb2NraGFzaCcsXG4gICAgICBpZDogcmFuZG9tSWQxLFxuICAgICAgcGFyYW1zOiBbaGVpZ2h0XSxcbiAgICB9KTtcbiAgICBpZiAoYmxvY2tIYXNoUmVzcG9uc2UuZGF0YS5pZCAhPT0gcmFuZG9tSWQxKVxuICAgICAgdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWRCZWhhdmlvcjogUmVxdWVzdCBhbmQgcmVzcG9uc2UgaWQgYXJlIGRpZmZlcmVudGApO1xuICAgIGNvbnN0IGJsb2NrSGFzaCA9IGJsb2NrSGFzaFJlc3BvbnNlLmRhdGEucmVzdWx0O1xuXG4gICAgY29uc3QgcmFuZG9tSWQyID0gdGhpcy5nZW5lcmF0ZVJhbmRvbUlkKCk7XG4gICAgLy8gZ2V0IGJsb2NrIGhlYWRlcnMgdXNpbmcgYmxvY2sgaGFzaFxuICAgIGNvbnN0IGJsb2NrSGVhZGVyUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PEpzb25ScGNSZXN1bHQ+KCcnLCB7XG4gICAgICBtZXRob2Q6ICdnZXRibG9ja2hlYWRlcicsXG4gICAgICBpZDogcmFuZG9tSWQyLFxuICAgICAgcGFyYW1zOiBbYmxvY2tIYXNoLCB0cnVlXSxcbiAgICB9KTtcbiAgICBpZiAoYmxvY2tIZWFkZXJSZXNwb25zZS5kYXRhLmlkICE9PSByYW5kb21JZDIpXG4gICAgICB0aHJvdyBFcnJvcihgVW5leHBlY3RlZEJlaGF2aW9yOiBSZXF1ZXN0IGFuZCByZXNwb25zZSBpZCBhcmUgZGlmZmVyZW50YCk7XG4gICAgY29uc3QgYmxvY2tIZWFkZXI6IEJsb2NrSGVhZGVyID0gYmxvY2tIZWFkZXJSZXNwb25zZS5kYXRhXG4gICAgICAucmVzdWx0IGFzIEJsb2NrSGVhZGVyO1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnRIYXNoOiBibG9ja0hlYWRlci5wcmV2aW91c2Jsb2NraGFzaCxcbiAgICAgIGhhc2g6IGJsb2NrSGVhZGVyLmhhc2gsXG4gICAgICBoZWlnaHQ6IGJsb2NrSGVhZGVyLmhlaWdodCxcbiAgICAgIHRpbWVzdGFtcDogYmxvY2tIZWFkZXIudGltZSxcbiAgICAgIHR4Q291bnQ6IGJsb2NrSGVhZGVyLm5UeCxcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGN1cnJlbnQgbmV0d29yayBoZWlnaHRcbiAgICogQHJldHVybnMgY3VycmVudCBoZWlnaHRcbiAgICovXG4gIGdldEN1cnJlbnRIZWlnaHQgPSBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICBjb25zdCByYW5kb21JZCA9IHRoaXMuZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3Q8SnNvblJwY1Jlc3VsdD4oJycsIHtcbiAgICAgIG1ldGhvZDogJ2dldGJsb2NrY2hhaW5pbmZvJyxcbiAgICAgIGlkOiByYW5kb21JZCxcbiAgICAgIHBhcmFtczogW10sXG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5kYXRhLmlkICE9PSByYW5kb21JZClcbiAgICAgIHRocm93IEVycm9yKGBVbmV4cGVjdGVkQmVoYXZpb3I6IFJlcXVlc3QgYW5kIHJlc3BvbnNlIGlkIGFyZSBkaWZmZXJlbnRgKTtcbiAgICByZXR1cm4gKHJlc3VsdC5kYXRhLnJlc3VsdCBhcyB7IGJsb2NrczogbnVtYmVyIH0pLmJsb2NrcztcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJuIHRyYW5zYWN0aW9ucyBpbiBhIGJsb2NrIHdpdGggc3BlY2lmaWVkIGhhc2hcbiAgICogQHBhcmFtIGJsb2NrSGFzaFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QmxvY2tUeHMgPSBhc3luYyAoXG4gICAgYmxvY2tIYXNoOiBzdHJpbmcsXG4gICk6IFByb21pc2U8QXJyYXk8Qml0Y29pblJwY1RyYW5zYWN0aW9uPj4gPT4ge1xuICAgIGNvbnN0IHJhbmRvbUlkID0gdGhpcy5nZW5lcmF0ZVJhbmRvbUlkKCk7XG4gICAgY29uc3QgYmxvY2tIYXNoUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PEpzb25ScGNSZXN1bHQ+KCcnLCB7XG4gICAgICBtZXRob2Q6ICdnZXRibG9jaycsXG4gICAgICBpZDogcmFuZG9tSWQsXG4gICAgICBwYXJhbXM6IFtibG9ja0hhc2gsIDJdLCAvLyB2ZXJib3NpdHkgc2hvdWxkIGJlIDIgaW4gb3JkZXIgdG8gcmV0cmlldmUgZnVsbCB0cmFuc2FjdGlvbiBpbmZvXG4gICAgfSk7XG4gICAgaWYgKGJsb2NrSGFzaFJlc3BvbnNlLmRhdGEuaWQgIT09IHJhbmRvbUlkKVxuICAgICAgdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWRCZWhhdmlvcjogUmVxdWVzdCBhbmQgcmVzcG9uc2UgaWQgYXJlIGRpZmZlcmVudGApO1xuICAgIGNvbnN0IGJsb2NrVHhzID0gKFxuICAgICAgYmxvY2tIYXNoUmVzcG9uc2UuZGF0YS5yZXN1bHQgYXMgeyB0eDogQXJyYXk8Qml0Y29pblJwY1RyYW5zYWN0aW9uPiB9XG4gICAgKS50eDtcblxuICAgIHJldHVybiBibG9ja1R4cztcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ import { AbstractNetworkConnector, Block } from '@rosen-bridge/scanner-interfaces';
2
+ import { DogeRpcTransaction } from '../types';
3
+ export declare class DogeRpcNetwork extends AbstractNetworkConnector<DogeRpcTransaction> {
4
+ private readonly url;
5
+ private readonly timeout;
6
+ private client;
7
+ constructor(url: string, timeout: number, auth?: {
8
+ username: string;
9
+ password: string;
10
+ });
11
+ private generateRandomId;
12
+ /**
13
+ * Returns block at height
14
+ * @param height
15
+ * @returns Block
16
+ */
17
+ getBlockAtHeight: (height: number) => Promise<Block>;
18
+ /**
19
+ * Returns current network height
20
+ * @returns current height
21
+ */
22
+ getCurrentHeight: () => Promise<number>;
23
+ /**
24
+ * Return transactions in a block with specified hash
25
+ * @param blockHash
26
+ * @returns
27
+ */
28
+ getBlockTxs: (blockHash: string) => Promise<Array<DogeRpcTransaction>>;
29
+ }
30
+ //# sourceMappingURL=dogeRpcNetwork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dogeRpcNetwork.d.ts","sourceRoot":"","sources":["../../lib/network/dogeRpcNetwork.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,kBAAkB,EAAmC,MAAM,UAAU,CAAC;AAE/E,qBAAa,cAAe,SAAQ,wBAAwB,CAAC,kBAAkB,CAAC;IAC9E,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,MAAM,CAAQ;gBAGpB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAaH,OAAO,CAAC,gBAAgB,CAAyC;IAEjE;;;;OAIG;IACH,gBAAgB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,KAAK,CAAC,CA+BvD;IAEF;;;OAGG;IACH,gBAAgB,QAAa,OAAO,CAAC,MAAM,CAAC,CAU1C;IAEF;;;;OAIG;IACH,WAAW,GACT,WAAW,MAAM,KAChB,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAcnC;CACH"}
@@ -0,0 +1,88 @@
1
+ import { randomBytes } from 'crypto';
2
+ import { AbstractNetworkConnector, } from '@rosen-bridge/scanner-interfaces';
3
+ import axios from '@rosen-clients/rate-limited-axios';
4
+ export class DogeRpcNetwork extends AbstractNetworkConnector {
5
+ url;
6
+ timeout;
7
+ client;
8
+ constructor(url, timeout, auth) {
9
+ super();
10
+ this.url = url;
11
+ this.timeout = timeout;
12
+ this.client = axios.create({
13
+ baseURL: this.url,
14
+ timeout: this.timeout,
15
+ headers: { 'Content-Type': 'application/json' },
16
+ auth: auth,
17
+ });
18
+ }
19
+ generateRandomId = () => randomBytes(32).toString('hex');
20
+ /**
21
+ * Returns block at height
22
+ * @param height
23
+ * @returns Block
24
+ */
25
+ getBlockAtHeight = async (height) => {
26
+ const randomId1 = this.generateRandomId();
27
+ // get block hash using block height
28
+ const blockHashResponse = await this.client.post('', {
29
+ method: 'getblockhash',
30
+ id: randomId1,
31
+ params: [height],
32
+ });
33
+ if (blockHashResponse.data.id !== randomId1)
34
+ throw Error(`UnexpectedBehavior: Request and response id are different`);
35
+ const blockHash = blockHashResponse.data.result;
36
+ const randomId2 = this.generateRandomId();
37
+ // get block headers using block hash
38
+ const blockSummaryResponse = await this.client.post('', {
39
+ method: 'getblock',
40
+ id: randomId2,
41
+ params: [blockHash, 1],
42
+ });
43
+ if (blockSummaryResponse.data.id !== randomId2)
44
+ throw Error(`UnexpectedBehavior: Request and response id are different`);
45
+ const blockSummary = blockSummaryResponse.data
46
+ .result;
47
+ return {
48
+ parentHash: blockSummary.previousblockhash,
49
+ hash: blockSummary.hash,
50
+ height: blockSummary.height,
51
+ timestamp: blockSummary.time,
52
+ txCount: blockSummary.tx.length,
53
+ };
54
+ };
55
+ /**
56
+ * Returns current network height
57
+ * @returns current height
58
+ */
59
+ getCurrentHeight = async () => {
60
+ const randomId = this.generateRandomId();
61
+ const result = await this.client.post('', {
62
+ method: 'getblockchaininfo',
63
+ id: randomId,
64
+ params: [],
65
+ });
66
+ if (result.data.id !== randomId)
67
+ throw Error(`UnexpectedBehavior: Request and response id are different`);
68
+ return result.data.result.blocks;
69
+ };
70
+ /**
71
+ * Return transactions in a block with specified hash
72
+ * @param blockHash
73
+ * @returns
74
+ */
75
+ getBlockTxs = async (blockHash) => {
76
+ const randomId = this.generateRandomId();
77
+ const blockHashResponse = await this.client.post('', {
78
+ method: 'getblock',
79
+ id: randomId,
80
+ params: [blockHash, 2], // verbosity should be 2 in order to retrieve full transaction info
81
+ });
82
+ if (blockHashResponse.data.id !== randomId)
83
+ throw Error(`UnexpectedBehavior: Request and response id are different`);
84
+ const blockTxs = blockHashResponse.data.result.tx;
85
+ return blockTxs;
86
+ };
87
+ }
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9nZVJwY05ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbmV0d29yay9kb2dlUnBjTmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXJDLE9BQU8sRUFDTCx3QkFBd0IsR0FFekIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEtBQWdCLE1BQU0sbUNBQW1DLENBQUM7QUFJakUsTUFBTSxPQUFPLGNBQWUsU0FBUSx3QkFBNEM7SUFDN0QsR0FBRyxDQUFTO0lBQ1osT0FBTyxDQUFTO0lBQ3pCLE1BQU0sQ0FBUTtJQUV0QixZQUNFLEdBQVcsRUFDWCxPQUFlLEVBQ2YsSUFHQztRQUVELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDekIsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7WUFDL0MsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRTs7OztPQUlHO0lBQ0gsZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLE1BQWMsRUFBa0IsRUFBRTtRQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQyxvQ0FBb0M7UUFDcEMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFnQixFQUFFLEVBQUU7WUFDbEUsTUFBTSxFQUFFLGNBQWM7WUFDdEIsRUFBRSxFQUFFLFNBQVM7WUFDYixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVM7WUFDekMsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMzRSxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRWhELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFDLHFDQUFxQztRQUNyQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWdCLEVBQUUsRUFBRTtZQUNyRSxNQUFNLEVBQUUsVUFBVTtZQUNsQixFQUFFLEVBQUUsU0FBUztZQUNiLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVM7WUFDNUMsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMzRSxNQUFNLFlBQVksR0FBcUIsb0JBQW9CLENBQUMsSUFBSTthQUM3RCxNQUEwQixDQUFDO1FBRTlCLE9BQU87WUFDTCxVQUFVLEVBQUUsWUFBWSxDQUFDLGlCQUFpQjtZQUMxQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDdkIsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQzNCLFNBQVMsRUFBRSxZQUFZLENBQUMsSUFBSTtZQUM1QixPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNO1NBQ2hDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxnQkFBZ0IsR0FBRyxLQUFLLElBQXFCLEVBQUU7UUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBZ0IsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sRUFBRSxtQkFBbUI7WUFDM0IsRUFBRSxFQUFFLFFBQVE7WUFDWixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUTtZQUM3QixNQUFNLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQzNFLE9BQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUE2QixDQUFDLE1BQU0sQ0FBQztJQUMzRCxDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsV0FBVyxHQUFHLEtBQUssRUFDakIsU0FBaUIsRUFDbUIsRUFBRTtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWdCLEVBQUUsRUFBRTtZQUNsRSxNQUFNLEVBQUUsVUFBVTtZQUNsQixFQUFFLEVBQUUsUUFBUTtZQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxtRUFBbUU7U0FDNUYsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVE7WUFDeEMsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMzRSxNQUFNLFFBQVEsR0FDWixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFDeEIsQ0FBQyxFQUFFLENBQUM7UUFFTCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IHtcbiAgQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yLFxuICBCbG9jayxcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zIH0gZnJvbSAnQHJvc2VuLWNsaWVudHMvcmF0ZS1saW1pdGVkLWF4aW9zJztcblxuaW1wb3J0IHsgRG9nZVJwY1RyYW5zYWN0aW9uLCBKc29uUnBjUmVzdWx0LCBEb2dlQmxvY2tTdW1tYXJ5IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRG9nZVJwY05ldHdvcmsgZXh0ZW5kcyBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3I8RG9nZVJwY1RyYW5zYWN0aW9uPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIGNsaWVudDogQXhpb3M7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgdGltZW91dDogbnVtYmVyLFxuICAgIGF1dGg/OiB7XG4gICAgICB1c2VybmFtZTogc3RyaW5nO1xuICAgICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICB9LFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgdGhpcy5jbGllbnQgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogdGhpcy51cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGF1dGg6IGF1dGgsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlUmFuZG9tSWQgPSAoKSA9PiByYW5kb21CeXRlcygzMikudG9TdHJpbmcoJ2hleCcpO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGJsb2NrIGF0IGhlaWdodFxuICAgKiBAcGFyYW0gaGVpZ2h0XG4gICAqIEByZXR1cm5zIEJsb2NrXG4gICAqL1xuICBnZXRCbG9ja0F0SGVpZ2h0ID0gYXN5bmMgKGhlaWdodDogbnVtYmVyKTogUHJvbWlzZTxCbG9jaz4gPT4ge1xuICAgIGNvbnN0IHJhbmRvbUlkMSA9IHRoaXMuZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgIC8vIGdldCBibG9jayBoYXNoIHVzaW5nIGJsb2NrIGhlaWdodFxuICAgIGNvbnN0IGJsb2NrSGFzaFJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxKc29uUnBjUmVzdWx0PignJywge1xuICAgICAgbWV0aG9kOiAnZ2V0YmxvY2toYXNoJyxcbiAgICAgIGlkOiByYW5kb21JZDEsXG4gICAgICBwYXJhbXM6IFtoZWlnaHRdLFxuICAgIH0pO1xuICAgIGlmIChibG9ja0hhc2hSZXNwb25zZS5kYXRhLmlkICE9PSByYW5kb21JZDEpXG4gICAgICB0aHJvdyBFcnJvcihgVW5leHBlY3RlZEJlaGF2aW9yOiBSZXF1ZXN0IGFuZCByZXNwb25zZSBpZCBhcmUgZGlmZmVyZW50YCk7XG4gICAgY29uc3QgYmxvY2tIYXNoID0gYmxvY2tIYXNoUmVzcG9uc2UuZGF0YS5yZXN1bHQ7XG5cbiAgICBjb25zdCByYW5kb21JZDIgPSB0aGlzLmdlbmVyYXRlUmFuZG9tSWQoKTtcbiAgICAvLyBnZXQgYmxvY2sgaGVhZGVycyB1c2luZyBibG9jayBoYXNoXG4gICAgY29uc3QgYmxvY2tTdW1tYXJ5UmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PEpzb25ScGNSZXN1bHQ+KCcnLCB7XG4gICAgICBtZXRob2Q6ICdnZXRibG9jaycsXG4gICAgICBpZDogcmFuZG9tSWQyLFxuICAgICAgcGFyYW1zOiBbYmxvY2tIYXNoLCAxXSxcbiAgICB9KTtcbiAgICBpZiAoYmxvY2tTdW1tYXJ5UmVzcG9uc2UuZGF0YS5pZCAhPT0gcmFuZG9tSWQyKVxuICAgICAgdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWRCZWhhdmlvcjogUmVxdWVzdCBhbmQgcmVzcG9uc2UgaWQgYXJlIGRpZmZlcmVudGApO1xuICAgIGNvbnN0IGJsb2NrU3VtbWFyeTogRG9nZUJsb2NrU3VtbWFyeSA9IGJsb2NrU3VtbWFyeVJlc3BvbnNlLmRhdGFcbiAgICAgIC5yZXN1bHQgYXMgRG9nZUJsb2NrU3VtbWFyeTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnRIYXNoOiBibG9ja1N1bW1hcnkucHJldmlvdXNibG9ja2hhc2gsXG4gICAgICBoYXNoOiBibG9ja1N1bW1hcnkuaGFzaCxcbiAgICAgIGhlaWdodDogYmxvY2tTdW1tYXJ5LmhlaWdodCxcbiAgICAgIHRpbWVzdGFtcDogYmxvY2tTdW1tYXJ5LnRpbWUsXG4gICAgICB0eENvdW50OiBibG9ja1N1bW1hcnkudHgubGVuZ3RoLFxuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY3VycmVudCBuZXR3b3JrIGhlaWdodFxuICAgKiBAcmV0dXJucyBjdXJyZW50IGhlaWdodFxuICAgKi9cbiAgZ2V0Q3VycmVudEhlaWdodCA9IGFzeW5jICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAgIGNvbnN0IHJhbmRvbUlkID0gdGhpcy5nZW5lcmF0ZVJhbmRvbUlkKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxKc29uUnBjUmVzdWx0PignJywge1xuICAgICAgbWV0aG9kOiAnZ2V0YmxvY2tjaGFpbmluZm8nLFxuICAgICAgaWQ6IHJhbmRvbUlkLFxuICAgICAgcGFyYW1zOiBbXSxcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmRhdGEuaWQgIT09IHJhbmRvbUlkKVxuICAgICAgdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWRCZWhhdmlvcjogUmVxdWVzdCBhbmQgcmVzcG9uc2UgaWQgYXJlIGRpZmZlcmVudGApO1xuICAgIHJldHVybiAocmVzdWx0LmRhdGEucmVzdWx0IGFzIHsgYmxvY2tzOiBudW1iZXIgfSkuYmxvY2tzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJhbnNhY3Rpb25zIGluIGEgYmxvY2sgd2l0aCBzcGVjaWZpZWQgaGFzaFxuICAgKiBAcGFyYW0gYmxvY2tIYXNoXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRCbG9ja1R4cyA9IGFzeW5jIChcbiAgICBibG9ja0hhc2g6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxBcnJheTxEb2dlUnBjVHJhbnNhY3Rpb24+PiA9PiB7XG4gICAgY29uc3QgcmFuZG9tSWQgPSB0aGlzLmdlbmVyYXRlUmFuZG9tSWQoKTtcbiAgICBjb25zdCBibG9ja0hhc2hSZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3Q8SnNvblJwY1Jlc3VsdD4oJycsIHtcbiAgICAgIG1ldGhvZDogJ2dldGJsb2NrJyxcbiAgICAgIGlkOiByYW5kb21JZCxcbiAgICAgIHBhcmFtczogW2Jsb2NrSGFzaCwgMl0sIC8vIHZlcmJvc2l0eSBzaG91bGQgYmUgMiBpbiBvcmRlciB0byByZXRyaWV2ZSBmdWxsIHRyYW5zYWN0aW9uIGluZm9cbiAgICB9KTtcbiAgICBpZiAoYmxvY2tIYXNoUmVzcG9uc2UuZGF0YS5pZCAhPT0gcmFuZG9tSWQpXG4gICAgICB0aHJvdyBFcnJvcihgVW5leHBlY3RlZEJlaGF2aW9yOiBSZXF1ZXN0IGFuZCByZXNwb25zZSBpZCBhcmUgZGlmZmVyZW50YCk7XG4gICAgY29uc3QgYmxvY2tUeHMgPSAoXG4gICAgICBibG9ja0hhc2hSZXNwb25zZS5kYXRhLnJlc3VsdCBhcyB7IHR4OiBBcnJheTxEb2dlUnBjVHJhbnNhY3Rpb24+IH1cbiAgICApLnR4O1xuXG4gICAgcmV0dXJuIGJsb2NrVHhzO1xuICB9O1xufVxuIl19
@@ -0,0 +1,28 @@
1
+ import { AbstractNetworkConnector, Block } from '@rosen-bridge/scanner-interfaces';
2
+ import { BitcoinEsploraTransaction } from '../types';
3
+ export declare class EsploraNetwork extends AbstractNetworkConnector<BitcoinEsploraTransaction> {
4
+ private readonly url;
5
+ private readonly timeout;
6
+ private readonly ESPLORA_BLOCK_TXS_LIMIT;
7
+ private client;
8
+ private apiPrefix;
9
+ constructor(url: string, timeout: number, apiPrefix?: string);
10
+ /**
11
+ * Returns block at height
12
+ * @param height
13
+ * @returns Block
14
+ */
15
+ getBlockAtHeight: (height: number) => Promise<Block>;
16
+ /**
17
+ * Returns current network height
18
+ * @returns current height
19
+ */
20
+ getCurrentHeight: () => Promise<number>;
21
+ /**
22
+ * Return transactions in a block with specified hash
23
+ * @param blockHash
24
+ * @returns
25
+ */
26
+ getBlockTxs: (blockHash: string) => Promise<Array<BitcoinEsploraTransaction>>;
27
+ }
28
+ //# sourceMappingURL=esploraNetwork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esploraNetwork.d.ts","sourceRoot":"","sources":["../../lib/network/esploraNetwork.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,yBAAyB,EAAgB,MAAM,UAAU,CAAC;AAEnE,qBAAa,cAAe,SAAQ,wBAAwB,CAAC,yBAAyB,CAAC;IACrF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAM;IAC9C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,SAAS,CAAS;gBAEd,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAY5D;;;;OAIG;IACH,gBAAgB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,KAAK,CAAC,CAmBvD;IAEF;;;OAGG;IACH,gBAAgB,QAAO,OAAO,CAAC,MAAM,CAAC,CAIpC;IAEF;;;;OAIG;IACH,WAAW,GACT,WAAW,MAAM,KAChB,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAqB1C;CACH"}
@@ -0,0 +1,64 @@
1
+ import { AbstractNetworkConnector, } from '@rosen-bridge/scanner-interfaces';
2
+ import axios from '@rosen-clients/rate-limited-axios';
3
+ export class EsploraNetwork extends AbstractNetworkConnector {
4
+ url;
5
+ timeout;
6
+ ESPLORA_BLOCK_TXS_LIMIT = 25;
7
+ client;
8
+ apiPrefix;
9
+ constructor(url, timeout, apiPrefix) {
10
+ super();
11
+ this.url = url;
12
+ this.timeout = timeout;
13
+ this.client = axios.create({
14
+ baseURL: this.url,
15
+ timeout: this.timeout,
16
+ headers: { 'Content-Type': 'application/json' },
17
+ });
18
+ this.apiPrefix = apiPrefix || '/api';
19
+ }
20
+ /**
21
+ * Returns block at height
22
+ * @param height
23
+ * @returns Block
24
+ */
25
+ getBlockAtHeight = async (height) => {
26
+ // get block hash using block height
27
+ const blockHash = (await this.client.get(`${this.apiPrefix}/block-height/${height}`)).data;
28
+ // get block headers using block hash
29
+ const blockHeader = (await this.client.get(`${this.apiPrefix}/block/${blockHash}`)).data;
30
+ return {
31
+ parentHash: blockHeader.previousblockhash,
32
+ hash: blockHeader.id,
33
+ height: blockHeader.height,
34
+ timestamp: blockHeader.timestamp,
35
+ txCount: blockHeader.tx_count,
36
+ };
37
+ };
38
+ /**
39
+ * Returns current network height
40
+ * @returns current height
41
+ */
42
+ getCurrentHeight = () => {
43
+ return this.client
44
+ .get(`${this.apiPrefix}/blocks/tip/height`)
45
+ .then((res) => res.data);
46
+ };
47
+ /**
48
+ * Return transactions in a block with specified hash
49
+ * @param blockHash
50
+ * @returns
51
+ */
52
+ getBlockTxs = async (blockHash) => {
53
+ const txCount = (await this.client.get(`${this.apiPrefix}/block/${blockHash}`)).data.tx_count;
54
+ const blockTxs = [];
55
+ let offset = 0;
56
+ while (offset < txCount) {
57
+ const txs = (await this.client.get(`${this.apiPrefix}/block/${blockHash}/txs/${offset}`)).data;
58
+ blockTxs.push(...txs);
59
+ offset += this.ESPLORA_BLOCK_TXS_LIMIT;
60
+ }
61
+ return blockTxs;
62
+ };
63
+ }
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwbG9yYU5ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbmV0d29yay9lc3Bsb3JhTmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsd0JBQXdCLEdBRXpCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxLQUFnQixNQUFNLG1DQUFtQyxDQUFDO0FBSWpFLE1BQU0sT0FBTyxjQUFlLFNBQVEsd0JBQW1EO0lBQ3BFLEdBQUcsQ0FBUztJQUNaLE9BQU8sQ0FBUztJQUNoQix1QkFBdUIsR0FBRyxFQUFFLENBQUM7SUFDdEMsTUFBTSxDQUFRO0lBQ2QsU0FBUyxDQUFTO0lBRTFCLFlBQVksR0FBVyxFQUFFLE9BQWUsRUFBRSxTQUFrQjtRQUMxRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRztZQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1NBQ2hELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdCQUFnQixHQUFHLEtBQUssRUFBRSxNQUFjLEVBQWtCLEVBQUU7UUFDMUQsb0NBQW9DO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLENBQ2hCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxpQkFBaUIsTUFBTSxFQUFFLENBQUMsQ0FDMUUsQ0FBQyxJQUFJLENBQUM7UUFFUCxxQ0FBcUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsQ0FDbEIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDbkIsR0FBRyxJQUFJLENBQUMsU0FBUyxVQUFVLFNBQVMsRUFBRSxDQUN2QyxDQUNGLENBQUMsSUFBSSxDQUFDO1FBQ1AsT0FBTztZQUNMLFVBQVUsRUFBRSxXQUFXLENBQUMsaUJBQWlCO1lBQ3pDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRTtZQUNwQixNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU07WUFDMUIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO1lBQ2hDLE9BQU8sRUFBRSxXQUFXLENBQUMsUUFBUTtTQUM5QixDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsZ0JBQWdCLEdBQUcsR0FBb0IsRUFBRTtRQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNO2FBQ2YsR0FBRyxDQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsb0JBQW9CLENBQUM7YUFDbEQsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILFdBQVcsR0FBRyxLQUFLLEVBQ2pCLFNBQWlCLEVBQzBCLEVBQUU7UUFDN0MsTUFBTSxPQUFPLEdBQUcsQ0FDZCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNuQixHQUFHLElBQUksQ0FBQyxTQUFTLFVBQVUsU0FBUyxFQUFFLENBQ3ZDLENBQ0YsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRWhCLE1BQU0sUUFBUSxHQUFxQyxFQUFFLENBQUM7UUFDdEQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsT0FBTyxNQUFNLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDeEIsTUFBTSxHQUFHLEdBQUcsQ0FDVixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNuQixHQUFHLElBQUksQ0FBQyxTQUFTLFVBQVUsU0FBUyxRQUFRLE1BQU0sRUFBRSxDQUNyRCxDQUNGLENBQUMsSUFBSSxDQUFDO1lBQ1AsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yLFxuICBCbG9jayxcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zIH0gZnJvbSAnQHJvc2VuLWNsaWVudHMvcmF0ZS1saW1pdGVkLWF4aW9zJztcblxuaW1wb3J0IHsgQml0Y29pbkVzcGxvcmFUcmFuc2FjdGlvbiwgRXNwbG9yYUJsb2NrIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRXNwbG9yYU5ldHdvcmsgZXh0ZW5kcyBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3I8Qml0Y29pbkVzcGxvcmFUcmFuc2FjdGlvbj4ge1xuICBwcml2YXRlIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBFU1BMT1JBX0JMT0NLX1RYU19MSU1JVCA9IDI1O1xuICBwcml2YXRlIGNsaWVudDogQXhpb3M7XG4gIHByaXZhdGUgYXBpUHJlZml4OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IodXJsOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlciwgYXBpUHJlZml4Pzogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICAgIHRoaXMuY2xpZW50ID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IHRoaXMudXJsLFxuICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgfSk7XG4gICAgdGhpcy5hcGlQcmVmaXggPSBhcGlQcmVmaXggfHwgJy9hcGknO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYmxvY2sgYXQgaGVpZ2h0XG4gICAqIEBwYXJhbSBoZWlnaHRcbiAgICogQHJldHVybnMgQmxvY2tcbiAgICovXG4gIGdldEJsb2NrQXRIZWlnaHQgPSBhc3luYyAoaGVpZ2h0OiBudW1iZXIpOiBQcm9taXNlPEJsb2NrPiA9PiB7XG4gICAgLy8gZ2V0IGJsb2NrIGhhc2ggdXNpbmcgYmxvY2sgaGVpZ2h0XG4gICAgY29uc3QgYmxvY2tIYXNoID0gKFxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQuZ2V0PHN0cmluZz4oYCR7dGhpcy5hcGlQcmVmaXh9L2Jsb2NrLWhlaWdodC8ke2hlaWdodH1gKVxuICAgICkuZGF0YTtcblxuICAgIC8vIGdldCBibG9jayBoZWFkZXJzIHVzaW5nIGJsb2NrIGhhc2hcbiAgICBjb25zdCBibG9ja0hlYWRlciA9IChcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmdldDxFc3Bsb3JhQmxvY2s+KFxuICAgICAgICBgJHt0aGlzLmFwaVByZWZpeH0vYmxvY2svJHtibG9ja0hhc2h9YCxcbiAgICAgIClcbiAgICApLmRhdGE7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudEhhc2g6IGJsb2NrSGVhZGVyLnByZXZpb3VzYmxvY2toYXNoLFxuICAgICAgaGFzaDogYmxvY2tIZWFkZXIuaWQsXG4gICAgICBoZWlnaHQ6IGJsb2NrSGVhZGVyLmhlaWdodCxcbiAgICAgIHRpbWVzdGFtcDogYmxvY2tIZWFkZXIudGltZXN0YW1wLFxuICAgICAgdHhDb3VudDogYmxvY2tIZWFkZXIudHhfY291bnQsXG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBjdXJyZW50IG5ldHdvcmsgaGVpZ2h0XG4gICAqIEByZXR1cm5zIGN1cnJlbnQgaGVpZ2h0XG4gICAqL1xuICBnZXRDdXJyZW50SGVpZ2h0ID0gKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50XG4gICAgICAuZ2V0PG51bWJlcj4oYCR7dGhpcy5hcGlQcmVmaXh9L2Jsb2Nrcy90aXAvaGVpZ2h0YClcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5kYXRhKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJuIHRyYW5zYWN0aW9ucyBpbiBhIGJsb2NrIHdpdGggc3BlY2lmaWVkIGhhc2hcbiAgICogQHBhcmFtIGJsb2NrSGFzaFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QmxvY2tUeHMgPSBhc3luYyAoXG4gICAgYmxvY2tIYXNoOiBzdHJpbmcsXG4gICk6IFByb21pc2U8QXJyYXk8Qml0Y29pbkVzcGxvcmFUcmFuc2FjdGlvbj4+ID0+IHtcbiAgICBjb25zdCB0eENvdW50ID0gKFxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQuZ2V0PEVzcGxvcmFCbG9jaz4oXG4gICAgICAgIGAke3RoaXMuYXBpUHJlZml4fS9ibG9jay8ke2Jsb2NrSGFzaH1gLFxuICAgICAgKVxuICAgICkuZGF0YS50eF9jb3VudDtcblxuICAgIGNvbnN0IGJsb2NrVHhzOiBBcnJheTxCaXRjb2luRXNwbG9yYVRyYW5zYWN0aW9uPiA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuXG4gICAgd2hpbGUgKG9mZnNldCA8IHR4Q291bnQpIHtcbiAgICAgIGNvbnN0IHR4cyA9IChcbiAgICAgICAgYXdhaXQgdGhpcy5jbGllbnQuZ2V0PEFycmF5PEJpdGNvaW5Fc3Bsb3JhVHJhbnNhY3Rpb24+PihcbiAgICAgICAgICBgJHt0aGlzLmFwaVByZWZpeH0vYmxvY2svJHtibG9ja0hhc2h9L3R4cy8ke29mZnNldH1gLFxuICAgICAgICApXG4gICAgICApLmRhdGE7XG4gICAgICBibG9ja1R4cy5wdXNoKC4uLnR4cyk7XG4gICAgICBvZmZzZXQgKz0gdGhpcy5FU1BMT1JBX0JMT0NLX1RYU19MSU1JVDtcbiAgICB9XG5cbiAgICByZXR1cm4gYmxvY2tUeHM7XG4gIH07XG59XG4iXX0=
@@ -0,0 +1,6 @@
1
+ import { GeneralScanner, ScannerConfig } from '@rosen-bridge/abstract-scanner';
2
+ import { BitcoinEsploraTransaction } from '../types';
3
+ export declare class BitcoinEsploraScanner extends GeneralScanner<BitcoinEsploraTransaction> {
4
+ constructor(config: ScannerConfig<BitcoinEsploraTransaction>);
5
+ }
6
+ //# sourceMappingURL=bitcoinEsploraScanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitcoinEsploraScanner.d.ts","sourceRoot":"","sources":["../../lib/scanner/bitcoinEsploraScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAErD,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,yBAAyB,CAAC;gBACtE,MAAM,EAAE,aAAa,CAAC,yBAAyB,CAAC;CAY7D"}
@@ -0,0 +1,7 @@
1
+ import { GeneralScanner } from '@rosen-bridge/abstract-scanner';
2
+ export class BitcoinEsploraScanner extends GeneralScanner {
3
+ constructor(config) {
4
+ super('bitcoin', config.dataSource, config.initialHeight, config.network, config.blockRetrieveGap, config.logger, config.suffix, config.heightGap);
5
+ }
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Y29pbkVzcGxvcmFTY2FubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3NjYW5uZXIvYml0Y29pbkVzcGxvcmFTY2FubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQWlCLE1BQU0sZ0NBQWdDLENBQUM7QUFJL0UsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGNBQXlDO0lBQ2xGLFlBQVksTUFBZ0Q7UUFDMUQsS0FBSyxDQUNILFNBQVMsRUFDVCxNQUFNLENBQUMsVUFBVSxFQUNqQixNQUFNLENBQUMsYUFBYSxFQUNwQixNQUFNLENBQUMsT0FBTyxFQUNkLE1BQU0sQ0FBQyxnQkFBZ0IsRUFDdkIsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsTUFBTSxFQUNiLE1BQU0sQ0FBQyxTQUFTLENBQ2pCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW5lcmFsU2Nhbm5lciwgU2Nhbm5lckNvbmZpZyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3Qtc2Nhbm5lcic7XG5cbmltcG9ydCB7IEJpdGNvaW5Fc3Bsb3JhVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBCaXRjb2luRXNwbG9yYVNjYW5uZXIgZXh0ZW5kcyBHZW5lcmFsU2Nhbm5lcjxCaXRjb2luRXNwbG9yYVRyYW5zYWN0aW9uPiB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogU2Nhbm5lckNvbmZpZzxCaXRjb2luRXNwbG9yYVRyYW5zYWN0aW9uPikge1xuICAgIHN1cGVyKFxuICAgICAgJ2JpdGNvaW4nLFxuICAgICAgY29uZmlnLmRhdGFTb3VyY2UsXG4gICAgICBjb25maWcuaW5pdGlhbEhlaWdodCxcbiAgICAgIGNvbmZpZy5uZXR3b3JrLFxuICAgICAgY29uZmlnLmJsb2NrUmV0cmlldmVHYXAsXG4gICAgICBjb25maWcubG9nZ2VyLFxuICAgICAgY29uZmlnLnN1ZmZpeCxcbiAgICAgIGNvbmZpZy5oZWlnaHRHYXAsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,6 @@
1
+ import { GeneralScanner, ScannerConfig } from '@rosen-bridge/abstract-scanner';
2
+ import { BitcoinRpcTransaction } from '../types';
3
+ export declare class BitcoinRpcScanner extends GeneralScanner<BitcoinRpcTransaction> {
4
+ constructor(config: ScannerConfig<BitcoinRpcTransaction>);
5
+ }
6
+ //# sourceMappingURL=bitcoinRpcScanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitcoinRpcScanner.d.ts","sourceRoot":"","sources":["../../lib/scanner/bitcoinRpcScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,qBAAa,iBAAkB,SAAQ,cAAc,CAAC,qBAAqB,CAAC;gBAC9D,MAAM,EAAE,aAAa,CAAC,qBAAqB,CAAC;CAYzD"}
@@ -0,0 +1,7 @@
1
+ import { GeneralScanner } from '@rosen-bridge/abstract-scanner';
2
+ export class BitcoinRpcScanner extends GeneralScanner {
3
+ constructor(config) {
4
+ super('bitcoin', config.dataSource, config.initialHeight, config.network, config.blockRetrieveGap, config.logger, config.suffix, config.heightGap);
5
+ }
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Y29pblJwY1NjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvc2Nhbm5lci9iaXRjb2luUnBjU2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBSS9FLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxjQUFxQztJQUMxRSxZQUFZLE1BQTRDO1FBQ3RELEtBQUssQ0FDSCxTQUFTLEVBQ1QsTUFBTSxDQUFDLFVBQVUsRUFDakIsTUFBTSxDQUFDLGFBQWEsRUFDcEIsTUFBTSxDQUFDLE9BQU8sRUFDZCxNQUFNLENBQUMsZ0JBQWdCLEVBQ3ZCLE1BQU0sQ0FBQyxNQUFNLEVBQ2IsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsU0FBUyxDQUNqQixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VuZXJhbFNjYW5uZXIsIFNjYW5uZXJDb25maWcgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LXNjYW5uZXInO1xuXG5pbXBvcnQgeyBCaXRjb2luUnBjVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBCaXRjb2luUnBjU2Nhbm5lciBleHRlbmRzIEdlbmVyYWxTY2FubmVyPEJpdGNvaW5ScGNUcmFuc2FjdGlvbj4ge1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IFNjYW5uZXJDb25maWc8Qml0Y29pblJwY1RyYW5zYWN0aW9uPikge1xuICAgIHN1cGVyKFxuICAgICAgJ2JpdGNvaW4nLFxuICAgICAgY29uZmlnLmRhdGFTb3VyY2UsXG4gICAgICBjb25maWcuaW5pdGlhbEhlaWdodCxcbiAgICAgIGNvbmZpZy5uZXR3b3JrLFxuICAgICAgY29uZmlnLmJsb2NrUmV0cmlldmVHYXAsXG4gICAgICBjb25maWcubG9nZ2VyLFxuICAgICAgY29uZmlnLnN1ZmZpeCxcbiAgICAgIGNvbmZpZy5oZWlnaHRHYXAsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,6 @@
1
+ import { GeneralScanner, ScannerConfig } from '@rosen-bridge/abstract-scanner';
2
+ import { BitcoinEsploraTransaction } from '../types';
3
+ export declare class DogeEsploraScanner extends GeneralScanner<BitcoinEsploraTransaction> {
4
+ constructor(config: ScannerConfig<BitcoinEsploraTransaction>);
5
+ }
6
+ //# sourceMappingURL=dogeEsploraScanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dogeEsploraScanner.d.ts","sourceRoot":"","sources":["../../lib/scanner/dogeEsploraScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAErD,qBAAa,kBAAmB,SAAQ,cAAc,CAAC,yBAAyB,CAAC;gBACnE,MAAM,EAAE,aAAa,CAAC,yBAAyB,CAAC;CAY7D"}
@@ -0,0 +1,7 @@
1
+ import { GeneralScanner } from '@rosen-bridge/abstract-scanner';
2
+ export class DogeEsploraScanner extends GeneralScanner {
3
+ constructor(config) {
4
+ super('doge', config.dataSource, config.initialHeight, config.network, config.blockRetrieveGap, config.logger, config.suffix, config.heightGap);
5
+ }
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9nZUVzcGxvcmFTY2FubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3NjYW5uZXIvZG9nZUVzcGxvcmFTY2FubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQWlCLE1BQU0sZ0NBQWdDLENBQUM7QUFJL0UsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQXlDO0lBQy9FLFlBQVksTUFBZ0Q7UUFDMUQsS0FBSyxDQUNILE1BQU0sRUFDTixNQUFNLENBQUMsVUFBVSxFQUNqQixNQUFNLENBQUMsYUFBYSxFQUNwQixNQUFNLENBQUMsT0FBTyxFQUNkLE1BQU0sQ0FBQyxnQkFBZ0IsRUFDdkIsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsTUFBTSxFQUNiLE1BQU0sQ0FBQyxTQUFTLENBQ2pCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW5lcmFsU2Nhbm5lciwgU2Nhbm5lckNvbmZpZyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3Qtc2Nhbm5lcic7XG5cbmltcG9ydCB7IEJpdGNvaW5Fc3Bsb3JhVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBEb2dlRXNwbG9yYVNjYW5uZXIgZXh0ZW5kcyBHZW5lcmFsU2Nhbm5lcjxCaXRjb2luRXNwbG9yYVRyYW5zYWN0aW9uPiB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogU2Nhbm5lckNvbmZpZzxCaXRjb2luRXNwbG9yYVRyYW5zYWN0aW9uPikge1xuICAgIHN1cGVyKFxuICAgICAgJ2RvZ2UnLFxuICAgICAgY29uZmlnLmRhdGFTb3VyY2UsXG4gICAgICBjb25maWcuaW5pdGlhbEhlaWdodCxcbiAgICAgIGNvbmZpZy5uZXR3b3JrLFxuICAgICAgY29uZmlnLmJsb2NrUmV0cmlldmVHYXAsXG4gICAgICBjb25maWcubG9nZ2VyLFxuICAgICAgY29uZmlnLnN1ZmZpeCxcbiAgICAgIGNvbmZpZy5oZWlnaHRHYXAsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,6 @@
1
+ import { GeneralScanner, ScannerConfig } from '@rosen-bridge/abstract-scanner';
2
+ import { DogeRpcTransaction } from '../types';
3
+ export declare class DogeRpcScanner extends GeneralScanner<DogeRpcTransaction> {
4
+ constructor(config: ScannerConfig<DogeRpcTransaction>);
5
+ }
6
+ //# sourceMappingURL=dogeRpcScanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dogeRpcScanner.d.ts","sourceRoot":"","sources":["../../lib/scanner/dogeRpcScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,qBAAa,cAAe,SAAQ,cAAc,CAAC,kBAAkB,CAAC;gBACxD,MAAM,EAAE,aAAa,CAAC,kBAAkB,CAAC;CAYtD"}