@rosen-bridge/bitcoin-scanner 0.1.0-52fc0239
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/.eslintignore +1 -0
- package/CHANGELOG.md +11 -0
- package/README.md +24 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/network/BitcoinRpcNetwork.d.ts +30 -0
- package/dist/network/BitcoinRpcNetwork.d.ts.map +1 -0
- package/dist/network/BitcoinRpcNetwork.js +88 -0
- package/dist/network/DogeRpcNetwork.d.ts +30 -0
- package/dist/network/DogeRpcNetwork.d.ts.map +1 -0
- package/dist/network/DogeRpcNetwork.js +88 -0
- package/dist/network/EsploraNetwork.d.ts +28 -0
- package/dist/network/EsploraNetwork.d.ts.map +1 -0
- package/dist/network/EsploraNetwork.js +64 -0
- package/dist/scanner/BitcoinEsploraScanner.d.ts +6 -0
- package/dist/scanner/BitcoinEsploraScanner.d.ts.map +1 -0
- package/dist/scanner/BitcoinEsploraScanner.js +7 -0
- package/dist/scanner/BitcoinRpcScanner.d.ts +6 -0
- package/dist/scanner/BitcoinRpcScanner.d.ts.map +1 -0
- package/dist/scanner/BitcoinRpcScanner.js +7 -0
- package/dist/scanner/DogeEsploraScanner.d.ts +6 -0
- package/dist/scanner/DogeEsploraScanner.d.ts.map +1 -0
- package/dist/scanner/DogeEsploraScanner.js +7 -0
- package/dist/scanner/DogeRpcScanner.d.ts +6 -0
- package/dist/scanner/DogeRpcScanner.d.ts.map +1 -0
- package/dist/scanner/DogeRpcScanner.js +7 -0
- package/dist/types.d.ts +142 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/lib/index.ts +8 -0
- package/lib/network/BitcoinRpcNetwork.ts +111 -0
- package/lib/network/DogeRpcNetwork.ts +112 -0
- package/lib/network/EsploraNetwork.ts +92 -0
- package/lib/scanner/BitcoinEsploraScanner.ts +15 -0
- package/lib/scanner/BitcoinRpcScanner.ts +16 -0
- package/lib/scanner/DogeEsploraScanner.ts +15 -0
- package/lib/scanner/DogeRpcScanner.ts +16 -0
- package/lib/types.ts +155 -0
- package/package.json +35 -0
- package/tests/bitcoinEsploraTestData.ts +1773 -0
- package/tests/bitcoinRpcTestData.ts +305 -0
- package/tests/dogeRpcTestData.ts +659 -0
- package/tests/mocked/axiosEsplora.mock.ts +28 -0
- package/tests/mocked/axiosRpc.mock.ts +28 -0
- package/tests/network/BitcoinRpcNetwork.spec.ts +112 -0
- package/tests/network/DogeRpcNetwork.spec.ts +111 -0
- package/tests/network/EsploraNetwork.spec.ts +106 -0
- package/tsconfig.build.json +11 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.json +11 -0
- package/vitest.config.ts +18 -0
package/.eslintignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
dist
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# @rosen-bridge/bitcoin-scanner
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## 0.1.0
|
|
6
|
+
|
|
7
|
+
- This package was **integrated** from `@rosen-bridge/bitcoin-esplora-scanner` and `@rosen-bridge/bitcoin-rpc-scanner`.
|
|
8
|
+
You can follow the previous history in the old package’s changelog. The last changelog updates for the integrated packages are available below:
|
|
9
|
+
|
|
10
|
+
- [Bitcoin Esplora Scanner Changelog](https://github.com/rosen-bridge/scanner/blob/d4a5539b01c523b101104470b03ff7023a10b70b/packages/scanners/bitcoin-esplora-scanner/CHANGELOG.md)
|
|
11
|
+
- [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
|
+
```
|
package/dist/index.d.ts
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=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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsY0FBYyxTQUFTLENBQUM7QUFDeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBCaXRjb2luRXNwbG9yYVNjYW5uZXIgfSBmcm9tICcuL3NjYW5uZXIvQml0Y29pbkVzcGxvcmFTY2FubmVyJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IHsgRG9nZUVzcGxvcmFTY2FubmVyIH0gZnJvbSAnLi9zY2FubmVyL0RvZ2VFc3Bsb3JhU2Nhbm5lcic7XG5leHBvcnQgeyBFc3Bsb3JhTmV0d29yayB9IGZyb20gJy4vbmV0d29yay9Fc3Bsb3JhTmV0d29yayc7XG5leHBvcnQgKiBmcm9tICcuL3NjYW5uZXIvQml0Y29pblJwY1NjYW5uZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zY2FubmVyL0RvZ2VScGNTY2FubmVyJztcbmV4cG9ydCAqIGZyb20gJy4vbmV0d29yay9CaXRjb2luUnBjTmV0d29yayc7XG5leHBvcnQgKiBmcm9tICcuL25ldHdvcmsvRG9nZVJwY05ldHdvcmsnO1xuIl19
|
|
@@ -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":"AACA,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAA8B,MAAM,UAAU,CAAC;AAI7E,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,WAAkB,MAAM,KAAG,QAAQ,KAAK,CAAC,CA8BvD;IAEF;;;OAGG;IACH,gBAAgB,QAAa,QAAQ,MAAM,CAAC,CAU1C;IAEF;;;;OAIG;IACH,WAAW,cACE,MAAM,KAChB,QAAQ,MAAM,qBAAqB,CAAC,CAAC,CActC;CACH"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import axios from '@rosen-bridge/rate-limited-axios';
|
|
2
|
+
import { AbstractNetworkConnector, } from '@rosen-bridge/scanner-interfaces';
|
|
3
|
+
import { randomBytes } from 'crypto';
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQml0Y29pblJwY05ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbmV0d29yay9CaXRjb2luUnBjTmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQWdCLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUNMLHdCQUF3QixHQUV6QixNQUFNLGtDQUFrQyxDQUFDO0FBRzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFckMsTUFBTSxPQUFPLGlCQUFrQixTQUFRLHdCQUErQztJQUNuRSxHQUFHLENBQVM7SUFDWixPQUFPLENBQVM7SUFDekIsTUFBTSxDQUFRO0lBRXRCLFlBQ0UsR0FBVyxFQUNYLE9BQWUsRUFDZixJQUdDO1FBRUQsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRTtZQUMvQyxJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFOzs7O09BSUc7SUFDSCxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsTUFBYyxFQUFrQixFQUFFO1FBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFDLG9DQUFvQztRQUNwQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWdCLEVBQUUsRUFBRTtZQUNsRSxNQUFNLEVBQUUsY0FBYztZQUN0QixFQUFFLEVBQUUsU0FBUztZQUNiLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUNqQixDQUFDLENBQUM7UUFDSCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssU0FBUztZQUN6QyxNQUFNLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUMscUNBQXFDO1FBQ3JDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBZ0IsRUFBRSxFQUFFO1lBQ3BFLE1BQU0sRUFBRSxnQkFBZ0I7WUFDeEIsRUFBRSxFQUFFLFNBQVM7WUFDYixNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO1NBQzFCLENBQUMsQ0FBQztRQUNILElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTO1lBQzNDLE1BQU0sS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDM0UsTUFBTSxXQUFXLEdBQWdCLG1CQUFtQixDQUFDLElBQUk7YUFDdEQsTUFBcUIsQ0FBQztRQUN6QixPQUFPO1lBQ0wsVUFBVSxFQUFFLFdBQVcsQ0FBQyxpQkFBaUI7WUFDekMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO1lBQ3RCLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTTtZQUMxQixTQUFTLEVBQUUsV0FBVyxDQUFDLElBQUk7WUFDM0IsT0FBTyxFQUFFLFdBQVcsQ0FBQyxHQUFHO1NBQ3pCLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxnQkFBZ0IsR0FBRyxLQUFLLElBQXFCLEVBQUU7UUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBZ0IsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sRUFBRSxtQkFBbUI7WUFDM0IsRUFBRSxFQUFFLFFBQVE7WUFDWixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUTtZQUM3QixNQUFNLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQzNFLE9BQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUE2QixDQUFDLE1BQU0sQ0FBQztJQUMzRCxDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsV0FBVyxHQUFHLEtBQUssRUFDakIsU0FBaUIsRUFDc0IsRUFBRTtRQUN6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWdCLEVBQUUsRUFBRTtZQUNsRSxNQUFNLEVBQUUsVUFBVTtZQUNsQixFQUFFLEVBQUUsUUFBUTtZQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxtRUFBbUU7U0FDNUYsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVE7WUFDeEMsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMzRSxNQUFNLFFBQVEsR0FDWixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFDeEIsQ0FBQyxFQUFFLENBQUM7UUFFTCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcywgeyBBeGlvcyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvcmF0ZS1saW1pdGVkLWF4aW9zJztcbmltcG9ydCB7XG4gIEFic3RyYWN0TmV0d29ya0Nvbm5lY3RvcixcbiAgQmxvY2ssXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJpdGNvaW5ScGNUcmFuc2FjdGlvbiwgQmxvY2tIZWFkZXIsIEpzb25ScGNSZXN1bHQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuZXhwb3J0IGNsYXNzIEJpdGNvaW5ScGNOZXR3b3JrIGV4dGVuZHMgQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yPEJpdGNvaW5ScGNUcmFuc2FjdGlvbj4ge1xuICBwcml2YXRlIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBjbGllbnQ6IEF4aW9zO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHVybDogc3RyaW5nLFxuICAgIHRpbWVvdXQ6IG51bWJlcixcbiAgICBhdXRoPzoge1xuICAgICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgfVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgdGhpcy5jbGllbnQgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogdGhpcy51cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGF1dGg6IGF1dGgsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlUmFuZG9tSWQgPSAoKSA9PiByYW5kb21CeXRlcygzMikudG9TdHJpbmcoJ2hleCcpO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGJsb2NrIGF0IGhlaWdodFxuICAgKiBAcGFyYW0gaGVpZ2h0XG4gICAqIEByZXR1cm5zIEJsb2NrXG4gICAqL1xuICBnZXRCbG9ja0F0SGVpZ2h0ID0gYXN5bmMgKGhlaWdodDogbnVtYmVyKTogUHJvbWlzZTxCbG9jaz4gPT4ge1xuICAgIGNvbnN0IHJhbmRvbUlkMSA9IHRoaXMuZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgIC8vIGdldCBibG9jayBoYXNoIHVzaW5nIGJsb2NrIGhlaWdodFxuICAgIGNvbnN0IGJsb2NrSGFzaFJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxKc29uUnBjUmVzdWx0PignJywge1xuICAgICAgbWV0aG9kOiAnZ2V0YmxvY2toYXNoJyxcbiAgICAgIGlkOiByYW5kb21JZDEsXG4gICAgICBwYXJhbXM6IFtoZWlnaHRdLFxuICAgIH0pO1xuICAgIGlmIChibG9ja0hhc2hSZXNwb25zZS5kYXRhLmlkICE9PSByYW5kb21JZDEpXG4gICAgICB0aHJvdyBFcnJvcihgVW5leHBlY3RlZEJlaGF2aW9yOiBSZXF1ZXN0IGFuZCByZXNwb25zZSBpZCBhcmUgZGlmZmVyZW50YCk7XG4gICAgY29uc3QgYmxvY2tIYXNoID0gYmxvY2tIYXNoUmVzcG9uc2UuZGF0YS5yZXN1bHQ7XG5cbiAgICBjb25zdCByYW5kb21JZDIgPSB0aGlzLmdlbmVyYXRlUmFuZG9tSWQoKTtcbiAgICAvLyBnZXQgYmxvY2sgaGVhZGVycyB1c2luZyBibG9jayBoYXNoXG4gICAgY29uc3QgYmxvY2tIZWFkZXJSZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3Q8SnNvblJwY1Jlc3VsdD4oJycsIHtcbiAgICAgIG1ldGhvZDogJ2dldGJsb2NraGVhZGVyJyxcbiAgICAgIGlkOiByYW5kb21JZDIsXG4gICAgICBwYXJhbXM6IFtibG9ja0hhc2gsIHRydWVdLFxuICAgIH0pO1xuICAgIGlmIChibG9ja0hlYWRlclJlc3BvbnNlLmRhdGEuaWQgIT09IHJhbmRvbUlkMilcbiAgICAgIHRocm93IEVycm9yKGBVbmV4cGVjdGVkQmVoYXZpb3I6IFJlcXVlc3QgYW5kIHJlc3BvbnNlIGlkIGFyZSBkaWZmZXJlbnRgKTtcbiAgICBjb25zdCBibG9ja0hlYWRlcjogQmxvY2tIZWFkZXIgPSBibG9ja0hlYWRlclJlc3BvbnNlLmRhdGFcbiAgICAgIC5yZXN1bHQgYXMgQmxvY2tIZWFkZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudEhhc2g6IGJsb2NrSGVhZGVyLnByZXZpb3VzYmxvY2toYXNoLFxuICAgICAgaGFzaDogYmxvY2tIZWFkZXIuaGFzaCxcbiAgICAgIGhlaWdodDogYmxvY2tIZWFkZXIuaGVpZ2h0LFxuICAgICAgdGltZXN0YW1wOiBibG9ja0hlYWRlci50aW1lLFxuICAgICAgdHhDb3VudDogYmxvY2tIZWFkZXIublR4LFxuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY3VycmVudCBuZXR3b3JrIGhlaWdodFxuICAgKiBAcmV0dXJucyBjdXJyZW50IGhlaWdodFxuICAgKi9cbiAgZ2V0Q3VycmVudEhlaWdodCA9IGFzeW5jICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAgIGNvbnN0IHJhbmRvbUlkID0gdGhpcy5nZW5lcmF0ZVJhbmRvbUlkKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxKc29uUnBjUmVzdWx0PignJywge1xuICAgICAgbWV0aG9kOiAnZ2V0YmxvY2tjaGFpbmluZm8nLFxuICAgICAgaWQ6IHJhbmRvbUlkLFxuICAgICAgcGFyYW1zOiBbXSxcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmRhdGEuaWQgIT09IHJhbmRvbUlkKVxuICAgICAgdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWRCZWhhdmlvcjogUmVxdWVzdCBhbmQgcmVzcG9uc2UgaWQgYXJlIGRpZmZlcmVudGApO1xuICAgIHJldHVybiAocmVzdWx0LmRhdGEucmVzdWx0IGFzIHsgYmxvY2tzOiBudW1iZXIgfSkuYmxvY2tzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJhbnNhY3Rpb25zIGluIGEgYmxvY2sgd2l0aCBzcGVjaWZpZWQgaGFzaFxuICAgKiBAcGFyYW0gYmxvY2tIYXNoXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRCbG9ja1R4cyA9IGFzeW5jIChcbiAgICBibG9ja0hhc2g6IHN0cmluZ1xuICApOiBQcm9taXNlPEFycmF5PEJpdGNvaW5ScGNUcmFuc2FjdGlvbj4+ID0+IHtcbiAgICBjb25zdCByYW5kb21JZCA9IHRoaXMuZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgIGNvbnN0IGJsb2NrSGFzaFJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxKc29uUnBjUmVzdWx0PignJywge1xuICAgICAgbWV0aG9kOiAnZ2V0YmxvY2snLFxuICAgICAgaWQ6IHJhbmRvbUlkLFxuICAgICAgcGFyYW1zOiBbYmxvY2tIYXNoLCAyXSwgLy8gdmVyYm9zaXR5IHNob3VsZCBiZSAyIGluIG9yZGVyIHRvIHJldHJpZXZlIGZ1bGwgdHJhbnNhY3Rpb24gaW5mb1xuICAgIH0pO1xuICAgIGlmIChibG9ja0hhc2hSZXNwb25zZS5kYXRhLmlkICE9PSByYW5kb21JZClcbiAgICAgIHRocm93IEVycm9yKGBVbmV4cGVjdGVkQmVoYXZpb3I6IFJlcXVlc3QgYW5kIHJlc3BvbnNlIGlkIGFyZSBkaWZmZXJlbnRgKTtcbiAgICBjb25zdCBibG9ja1R4cyA9IChcbiAgICAgIGJsb2NrSGFzaFJlc3BvbnNlLmRhdGEucmVzdWx0IGFzIHsgdHg6IEFycmF5PEJpdGNvaW5ScGNUcmFuc2FjdGlvbj4gfVxuICAgICkudHg7XG5cbiAgICByZXR1cm4gYmxvY2tUeHM7XG4gIH07XG59XG4iXX0=
|
|
@@ -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":"AACA,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAmC,MAAM,UAAU,CAAC;AAI/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,WAAkB,MAAM,KAAG,QAAQ,KAAK,CAAC,CA+BvD;IAEF;;;OAGG;IACH,gBAAgB,QAAa,QAAQ,MAAM,CAAC,CAU1C;IAEF;;;;OAIG;IACH,WAAW,cACE,MAAM,KAChB,QAAQ,MAAM,kBAAkB,CAAC,CAAC,CAcnC;CACH"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import axios from '@rosen-bridge/rate-limited-axios';
|
|
2
|
+
import { AbstractNetworkConnector, } from '@rosen-bridge/scanner-interfaces';
|
|
3
|
+
import { randomBytes } from 'crypto';
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG9nZVJwY05ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbmV0d29yay9Eb2dlUnBjTmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQWdCLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUNMLHdCQUF3QixHQUV6QixNQUFNLGtDQUFrQyxDQUFDO0FBRzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFckMsTUFBTSxPQUFPLGNBQWUsU0FBUSx3QkFBNEM7SUFDN0QsR0FBRyxDQUFTO0lBQ1osT0FBTyxDQUFTO0lBQ3pCLE1BQU0sQ0FBUTtJQUV0QixZQUNFLEdBQVcsRUFDWCxPQUFlLEVBQ2YsSUFHQztRQUVELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDekIsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7WUFDL0MsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRTs7OztPQUlHO0lBQ0gsZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLE1BQWMsRUFBa0IsRUFBRTtRQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQyxvQ0FBb0M7UUFDcEMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFnQixFQUFFLEVBQUU7WUFDbEUsTUFBTSxFQUFFLGNBQWM7WUFDdEIsRUFBRSxFQUFFLFNBQVM7WUFDYixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVM7WUFDekMsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMzRSxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRWhELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFDLHFDQUFxQztRQUNyQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWdCLEVBQUUsRUFBRTtZQUNyRSxNQUFNLEVBQUUsVUFBVTtZQUNsQixFQUFFLEVBQUUsU0FBUztZQUNiLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVM7WUFDNUMsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMzRSxNQUFNLFlBQVksR0FBcUIsb0JBQW9CLENBQUMsSUFBSTthQUM3RCxNQUEwQixDQUFDO1FBRTlCLE9BQU87WUFDTCxVQUFVLEVBQUUsWUFBWSxDQUFDLGlCQUFpQjtZQUMxQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDdkIsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQzNCLFNBQVMsRUFBRSxZQUFZLENBQUMsSUFBSTtZQUM1QixPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNO1NBQ2hDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxnQkFBZ0IsR0FBRyxLQUFLLElBQXFCLEVBQUU7UUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBZ0IsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sRUFBRSxtQkFBbUI7WUFDM0IsRUFBRSxFQUFFLFFBQVE7WUFDWixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUTtZQUM3QixNQUFNLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQzNFLE9BQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUE2QixDQUFDLE1BQU0sQ0FBQztJQUMzRCxDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsV0FBVyxHQUFHLEtBQUssRUFDakIsU0FBaUIsRUFDbUIsRUFBRTtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWdCLEVBQUUsRUFBRTtZQUNsRSxNQUFNLEVBQUUsVUFBVTtZQUNsQixFQUFFLEVBQUUsUUFBUTtZQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxtRUFBbUU7U0FDNUYsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVE7WUFDeEMsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMzRSxNQUFNLFFBQVEsR0FDWixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFDeEIsQ0FBQyxFQUFFLENBQUM7UUFFTCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcywgeyBBeGlvcyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvcmF0ZS1saW1pdGVkLWF4aW9zJztcbmltcG9ydCB7XG4gIEFic3RyYWN0TmV0d29ya0Nvbm5lY3RvcixcbiAgQmxvY2ssXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcbmltcG9ydCB7IERvZ2VScGNUcmFuc2FjdGlvbiwgSnNvblJwY1Jlc3VsdCwgRG9nZUJsb2NrU3VtbWFyeSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG5leHBvcnQgY2xhc3MgRG9nZVJwY05ldHdvcmsgZXh0ZW5kcyBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3I8RG9nZVJwY1RyYW5zYWN0aW9uPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIGNsaWVudDogQXhpb3M7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgdGltZW91dDogbnVtYmVyLFxuICAgIGF1dGg/OiB7XG4gICAgICB1c2VybmFtZTogc3RyaW5nO1xuICAgICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICB9XG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgICB0aGlzLmNsaWVudCA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICBiYXNlVVJMOiB0aGlzLnVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYXV0aDogYXV0aCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVSYW5kb21JZCA9ICgpID0+IHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYmxvY2sgYXQgaGVpZ2h0XG4gICAqIEBwYXJhbSBoZWlnaHRcbiAgICogQHJldHVybnMgQmxvY2tcbiAgICovXG4gIGdldEJsb2NrQXRIZWlnaHQgPSBhc3luYyAoaGVpZ2h0OiBudW1iZXIpOiBQcm9taXNlPEJsb2NrPiA9PiB7XG4gICAgY29uc3QgcmFuZG9tSWQxID0gdGhpcy5nZW5lcmF0ZVJhbmRvbUlkKCk7XG4gICAgLy8gZ2V0IGJsb2NrIGhhc2ggdXNpbmcgYmxvY2sgaGVpZ2h0XG4gICAgY29uc3QgYmxvY2tIYXNoUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PEpzb25ScGNSZXN1bHQ+KCcnLCB7XG4gICAgICBtZXRob2Q6ICdnZXRibG9ja2hhc2gnLFxuICAgICAgaWQ6IHJhbmRvbUlkMSxcbiAgICAgIHBhcmFtczogW2hlaWdodF0sXG4gICAgfSk7XG4gICAgaWYgKGJsb2NrSGFzaFJlc3BvbnNlLmRhdGEuaWQgIT09IHJhbmRvbUlkMSlcbiAgICAgIHRocm93IEVycm9yKGBVbmV4cGVjdGVkQmVoYXZpb3I6IFJlcXVlc3QgYW5kIHJlc3BvbnNlIGlkIGFyZSBkaWZmZXJlbnRgKTtcbiAgICBjb25zdCBibG9ja0hhc2ggPSBibG9ja0hhc2hSZXNwb25zZS5kYXRhLnJlc3VsdDtcblxuICAgIGNvbnN0IHJhbmRvbUlkMiA9IHRoaXMuZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgIC8vIGdldCBibG9jayBoZWFkZXJzIHVzaW5nIGJsb2NrIGhhc2hcbiAgICBjb25zdCBibG9ja1N1bW1hcnlSZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3Q8SnNvblJwY1Jlc3VsdD4oJycsIHtcbiAgICAgIG1ldGhvZDogJ2dldGJsb2NrJyxcbiAgICAgIGlkOiByYW5kb21JZDIsXG4gICAgICBwYXJhbXM6IFtibG9ja0hhc2gsIDFdLFxuICAgIH0pO1xuICAgIGlmIChibG9ja1N1bW1hcnlSZXNwb25zZS5kYXRhLmlkICE9PSByYW5kb21JZDIpXG4gICAgICB0aHJvdyBFcnJvcihgVW5leHBlY3RlZEJlaGF2aW9yOiBSZXF1ZXN0IGFuZCByZXNwb25zZSBpZCBhcmUgZGlmZmVyZW50YCk7XG4gICAgY29uc3QgYmxvY2tTdW1tYXJ5OiBEb2dlQmxvY2tTdW1tYXJ5ID0gYmxvY2tTdW1tYXJ5UmVzcG9uc2UuZGF0YVxuICAgICAgLnJlc3VsdCBhcyBEb2dlQmxvY2tTdW1tYXJ5O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudEhhc2g6IGJsb2NrU3VtbWFyeS5wcmV2aW91c2Jsb2NraGFzaCxcbiAgICAgIGhhc2g6IGJsb2NrU3VtbWFyeS5oYXNoLFxuICAgICAgaGVpZ2h0OiBibG9ja1N1bW1hcnkuaGVpZ2h0LFxuICAgICAgdGltZXN0YW1wOiBibG9ja1N1bW1hcnkudGltZSxcbiAgICAgIHR4Q291bnQ6IGJsb2NrU3VtbWFyeS50eC5sZW5ndGgsXG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBjdXJyZW50IG5ldHdvcmsgaGVpZ2h0XG4gICAqIEByZXR1cm5zIGN1cnJlbnQgaGVpZ2h0XG4gICAqL1xuICBnZXRDdXJyZW50SGVpZ2h0ID0gYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgY29uc3QgcmFuZG9tSWQgPSB0aGlzLmdlbmVyYXRlUmFuZG9tSWQoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PEpzb25ScGNSZXN1bHQ+KCcnLCB7XG4gICAgICBtZXRob2Q6ICdnZXRibG9ja2NoYWluaW5mbycsXG4gICAgICBpZDogcmFuZG9tSWQsXG4gICAgICBwYXJhbXM6IFtdLFxuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZGF0YS5pZCAhPT0gcmFuZG9tSWQpXG4gICAgICB0aHJvdyBFcnJvcihgVW5leHBlY3RlZEJlaGF2aW9yOiBSZXF1ZXN0IGFuZCByZXNwb25zZSBpZCBhcmUgZGlmZmVyZW50YCk7XG4gICAgcmV0dXJuIChyZXN1bHQuZGF0YS5yZXN1bHQgYXMgeyBibG9ja3M6IG51bWJlciB9KS5ibG9ja3M7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiB0cmFuc2FjdGlvbnMgaW4gYSBibG9jayB3aXRoIHNwZWNpZmllZCBoYXNoXG4gICAqIEBwYXJhbSBibG9ja0hhc2hcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldEJsb2NrVHhzID0gYXN5bmMgKFxuICAgIGJsb2NrSGFzaDogc3RyaW5nXG4gICk6IFByb21pc2U8QXJyYXk8RG9nZVJwY1RyYW5zYWN0aW9uPj4gPT4ge1xuICAgIGNvbnN0IHJhbmRvbUlkID0gdGhpcy5nZW5lcmF0ZVJhbmRvbUlkKCk7XG4gICAgY29uc3QgYmxvY2tIYXNoUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PEpzb25ScGNSZXN1bHQ+KCcnLCB7XG4gICAgICBtZXRob2Q6ICdnZXRibG9jaycsXG4gICAgICBpZDogcmFuZG9tSWQsXG4gICAgICBwYXJhbXM6IFtibG9ja0hhc2gsIDJdLCAvLyB2ZXJib3NpdHkgc2hvdWxkIGJlIDIgaW4gb3JkZXIgdG8gcmV0cmlldmUgZnVsbCB0cmFuc2FjdGlvbiBpbmZvXG4gICAgfSk7XG4gICAgaWYgKGJsb2NrSGFzaFJlc3BvbnNlLmRhdGEuaWQgIT09IHJhbmRvbUlkKVxuICAgICAgdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWRCZWhhdmlvcjogUmVxdWVzdCBhbmQgcmVzcG9uc2UgaWQgYXJlIGRpZmZlcmVudGApO1xuICAgIGNvbnN0IGJsb2NrVHhzID0gKFxuICAgICAgYmxvY2tIYXNoUmVzcG9uc2UuZGF0YS5yZXN1bHQgYXMgeyB0eDogQXJyYXk8RG9nZVJwY1RyYW5zYWN0aW9uPiB9XG4gICAgKS50eDtcblxuICAgIHJldHVybiBibG9ja1R4cztcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -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":"AACA,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAC1C,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,WAAkB,MAAM,KAAG,QAAQ,KAAK,CAAC,CAmBvD;IAEF;;;OAGG;IACH,gBAAgB,QAAO,QAAQ,MAAM,CAAC,CAIpC;IAEF;;;;OAIG;IACH,WAAW,cACE,MAAM,KAChB,QAAQ,MAAM,yBAAyB,CAAC,CAAC,CAqB1C;CACH"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import axios from '@rosen-bridge/rate-limited-axios';
|
|
2
|
+
import { AbstractNetworkConnector, } from '@rosen-bridge/scanner-interfaces';
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXNwbG9yYU5ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbmV0d29yay9Fc3Bsb3JhTmV0d29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQWdCLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUNMLHdCQUF3QixHQUV6QixNQUFNLGtDQUFrQyxDQUFDO0FBRzFDLE1BQU0sT0FBTyxjQUFlLFNBQVEsd0JBQW1EO0lBQ3BFLEdBQUcsQ0FBUztJQUNaLE9BQU8sQ0FBUztJQUNoQix1QkFBdUIsR0FBRyxFQUFFLENBQUM7SUFDdEMsTUFBTSxDQUFRO0lBQ2QsU0FBUyxDQUFTO0lBRTFCLFlBQVksR0FBVyxFQUFFLE9BQWUsRUFBRSxTQUFrQjtRQUMxRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRztZQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1NBQ2hELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdCQUFnQixHQUFHLEtBQUssRUFBRSxNQUFjLEVBQWtCLEVBQUU7UUFDMUQsb0NBQW9DO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLENBQ2hCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxpQkFBaUIsTUFBTSxFQUFFLENBQUMsQ0FDMUUsQ0FBQyxJQUFJLENBQUM7UUFFUCxxQ0FBcUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsQ0FDbEIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDbkIsR0FBRyxJQUFJLENBQUMsU0FBUyxVQUFVLFNBQVMsRUFBRSxDQUN2QyxDQUNGLENBQUMsSUFBSSxDQUFDO1FBQ1AsT0FBTztZQUNMLFVBQVUsRUFBRSxXQUFXLENBQUMsaUJBQWlCO1lBQ3pDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRTtZQUNwQixNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU07WUFDMUIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO1lBQ2hDLE9BQU8sRUFBRSxXQUFXLENBQUMsUUFBUTtTQUM5QixDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsZ0JBQWdCLEdBQUcsR0FBb0IsRUFBRTtRQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNO2FBQ2YsR0FBRyxDQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsb0JBQW9CLENBQUM7YUFDbEQsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILFdBQVcsR0FBRyxLQUFLLEVBQ2pCLFNBQWlCLEVBQzBCLEVBQUU7UUFDN0MsTUFBTSxPQUFPLEdBQUcsQ0FDZCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNuQixHQUFHLElBQUksQ0FBQyxTQUFTLFVBQVUsU0FBUyxFQUFFLENBQ3ZDLENBQ0YsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRWhCLE1BQU0sUUFBUSxHQUFxQyxFQUFFLENBQUM7UUFDdEQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsT0FBTyxNQUFNLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDeEIsTUFBTSxHQUFHLEdBQUcsQ0FDVixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNuQixHQUFHLElBQUksQ0FBQyxTQUFTLFVBQVUsU0FBUyxRQUFRLE1BQU0sRUFBRSxDQUNyRCxDQUNGLENBQUMsSUFBSSxDQUFDO1lBQ1AsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zLCB7IEF4aW9zIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9yYXRlLWxpbWl0ZWQtYXhpb3MnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yLFxuICBCbG9jayxcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuaW1wb3J0IHsgQml0Y29pbkVzcGxvcmFUcmFuc2FjdGlvbiwgRXNwbG9yYUJsb2NrIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRXNwbG9yYU5ldHdvcmsgZXh0ZW5kcyBBYnN0cmFjdE5ldHdvcmtDb25uZWN0b3I8Qml0Y29pbkVzcGxvcmFUcmFuc2FjdGlvbj4ge1xuICBwcml2YXRlIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBFU1BMT1JBX0JMT0NLX1RYU19MSU1JVCA9IDI1O1xuICBwcml2YXRlIGNsaWVudDogQXhpb3M7XG4gIHByaXZhdGUgYXBpUHJlZml4OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IodXJsOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlciwgYXBpUHJlZml4Pzogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICAgIHRoaXMuY2xpZW50ID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IHRoaXMudXJsLFxuICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgfSk7XG4gICAgdGhpcy5hcGlQcmVmaXggPSBhcGlQcmVmaXggfHwgJy9hcGknO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYmxvY2sgYXQgaGVpZ2h0XG4gICAqIEBwYXJhbSBoZWlnaHRcbiAgICogQHJldHVybnMgQmxvY2tcbiAgICovXG4gIGdldEJsb2NrQXRIZWlnaHQgPSBhc3luYyAoaGVpZ2h0OiBudW1iZXIpOiBQcm9taXNlPEJsb2NrPiA9PiB7XG4gICAgLy8gZ2V0IGJsb2NrIGhhc2ggdXNpbmcgYmxvY2sgaGVpZ2h0XG4gICAgY29uc3QgYmxvY2tIYXNoID0gKFxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQuZ2V0PHN0cmluZz4oYCR7dGhpcy5hcGlQcmVmaXh9L2Jsb2NrLWhlaWdodC8ke2hlaWdodH1gKVxuICAgICkuZGF0YTtcblxuICAgIC8vIGdldCBibG9jayBoZWFkZXJzIHVzaW5nIGJsb2NrIGhhc2hcbiAgICBjb25zdCBibG9ja0hlYWRlciA9IChcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmdldDxFc3Bsb3JhQmxvY2s+KFxuICAgICAgICBgJHt0aGlzLmFwaVByZWZpeH0vYmxvY2svJHtibG9ja0hhc2h9YFxuICAgICAgKVxuICAgICkuZGF0YTtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50SGFzaDogYmxvY2tIZWFkZXIucHJldmlvdXNibG9ja2hhc2gsXG4gICAgICBoYXNoOiBibG9ja0hlYWRlci5pZCxcbiAgICAgIGhlaWdodDogYmxvY2tIZWFkZXIuaGVpZ2h0LFxuICAgICAgdGltZXN0YW1wOiBibG9ja0hlYWRlci50aW1lc3RhbXAsXG4gICAgICB0eENvdW50OiBibG9ja0hlYWRlci50eF9jb3VudCxcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGN1cnJlbnQgbmV0d29yayBoZWlnaHRcbiAgICogQHJldHVybnMgY3VycmVudCBoZWlnaHRcbiAgICovXG4gIGdldEN1cnJlbnRIZWlnaHQgPSAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5jbGllbnRcbiAgICAgIC5nZXQ8bnVtYmVyPihgJHt0aGlzLmFwaVByZWZpeH0vYmxvY2tzL3RpcC9oZWlnaHRgKVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmRhdGEpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJhbnNhY3Rpb25zIGluIGEgYmxvY2sgd2l0aCBzcGVjaWZpZWQgaGFzaFxuICAgKiBAcGFyYW0gYmxvY2tIYXNoXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRCbG9ja1R4cyA9IGFzeW5jIChcbiAgICBibG9ja0hhc2g6IHN0cmluZ1xuICApOiBQcm9taXNlPEFycmF5PEJpdGNvaW5Fc3Bsb3JhVHJhbnNhY3Rpb24+PiA9PiB7XG4gICAgY29uc3QgdHhDb3VudCA9IChcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmdldDxFc3Bsb3JhQmxvY2s+KFxuICAgICAgICBgJHt0aGlzLmFwaVByZWZpeH0vYmxvY2svJHtibG9ja0hhc2h9YFxuICAgICAgKVxuICAgICkuZGF0YS50eF9jb3VudDtcblxuICAgIGNvbnN0IGJsb2NrVHhzOiBBcnJheTxCaXRjb2luRXNwbG9yYVRyYW5zYWN0aW9uPiA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuXG4gICAgd2hpbGUgKG9mZnNldCA8IHR4Q291bnQpIHtcbiAgICAgIGNvbnN0IHR4cyA9IChcbiAgICAgICAgYXdhaXQgdGhpcy5jbGllbnQuZ2V0PEFycmF5PEJpdGNvaW5Fc3Bsb3JhVHJhbnNhY3Rpb24+PihcbiAgICAgICAgICBgJHt0aGlzLmFwaVByZWZpeH0vYmxvY2svJHtibG9ja0hhc2h9L3R4cy8ke29mZnNldH1gXG4gICAgICAgIClcbiAgICAgICkuZGF0YTtcbiAgICAgIGJsb2NrVHhzLnB1c2goLi4udHhzKTtcbiAgICAgIG9mZnNldCArPSB0aGlzLkVTUExPUkFfQkxPQ0tfVFhTX0xJTUlUO1xuICAgIH1cblxuICAgIHJldHVybiBibG9ja1R4cztcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -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;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,yBAAyB,CAAC;gBACtE,MAAM,EAAE,aAAa,CAAC,yBAAyB,CAAC;CAW7D"}
|
|
@@ -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);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQml0Y29pbkVzcGxvcmFTY2FubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3NjYW5uZXIvQml0Y29pbkVzcGxvcmFTY2FubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQWlCLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0UsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGNBQXlDO0lBQ2xGLFlBQVksTUFBZ0Q7UUFDMUQsS0FBSyxDQUNILFNBQVMsRUFDVCxNQUFNLENBQUMsVUFBVSxFQUNqQixNQUFNLENBQUMsYUFBYSxFQUNwQixNQUFNLENBQUMsT0FBTyxFQUNkLE1BQU0sQ0FBQyxnQkFBZ0IsRUFDdkIsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsTUFBTSxDQUNkLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW5lcmFsU2Nhbm5lciwgU2Nhbm5lckNvbmZpZyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3Qtc2Nhbm5lcic7XG5pbXBvcnQgeyBCaXRjb2luRXNwbG9yYVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGNsYXNzIEJpdGNvaW5Fc3Bsb3JhU2Nhbm5lciBleHRlbmRzIEdlbmVyYWxTY2FubmVyPEJpdGNvaW5Fc3Bsb3JhVHJhbnNhY3Rpb24+IHtcbiAgY29uc3RydWN0b3IoY29uZmlnOiBTY2FubmVyQ29uZmlnPEJpdGNvaW5Fc3Bsb3JhVHJhbnNhY3Rpb24+KSB7XG4gICAgc3VwZXIoXG4gICAgICAnYml0Y29pbicsXG4gICAgICBjb25maWcuZGF0YVNvdXJjZSxcbiAgICAgIGNvbmZpZy5pbml0aWFsSGVpZ2h0LFxuICAgICAgY29uZmlnLm5ldHdvcmssXG4gICAgICBjb25maWcuYmxvY2tSZXRyaWV2ZUdhcCxcbiAgICAgIGNvbmZpZy5sb2dnZXIsXG4gICAgICBjb25maWcuc3VmZml4XG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -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;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,qBAAa,iBAAkB,SAAQ,cAAc,CAAC,qBAAqB,CAAC;gBAC9D,MAAM,EAAE,aAAa,CAAC,qBAAqB,CAAC;CAWzD"}
|
|
@@ -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);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQml0Y29pblJwY1NjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvc2Nhbm5lci9CaXRjb2luUnBjU2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBRy9FLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxjQUFxQztJQUMxRSxZQUFZLE1BQTRDO1FBQ3RELEtBQUssQ0FDSCxTQUFTLEVBQ1QsTUFBTSxDQUFDLFVBQVUsRUFDakIsTUFBTSxDQUFDLGFBQWEsRUFDcEIsTUFBTSxDQUFDLE9BQU8sRUFDZCxNQUFNLENBQUMsZ0JBQWdCLEVBQ3ZCLE1BQU0sQ0FBQyxNQUFNLEVBQ2IsTUFBTSxDQUFDLE1BQU0sQ0FDZCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VuZXJhbFNjYW5uZXIsIFNjYW5uZXJDb25maWcgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LXNjYW5uZXInO1xuaW1wb3J0IHsgQml0Y29pblJwY1RyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQml0Y29pblJwY1NjYW5uZXIgZXh0ZW5kcyBHZW5lcmFsU2Nhbm5lcjxCaXRjb2luUnBjVHJhbnNhY3Rpb24+IHtcbiAgY29uc3RydWN0b3IoY29uZmlnOiBTY2FubmVyQ29uZmlnPEJpdGNvaW5ScGNUcmFuc2FjdGlvbj4pIHtcbiAgICBzdXBlcihcbiAgICAgICdiaXRjb2luJyxcbiAgICAgIGNvbmZpZy5kYXRhU291cmNlLFxuICAgICAgY29uZmlnLmluaXRpYWxIZWlnaHQsXG4gICAgICBjb25maWcubmV0d29yayxcbiAgICAgIGNvbmZpZy5ibG9ja1JldHJpZXZlR2FwLFxuICAgICAgY29uZmlnLmxvZ2dlcixcbiAgICAgIGNvbmZpZy5zdWZmaXhcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -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;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,qBAAa,kBAAmB,SAAQ,cAAc,CAAC,yBAAyB,CAAC;gBACnE,MAAM,EAAE,aAAa,CAAC,yBAAyB,CAAC;CAW7D"}
|
|
@@ -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);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG9nZUVzcGxvcmFTY2FubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3NjYW5uZXIvRG9nZUVzcGxvcmFTY2FubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQWlCLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0UsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQXlDO0lBQy9FLFlBQVksTUFBZ0Q7UUFDMUQsS0FBSyxDQUNILE1BQU0sRUFDTixNQUFNLENBQUMsVUFBVSxFQUNqQixNQUFNLENBQUMsYUFBYSxFQUNwQixNQUFNLENBQUMsT0FBTyxFQUNkLE1BQU0sQ0FBQyxnQkFBZ0IsRUFDdkIsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsTUFBTSxDQUNkLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW5lcmFsU2Nhbm5lciwgU2Nhbm5lckNvbmZpZyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3Qtc2Nhbm5lcic7XG5pbXBvcnQgeyBCaXRjb2luRXNwbG9yYVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuZXhwb3J0IGNsYXNzIERvZ2VFc3Bsb3JhU2Nhbm5lciBleHRlbmRzIEdlbmVyYWxTY2FubmVyPEJpdGNvaW5Fc3Bsb3JhVHJhbnNhY3Rpb24+IHtcbiAgY29uc3RydWN0b3IoY29uZmlnOiBTY2FubmVyQ29uZmlnPEJpdGNvaW5Fc3Bsb3JhVHJhbnNhY3Rpb24+KSB7XG4gICAgc3VwZXIoXG4gICAgICAnZG9nZScsXG4gICAgICBjb25maWcuZGF0YVNvdXJjZSxcbiAgICAgIGNvbmZpZy5pbml0aWFsSGVpZ2h0LFxuICAgICAgY29uZmlnLm5ldHdvcmssXG4gICAgICBjb25maWcuYmxvY2tSZXRyaWV2ZUdhcCxcbiAgICAgIGNvbmZpZy5sb2dnZXIsXG4gICAgICBjb25maWcuc3VmZml4XG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -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;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,qBAAa,cAAe,SAAQ,cAAc,CAAC,kBAAkB,CAAC;gBACxD,MAAM,EAAE,aAAa,CAAC,kBAAkB,CAAC;CAWtD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GeneralScanner } from '@rosen-bridge/abstract-scanner';
|
|
2
|
+
export class DogeRpcScanner extends GeneralScanner {
|
|
3
|
+
constructor(config) {
|
|
4
|
+
super('doge', config.dataSource, config.initialHeight, config.network, config.blockRetrieveGap, config.logger, config.suffix);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG9nZVJwY1NjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvc2Nhbm5lci9Eb2dlUnBjU2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBRy9FLE1BQU0sT0FBTyxjQUFlLFNBQVEsY0FBa0M7SUFDcEUsWUFBWSxNQUF5QztRQUNuRCxLQUFLLENBQ0gsTUFBTSxFQUNOLE1BQU0sQ0FBQyxVQUFVLEVBQ2pCLE1BQU0sQ0FBQyxhQUFhLEVBQ3BCLE1BQU0sQ0FBQyxPQUFPLEVBQ2QsTUFBTSxDQUFDLGdCQUFnQixFQUN2QixNQUFNLENBQUMsTUFBTSxFQUNiLE1BQU0sQ0FBQyxNQUFNLENBQ2QsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdlbmVyYWxTY2FubmVyLCBTY2FubmVyQ29uZmlnIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1zY2FubmVyJztcbmltcG9ydCB7IERvZ2VScGNUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIERvZ2VScGNTY2FubmVyIGV4dGVuZHMgR2VuZXJhbFNjYW5uZXI8RG9nZVJwY1RyYW5zYWN0aW9uPiB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogU2Nhbm5lckNvbmZpZzxEb2dlUnBjVHJhbnNhY3Rpb24+KSB7XG4gICAgc3VwZXIoXG4gICAgICAnZG9nZScsXG4gICAgICBjb25maWcuZGF0YVNvdXJjZSxcbiAgICAgIGNvbmZpZy5pbml0aWFsSGVpZ2h0LFxuICAgICAgY29uZmlnLm5ldHdvcmssXG4gICAgICBjb25maWcuYmxvY2tSZXRyaWV2ZUdhcCxcbiAgICAgIGNvbmZpZy5sb2dnZXIsXG4gICAgICBjb25maWcuc3VmZml4XG4gICAgKTtcbiAgfVxufVxuIl19
|